Совсем недавно мы опубликовали статью с описанием проблем одной из самых популярных технологий, используемых в IT, и на наше удивление она вызвала достаточно живой интерес (во всяком случае для технической статьи). Поэтому мы решили на этом не останавливаться, и сегодня мы «идем в гости» к одному из самых популярных продуктов на российском рынке разработки бизнес-приложений — платформе 1С.

Так сложилось, что на хабре многие 1С не любят, но порой складывается впечатление, что немногие из этих людей хорошо понимают, за что они его не любят. Этой статьей мы восполним этот пробел и убьем сразу двух зайцев: с одной стороны, расскажем, как в 1С все устроено изнутри, а с другой стороны — почему это все работает не так как нужно / хотелось бы. Надо сказать, что 1С многими своими решениями смог реально нас удивить, впрочем, не будем забегать вперед.

Статей с критикой 1С на Хабре достаточно (например, один, два, три), но, на мой взгляд, они либо слишком много внимания уделяют всяким мелочам, вроде неправильной организации меню, либо рассуждают о слишком абстрактных вещах, в которых 1С, возможно, и не виноват. В этой же статье, как и в статье про SQL, речь пойдет исключительно о фундаментальных (и вполне осязаемых) проблемах, которые касаются всех и каждого, кто разрабатывает / дорабатывает решения на 1С, и приводят либо к существенному росту порога вхождения, либо к серьезному падению производительности, либо к значительным трудозатратам со стороны разработчика.

Итак, поехали. Проблем в 1С достаточно много, поэтому, чтобы в них удобнее было ориентироваться, начнем с оглавления (со списком всех этих проблем):


Разделы я постарался выстроить в порядке от базовых понятий / проблем к более сложным, хотя по факту в большинстве своем они никак не связаны друг с другом. Поэтому, если кому-то лень читать всю статью целиком, можете просто прочитать отдельные заинтересовавшие его разделы из оглавления, сквозного сюжета там практически нет.

Объекты: Справочники, Документы и т.д.


Как обычно устроены ORM фреймворки / платформы? В языке разработки ORM фреймворка в том или ином виде поддерживаются классы объектов. Для каждого из этих классов разработчик может задать его отображение на некоторую таблицу. Как правило, один класс соответствует одной таблице, единственный ключ которой, в свою очередь, соответствует идентификатору объекта этого класса. Тут, конечно, возникает вопрос, что делать с таблицами у которых несколько ключей. Для них тоже создаются соответствующие классы, благо большинство ORM поддерживают в качестве идентификаторов несколько полей одного класса. Порой, конечно, при таком отображении получаются достаточно дырявые абстракции вроде ТоварНаСкладе, но зато работа с данными в большинстве случаев идет в одной парадигме (ООП).

В 1С решили пойти другим путем и поддержать сразу обе парадигмы, у них одновременно есть и объекты, и записи. Логику записей используют регистры и запросы (о них в следующих разделах), логика объектов напоминает обычный ORM, правда, со своими особенностями:

  • Отображением на таблицы разработчик никак не управляет, и вообще оно скрыто от него (хотя ничего особенного в нем нет)
  • Никаких one-to-many, many-to-many отображений нет, их функцию выполняют так называемые табличные части — коллекции внутренних объектов, фактически агрегированных в основной объект.

Неэффективное получение данных объектов


Так как несвоевременное или избыточное чтение данных с сервера БД и передача их на сервер приложений может приводить к существенному падению производительности, обычно ORM-фреймворки предоставляют разработчику целый набор инструментов по управлению получаемыми ими данными. Но не 1С. В 1С объект читается всегда целиком, в том числе с табличными частями, но не более того (без каких либо связанных данных). Как следствие, данных читается:

  • либо слишком много — если надо получить только одно поле (реквизит)
  • либо слишком мало — если в цикле надо обращаться к другим объектам по ссылке, мы получаем классическую проблему N+1 (один запрос для получения N объектов и по одному запросу для каждой ссылки).

Такая убогость механизма ORM в 1С на самом деле обусловлена тем, что в 1С в какой-то момент попросту решили отказаться от ORM и сделать ставку на голый SQL (то есть регистры и запросы). Правда, немного забегая вперед, с учетом отсутствия расширенных возможностей SQL и DML в 1С периодически все-таки возвращаются к ORM, но это скорее вынужденная необходимость. А в целом типичный код типовых решений на 1С выглядит приблизительно так:

Пример кода
Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт

	////////////////////////////////////////////////////////////////////////////
	// Создадим запрос инициализации движений
	
	Запрос = Новый Запрос;
	ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
	
	////////////////////////////////////////////////////////////////////////////
	// Сформируем текст запроса
	
	ТекстыЗапроса = Новый СписокЗначений;
	ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаСвободныеОстатки(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаОбеспечениеЗаказов(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыКОтгрузке(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыНаСкладах(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаПереданнаяВозвратнаяТара(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыОрганизаций(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыПереданныеНаКомиссию(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаДатыПередачиТоваровНаКомиссию(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыОрганизацийКПередаче(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаТоварыКОформлениюОтчетовКомитенту(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаСебестоимостьТоваров(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаВыручкаИСебестоимостьПродаж(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаРасчетыСКлиентами(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаСуммыДокументовВВалютеРегл(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаНДССостояниеРеализации0(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаНДСЗаписиКнигиПродаж(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаМатериалыИРаботыВПроизводстве(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаДвиженияНоменклатураНоменклатура(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаУслугиКОформлениюОтчетовПринципалу(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры);
	ПроведениеСерверУТ.ИницализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
	
КонецПроцедуры

Функция ТекстЗапросаТаблицаЗаказыКлиентов(Запрос, ТекстыЗапроса, Регистры)
	ИмяРегистра = "ЗаказыКлиентов";
	
	Если НЕ ПроведениеСерверУТ.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
		Возврат "";
	КонецЕсли; 
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
	|	&ДатаРаспоряжения КАК Период,
	|	ТаблицаТовары.ЗаказКлиента КАК ЗаказКлиента,
	|	ТаблицаТовары.Номенклатура КАК Номенклатура,
	|	ТаблицаТовары.Характеристика КАК Характеристика,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.СтатусУказанияСерий В (10, 14)
	|			ТОГДА ТаблицаТовары.Серия
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|	КОНЕЦ КАК Серия,
	|	ТаблицаТовары.КодСтроки КАК КодСтроки,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
	|			ТОГДА ТаблицаТовары.Склад
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|	КОНЕЦ КАК Склад,
	|	0 КАК Заказано,
	|	ТаблицаТовары.Количество КАК КОформлению,
	|	ТаблицаТовары.СуммаВзаиморасчетов КАК Сумма
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка = &Ссылка
	|	И ТаблицаТовары.КодСтроки <> 0
	|	И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыРеализацийТоваровУслуг.Отгружено)
	|	И &РеализацияПоЗаказу
	|	И &ИспользоватьРасширенныеВозможностиЗаказаКлиента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
	|	&ДатаРаспоряжения,
	|	ТаблицаТовары.ЗаказКлиента,
	|	ТаблицаТовары.Номенклатура,
	|	ТаблицаТовары.Характеристика,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.СтатусУказанияСерий В (10, 14)
	|			ТОГДА ТаблицаТовары.Серия
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|	КОНЕЦ,
	|	ТаблицаТовары.КодСтроки,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
	|			ТОГДА ТаблицаТовары.Склад
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|	КОНЕЦ,
	|	ТаблицаТовары.Количество,
	|	ТаблицаТовары.Количество,
	|	ТаблицаТовары.СуммаВзаиморасчетов
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка = &Ссылка
	|	И ТаблицаТовары.КодСтроки <> 0
	|	И &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРеализацийТоваровУслуг.Отгружено)
	|	И &РеализацияПоЗаказу
	|	И &ИспользоватьРасширенныеВозможностиЗаказаКлиента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход),
	|	&ДатаРаспоряжения,
	|	ТаблицаТовары.ЗаказКлиента,
	|	ТаблицаТовары.Номенклатура,
	|	ТаблицаТовары.Характеристика,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.СтатусУказанияСерий В (10, 14)
	|			ТОГДА ТаблицаТовары.Серия
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|	КОНЕЦ,
	|	ТаблицаТовары.КодСтроки,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
	|			ТОГДА ТаблицаТовары.Склад
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|	КОНЕЦ,
	|	0,
	|	ТаблицаТовары.Количество,
	|	ТаблицаТовары.СуммаВзаиморасчетов
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка = &Ссылка
	|	И ТаблицаТовары.КодСтроки = 0
	|	И &РеализацияПоЗаказу
	|	И &ИспользоватьРасширенныеВозможностиЗаказаКлиента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
	|	&ДатаРаспоряжения,
	|	ТаблицаТовары.ЗаказКлиента,
	|	ТаблицаТовары.Номенклатура,
	|	ТаблицаТовары.Характеристика,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.СтатусУказанияСерий В (10, 14)
	|			ТОГДА ТаблицаТовары.Серия
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|	КОНЕЦ,
	|	ТаблицаТовары.КодСтроки,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
	|			ТОГДА ТаблицаТовары.Склад
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|	КОНЕЦ,
	|	0,
	|	ТаблицаТовары.Количество,
	|	ТаблицаТовары.СуммаВзаиморасчетов
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка = &Ссылка
	|	И ТаблицаТовары.КодСтроки = 0
	|	И &РеализацияПоЗаказу
	|	И &ИспользоватьРасширенныеВозможностиЗаказаКлиента";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	Возврат ТекстЗапроса;
	
КонецФункции


Таблицы / Представления: Регистры


Регистры в 1С это большой комбайн, который выполняет сразу несколько функций:

  • Таблицы (с инфраструктурой группового замещения данных)
  • Представления (в том числе материализованные)
  • Работа с моментами / периодами времени (как в таблицах, так и в представлениях)

С функцией таблиц все более-менее понятно. Так таблицы регистров — это и есть обычные таблицы с ключами, а менеджеры регистров — интерфейс по замещению строк, удовлетворяющих заданному условию (отбору) другими строками (ну или просто добавлению строк)

Функционал работы со временем — это особенность ERP-платформ и 1С в частности. Так, с точки зрения SQL (да и других ЯП), например, дата — это один из примитивных типов, не сильно отличающийся от строки или числа. В 1С же работа со временем поддерживается в большом количестве различных абстракций, например, в документах, таблицах периодических регистров и регистров накоплений. Но во всех этих абстракциях поддержка времени — не более чем дополнительные поля. Существенно интереснее поддержка времени в представлениях (которые в 1С называются виртуальными таблицами).

Одновременно с созданием регистра в 1С неявно создаются различные представления в зависимости от типа регистра:

  • СрезПоследних (для периодических регистров сведений) — получает последнее значения на дату (в том числе текущую)
  • Остатки, Обороты, ОстаткиИОбороты (для регистров накопления) — получают различные суммы на дату (в том числе текущую)

Являясь по сути не более чем представлениями в SQL, усовершенствованными для работы со временем, представления в 1С наследуют (а иногда даже и усугубляют) все проблемы представлений в SQL.

Регистры поддерживаются в очень частных случаях


Фактически, регистры в 1С поддерживают всего две операции: сумма и последнее по дате, сгруппированные по ключам таблицы. Это на порядок меньше, чем даже индексированные представления в том же MS SQL, не говоря уже про Oracle. Соответственно, шаг влево, шаг вправо — и разработчику необходимо самому создавать таблицу (непериодический регистр сведений / справочник) или поле (реквизит) и вручную поддерживать актуальность данных в них.

Если же говорить про представления вообще (а не только материализованные), то при сравнении с SQL все еще хуже: аналога этого механизма в 1С нет в принципе, соответственно, для повторного использования / декомпозиции нужно либо создавать процедуры, возвращающие / заполняющие временные таблицы, либо производить различные манипуляции с текстами запросов (вроде склейки или замены).

Отсутствие ограничений и событий для значений регистров


Но даже если для расчета некоторого показателя вам удастся обойтись существующими в 1С регистрами, у вас в дальнейшем скорее всего возникнет вопрос, как создать ограничения или события на этот рассчитанный показатель. Например, запретить ситуацию, когда количество к отгрузке становится меньше 0, или послать какое-нибудь уведомление в этом случае. И если в SQL это можно декларативно сделать хотя бы для материализованных представлений, то в 1С даже такой возможности нет. Как это обходится? Разработчики типовых, например, используют такой трюк:

В триггере ПередЗаписью (в SQL соответствует per-statement trigger on before) запоминают во временную таблицу старые записи регистра для сгенерировавшего его документа:

Код
// Текущее состояние набора помещается во временную таблицу,
	// чтобы при записи получить изменение нового набора относительно текущего.
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
	Запрос.МенеджерВременныхТаблиц = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Таблица.ВидДвижения      КАК ВидДвижения,
	|	Таблица.ДокументОтгрузки КАК ДокументОтгрузки,
	|	Таблица.Номенклатура     КАК Номенклатура,
	|	Таблица.Характеристика   КАК Характеристика,
	|	Таблица.Назначение       КАК Назначение,
	|	Таблица.Серия            КАК Серия,
	|	Таблица.Склад            КАК Склад,
	|	Таблица.Получатель       КАК Получатель,
	|	ВЫБОР
	|		КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|			ТОГДА Таблица.ВРезерве + Таблица.КОтгрузке
	|		ИНАЧЕ -Таблица.ВРезерве - Таблица.КОтгрузке
	|	КОНЕЦ                    КАК ВРезервеКОтгрузкеПередЗаписью,
	|	ВЫБОР
	|		КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|			ТОГДА Таблица.КОтгрузке
	|		ИНАЧЕ -Таблица.КОтгрузке
	|	КОНЕЦ                    КАК КОтгрузкеПередЗаписью,
	|	ВЫБОР
	|		КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|			ТОГДА -Таблица.Собирается
	|		ИНАЧЕ Таблица.Собирается
	|	КОНЕЦ                    КАК СобираетсяПередЗаписью,
	|	ВЫБОР
	|		КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	|			ТОГДА -Таблица.Собрано
	|		ИНАЧЕ Таблица.Собрано
	|	КОНЕЦ                    КАК СобраноПередЗаписью
	|ПОМЕСТИТЬ ДвиженияТоварыКОтгрузкеПередЗаписью
	|ИЗ
	|	РегистрНакопления.ТоварыКОтгрузке КАК Таблица
	|ГДЕ
	|	Таблица.Регистратор = &Регистратор";
	Запрос.Выполнить();


В триггере ПослеЗаписи (on after) запоминают во временную таблицу новые + старые записи:

Код
СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы;
		
		Запрос = Новый Запрос;
		ОформлятьСначалаНакладные = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить() = Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаНакладные;
		Запрос.УстановитьПараметр("ОформлятьСначалаНакладные", ОформлятьСначалаНакладные);
		Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
		Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
		
		// Рассчитывается изменение нового набора относительно текущего с учетом накопленных изменений
		// и помещается во временную таблицу.
		
		Запрос.Текст =
		"ВЫБРАТЬ
		|	ТаблицаИзменений.ДокументОтгрузки           КАК ДокументОтгрузки,
		|	ТаблицаИзменений.Номенклатура               КАК Номенклатура,
		|	ТаблицаИзменений.Характеристика             КАК Характеристика,
		|	ТаблицаИзменений.Назначение                 КАК Назначение,
		|	ТаблицаИзменений.Серия                      КАК Серия,
		|	ТаблицаИзменений.Склад                      КАК Склад,
		|	ТаблицаИзменений.Получатель                 КАК Получатель,
		|	СУММА(ТаблицаИзменений.КОтгрузкеИзменение)  КАК КОтгрузкеИзменение,
		|	СУММА(ТаблицаИзменений.СобираетсяИзменение) КАК СобираетсяИзменение,
		|	СУММА(ТаблицаИзменений.СобираетсяИзменение) КАК СобраноИзменение
		|ПОМЕСТИТЬ ДвиженияТоварыКОтгрузкеИзменение
		|ИЗ
		|	(ВЫБРАТЬ
		|		Таблица.ВидДвижения            КАК ВидДвижения,
		|		Таблица.ДокументОтгрузки       КАК ДокументОтгрузки,
		|		Таблица.Номенклатура           КАК Номенклатура,
		|		Таблица.Характеристика         КАК Характеристика,
		|		Таблица.Назначение             КАК Назначение,
		|		Таблица.Серия                  КАК Серия,
		|		Таблица.Склад                  КАК Склад,
		|		Таблица.Получатель             КАК Получатель,
		|		Таблица.КОтгрузкеПередЗаписью  КАК КОтгрузкеИзменение,
		|		Таблица.СобираетсяПередЗаписью КАК СобираетсяИзменение,
		|		Таблица.СобраноПередЗаписью    КАК СобраноИзменение
		|	ИЗ
		|		ДвиженияТоварыКОтгрузкеПередЗаписью КАК Таблица
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		Таблица.ВидДвижения,
		|		Таблица.ДокументОтгрузки,
		|		Таблица.Номенклатура,
		|		Таблица.Характеристика,
		|		Таблица.Назначение,
		|		Таблица.Серия,
		|		Таблица.Склад,
		|		Таблица.Получатель,
		|		ВЫБОР
		|			КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА -Таблица.КОтгрузке
		|			ИНАЧЕ Таблица.КОтгрузке
		|		КОНЕЦ,
		|		ВЫБОР
		|			КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА Таблица.Собирается
		|			ИНАЧЕ -Таблица.Собирается
		|		КОНЕЦ,
		|		ВЫБОР
		|			КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА Таблица.Собрано
		|			ИНАЧЕ -Таблица.Собрано
		|		КОНЕЦ
		|	ИЗ
		|		РегистрНакопления.ТоварыКОтгрузке КАК Таблица
		|	ГДЕ
		|		Таблица.Регистратор = &Регистратор) КАК ТаблицаИзменений
		|
		|СГРУППИРОВАТЬ ПО
		|	ТаблицаИзменений.ВидДвижения,
		|	ТаблицаИзменений.ДокументОтгрузки,
		|	ТаблицаИзменений.Номенклатура,
		|	ТаблицаИзменений.Характеристика,
		|	ТаблицаИзменений.Назначение,
		|	ТаблицаИзменений.Серия,
		|	ТаблицаИзменений.Склад,
		|	ТаблицаИзменений.Получатель
		|
		|ИМЕЮЩИЕ
		|	(СУММА(ТаблицаИзменений.КОтгрузкеИзменение) > 0
		|		ИЛИ СУММА(ТаблицаИзменений.СобираетсяИзменение) > 0
		|		ИЛИ СУММА(ТаблицаИзменений.СобраноИзменение) > 0)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	Т.Номенклатура             КАК Номенклатура,
		|	Т.Характеристика           КАК Характеристика,
		|	Т.Назначение               КАК Назначение,
		|	Т.Серия                    КАК Серия,
		|	Т.Склад                    КАК Склад,
		|	Т.Склад                    КАК Получатель,
		|	СУММА(Т.УвеличениеПрихода) КАК УвеличениеПрихода
		|ПОМЕСТИТЬ ДвиженияТоварыКОтгрузкеИзменениеСводно
		|ИЗ
		|	(ВЫБРАТЬ
		|		Таблица.ВидДвижения    КАК ВидДвижения,
		|		Таблица.Номенклатура   КАК Номенклатура,
		|		Таблица.Характеристика КАК Характеристика,
		|		Таблица.Назначение     КАК Назначение,
		|		Таблица.Серия          КАК Серия,
		|		Таблица.Склад          КАК Склад,
		|		Таблица.Склад          КАК Получатель,
		|		-Таблица.ВРезервеКОтгрузкеПередЗаписью КАК УвеличениеПрихода
		|	ИЗ
		|		ДвиженияТоварыКОтгрузкеПередЗаписью КАК Таблица
		|ГДЕ
		|	Таблица.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
		|   И Таблица.Склад.КонтролироватьОперативныеОстатки
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		Таблица.ВидДвижения,
		|		Таблица.Номенклатура,
		|		Таблица.Характеристика,
		|		Таблица.Назначение,
		|		Таблица.Серия,
		|		Таблица.Склад,
		|		Таблица.Получатель,
		|		ВЫБОР
		|			КОГДА Таблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|				ТОГДА Таблица.ВРезерве + Таблица.КОтгрузке
		|			ИНАЧЕ -Таблица.ВРезерве - Таблица.КОтгрузке
		|		КОНЕЦ
		|	ИЗ
		|		РегистрНакопления.ТоварыКОтгрузке КАК Таблица
		|	ГДЕ
		|		Таблица.Регистратор = &Регистратор) КАК Т
		|ГДЕ
		|	Т.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
		|   И Т.Склад.КонтролироватьОперативныеОстатки
		|
		|СГРУППИРОВАТЬ ПО
		|	Т.ВидДвижения,
		|	Т.Номенклатура,
		|	Т.Склад,
		|	Т.Получатель,
		|	Т.Характеристика,
		|	Т.Назначение,
		|	Т.Серия
		|
		|ИМЕЮЩИЕ
		|	СУММА(Т.УвеличениеПрихода) > 0
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|УНИЧТОЖИТЬ ДвиженияТоварыКОтгрузкеПередЗаписью";
		
		ЗапросПакет = Запрос.ВыполнитьПакет();
		Выборка = ЗапросПакет[0].Выбрать();
		Выборка.Следующий();
		// Новые изменения были помещены во временную таблицу.
		// Добавляется информация о ее существовании и наличии в ней записей об изменении.
		СтруктураВременныеТаблицы.Вставить("ДвиженияТоварыКОтгрузкеИзменение", Выборка.Количество > 0);
		
		Выборка = ЗапросПакет[1].Выбрать();
		Выборка.Следующий();
		СтруктураВременныеТаблицы.Вставить("ДвиженияТоварыКОтгрузкеИзменениеСводно", Выборка.Количество > 0);


В КонтролеПроведения (единой точке входа записи всех документов) читают текущие значения регистра для измененных ключей и проверяют на то, что они должно быть больше 0.

Код
Если ЕстьИзмененияВТаблице(ДанныеТаблиц,"ДвиженияТоварыКОтгрузкеИзменениеСводно") Тогда

		МассивКонтролей.Добавить(Врег("ДвиженияТоварыКОтгрузкеСводно"));

		ТекстЗапроса = ТекстЗапроса + 
		"
		|ВЫБРАТЬ
		|	Остатки.Номенклатура      КАК Номенклатура,
		|	Остатки.Номенклатура.ЕдиницаИзмерения  КАК ЕдиницаИзмерения,
		|	Остатки.Характеристика    КАК Характеристика,
		|	Остатки.Назначение    	  КАК Назначение,
		|	Остатки.Склад             КАК Склад,
		|	Остатки.Серия             КАК Серия,
		|	СУММА(Остатки.Количество) КАК Количество
		|
		|ИЗ 
		|(ВЫБРАТЬ
		|	Т.Номенклатура       КАК Номенклатура,
		|	Т.Характеристика     КАК Характеристика,
		|	Т.Назначение     	 КАК Назначение,
		|	Т.Склад              КАК Склад,
		|	Т.Серия              КАК Серия,
		|	-Т.ВРезервеОстаток - Т.КОтгрузкеОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыКОтгрузке.Остатки(
		|			,
		|			(Номенклатура, Характеристика, Назначение, Склад, Серия) В
		|				(ВЫБРАТЬ
		|					Т.Номенклатура,
		|					Т.Характеристика,
		|					Т.Назначение,
		|					Т.Склад,
		|					Т.Серия
		|				ИЗ
		|					ДвиженияТоварыКОтгрузкеИзменениеСводно КАК Т)) КАК Т
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	Т.Номенклатура    КАК Номенклатура,
		|	Т.Характеристика  КАК Характеристика,
		|	Т.Назначение	  КАК Назначение,
		|	Т.Склад           КАК Склад,
		|	Т.Серия           КАК Серия,
		|	Т.ВНаличииОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.Остатки(
		|			,
		|			(Номенклатура, Характеристика, Назначение, Склад, Серия) В
		|				(ВЫБРАТЬ
		|					Т.Номенклатура,
		|					Т.Характеристика,
		|					Т.Назначение,
		|					Т.Склад,
		|					Т.Серия
		|				ИЗ
		|					ДвиженияТоварыКОтгрузкеИзменениеСводно КАК Т)) КАК Т
		|) КАК Остатки
		|
		|СГРУППИРОВАТЬ ПО
		|	Остатки.Номенклатура,
		|	Остатки.Характеристика,
		|	Остатки.Назначение,
		|	Остатки.Склад,
		|	Остатки.Серия
		|
		|ИМЕЮЩИЕ
		|	СУММА(Остатки.Количество) < 0	
		|;
		|///////////////////////////////////////////////////////////////////
		|";
	КонецЕсли;


PS: Проверено, эти временные таблицы нигде больше не используются, только для проверки одного простого ограничения.

Описанный выше способ вряд ли можно охарактеризовать как универсальный (ну и выглядит он диковато), с другой стороны лучшего способа сделать это в 1С я не нашел (как и похоже разработчики типовых). Хотя сделай 1С все по человечески, весь приведенный код можно было бы заменить на ровно одну строку.

В параметрах виртуальных таблиц можно использовать только константы


Также как и в параметризованных представлениях в SQL в параметрах виртуальных таблиц можно использовать только константы. То есть, если вы попробуете выполнить запрос:

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
		|	Товар.МояДата КАК МояДата,
		|	Товар.Цена КАК Цена,
		|	ДвиженияОстатков.ЧислоОстаток КАК Число
		|ИЗ
		|	Справочник.Товар КАК Тов
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияОстатков.Остатки(Товар.МояДата, Товар = Тов.Ссылка) КАК ДвиженияОстатков
		|		ПО ДвиженияОстатков.Товар = Тов.Ссылка
		|		ГДЕ Товар.Наименование = &Имя "
		;
    РезультатЗапроса = Запрос.Выполнить();

То получите сразу 2 ошибки: “Неверные параметры” и “Таблица Тов не найдена”. И если со второй ошибкой еще как-то можно справиться при помощи конструкции IN (В) и подзапроса (это тоже одна из проблем 1С, но о ней позже), то что делать, когда дата не является константой, а лежит, например, в поле другой таблицы, — непонятно. В SQL для хотя бы частичного решения этой проблемы есть специальный вид JOIN — LATERAL JOIN или APPLY, в 1С же даже этого нет. И, соответственно, нужно самому находить все возможные разновидности дат, хранящихся в заданном поле, после чего для каждой даты выполнять отдельный запрос. Ну или находить минимум / максимум дат и высчитывать остатки и обороты. В любом случае оба этих способа как неудобны, так и не производительны одновременно.

Справедливости ради, ограничение, что параметром момента времени должна быть константа, 1С умеет достаточно эффективно использовать, если в регистре материализованы итоги для промежуточных дат. В этом случае 1С в подзапросе виртуальной таблицы может бежать по записям регистра, начиная не от текущей даты, а от ближайшей даты, для которой материализованы итоги. С другой стороны, учитывая что в оперативной базе (OLTP) древность данных обычно обратно пропорциональна вероятности их использования, а на поддержание промежуточных итогов нужны дополнительные ресурсы (в частности место на диске), практическая польза от такой оптимизации весьма сомнительна (если, конечно, оперативную базу одновременно активно не используют как аналитическую, но об этом позже).

Запросы


Запросы в 1С пишутся на своем внутреннем диалекте SQL, который по большому счету мало чем отличается от самого SQL. Правда, в отличие от последнего и других платформ, использующих SQL, работа с запросами в 1С осталась на очень примитивном уровне, и соответственно имеет ряд недостатков.

Запросы в строках


Запросы по старинке пишутся в строках (смотри примеры выше). Это создает как минимум две проблемы:

  • Со стороны IDE непонятно, как поддерживать автоподстановку, подсветку ошибок, синтаксиса, поиск использований и т.п.
  • Ошибки в запросах обнаруживаются только при выполнении, а не сохранении, запуске или компиляции.

Впрочем, стоит отметить, в 1С есть возможность конструирования запросов программно (CхемаЗапроса, СКД), но с верхними двумя проблемами это не сильно поможет (в упомянутых механизмах все равно в конечном итоге используется очень много строк). Единственное с чем это теоретически может помочь, так это с отсутствием в 1С механизма представлений. Но из-за громоздкости этих механизмов, а также невозможности использования визуального программирования, для декомпозиции запросов на практике схемы запросов и СКД используются очень редко.

Отсутствие оптимизатора запросов


Существующий механизм запросов в 1С — это не более чем транслятор SQL-диалекта 1С в синтаксис РСУБД, используемой системой в качестве хранилища данных. И вот тут есть тонкий момент. Дело в том, что кроме больших коммерческих СУБД с кучей оптимизаторов (MS SQL, Oracle), 1С также поддерживает свою файловую СУБД и PostgreSQL, которые работают по принципу «что вижу, то и выполняю». В частности, как было отмечено в предыдущей статье, PostgreSQL не поддерживает Join Predicate Push Down (возможность проталкивания условия запроса внутрь подзапроса). Соответственно у 1С разработчика при написании любого запроса возникает дилемма, можно ли полагаться на оптимизаторы СУБД или нет.

Общая рекомендация самой 1С — нет (и это понятно, так как в противном случае потребовалась бы установка дорогостоящих и громоздких СУБД). И во всяком случае во всех типовых они следуют этим рекомендациям. Более того, судя по этому разделу:

В частности, виртуальная таблица по-разному формирует запросы к базе данных в зависимости от того, какой режим работы у регистра (включено ли хранение актуальных итогов, рассчитаны ли итоги и на какой последний период). Она может как использовать временные таблицы базы данных, так и сформировать подзапрос.

1С и в самой платформе следует принципу «не полагаться на оптимизаторы СУБД», поэтому у разработчика и выбора то особо не остается. А значит ему приходится ориентироваться на «самое слабое звено» и все оптимизации запросов делать вручную. В частности проталкивать условия запроса внутрь подзапросов. И если с подзапросами это еще как-то можно сделать, то с виртуальными таблицами все не так просто. В них хоть немного сложные условия внешних запросов необходимо преобразовывать в конструкции вида В (Подзапрос). Например:

ВЫБРАТЬ
    РасходнаяНакладнаяСостав.Номенклатура,
    УчетНоменклатурыОстатки.КоличествоОстаток
ИЗ
    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки(,
                             Номенклатура В (
                                   ВЫБРАТЬ Номенклатура
                                   ИЗ Документ.РасходнаяНакладная.Состав
                                   ГДЕ Ссылка = &Документ)) КАК УчетНоменклатурыОстатки
        ПО УчетНоменклатурыОстатки.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
ГДЕ
    РасходнаяНакладнаяСостав.Ссылка = &Документ И
    (УчетНоменклатурыОстатки.КоличествоОстаток < РасходнаяНакладнаяСостав.Количество ИЛИ
        УчетНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL)

Также, судя по тому, что 1С не рекомендует создавать сложные условия в виртуальных таблицах, самым «слабым звеном» в линейке РСУБД, похоже, является не PostgreSQL, а файловая СУБД (потому как во всяком случае с оптимизацией IN / EXISTS даже PostgreSQL успешно справляется). Как следствие, для нормальной работы, в том числе с файловой СУБД, все запросы надо декомпозировать вплоть до самых примитивных (что в типовых и делают).

Отсутствие расширенных SQL возможностей


Как и с оптимизатором запросов, с расширенными SQL возможностями 1С также, похоже, попали в ловушку поддержки различных СУБД, а точнее своей файловой СУБД. Так, для того чтобы поддержать такие уже де-факто стандартные вещи, как оконные функции и рекурсивные CTE, 1С пришлось бы поддержать их и в своей файловой СУБД, что является не такой уж тривиальной задачей. Как следствие, либо по причине сложности реализации, либо все же решив, что эти механизмы слишком сложны для разработчика, в 1С решили этого не делать, и сейчас SQL-диалект 1С соответствует стандарту SQL года так 92. А значит для решения таких простых задач, как расчет нарастающего итога, придется либо серьезно попотеть (чтобы добиться нормальной производительности), либо вернуться в ORM, который, как мы выяснили выше, в 1С тоже не фонтан.

Отсутствие запросов на изменение


Активное повсеместное использование запросов позволяет решить проблемы, связанные с чтением большого количества данных. Но так как, в отличии от SQL, в запросах 1С отсутствует механизм изменения данных (так называемый DML), использование запросов никак не может помочь в вопросах записи большого количества данных. То есть, если вам понадобится создать сто тысяч дисконтных карт, вам придется вернуться назад в ORM (то есть к объектам) и генерировать эти объекты по одному с соответствующей не самой высокой производительностью.

Отказ от автоматических блокировок


Одной из главных функций SQL серверов является обеспечение целостности данных (буковки CI в ACID). Самым простым способом ее обеспечения является блокировка всех читаемых данных (с защитой их от изменения). Проблема такого подхода в том, что при его использовании очень сильно страдает масштабируемость, в частности, из-за того, что читатель блокирует писателя. То есть грубо говоря, один сложный отчет, читающий большое количество данных, может ввести в ступор всю базу.

Для борьбы с этим явлением в свое время появились так называемые версионные СУБД. Основная идея этих СУБД состоит в том, чтобы для каждой записи хранить не одну, а несколько версий. Соответственно при начале любой транзакции СУБД запоминает версию базы на момент начала этой транзакции, после чего внутри транзакции читает не текущую запись в таблице, а запись именно на эту «запомненную» версию. Реализуется поддержка различных версий записей (MVCC) в Oracle и PostgreSQL по-разному, но с точки зрения логики обеспечения целостности это не так важно, поэтому останавливаться на этом здесь подробно не имеет особого смысла.

Такой подход действительно значительно повышает масштабируемость СУБД, но на самом деле это улучшение масштабируемости является следствием частичного отказа от целостности. Так, например, если вы будете проверять, что сумма значений полей из двух разных таблиц должна быть больше некоторого значения, то при одновременном редактировании значений этих полей в обеих таблицах в блокировочнике все будет хорошо (точнее возникнет дедлок, в результате которого одна из транзакций откатится), версионник же благополучно запишет оба этих изменения в базу, нарушив тем самым ваше ограничение. Что же тогда поддерживает версионник в плане целостности? На самом деле фактически он поддерживает только целостность данных, которые физически хранятся в таблицах (для них работает механизм конфликтов записи). Соответственно, чтобы сделать «версионную» базу целостной, существует два очевидных варианта:

  • Материализовать данные, для которых важна целостность. Для этого, конечно, очень желательно иметь механизм прозрачной материализации этих данных, а его, как мы видели, ни в SQL (материализация представлений), ни тем более в 1С, нет.
  • При чтении данных, для которых важна целостность, переводить версионную базу в «блокировочный» режим, то есть читать данные с опцией FOR UPDATE (ДЛЯ ИЗМЕНЕНИЯ).

Тут важно понимать, что целостность, как правило, важна только для ограничений (и других декларативных правил), тогда как в остальных случаях порядок транзакций все равно не гарантирован и важно лишь то, чтобы зафиксированные транзакции считывались целиком (а это версионники как раз обеспечивают).

Но вернемся к 1С. Как же они решили бороться с проблемой масштабируемости автоматических блокировок? Барабанная дробь. Они просто решили переложить эту проблему на разработчика. Одну из самых сложных задач в программировании (организацию многопоточного доступа). Самую неочевидную задачу с точки зрения человеческого мозга. Задачу, которую максимально тяжело тестировать и отлаживать. На разработчика, которым когда-то планировалось должен был быть бухгалтер. Решать императивно — ручной установкой и снятием блокировок.

Но самое интересное, что большинство разработчиков эту «манипуляцию» со стороны 1С особо и не заметили. Видимо, потому что описанная проблема весьма неочевидна, проявляется только при высококонкурентном доступе и в случае чего списывается на сбой оборудования / плохую погоду, после чего запускается пересчет, перепроверка, данные исправляются и все благополучно забывают про эту проблему до следующего инцидента.

Формы


Одной из особенностей ERP и других высокоуровневых платформ является то, что логика представлений у них, как правило, идет в комплекте. В частности в 1С за интерактивные представления отвечают так называемые формы. Изначально в 1С этот механизм был относительно простым и понятным и не сильно отличался от условного Access, но по мере роста требований к масштабируемости все изменилось.

Отказ от единого потока выполнения: разделение логики на сервер и клиент


Первым пал единый поток выполнения. Выполнять бизнес-логику на клиенте, как это делается в двухзвенной архитектуре, неэффективно как с точки зрения масштабируемости (обращений к СУБД по сети, невозможности перераспределения вычислительных мощностей), так и с точки зрения безопасности. Самое очевидное решение этой проблемы — перенести всю логику (как бизнес-логику, так и логику формы) на сервер, а реактивное обновление формы на клиенте и синхронизацию клиентского и серверного потоков выполнения реализовать автоматически средствами платформы. То есть весь поток выполнения хранить и выполнять на сервере (который многопоточен по своей природе), а клиенту оставить чисто техническую функцию — обновлять свое состояние по требованию сервера.

Что же сделал 1С? Как уже, наверное, многие догадались — переложили все на разработчика. Основной поток выполнения остался на клиенте, разработчику дали возможность создавать серверный поток выполнения, но при этом в клиентском потоке выполнения запретили обращаться к данным, а в серверном потоке выполнения — к пользователю, то есть открывать формы, диалоги и т.п. (реактивное обновление формы на клиенте они все же реализовали, то есть обращаться на сервере к данным формы можно). Как следствие простой случай общения с пользователем:
f() <- someData(); // читаем данные из базы необходимые для myForm
DIALOG myForm OBJECTS a INPUT DO // ОткрытьФормуМодально, пользователь выбирает какой-то объект
     IF isSomething(a) DO // читаем данные для этого объекта и если с ними что-то не то
         DIALOG otherForm OBJECTS b = a DO { // ОткрытьФормуМодально, открываем другую форму где пользователь выбирает другой объект b
             g(b) <- someInput(b); // записываем данные для b
             APPLY// сохраняем изменения в базу
         }

превращается в кашу из пяти различных процедур с надуманными именами. Если при этом еще надо передать данные между myForm и otherForm, то придется использовать так называемые временные хранилища (что тоже было бы не нужно, если бы поток выполнения был на сервере) в результате чего код усложняется еще больше.

Возможно, причина того, почему 1С реализовали трехзвенную архитектуру именно таким образом, заключается в том, что для обеспечения более высокой отказоустойчивости и масштабируемости они не хотели хранить данные формы на сервере приложений. То есть чтобы при падении / очень большой загрузке сервера приложений можно было легко переключить пользователя на другой сервер без потери данных. Но у такой теории есть ряд белых пятен:

  • Достаточно большой оверхед при передаче данных формы на сервер при каждом серверном вызове (особенно если в форме много данных). И судя по наличию оптимизационной опции &НаСервереБезКонтекста в 1С это понимают. Конечно, можно было бы хранить данные формы на сервере и слать их изменение в обе стороны (а не только в одну), но тогда возникает другой вопрос.
  • Почему не реализовать «зеркалирование» данных формы и состояния серверного потока выполнения на другие сервера приложений (как это например делает Java EE) или на сам клиент. Это решило бы проблему масштабируемости и отказоустойчивости, не напрягая при этом разработчика.
  • Вероятность падения клиента (по причине пропажи электричества, вируса, обновления windows и сотни других причин) куда выше, чем вероятность падения сервера приложений при его грамотном администрировании. И реально критично только для очень крупных компаний (а так страдают все)

Отказ от синхронности


Если вы думаете, что на этом ваши проблемы с потоками выполнения закончились, вы ошибаетесь. В результате того, что 1С оставил основной поток выполнения на клиенте, появилась еще одна проблема. Для того, чтобы остановить поток выполнения на клиенте и вызвать другой поток выполнения (например, открыть новую форму), на клиенте должна в принципе поддерживаться возможность создания нескольких потоков выполнения (то есть многопоточность). И если в десктоп-клиентах многопоточность с определенными оговорками еще как-то поддерживается, то в браузерах с этим все существенно сложнее. Вся их архитектура построена на однопоточности и одном цикле обработки событий. Поэтому, чтобы, например, показать диалог, 1С приходилось создавать новое окно (вкладку) браузера, что, в свою очередь:

  • браузерам не очень нравится (так как они считают это спамом и по умолчанию блокируют)
  • создает отдельный процесс в ОС, что не очень хорошо с точки зрения производительности
  • блокирует старое окно целиком

В мобильных же браузерах ситуация с новыми вкладками в качестве диалогов еще хуже и это, похоже, стало последней каплей, которая заставила 1С что-то делать по этому поводу.

Что же они сделали? Думаете, попытались сохранить состояние потока выполнения, передать выполнение новому потоку, а по его завершению автоматически восстановить старое состояние? Как бы не так, делать что-то автоматически это, похоже, не их стиль. В 1С опять-таки решили все переложить на разработчика. Причем с весьма издевательским комментарием по этому поводу:

Следует отметить, что поначалу асинхронная модель может показаться сложнее привычной синхронной. На самом деле, понимая основные различия этих моделей, разработка асинхронных приложений становится не многим труднее.

Это подтверждается тем фактом, что все современные веб-приложения построены именно с использованием асинхронной модели и их количество постоянно растет.

Верхом садизма при этом является отсутствие в 1С замыканий и передачи функций в качестве параметров. То есть переменные контекста нужно самому сохранять, например, в какую-нибудь структуру, после чего передавать эту структуру параметром явно созданной и именованной процедуре обработке результата. В итоге получается что-то зубодробительное вроде:

&НаКлиенте
Процедура ВыполнитьОперацию(Команда)
       Оп = Новый ОписаниеОповещения("ВыполнитьОперациюЗавершение", ЭтотОбъект);
       ПолучитьТекстВыбора(Оп);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьОперациюЗавершение(Результат, Параметры) Экспорт
       Сообщить(Результат);
КонецПроцедуры


&НаКлиенте
Процедура ПолучитьТекстВыбора(ОбработкаОповещения)
       Контекст = Новый Структура("СледующееОповещение", ОбработкаОповещения);
       Оп = Новый ОписаниеОповещения("ПолучитьТекстВыбораЗавершение", ЭтотОбъект, Контекст);
       ПоказатьВопрос(Оп, "Продолжить операцию?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры


&НаКлиенте
Процедура ПолучитьТекстВыбораЗавершение(Результат, Контекст) Экспорт
       Стр = ?(Результат = КодВозвратаДиалога.Да, 
             "Продолжаем выполнять операцию...", 
             "Операция прервана!");
       Если Контекст <> Неопределено И Контекст.СледующееОповещение <> Неопределено Тогда
             ВыполнитьОбработкуОповещения(Контекст.СледующееОповещение, Стр);
       КонецЕсли;
КонецПроцедуры

Отказ от WYSIWYG: разделение интерфейса на запись и чтение


Следующей жертвой гонки за производительностью / масштабируемостью стал WYSIWYG. Здесь, конечно, не совсем правильно говорить о жертве, потому как в ранних версиях 1С его тоже не было, поэтому будем считать WYSIWYG жертвой по сравнению с тем, как в 1С могли бы реализовать свои интерфейсы.

В ранних версиях 1С было всего несколько вариантов работы с данными в списках. К списку можно было привязать:

  • Первичные данные: объекты (справочники, документы), их агрегированные объекты (табличные части) и т.д.
  • Программно создаваемую таблицу: таблицу значений, читать данные в которую и записывать данные из которой разработчик должен вручную.

Естественно, с таким набором возможностей даже для такой простой задачи, как выдать на форме список товаров с их ценами и остатками, нужно было основательно потрудиться (и это даже без требований нормальной производительности). Поэтому разработчики 1С в последние версии платформы добавили так называемые динамические списки — списки, у которых в качестве источника данных могут быть любые запросы. Вроде бы все красиво, но дьявол, как известно, кроется в деталях:

  • С учетом отсутствия оптимизатора запросов, в этих запросах фактически нельзя использовать подзапросы / виртуальные таблицы на дату и / или с условием на источник данных. Дело в том, что в динамическом списке предполагается считывание только видимой части записей (например первых 50), а учитывая, что, как уже отмечалось выше, автоматическое проталкивание условий верхнего запроса внутрь подзапроса 1C не поддерживает, а как протолкнуть эти условия вручную (к чему обратиться для получения видимой части в запросе) — непонятно. То есть, если в качестве запроса динамического списка написать запрос:
    ВЫБРАТЬ
    			Товар.МояДата КАК МояДата,
    			Товар.Цена КАК Цена,
    			ДвиженияОстатков.ЧислоОстаток КАК Число
    		ИЗ
    			Справочник.Товар КАК Тов
    				ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияОстатков.Остатки(&Дата, ) КАК ДвиженияОстатков
    				ПО ДвиженияОстатков.Товар = Тов.Ссылка"
    

    то при каждом открытии формы с этим динамическим списком будут рассчитываться остатки на заданную дату для всех (а не только видимых) товаров.
  • Но самый главный вопрос — с редактированием динамических списков. В ранних версиях 1С была такая возможность, как редактирование данных в списке, что в общем-то понятно, так как все данные были первичными. С динамическими списками все усложнилось, так как в этом случае, надо из запроса выяснять, какие колонки первичные, а какие — нет. Плюс при выполнении запроса надо автоматически обновлять его результаты с учетом сделанных пользователем изменений.

    Что сделали в 1С? Ну вы поняли. Просто запретили (а точнее, не поддержали) редактирование динамических списков. Причем, так как механизм динамических списков стал основным механизмом работы со списками, заодно запретили редактирование и списков с первичными данными (справочниками и документами, то есть то, что работало в предыдущих версиях). Ну и объяснили это в стиле «просто не держите его так». А если очень хочется, то используйте таблицы значений. Правда, чтобы с использованием таблиц значений реализовать функционал динамического списка (с чтением только видимых записей), нужно, мягко говоря, серьезно повозиться.

    Как следствие, на практике в 1С есть строгое разделение интерфейса на списки, где идет чтение данных, и на списки, где идет ввод данных (такой анти-WYSIWYG). Особенно наглядно эта разница видна на примере подбора товаров в типовых конфигурациях, где пользователь в одном списке выбирает товары, а во втором вводит количество этих товаров. Впрочем, про это была отдельная статья, поэтому подробно на этой теме останавливаться не будем.

Невозможность обращаться в списках к реквизитам форм / текущим значениям других списков


Эта проблема может показаться менее существенной по сравнению с описанными выше, но, на мой взгляд, ее также не стоит недооценивать. Фактически эта проблема означает, что все списки / объекты на форме в 1С сами по себе, а связывать их друг с другом разработчику необходимо самостоятельно императивным кодом в подписках на различные события.

Так, например, если мы хотим в форме документа показать список договоров поставщика этого документа, нам надо:

  • В запрос списка договоров добавить параметр &Поставщик и использовать его для отбора нужных договоров
  • Обновлять этот параметр при:
    • Открытии формы
    • Изменении поставщика в документе пользователем
    • Выборе другого документа (например, если на форме отображается список документов)
    • При обновлении данных формы (так как поставщик мог быть изменен другим пользователем, а пользователь нажал обновить)

И это в самом простом случае. Если условие «соединения данных» на форме сделать еще более сложным, событий и кода их обработки понадобится еще больше.

Соответственно, почему возможность обращаться к другим реквизитам формы (и автоматически обновлять динамические списки при их изменении) не поддержали непосредственно на уровне платформы — еще одна из загадок 1С (хотя, возможно, я просто не нашел такую возможность).

Собственно, исходя из всего вышесказанного, неудивительно почему большинство форм в 1С достаточно примитивны и состоят в лучшем случае из одного списка, причем зачастую только с первичными данными. Конечно, в типовых решениях с их неограниченными бюджетами на разработку все немного получше, но в отраслевых и решениях, разработанных с нуля, пользователей, как правило, не сильно балуют множеством информации на форме и удобством работы с ней.

Избыточные уровни абстракций


Когда я начинал изучать 1С, я все не мог избавиться от мысли, что в 1С есть отдельная система поощрения для тех, кто придумает какое-то новое понятие. Там, где вроде можно было немного отрефакторить и обойтись меньшим числом абстракций, в 1С создают все новые и новые уровни, как будто специально усложняя разработку. И когда видишь вот такую картинку:



Первая мысль: кто все эти люди? Впоследствии, конечно, когда со всеми этими понятиями познакомишься немного поближе, эта картинка уже не выглядит настолько пугающе, но все равно не покидает ощущение, что многие вещи в 1С, на мой взгляд, явно лишние.

  • Объекты / записи

    Это разделение уже упоминалось в разделе про ORM. Причем тут вопрос не к понятию объект, как таковому (это понятие есть везде), а в том, что в 1С объекты, как и записи (регистры), также отвечают за хранение данных. Собственно, верхняя картинка и получается настолько большой и сложной по причине того, что 1С пытается усидеть сразу на двух стульях.
  • Объекты / ссылки на объекты

    Очень странное разделение, которое поначалу сильно сбивает с толку. Я сначала думал, что это своего рода аналог ссылок / объектов в C#, C++. Но это не так. Фактически ключевое отличие этих двух понятий заключается в том, что объекты используются для записи и чтения, а ссылки — только для чтения. Конечно физически там больше нюансов — при обращении по ссылке объект читается неявно и сохраняется в кэше на какое-то время (разработчик этим никак не управляет), а чтением объекта (и остальным циклом его жизни) управляет разработчик. Но логически разницы никакой, и ни в какой другой технологии (что ORM, что не ORM) такого разделения нет.
  • Данные формы / Данные объектов

    Это разделение является следствием борьбы за масштабируемость (разделения логики на сервер и клиент) с одной стороны, и дублирования логики данных в объектах и записях с другой. То есть 1С нужно было поддержать что-то среднее, что решало бы проблемы сериализации данных на клиента и при этом подводило бы объекты (справочники, документы) и записи (регистры, запросы) под общий знаменатель. Соответственно для этого в 1С и отделили данные формы от просто данных, но при этом в попытках сделать это разделение менее явным создали ряд очень странных абстракций. Например, класс в скобочках. Который выглядит как класс, крякает как класс, но не класс (например методы этого класса вызывать нельзя). А чтобы сделать из него настоящий класс, нужно использовать специальную процедуру РеквизитФормыВЗначение (ну и соответственно ДанныеФормыВЗначение в обратную сторону).

    И если с данными формы такое разделение было во многом вынужденным, то зачем понадобилось разделять команды формы и действия, я, если честно, не совсем понял. Может в комментариях кто-нибудь сможет это объяснить.

    В любом случае с управляемыми формами разработчики 1С явно перемудрили, все можно было сделать гораздо проще. Правда, скорее всего избавившись от первоначальных проблем (то есть разделения логики на сервер и клиент, и на объекты и записи).
  • Запросы / СКД / Аналитика (BI)

    Обычно бизнес-приложения принято разделять на два контура: OLTP и OLAP. В первом люди работают по более-менее конкретным бизнес-процессам: получают и вводят одну и ту же информацию и нажимают на одни и те же кнопки в одних и тех же доступных им формах. OLAP — творческий контур, в нем пользователи обычно «играют» с информацией, получая эту информацию в различных заранее неизвестных срезах. В OLTP люди обычно принимают оперативные решения и отражают уже произошедшие события, OLAP же используется для принятия стратегических решений. Понятно, что в жизни есть полутона, когда пользователю и в OLTP нужна какая-то гибкость, но как правило она ограничивается простыми отборами, сортировками и выбором / изменением размеров колонок, так как бОльшая гибкость будет, во-первых, слишком сложна для пользователя (многим даже отборы с трудом даются), а во-вторых, необходимость этой гибкости говорит о несовершенстве бизнес-процессов и если один более продвинутый пользователь догадается это несовершенство побороть, то второй пользователь так и будет продолжать работать неэффективно. Плюс надо понимать, что при сильном изменении структуры информации формы часто требуется изменение физической модели, например, материализация промежуточной информации (как это обычно делается в OLAP), что с одной стороны позволяет не нагружать оперативную базу долгими запросами, а с другой стороны позволяет пользователю получать информацию за секунды.

    Для OLAP есть большое количество уже готовых решений, которые умеют забирать данные из существующих SQL баз через веб-сервисы и многими другими способами, после чего агрегировать их и давать пользователю максимально быстрые и эргономичные интерфейсы по работе с этими данными. И самым логичным решением для любой платформы было бы максимально упростить интеграцию с такими инструментами.

    Но в 1С решили сделать не как все. Они реализовали так называемую систему компоновки данных (СКД) с очень непонятной областью применения:

    • Как инструмент разработки печатных форм он слишком сложный (по сравнению с классическими системами отчетности)
    • Как инструмент аналитики (где пользователь сам настраивает группировки, колонки) он по эргономике и производительности значительно уступает существующим BI инструментам
    • Как интерактивный интерфейс, то есть замена формам, СКД также плохо подходит, так как не умеет и половину того, что умеют формы
    • Как программный инструмент доступа к данным он слишком громоздкий и тяжело читается, когда используется в коде

    В общем получился какой-то франкенштейн, который при этом по функционалу пересекается с половиной других абстракций в 1С. В которые (например, формы) они еще и попытались интегрировать этот СКД. В результате понять что, где, когда и как нужно использовать — задача весьма неочевидная.

Закрытая физическая модель


В этом вопросе у 1С похоже какая-то принципиальная позиция. Что им мешает дать возможность разработчику самому задавать имена таблиц и полей, я до сих пор не понимаю. Да, местами возникнут вопросы, например, с составными типами реквизитов (где они, насколько я помню, в определенных случаях создают три колонки в базе), с тем, что имена всех метаданных на русском (хотя большинство СУБД позволяют создавать таблицы и поля на русском) и так далее, но все эти проблемы решаемы.

Открытая же физическая модель дала бы огромное количество возможностей: от простой интеграции на чтение со стороны тех же OLAP систем до возможности использования встроенных средств СУБД, таких как рекомендация построения индексов, профилировщиков и так далее (без необходимости гадания, что же это за поля и таблицы — _Fld16719 и _Document5759).

Но 1С не то что решили не открывать физическую модель, а наоборот, лицензионно запретили лезть разработчикам в базу без явного на то разрешение со стороны самой 1С.

Отсутствие наследования и полиморфизма


Тема, о которую сломано много копий. За это часто критикуют 1С, но тут надо понимать, что так как 1С в какой-то момент для производительности решил перейти на голый SQL, а даже в самом SQL наследование и полиморфизм не реализовали, требовать реализацию этих механизмов от 1С достаточно наивно.

Ну и, конечно, с аргументом «покажите, что можно реализовать с наследованием и полиморфизмом, чего нельзя реализовать с помощью if'ов» тяжело спорить. Но к чему приводит отсутствие наследования, как раз хорошо иллюстрируют типовые 1С, где для того, чтобы поддержать некую общую логику, скажем для всех строк документов:

  • Делают общую процедуру ОбработатьСтрокуТЧ, которая должна вызываться для всех строк документов (кстати одно из немногих мест, где используется ORM, а не запросы)
  • Внутри этой процедуры пишут реализации всех существующих классов строк документов:

    Процедура ОбработатьСтрокуТЧ
    Процедура ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт
    	
    	Если КэшированныеЗначения = Неопределено Тогда
    		КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
    	КонецЕсли;
    	
    	ПроверитьАссортиментСтроки(                             										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьНоменклатуруПоНоменклатуреПоставщикаВСтрокеТЧ( 										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьНоменклатуруПоставщикаПоНоменклатуреВСтрокеТЧ( 										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьСопоставленнуюНоменклатуруПоставщикаВСтрокеТЧ( 										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВСтрокеТЧ(     										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьКорректностьЗаполнитьХарактеристикиИУпаковки(  										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьКорректностьЗаполнитьХарактеристикиКиЗ(												ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоНеОтгружатьСтрокеТЧ(					ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьGTINВСтроке(                                                                           ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоФактуВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); 
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокСуффиксИзОтклоненияВСтрокеТЧ(	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоЕдиницВСтрокеТЧ(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоЕдиницСуффиксВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокВСтрокеТЧ(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокСуффиксВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоОтклонение(						    ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоВесу(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоОбъему(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьВесОбъемВСтрокеТЧ(								ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуЗаУпаковкуВСтрокеТЧ(							ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуЗаказаЗаУпаковкуВСтрокеТЧ(					ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьВидЦеныВСтрокеТЧ(                              										ТекущаяСтрока, СтруктураДействий); 
    	ЗаполнитьЦенуПродажиВСтрокеТЧ(                          										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьЦенуПродажиПоАссортиментуВСтрокеТЧ(            										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьЦенуЗакупкиВСтрокеТЧ(                          										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьУсловияПродажВСтрокеТЧ(                        										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьУсловияЗакупокВСтрокеТЧ(                       										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПартиюТМЦВЭксплуатации(                        										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСтавкуНДСВСтрокеТЧ(                            										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьСтавкуНДСПоНоменклатуреВСтрокеТЧ(              										ТекущаяСтрока, СтруктураДействий);
    	ПересчитатьЦенуСНДС(                                    										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтавкуНДСВозвратнойТарыВСтрокеТЧ(					ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуРучнойСкидкиВСтрокеТЧ(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуАвтоматическойСкидкиВСтрокеТЧ(
    		ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьПроцентРучнойСкидкиВСтрокеТЧ(					ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуВСтрокеТЧ(								ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуВСтрокеТЧРасхождения(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуСкидкуПоСуммеВПродажахВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуСкидкуПоСуммеВЗакупкахВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуПоСуммеВСтрокеТЧ(							ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПересчитатьСуммуПродажиПоСуммеСНДС(                     										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуПродажиПоСуммеПродажиВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомАвтоматическойСкидкиВСтрокеТЧ(		ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомРучнойСкидкиВСтрокеТЧ(				ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомСкидкиБонуснымиБалламиВСтрокеТЧ(		ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПересчитатьСуммуСУчетомПогрешностиОкругленияВСтрокеТЧ(  										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПересчитатьСуммуНДСВСтрокеТЧ(                           										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСНДСВСтрокеТЧ(								ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуБезНДСВСтрокеТЧ(							ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуРеглВСтрокеТЧ(								ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьНДСРеглВСтрокеТЧ(								ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуПродажиВСтрокеТЧ(							ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуПродажиНДСВСтрокеТЧ(						ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьРеквизитыПоНоменклатуреВСтрокеТЧ(              										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПроверитьСтатьюАналитикуРасходов(                       	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ОчиститьСуммуВознагражденияВСтрокеТЧ(                   	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.УстановитьАктивностьСтроки(                             	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьЗаполнитьСкладВСтрокеТЧ(                       										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьЗаполнитьОбеспечениеВСтрокеТЧДокументаПродажи(											ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьЗаполнитьОбеспечениеВСтрокеТЧ(                 										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ПроверитьПолучитьВариантКомплектации(                   										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьФлагиРасхождениеИИзлишекПорча(                 	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ОчиститьСуммуВзаиморасчетовВСтрокеТЧ(                   	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ОчиститьАвтоматическуюСкидкуВСтрокеТЧ(                  	ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСодержаниеУслуги(                              										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСтатьюАналитикуРасходовПоУмолчанию(            										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПартнера(                                      	ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПомещение(                                     										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПродавца(                                      										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьУчетноеКоличествоНоменклатуры(                 										ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПризнакНаличияНоменклатурыПродаваемойСовместно(										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакБезВозвратнойТары(	                     	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакОтмененоБезВозвратнойТары(              	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакАктивностьБезВозвратнойТары(            	ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьДубликатыЗависимыхРеквизитов(                  	ТекущаяСтрока, СтруктураДействий);
    	ПроверитьСериюРассчитатьСтатус(                         										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСверхЗаказаВСтрокеТЧ(                   	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	УстановитьПризнакДляЗаполненияТекстовогоОписания(       										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьВариантОтраженияКорректировкиРеализации(       	ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьВариантОбеспеченияПоДатеОтгрузки(              										ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.НоменклатураПриИзмененииПереопределяемый(               	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ХарактеристикаПриИзмененииПереопределяемый(             	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакПринимаетсяКНУ(           										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакАналитикаРасходовОбязательна(           										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакРаспределениеНДС(                       										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакАналитикаДоходовОбязательна(            										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакАналитикаАктивовПассивовНеИспользуется( 										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьПризнакАналитикаРасходовЗаказРеализация(       										ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьТипСтатьи(               																ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПризнакАдресногоХранения(                     											ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПризнакИспользованияПомещений(															ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакиКатегорииЭксплуатации(                 	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхожденияПослеОтгрузки(                          ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхожденияПослеПриемки(                           ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхождения(                                       ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментарияПриемка(                  ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментарияОтгрузка(                 ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментария(							ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакТоварногоМестаТребуетсяОбработка(			ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьПризнакДвиженияПоСкладскимРегистрам(ТекущаяСтрока, СтруктураДействий);	
    	ОбработкаТабличнойЧастиКлиентСервер.ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения(ТекущаяСтрока, СтруктураДействий);
    	ОбработкаТабличнойЧастиКлиентСервер.ПроверитьЗаполнитьНазначениеВСтрокеТЧ(                  	ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ОбработкаТабличнойЧастиКлиентСервер.ПриИзмененииНазначенияВСтрокеТЧ(                            ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	ЗаполнитьНоменклатуруЕГАИС(                                                                     ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	АкцизныеМаркиКлиентСервер.ЗаполнитьИндексАкцизнойМаркиДляСтрокиТабличнойЧасти(                  ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСтрануПроисхожденияДляНомераГТД(                                                       ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСпособОпределенияСебестоимости(                                                        ТекущаяСтрока, СтруктураДействий);
    	ЗаполнитьСпособОпределенияСебестоимостиСтрокой(                                                 ТекущаяСтрока, СтруктураДействий);
    	ПоместитьОбработанныеСтрокиВКэшированныеЗначения(                                               ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    	
    КонецПроцедуры
    

  • Внутри каждой реализации проверка на наличие поля (которое по сути и является признаком принадлежности классу строки документа):

    	Процедура ЗаполнитьПризнакНаличияКомментарияПриемка(ТекущаяСтрока, СтруктураДействий) Экспорт
    
    	Если НЕ СтруктураДействий.Свойство("ПризнакНаличиеКомментарияПриемка") Тогда
    		
    		Возврат;
    		
    	КонецЕсли;
    	
    	ТекущаяСтрока.ЕстьКомментарийПоставщика = НЕ ПустаяСтрока(ТекущаяСтрока.КомментарийПоставщика);
    	ТекущаяСтрока.ЕстьКомментарийМенеджера = НЕ ПустаяСтрока(ТекущаяСтрока.КомментарийМенеджера);
    
    КонецПроцедуры
    

Я участвовал в написании кода в таком стиле лет 20 назад на Foxpro (тоже на IF TYPE(«tableA.fldB») = «C») и думал, что такой подход умер еще тогда. Но нет, оказывается он даже в 2019 году живее всех живых.

P.S.: Как могли бы выглядеть наследование и полиморфизм в 1С разбиралось в недавней статье, поэтому подробно на этой теме здесь также останавливаться не будем.

Отсутствие явной типизации в коде


С явной типизацией в 1С все не так однозначно. Частично она есть — при создании любого реквизита можно и нужно указать его тип (класс). Конечно, тут возникает вопрос, что делать если значение реквизита может быть не одного типа (а наследование, как мы помним, в 1С отсутствует). Для таких случаев в 1С поддерживаются так называемые составные типы, когда в качестве типа можно указать не один, а сразу несколько типов. Эффективность реализации этих составных типов, конечно, оставляет желать лучшего:

Рекомендации по использованию составных типов
  • Используйте поля составных типов только тогда, когда это является оправданным с точки зрения логики функционирования конфигурации.
  • Не используйте составные типы, кроме ссылочных, для полей, по которым связываются таблицы. Например, если в документах «ПриходнаяНакладная» и «РасходнаяНакладная» есть реквизит «Контракт» составного типа, то исполнение следующего запроса может быть неэффективным:
    ВЫБРАТЬ ПриходнаяНакладная.Контракт
    ИЗ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
    ПО ПриходнаяНакладная.Контракт = РасходнаяНакладная.Контракт
    

  • Избегайте выполнения операций поиска и отбора по значениям полей составных типов, кроме ссылочных.
  • Не определяйте полей составных типов, кроме ссылочных, в таблицах с потенциально очень большим количеством записей.
  • Избегайте использования в регистрах измерений составных типов, кроме ссылочных.
  • Используйте индексирование по полям составных типов только после тщательного анализа этого решения с точки зрения необходимости и потерь производительности.


Другими словами, не рекомендуется использовать никогда (ключевой момент тут на самом деле в неэффективном сравнении полей с разным количеством типов). Но как говорится: «На безрыбье и рак — рыба».

В любом случае это все касается только реквизитов (а также ресурсов, измерений и т.п.). С кодом же ситуация куда печальнее. Типов переменных нет, и какие у данной переменной есть поля и методы, можно только гадать. И если внутри одной процедуры IDE (Конфигуратор) еще как-то может вывести тип переменной, то как только эта переменная передается в другую процедуру, вся информация о ней теряется, а с ней теряется и подсветка ошибок, автоподстановка и прочие радости жизни разработчика.

Конечно, существует значительное количество языков, которые также как и 1С обходятся без явной типизации. Но на больших проектах со сложной логикой, которыми являются современные бизнес-приложения, разобраться, для чего нужен данный кусок кода и что именно в нем происходит, когда у каждой переменной не известен ее класс, на порядок сложнее.

Отсутствие модульности


Как по идее должно выглядеть идеальное бизнес-решение в идеальном мире. Есть большой набор (а точнее граф) готовых модулей с различным функционалом, из которых заказчик может, как из кубиков, собрать решение, которое надо именно ему (с учетом специфики его бизнеса), а если каких-то кубиков не хватает, разработать их уже лично для себя. Возможность такой декомпозиции информационной системы обычно принято называть модульностью.

Частично решить проблему модульности в 1С попытались при помощи так называемого механизма расширений. Но, во-первых, сам этот механизм, больше адаптирован под кастомизацию, а не под модульную разработку. Так, если модулей будет достаточно много (несколько сотен), работать с ними в текущих интерфейсах 1С будет крайне неудобно. Собственно, в самом 1С это понимают:

Есть соблазн использовать расширения для создания тиражных прикладных решений, однако делать этого не стоит. Во-первых, потому, что расширения не проектировались под такие задачи. А во-вторых, потому, что другие механизмы платформы, например механизмы поставки и поддержки, ничего не знают о расширениях.

Мы анализировали все эти задачи и пришли к выводу, что наиболее приоритетной на данный момент является адаптация конфигураций к пожеланиям пользователей во время внедрений.

Во-вторых, одних только расширений для обеспечения модульности недостаточно — нужны еще:

  • расширения запросов, которые, как мы помним, в 1С как правило задаются обычными строками (а при помощи запросов реализуется бОльшая часть бизнес-логики)
  • события изменения данных, которые формально существуют, но в них либо возникает проблема N+1, либо логика в них также описывается запросами, а значит смотри предыдущий пункт. Плюс в 1С есть только события изменения первичных данных, события изменения вычисляемых данных (например, регистров), как мы видели выше, в 1С не поддерживаются.
  • наследование и полиморфизм, которых, как мы уже выяснили, в 1С также нет
  • агрегации, которые нужны, когда наследования недостаточно

Но в целом инициатива с расширениями, конечно, правильная, хотя на текущем этапе до реальной модульности 1С еще ой как далеко. И последние версии типовых решений — это по прежнему один большой монолит. Причем по мере роста сложности этих решений возникает следующая парадоксальная ситуация:

  • Чем сложнее решение, тем сложнее его дорабатывать (особенно с учетом плохой модульности, а значит сильной связности кода)
  • Чем сложнее решение, тем с меньшей вероятностью оно подойдет под существующие на предприятии бизнес-процессы (а значит это решение придется дорабатывать)

Как следствие, в последних версиях 1С постепенно приобретает «болезнь SAP» — на любое пожелание заказчика, ему говорится: «вы просто неправильно работаете, есть best practice, вы тоже должны работать именно так». И не важно, что бизнес по торговле автомобильными запчастями отличается от бизнеса по торговле нефтью чуть менее, чем полностью (если конечно речь не идет об автоматизации уровня «пришло-ушло-осталось»). А именно максимальная гибкость и свои ноу-хау позволяет малому и среднему бизнесу противостоять крупным корпорациям в борьбе за рынок. Нет — все должны работать одинаково. Да, конечно, в монолите часто делают миллионы настроек, но:

  • гибкость таких настроек по определению сильно ограничена (обычно это не более, чем просто включение / выключение различных сценариев)
  • они сильно перегружают интерфейс (когда пользователю приходится работать по инструкции: зайдите на третью вкладку, включите пятую галочку, заполните десятое поле)
  • они не в состоянии полностью исключить избыточное потребление ресурсов. То есть настройка может быть выключена, но поля в таблицах в базе все равно будут (а значит будут потреблять лишнее место, попадать в кэши СУБД), часть общего кода все равно будет выполняться и так далее.

Ставка на визуальное программирование


Тема с визуальным программированием, а точнее low-code / no-code платформами то и дело всплывает то тут, то там с завидной регулярностью. Позиционируют себя эти платформы, как средства ускоряющие / упрощающие разработку. При этом почему программирование мышкой по их мнению должно быть априори эффективнее программирования клавиатурой — непонятно. Разработку действительно можно ускорить / упростить повышением уровня абстракций, но никак не способом ввода этих абстракций в систему. Одна строка кода в этом смысле лучше, чем пять кликов / перетаскиваний мышкой, не говоря уже о том, что скорость работы с клавиатурой у опытного разработчика как правило выше, чем скорость работы с мышкой. Поэтому утверждения «ну раз код писать не надо, то и разработчик не нужен» не более, чем маркетинговая уловка.

Но попробуем взвесить все за и против обоих подходов (Все-в-виде-кода vs Визуальное программирование). Итак, преимущества всего в виде кода:

  • Система контроля версий — поддержка gitflow из коробки (например возможность выполнения операций слияния веток и разрешения конфликтов при этом слиянии)
  • Метапрограммирование / кодогенерация — возможность использовать макросы и / или механизмы шаблонов в IDE
  • Копирование — можно взять любой кусок кода, клонировать его, а затем, если нужно «тоже самое, но с перламутровыми пуговицами» групповым изменением, например, поменять в клонированном коде одно слово на другое
  • Редактирование — код можно просмотреть в любом текстовом редакторе, переслать через мессенджер, разместить на форуме и т.п.
  • Унифицированность — для кода есть готовая инфраструктура и стандарты работы с ним в IDE (например стандартные действия по переходу к объявлению, поиск использований, установка брейкпоинтов и т.п.). То есть разработчик работая с любым языком по умолчанию знает все интерфейсы работы с любым элементом этого языка.
  • Отладка — любой элемент можно легко идентифицировать по файлу и номеру строки в коде
  • Лаконичность — в коде видно только то, что было изменено / реально используется, в отличие от визуального программирования, где разработчику информация вываливается вся сразу:

    Пример визуальной настройки


Преимущества визуального программирования:

  • Ниже порог вхождения. Но это не точно.
  • Удобнее задавать пользовательские интерфейсы с абсолютным позиционированием. Актуально только для печатных форм, так как в вебе, который сейчас практически везде, такое позиционирование не используется.

Конечно противопоставлять эти два подхода тоже не всегда правильно. Так визуальное программирование можно использовать для генерации кода, то есть в режиме конструктора. Но в таком режиме предполагается, что код первичен и разработчик должен уметь одинаково хорошо пользоваться как «текстовым», так и «графическим» интерфейсом разработки. А в таких случаях, как показывает мировой опыт, он просто отказывается от «графического» интерфейса, так как «текстовым» интерфейсом разработчику все равно придется пользоваться гораздо чаще, а зачем ему два механизма? Поэтому в современных технологиях использование конструкторов, как правило, сведено к минимуму.

Но вернемся к 1С. Судя по тому, что основную ставку 1С решили сделать на EDT, там все вышесказанное тоже отлично понимают и поэтому старательно пытаются исправить «ошибки прошлого». Но так как платформа у них принципиально не language-based, в 1С решили сделать это, преобразовав все свои прикладные абстракции не в свой язык, а в XML. Выглядит это конечно на любителя. Мало того что язык XML сам по себе достаточно громоздкий, так они еще:

  • выгружают туда значения всех свойств (в том числе тех, которые не изменялись). В результате структура примитивного документа (без кода вообще) занимает 1336 строк.
  • часто используют сгенерированные id, которые, конечно, с одной стороны помогают решить проблемы с миграцией, но с другой стороны требуют при написании кода дополнительные инструменты для их генерации.

Соответственно просматривать / редактировать такой код руками — так себе удовольствие. Поэтому ни о каких преимуществах подхода Все-в-виде-кода, в том виде в котором он реализован в 1С, к сожалению говорить не приходится. То есть, как говорится, хотели как лучше, а получилось как всегда.

Фатальный недостаток


Шутка про фатальный недостаток, пришедшая из Microsoft в 1С, заиграла новыми красками. Попробуем пересчитать все то, что 1С написали сами, и аналоги чего уже существуют и используются во всем мире:

  • IDE — IDEA, Eclipse, Microsoft Visual Studio / VSCode используются повсеместно и имеют достаточно развитую инфраструктуру для написания сторонних плагинов. Конфигуратор по сравнению с той же IDEA играет не то что в другой лиге, а можно сказать в другой вид спорта.
  • Систему контроля версий — тут git победил всех, хотя subversion и mercurial тоже местами держатся. Ну а механизму системы контроля версий в 1С до git, мягко говоря, очень далеко.
  • СУБД — тут они хотели скорее всего упростить процесс развертывания среды разработки / выполнения, но реализовать СУБД даже на уровне PostgreSQL, задача не самая простая. И, как мы видели в разделе Запросы, 1С реализовал свою СУБД где-то на уровне SQL-92 и тем самым выстрелили себе в ногу, сделав невозможным использование даже базовых возможностей нормальных СУБД.

    Ну и конечно своя сборка PostgreSQL, когда можно было обойтись правильным его использованием (судя по списку изменений, которые 1С там сделал), это конечно за гранью. Очень напоминает старый анекдот.
  • Систему отчетности — в мире таких систем тоже огромное количество, но тут особенность в том, что они все используются только для формирования печатных форм. В 1С отчеты еще зачем-то пытаются выполнять функции обычных форм (то есть обладают интерактивностью) и BI. Так что если бы даже в 1С попытались воспользоваться готовыми системами отчетности, у них все равно не получилось бы это сделать.
  • Язык — со своим языком в 1С вообще непонятно. Ладно еще то, что ключевые слова в нем могут быть на русском, есть расхожее мнение, что это понижает порог вхождения, так как много русскоязычных жителей не знают английский (хотя китайцам это не мешает почему-то). Но у них же платформа не language-based (как, например, SAP или SQL, где все их возможности в языке), а значит и смысл своего языка теряется практически полностью. То есть никаких преимущества от наличия своего языка 1С не получает, а вот все недостатки присутствуют в полном объеме. Как в той шутке: «я сегодня таксиста обманул, заплатил, а не поехал». Плюс 1С по какой-то непонятной логике держит свой язык на максимально примитивном уровне. Видимо, они считают, что явная типизация, наследование или замыкания / лямбды — это слишком сложно для разработчика, а ручные блокировки, директивы компиляции, callback'и на клиенте и тонны своих сложных дублирующих друг друга абстракций — вполне нормально.
  • Системы сборки / управления зависимости — у систем сборки лидеры наверное Jenkins и TeamCity, для управлений зависимости у каждого языка свой лидер у Java — Maven, Gradle, у JavaScript — npm, у Python — pip и т.д. У всех них есть большие community, центральные репозитории библиотек, поддержка версионности из коробки, поддержка со стороны многочисленных IDE и куча чего еще. Но для экосистемы 1С это все опять-таки, видимо, слишком сложно, поэтому у них все свое, что по уровню, конечно, и близко не дотягивает до текущих лидеров на рынке.
  • UI фреймворки. Тут я досконально не изучал их внутренности, но факт того, как мучительно долго они добавляли поддержку Linux, а потом MacOS (хотя при условии использования той же Java они получили бы все это практически из коробки), говорит о том, что удержаться от соблазна «изобрести свой велосипед с квадратными колесами» и в этом случае они скорее всего не смогли.

Стоит отметить, что тупиковость первых двух веток в самом 1С также отлично понимают, и поэтому уже лет пять пишут свой плагин под Eclipse. Правда, судя по отзывам, делают это они с переменным успехом, потому как обеспечить нормальную производительность на кодовой базе даже УТ (не говоря уже про ERP) не так то просто. Особенно с учетом того, что не факт, что в том же Eclipse есть инфраструктура stub индексов, ленивого парсинга (chameleon токенов), language injection и т.п., как в той же IDEA (если же в Eclipse это все есть, то непонятно, что можно разрабатывать такое количество времени и не сделать EDT основным инструментом разработки).

В любом случае, с EDT 1С кроме всего вышеперечисленного нужно поддерживать и разрабатывать еще одну IDE. Поэтому неудивительно, что в последнее время они начали действовать по принципу «нужно больше золота». Страшно представить, что будет, если Eclipse совсем умрет под натиском IDEA, и в 1С решат написать еще одну IDE.

Неуважительные по отношению к разработчикам лицензирование и брендирование


У 1С конечно очень своеобразная политика лицензирования. Например: 1С: Предприятие 8. Управление торговлей стоит 22 600 рублей. На неограниченное число пользователей (!). В чем спросите вы подвох? А он в том, что основная стоимость в платформе: 1С: Предприятие 8 ПРОФ. Клиентская лицензия на 100 рабочих мест — 360 000. 1С: Предприятие 8.3 ПРОФ. Лицензия на сервер — 86 400. И тут важны не конкретные цифры, а то, что решение стоит на порядок (!) дешевле платформы. Платформы, в которой, как мы выяснили, разработчику приходится делать практически все самому вручную. И если я вдруг решу написать свое решение и продавать его серийно, мне придется конкурировать с решением за 22 600 рублей. А это не так просто с учетом следующей проблемы.

1С не только лицензирует, но и брендирует все свои решения, как будто самое главное — это 1С как платформа, а решения (которые они брезгливо называют конфигурациями) это так — люди мышкой понатыкали. Поэтому люди, не разбирающиеся в IT, часто говорят: «мы смотрим / купили 1С». Ты у них спрашиваешь, какое именно решение, а они смотрят на тебя как на идиота с немым вопросом в глазах: что мне непонятно, я же сказал — 1С. И такой подход в брендировании — это палка о двух концах. Да, с одной стороны разработчикам так действительно проще продавать свое решение, так как уже есть готовый поток лидов, синергия с продажей других продуктов (например бухгалтерии) и так далее. Но с другой стороны:

  • Если для клиента все 1С разработчики на одно лицо, возникают ситуации, когда, например, вы разработали что-то крутое для конкретной отрасли и продаете по цене в соответствии с затратами, которые вы понесли (а рынок для конкретной отрасли узкий по определению). А вам клиент при продаже говорит: «так мне ваши конкуренты за 20к рублей 1С предлагают, вы меня обмануть хотите?». И реально покупает какое-нибудь УТ, а потом мучается с ним, потому как признавать свои ошибки люди не очень любят (а за внедрение и доработки уже заплачено).
  • Как мы видели выше, при разработке / доработке решений на 1С способов выстрелить себе в ногу огромное количество (указать условие не в параметрах виртуальной таблицы, а в блоке ГДЕ, использовать подзапрос в динамическом списке и т.п.). И клиенту, купившему решение на 1С, при доработке которого какой-нибудь не самый грамотный разработчик изрядно накосячил, потом очень тяжело объяснить, что это не «1С тормозит», а тормозит конкретное решение на 1С.

Понятно, что уровень IT-грамотности в бизнесе постепенно растет. Люди учатся отличать платформы от решений и уделять больше внимания компаниям, у которых они покупают решение, а не самим решениям. Но 1С своей политикой сам очень сильно препятствует этому процессу, и разработчикам на 1С это должно быть как минимум обидно. Хотя, возможно, у людей, привыкших к платной документации, пониженный болевой порог.

Заключение


Итак, подводя итог, посчитаем, от чего 1С отказались:

  • ORM
  • SQL:
    • Расширенных возможностей
    • Оптимизатора
    • Блокировок
  • Единого control flow
  • Единой логики работы с данными на форме
  • Синхронности
  • WYSIWYG

Полагаю, такими темпами они в следующих версиях откажутся от условных переходов и перейдут на goto. И назовут их управляемыми переходами. Кстати, с этой «управляемостью» у них весьма оригинальная манипуляция получилась. По хорошему управляемые приложение, формы и блокировки должны были бы называться ручными, но тогда это звучало бы как недостаток. А так они назвали их управляемыми и вуаля — теперь это возможность. Почему, например, производители машин с ручной коробкой передач до такого трюка до сих пор не додумались — непонятно.

Конечно, некоторые скажут, что отказ от всех вышеперечисленных вещей — это неизбежное зло, необходимое для обеспечения масштабируемости. И если бы я не знал, что это неправда, то не писал бы эту статью. Но, например, в том же lsFusion всех описанных разделений, ограничений и других проблем нет, а при этом он спокойно работает с терабайтными базами, тысячами одновременных пользователей и очень непростым функционалом. Плюс все это дело крутится на весьма бюджетных серверах и с использованием бесплатных СУБД и ОС.

Но ладно, что разработчики 1С отказываются от возможностей, свойственных высокоуровневым платформам, так они при этом и возможности языков общего назначения (такие, как явная типизация, наследование и лямбды) не добавляют. То есть берут самое худшее от обоих подходов, оставляя за бортом самое лучшее. Гениально, я считаю. И как со всем этим они собираются выходить на англоязычный рынок, где у них не будет их двух главных преимуществ: армии разработчиков и поддержки местного законодательства в типовых решениях, для меня загадка. Благо на рынке IT деньги решают далеко не все, иначе в мире (в том числе и в России) ничего кроме Oracle, SAP и Microsoft не существовало бы.

Понятно, что самому 1С на качество платформы в общем-то наплевать. У них такие бюджеты на разработку типовых решений, что они могут их хоть на ассемблере писать. Конечно, дорабатывать такие решения — занятие не самое простое и приятное, но, как говорится, «проблемы индейцев шерифа не волнуют». А вот зачем 1С в качестве платформы разработки выбирают разработчики отраслевых решений, а также ИТ-директора для создания решений внутренней автоматизации (так называемые «самописки») — это, конечно, загадка. Черт с ним с lsFusion, он только пару месяцев назад на рынок вышел, но любая из связок .Net+MSSQL или Python+PostgreSQL будет уж точно не хуже. При этом не надо будет мучаться с ключами защиты, и платить лицензии за платформу, которая местами не то что не помогает, а наоборот мешает. Все ради одной реально полезной абстракции — регистры (которая легко реализуется как средствами СУБД, так и средствами того же .Net) и сомнительной пользы визуального программирования? Причем с конечными клиентами все более-менее понятно: на постсоветском пространстве для многих из них покупка программы — это приблизительно тоже самое, что и покупка мебели в офис. Но решение о создании отраслевых решений и самописок принимают люди с большим опытом в IT. Они-то чем думают? Впрочем, как говорил Эйнштейн, есть две бесконечные вещи, и ими, видимо, все и объясняется.

В конце статьи хотелось бы обратиться к разработчикам Axapta и SAP. Дело в том, что мы сейчас готовим материалы для выхода на англоязычный рынок (где про 1С никто и не знает), поэтому нам желательно знать, как со всеми вышеперечисленными проблемами дела обстоят у местных, не скажу что лидеров, но, скажем так, самых известных продуктов на рынке. Соответственно, если кому не лень, просьба поделиться этой информацией в комментариях. Мы, конечно, изучим все эти продукты, насколько это возможно, самостоятельно, но хотелось бы узнать необходимую нам информацию, так сказать, из первых рук (а найти специалистов по Axapta и SAP на постсоветском пространстве гораздо тяжелее, чем по 1С).

Комментарии (1210)


  1. gennayo
    01.10.2019 11:36

    Хороший вброс, годный.


    1. NitroJunkie
      01.10.2019 11:46
      +2

      Не моя тема, но все равно встряну. Знаете, что самое забавное. Я на хабре долгое время был с неполноценным аккаунтом (то есть read only). Но в принципе меня это не смущало, я оставлял комменты — разные критические и наоборот. И их всегда одобряли. Всегда кроме одного случая. Когда я в статье самого 1С спросил, а зачем они разделяли сервер и клиент (ну с пояснениями в стиле этой статьи). Его просто завернули. Видимо их такие мелкие проблемы не волнуют, ну или не барское это дело отвечать на такие вопросы.


      1. trdm
        02.10.2019 08:52
        -1

        У платформы 1С действительно есть недостатки, но есть и преимущества, которые перевешивают недостатки.
        ИМХО 1С-ный ОРМ покрывает около 95-97% типичных учетных задач, автоматизацией которых занимаются "автоматизаторы"! финансового и управленческого учета.


        С 1С ковыряюсь с 2002 года и мне очень редко было необходимо работать в обход 1С-ного ОРМ, непосредственно с SQL-сервером. Создать 3-4 вьюва исключительно для ускорения работы или заполнить прямыми запросами новый регистр.
        А достаточно мощный механизм внешних компонент и работа с OLE/COM объектами из встроенного языка способны покрыть все остальные нетипичные задачи.
        Ну а огромнейший каталог готовых решений — очень экономит время. Ну, вы и сами знаете. :)
        ПС. полезно смотреть на продукт глазами стороннего от 1С человека, можно понять, что ты пропустил.
        ПС2. Время — один из ценнейших ресурсов разработчика сейчас. И с его экономией 1С справляется на твердую четверку с плюсом.


      1. trdm
        02.10.2019 09:37

        Кстати, с тех пор как 1С отвергла идею внедрить в 1С конфигуратор наработки Орефкова по снегопату/openconf-у(1), я к 1С-у отношусь как к типичным барыгам, не более того.


        (1) Это что-то наподобие визуал-асиста для MS VS студии.


        1. vicros
          03.10.2019 01:19

          Да понимаю тебя, сам не могу понять как сообщество терпит, видно вместо того чтобы сказать об этом — сообщесто прогресивных решило так — «а давайте мы сделаем работу 1с и назовём это опен соуросом», смешно получается.


        1. vicros
          03.10.2019 01:29

          но снегопаду отдельный респект — никогда не сдаваться.


    1. LoveRussiaAnd1C
      01.10.2019 12:06
      -1

      Ох да, автор прекрасен. Забайтил на регу на хурбербере.
      Такой некомпетентности в подобных вбросах я ещё не всетрчал.
      Например про «Неэффективное получение данных объектов» или про «Отсутствие ограничений и событий для значений регистров» — это прекрасно, автор.
      А ещё это: «В параметрах виртуальных таблиц можно использовать только константы».
      Господи, я понимаю почему 1С заминает подобные темы, потому что за такое количество времени людей просто достало отвечать вот на подобные «гав».
      Ну это правда смешно)
      И если бы в других статьях хотелось бы ещё поспорить или указать на неточность в понимании ПРОБЛЕМЫ автором, то тут просто эпик. Это реферат, видимо) Просто уникальное НЕПОНИМАНИЕ матчасти вами же так глубоко ненавистной 1С)
      Поднял настроение с утра, спасибо, знающий человек))


      1. Veidt Автор
        01.10.2019 12:07
        +1

        Очень конструктивный комментарий. Спасибо.

        Если вы уж говорите о некомпетентности, так напишите что конкретно не так. А так на истерику больше похоже.


        1. LoveRussiaAnd1C
          01.10.2019 12:13

          Знаете, автор, ваше творение просто не выдерживает критики. Я понимаю, что на вашем сайте ваше решение содержит одни + в зеленых квадратиках, на фоне других платформ, но просто из интереса, пообщались бы с 1С разработчиком, прежде чем вбрасывать ЭТО и сидеть тут и жать Ф5, в поисках одобрения людей, которые видя что либо плохое в сторону 1С сразу ляпнут лукас)


          1. Veidt Автор
            01.10.2019 12:17

            Вы наверное на мисте 6 частей (по 1000 сообщений) обсуждений пропустили. Конечно на мисте называть что-то обсуждениями — очень сильно ей льстить. Хотя определенный шарм в таких срачах все же есть (как с семечками или черешней, тяжело остановиться когда уже начал). Собственно много пунктов из обсуждений на мисте и пришло.


          1. vicros
            01.10.2019 16:06

            Странное ощущение — что именно то не выдерживает критики? Я опытный разработчик 1С и могу подтвердить что всё что тут перечисленно большая боль для меня — и самое больное что 1С совсем не собирается что то сделать полезное, всё что она может это изолироваться и поддерживать клуб любителей такой изоляции.


        1. Anynickname
          01.10.2019 15:56

          Формулировки автора выше резковаты, но рациональное зерно содержат: добрая половина ваших «претензий к 1С» подразумевает ответ «учи матчасть!».


          1. vicros
            01.10.2019 16:00

            Приведите пример где конкретно нужно «учить матчасть».


            1. Anynickname
              01.10.2019 16:51

              Да вот самое начало:

              Никаких one-to-many, many-to-many отображений нет, их функцию выполняют так называемые табличные части — коллекции внутренних объектов, фактически агрегированных в основной объект.
              Давайте на уровне таблиц: что по-вашему является тру one-to-many, и сравним с тем представлением данных на уровне СУБД, что есть в 1С? Обсудим плюсы и минусы вашего подхода.

              Так как несвоевременное или избыточное чтение данных с сервера БД и передача их на сервер приложений может приводить к существенному падению производительности, обычно ORM-фреймворки предоставляют разработчику целый набор инструментов по управлению получаемыми ими данными. Но не 1С. В 1С объект читается всегда целиком, в том числе с табличными частями, но не более того (без каких либо связанных данных).

              Непонятно что хочет сказать автор, что любой запрос читает объект целиком? Так это не так: все динамические списки и запросы отчетов читаются ровно по тому списку полей, который задаст разработчик (выбранные программистом для отображения, плюс выбранные программистом же неотображаемые). Если же говорить про форму объекта, то да, тут объект (строка таблицы) читается целиком, но на то это и форма объекта, чтобы читать объект целиком (назовите хоть один кейс, когда это не нужно и приводит к существенному оверхеду — тогда это будет предметный разговор).

              Такая убогость механизма ORM в 1С на самом деле обусловлена тем, что в 1С в какой-то момент попросту решили отказаться от ORM и сделать ставку на голый SQL (то есть регистры и запросы).
              Не защищаю 1С, но в чем конкретно заключается убогость? Что значит отказаться от ORM? Её в 1С нет? Она реализована частично? 1С разучилась работать с не-MSSQL? Какой такой голый SQL и где его можно в 1С пощупать? О чем речь вообще?

              Правда, немного забегая вперед, с учетом отсутствия расширенных возможностей SQL и DML в 1С периодически все-таки возвращаются к ORM, но это скорее вынужденная необходимость. А в целом типичный код типовых решений на 1С выглядит приблизительно так:
              А вот это как О_о «периодически возвращается к ORM»? Тут уже автор смешал в кучу платформу и транслируемый код прикладного решения, который может быть хоть трижды рукожопым, к механизмам платформы отношения не имеет, т.к. пишется конкретным программистом.

              Это только опусы первого абзаца, дальше мотивации к чтению у себя пока не нашел)


              1. Veidt Автор
                01.10.2019 17:38

                One to many это когда вы можете любую таблицу по полю замаппить в коллекцию любого объекта по полю. В 1с это можно сделать в очень частных случаях.

                Про чтение, если вы обратитесь к объекту по ссылке (как это принято в orm) он считается целиком (с табличными частями). Я ссылку в статье давал.

                Убогость заключается в том что нет инструментов борьбы с проблемой N+1.

                Голый sql это все эти ВЫБРАТЬ ИЗ СОЕДИНЕНИЕ, которые по сути тот же самый SQL но на русском.

                Возвращается к ORM — то есть считывают объекты и обращаются к ним по ссылкам, в циклах и т.п.

                ЗЫ: с телефона не очень удобно отвечать, чуть позже отвечу подробнее.


                1. Ta_Da
                  01.10.2019 17:49

                  One to many это когда вы можете любую таблицу по полю замаппить в коллекцию любого объекта по полю. В 1с это можно сделать в очень частных случаях.

                  Критерии отбора не подойдут?


                  1. Veidt Автор
                    01.10.2019 21:35

                    Какое отношение они к ORM имеют?


                1. Anynickname
                  01.10.2019 18:22

                  One to many это когда вы можете любую таблицу по полю замаппить в коллекцию любого объекта по полю. В 1с это можно сделать в очень частных случаях.
                  А можно прикладной неабстрактный пример такой потребности в терминах бизнес-логики, для понимания? Чтобы не обсуждать сферического коня в вакууме.

                  Про чтение, если вы обратитесь к объекту по ссылке (как это принято в orm) он считается целиком (с табличными частями). Я ссылку в статье давал.
                  Если я, опять же, пишу запрос по документам/регистрам/whatever, и джойню что-то к основной таблице по ссылке, никакие лишние реквизиты не считаются. Или тогда уж определите, что в данном случае считаем «обращением по ссылке». Синтаксическая конструкция «Ссылка.*»? Так по приведенной вами же статье написано, как это можно при желании обойти (запросом). Другое дело, что нужно и имеет смысл это довольно не часто, т.ч. если у нас есть монструозный документ с огромными ТЧ, ну делаем тогда запросом. В подавляющем же большинстве обычных кейсов, это избыточно.

                  Убогость заключается в том что нет инструментов борьбы с проблемой N+1.
                  Приведу вашу же цитату:
                  если в цикле надо обращаться к другим объектам по ссылке, мы получаем классическую проблему N+1 (один запрос для получения N объектов и по одному запросу для каждой ссылки).
                  Что мешает дёрнуть все нужные реквизиты в первом же запросе, не формируя по одному запросу для каждой ссылки? Обойдемся ровно одним запросом.

                  Голый sql это все эти ВЫБРАТЬ ИЗ СОЕДИНЕНИЕ, которые по сути тот же самый SQL но на русском.
                  Это вкусовщина. А вот приведите хороший, годный ORM с более простым синтаксисом, чем этот? Работал я на SQLAlchemy — вот где ад и израиль, для не очень примитивных запросов приходилось перерывать их документацию чуть менее, чем полностью (и иногда в итоге скатываясь к конструкциям, которые поддерживаются только конкретным движком). А тут пиши себе на SQL-like языке, который платформа сама транслирует в нужный диалект. По мне так это удобно и колоссально снижает порог вхождения. Но если у вас есть примеры более удобных подходов — с удовольствием ознакомлюсь.


                  1. Veidt Автор
                    01.10.2019 21:41

                    А можно прикладной неабстрактный пример такой потребности в терминах бизнес-логики, для понимания? Чтобы не обсуждать сферического коня в вакууме.


                    Вообще, если вы заметили это не в проблемах было, а именно в описании как это в 1С сделано. Я сам, если честно против классического ORM, но раз в 1С его решили поддерживать, то делали бы это нормально. А так ни рыба, ни мясо получилось.
                    Что мешает дёрнуть все нужные реквизиты в первом же запросе, не формируя по одному запросу для каждой ссылки? Обойдемся ровно одним запросом.

                    Потому как это уже не ORM по сути.
                    Это вкусовщина. А вот приведите хороший, годный ORM с более простым синтаксисом, чем этот? Работал я на SQLAlchemy — вот где ад и израиль, для не очень примитивных запросов приходилось перерывать их документацию чуть менее, чем полностью (и иногда в итоге скатываясь к конструкциям, которые поддерживаются только конкретным движком). А тут пиши себе на SQL-like языке, который платформа сама транслирует в нужный диалект. По мне так это удобно и колоссально снижает порог вхождения. Но если у вас есть примеры более удобных подходов — с удовольствием ознакомлюсь.

                    Не понимаю, чем свой диалект снижает порог вхождения. Скорее наоборот.

                    Про более удобные подходы позабавило. Тут нас одна половина обвиняет в ангажированности, а вторые искренне удивляются, что мы предлагаем взамен. Более удобный подход — оставить объекты и сделать более декларативный и высокоуровневый язык чем SQL без инкапсуляции (не на таблицах а на функциях). И с кучей других возможностей.


                    1. Ta_Da
                      01.10.2019 22:20

                      Я сам, если честно против классического ORM, но раз в 1С его решили поддерживать, то делали бы это нормально. А так ни рыба, ни мясо получилось

                      Ну… 1С вообще-то и не говорят что у них ORM (https://habr.com/ru/company/1c/blog/334050/)


                      1. Veidt Автор
                        01.10.2019 22:58

                        Да это эпичная статья, наглядно показывающая, какая каша в голове у них творится, и собственно почему у них такое количество текущих и избыточных абстракций.

                        Хотя на самом деле, у них просто обе парадигмы поддерживаются и обе убого. О чем собственно и написано в обсуждаемой статье.


                        1. Ta_Da
                          01.10.2019 23:01

                          Ну, это ваше мнение, спорить с ним смысла не вижу.
                          Удобство, убогость и т.п. это все-таки вкусовщина.

                          Желаю вам найти заинтересованных в вашей платформе клиентов и разработчиков.


                    1. Anynickname
                      01.10.2019 23:04
                      +1

                      Не понимаю, чем свой диалект снижает порог вхождения. Скорее наоборот.
                      Я исхожу из предпосылки, что язык SQL программисту уже известен. И тогда (пример на SQLAlchemy)
                      session.query(func.date(func.from_unixtime(t1.time_since_epoch)).label('date'),    t1.userId,    t1.http_url.label('host'),    func.sum(t1.http_reply_size).label('traffic')).filter(t1.http_status_code.like('2%')).group_by(func.date(func.from_unixtime(t1.time_since_epoch)),    t1.userId,    t1.http_url).having(func.sum(t1.http_reply_size) > 0)

                      воспринимается намного менее прозрачно, чем
                      ВЫБРАТЬ ПЕРВЫЕ 100 РАЗРЕШЕННЫЕ
                          Продажи.Клиент,
                          Продажи.Менеджер
                      ИЗ
                          РегистрНакопления.Продажи КАК Продажи
                          СОЕДИНЕНИЕ Документ.Продажа КАК Продажа
                              ПО Продажи.Регистратор = Продажа.Ссылка
                      ГДЕ
                          Продажи.Период >= &НачалоПериода
                          И Продажи.Период <= &КонецПериода
                      УПОРЯДОЧИТЬ ПО
                          Продажи.Период

                      Ну или то же самое напишите в английском синтаксисе, кому-то будет ещё проще.

                      Про более удобные подходы позабавило. Тут нас одна половина обвиняет в ангажированности, а вторые искренне удивляются, что мы предлагаем взамен. Более удобный подход — оставить объекты и сделать более декларативный и высокоуровневый язык чем SQL без инкапсуляции (не на таблицах а на функциях). И с кучей других возможностей.

                      А можно на уровне идеи как это должно работать? (или rbymnt ссылкой). Вот честно интересно. Сабжевый ORM'ный «более высокоуровневый язык на функциях» всё равно движку придется в конечном итоге превращать в конечные запросы MSSQL, Postgre и Ко, иначе как без этого дёрнуть данные из базы. Как процедурный язык с произвольным кодом превратить в эффективный SQL-запрос? (а не в соответствующую неэффективную лапшу на каком-нибудь T-SQL под капотом с курсорами и подзапросами в циклах).
                      У 1Сников то всё просто: отрезали все расширения разных диалектах, и почти один-в-один транслируют свой суррогатный язык запросов в запросы движков, местами добавляя постобработки в виде СКД. Далеко не супер гибко, зато достаточно эффективно (в рамках ограничений, налагаемых «кроссдвижковостью» конечно).


                      1. Veidt Автор
                        01.10.2019 23:33

                        воспринимается намного менее прозрачно, чем

                        Ну вы тут немного лукавите, взяли разные по сложности запросы, переводы строк добавили, ну и т.п. Вы с HQL hibernate'ским лучше сравните.
                        А можно на уровне идеи как это должно работать? (или rbymnt ссылкой). Вот честно интересно. Сабжевый ORM'ный «более высокоуровневый язык на функциях» всё равно движку придется в конечном итоге превращать в конечные запросы MSSQL, Postgre и Ко, иначе как без этого дёрнуть данные из базы. Как процедурный язык с произвольным кодом превратить в эффективный SQL-запрос? (а не в соответствующую неэффективную лапшу на каком-нибудь T-SQL под капотом с курсорами и подзапросами в циклах).

                        Ну вот так например. Но вообще можете в блоге посмотреть статьи. Что касается эффективности запросов, то можете статью «Почему не SQL?» почитать, чтобы понимать какого класса оптимизации делаются в том же lsFusion.
                        У 1Сников то всё просто: отрезали все расширения разных диалектах, и почти один-в-один транслируют свой суррогатный язык запросов в запросы движков, местами добавляя постобработки в виде СКД. Далеко не супер гибко, зато достаточно эффективно (в рамках ограничений, налагаемых «кроссдвижковостью» конечно).

                        Ну в 1С как раз все по старинке императивно. Такой ПХП с парой высокоуровневых абстракций и визуальным программированием.


                1. puyol_dev2
                  01.10.2019 22:26

                  Про чтение, если вы обратитесь к объекту по ссылке (как это принято в orm) он считается целиком (с табличными частями). Я ссылку в статье давал.

                  Предвзято лукавите. А как на счёт этого
                  Однако запрос будет выполнять считывание из базы данных при каждом вызове. Соответственно, при многократном обращении к одним и тем же данным будет выполняться многократное считывание. Этого можно избежать, обращаясь к свойствам ссылки. В этом случае используется кэширование объектов и в определенном интервале времени при повторном обращении к данным объекта не будет выполняться повторное считывание

                  its.1c.ru/db/metod8dev/content/2717/hdoc


                  1. Veidt Автор
                    01.10.2019 22:39

                    И как кэширование меняет факт того, что он считается целиком с табличными частями? И главное вы же понимаете, что кэширование помогает только при повторном обращении в одном вызове к одним и тем же данным (что далеко не главная проблема).


                    1. puyol_dev2
                      02.10.2019 18:23

                      Если большинство данных нужно будет использовать несколько раз за вызов, то логично получить все объект через ссылку и чтобы он закэшировался. Если нужно всего несколько реквизитов объектов (объекта), то можно воспользоваться запросом. Но обычно через ссылку данные получают только для изменения, для чтения пользуются запросом


                      1. Neikist
                        02.10.2019 18:28

                        Вы же понимаете насколько более неудобным и многословным код делает использование такого подхода с чтением через запросы? Да, в 1с по другому никак, но это не значит что это хорошо и удобно.


                        1. Anynickname
                          03.10.2019 10:24

                          А теперь давайте рассмотрим ваш вариант. Обращаемся к одному реквизиту объекта, платформа неявно считывает только этот реквизит, всё чётко. Потом обращаемся к другому, снова идет обращение к базе, считывая другой реквизит. Потом может идти третий, четверный и т.д. (в 1С крайне редко идет работа с одним-единственным реквизитом). По итогу можем получить уйму подкапотных запросов, которые по оверхеду далеко опередят чтение объекта целиком за раз.


                          1. Neikist
                            03.10.2019 10:35

                            Я ниже с ходу предложил костыльное решение https://habr.com/ru/company/lsfusion/blog/468415/#comment_20703549
                            А если хорошенько подумать можно и гораздо менее костыльное придумать используя анализ кода для оптимизаций. Просто то что я предложил — не должно быть сложно реализуемым в платформе, другие решения, более удобные и красивые, могут оказаться гораздо сложнее а то и нереализуемыми если оставить язык 1с.


                          1. Veidt Автор
                            03.10.2019 10:42

                            Нет, не так. lsFusion все сама соберет в один запрос и одним запросом все считает. Но даже если не получится, кэширование в виде всяких shared buffers уже есть в самой СУБД. То есть по факту, если вы два раза считаете одни и те же данные ничего страшного. Если конечно вам при этом все равно надо считывать другие данные, и количество запросов будет минимальным.

                            И вообще, работа с данными на сервере приложений, это в принципе зло и убийство производительности (он для этого не предназначен).


          1. CrushBy
            01.10.2019 16:01

            И, естественно, настоящие 1С-программисты не будут снисходить до уровня простого Java/SQL-разработчика, чтобы пояснить, какую именно матчасть учить, и в чем он ошибается. Ах да — у 1С же документация платная, и бесплатно никто ничего пояснять не будет. Это же не в стиле 1С экосистемы.


            1. philya
              01.10.2019 20:55

              Вас обманули. "1С: Предприятие 8.3. Версия для обучения программированию" можно получить бесплатно по первой ссылке в гугле указав е-mail и какие-то регистрационные данные. В комплекте кроме документации еще и книжки какие-то были. Ну и бухгалтерия типовая вроде бы в качестве решения.


              1. Neikist
                01.10.2019 20:57

                Это не та документация, увы. Тоже в свое время будучи 1сником разочаровался что с доступом к документации беда без ИТС.


                1. Anynickname
                  01.10.2019 21:10

                  Если говорить об ИТС, то сравнивать платность документации 1С и какого-нибудь С# или Golang не вполне корректно. Можно ведь сравнивать её и с платностью документации какого-нибудь SAP и MS Dynamics. В большинстве случаев у подобных решений документация есть на уровне желтых книжек 1С про синтаксис и основы администрирования, доков уровня портала ИТС просто не существует. А ценник подписки ИТС, если и довольно дорог для личного самообучения, для организации со штатом хотя бы в одного программиста это просто даром (с учетом того, что ИТС это не только доки, а еще и все обновления, консультации и проч.).


                  1. CrushBy
                    01.10.2019 21:22

                    Эээ. У MS Dynamics как раз вроде как бесплатная документация. Я там много чего находил.

                    Microsoft в последнее время вообще радует своей открытостью во всем.


                    1. Alexeyslav
                      02.10.2019 10:20

                      Потому что это практически единственный их шанс выжить. Иначе никому не нужна будет их документация и проще будет забыть про майкрософт, чем покупать документацию. Были бы они на коне как раньше, была бы такая же платная документация и прочее. А сейчас для них это вопрос жизни, потому и открыты.


                      1. CrushBy
                        02.10.2019 12:40

                        Майкрософт еще не скоро умрет — это не вопрос жизни и смерти для них. И речь идет не только об открытости документации, а также об их недавнем повороте в сторону линукса и сообщества в целом.


                        1. Alexeyslav
                          02.10.2019 16:31

                          Если бы не повернулись, это было бы началом ихнего конца.


                  1. Elanor
                    02.10.2019 13:58

                    Замечу: Желтые книжки про синтаксис — по сути «распечатанный» синтакс-помощник, который поставляется вместе с платформой.
                    Для «личного самообучения» есть Версия для обучения программированию, которую можно вообще скачать бесплатно.


                    1. Anynickname
                      02.10.2019 14:04

                      По синтаксису там только часть книг. Есть еще руководства администратора, руководство по серверу, руководства по прикладным решениям и еще куча какой-то макулатуры.


                1. philya
                  01.10.2019 23:23

                  В смысле не та? Там руководство разработчика, руководство администратора, книжка про начало программирования в 1с. Что вы еще желаете там увидеть? У ИТС-техно объем документации в точности такой. Но за деньги. )


                  1. Neikist
                    01.10.2019 23:26

                    Ну человека в начале этой ветки послали матчасть учить, т.е. правильные 1сные практики (вроде тех что на спеце по платформе проверяются), работу с БСП и какими то стандартными решениями и прочее. Ну и кстати, если заказывать коробку — это не бесплатно (там все эти руководства и Радченко). Если заказывать в электронном виде — там этого нет (не было когда я это делал по крайней мере).


              1. CrushBy
                01.10.2019 21:20

                А почему у меня вот по этой ссылке дает только демо-доступ на 7 дней?

                Назовите мне еще хоть одну вменяемую технологию, где документация за деньги (причем еще и по подписке)?


                1. philya
                  01.10.2019 23:29

                  Вы все-таки скачайте версию для обучения. Вам дадут пожизненный доступ на сайт ИТС для обновления и к документации для разработчиков.


                  За деньги и по подписке обновления конфигураций на том же сайте. Выше же указано, что 1с собрав со всех денег за обновление бухгалтерии может писать хоть на ассемблере ))


                  1. Neikist
                    01.10.2019 23:30

                    Разве уже дают? У меня этого доступа нет, хотя версию для обучения даже коробку покупал, только к обновлениям платформы и совсем базовой документации. Может что покупал 5 лет назад а не сейчас…


                  1. Veidt Автор
                    01.10.2019 23:34

                    Вы все-таки скачайте версию для обучения. Вам дадут пожизненный доступ на сайт ИТС для обновления и к документации для разработчиков.

                    Я скачал. Мне не дали. Что я сделал не так?


                    1. philya
                      02.10.2019 00:50

                      Я не знаю. Мне когда-то дали. Документацию-то в поставку положили?


                1. JYE
                  02.10.2019 05:26

                  Потому что в ИТС документация это очень малая часть того что там есть, основное назначение итс — обзор изменения законодательства и как это поддерживается в 1с, т.е. по сути некий аналог консультант+


                  1. vasilyevii
                    02.10.2019 09:08

                    Там и технологический раздел есть


            1. Dementor
              01.10.2019 21:13

              Ах да — у 1С же документация платная, и бесплатно никто ничего пояснять не будет. Это же не в стиле 1С экосистемы.

              You're welcome:
              https://toster.ru/tag/1с/questions — 1310 вопросов, 59% решено
              https://toster.ru/tag/1с-предприятие/questions — 503 вопроса, 57% решено.
              Но это для тех, кто случайно сталкивается с 1С. Более глубокие вопросы бесплатно прорабатываются на инфостарте.


              1. DAleby
                01.10.2019 22:18
                +2

                В том, что у 1C есть большое коммьюнити и Q&A ресурсы, никто не сомневается. (1310 вопросов — это, правда, как-то мелковато для того количества программистов и того времени, которое существует платформа). На ru.stackoverflow, например, есть еще 3-4 сотни вопросов. Вот только это ни разу не документация. По Q&A вряд ли получится что-то с нуля изучить.


                1. Dementor
                  02.10.2019 09:48

                  DAleby претензия же была к тому, что никто не помогает? Помогают!

                  Согласен, что глупо изучать работу с платформой 1С по форумам и чатам. Для этого есть документация! Можно бесплатно и официально скачать учебную платформу, общую документацию, популярные конфигурации и книги Радченка с Хрусталевой — online.1c.ru/catalog/free/18610119


    1. zag2art
      01.10.2019 20:18

      Интересно, а Бухгалтерия и УПП есть на lsFusion? я бы сравнил


    1. georgeyilchenko
      02.10.2019 18:16

      Знания автора об 1с поверхностные. И устарели.


      1. Veidt Автор
        02.10.2019 18:17

        Я когда-нибудь устану такие комменты одобрять. Но потом же будут говорить цензура.

        Слушаю и ваши комментарии. Что, где, по какому пункту не так?


  1. gennayo
    01.10.2019 11:52
    -1

    А так, у меня два вопроса к авторам, просьба ответить честно:
    1. Для кого написана эта статья?
    2. Для чего написана эта статья?


    1. Veidt Автор
      01.10.2019 11:56
      +1

      Для того же для чего пишут все статьи на хабре. Рассказать про проблемы технологий (в данном случае конкретной технологии) и способы их решения. Как для 1С разработчиков, так и для других разработчиков бизнес-приложений и вообще бэкендов (чтобы они знали «как там у них», да и проблемы у них во многом могут быть схожие).


      1. gennayo
        01.10.2019 12:05
        -1

        И, совершенно случайно, в корпоративном блоге компании, не имеющей никакого отношения к критикуемой технологии? Спасибо за честный ответ.


        1. LeshaLS
          01.10.2019 12:09

          А Вы видели как Ауди с БМВ троллили друг друга в рекламе? Было достаточно забавно и никакого особо негатива. Сторонним наблюдателям было интересно.


          1. gennayo
            01.10.2019 12:36

            Ну как бы весовые категории в данном случае несколько, скажем так, различные. Я как раз и пытался узнать, для кого они эту рекламу написали, но не судьба, видимо.


            1. LeshaLS
              01.10.2019 12:39
              +1

              Например, когда у кого-то, кто конкурирует с 1С, будут спрашивать, а чем плох 1С, то ему смогут давать ссылку на эту статью.


              1. gennayo
                01.10.2019 12:45

                Если только конкурируют платформы для разработки, а не готовые решения. Я, правда, слабо представляю подобную конкуренцию между 1С и lsfusion, ниши практически не пересекающиеся.


                1. LeshaLS
                  01.10.2019 12:48

                  Тут речь не только про lsFusion идет. Если у меня написано на .Net, а у кого-то на 1С, то можно говорить, что там хуже, так как строится на слабой платформе (по крайней мере, с точки зрения маркетинга). Все же понимают, что дом построенный на плохом фундаменте будет хуже, чем тот, который построен на хорошем.


                  1. gennayo
                    01.10.2019 12:55

                    Сравнивать будут решения по функциональности и качеству решения проблем бизнеса, в первую очередь, стоимости доработки и сопровождения во вторую.
                    Если же брать разработку с нуля — lsfusion надо тогда сравнивать с .Net, CUBA, odoo. 1С больше про готовые решения, а не про платформу.


                    1. Veidt Автор
                      01.10.2019 13:55

                      Вы не поверите, на 1С много отраслевых и самописок с нуля пишут. О чем собственно и сказано в статье.


                      1. gennayo
                        01.10.2019 14:13

                        Так отраслёвки пишут обычно франчи 1С, часто как нашлёпки на типовые от 1С, на чём же ещё их писать франчам? С нуля от независимых разработчиков знаю только про WMS системы, и отдельные редкие случаи, вроде Деловых линий.


                        1. Veidt Автор
                          01.10.2019 14:26

                          А я очень много знаю. Более того в Беларуси основной игрок на рынке бухгалтерии (!) свою конфигурацию с нуля писал. Ну или на рынке FMCG розницы (где Астор например тоже с нуля свою конфу делает).

                          И вообще у чуть более крупных клиентов самописок на 1С более чем достаточно.


                          1. gennayo
                            01.10.2019 14:40

                            Не знаю как у вас там, в Беларуси, а в России самописки на 1С у крупняка обычно получаются в результате многолетней доработки изначально типовой 1С, которая происходила параллельно с ростом бизнеса. Чтобы так осмысленно взять, и в крупной компании абсолютно с нуля писать своё на 1С — это очень большая редкость. Астор, опять же, тоже скорее всего из франчей/отдела 1С-ников вышел, так что ниразу не показатель.


                            1. Veidt Автор
                              01.10.2019 14:58

                              Вы видимо в обсуждении на мисте не учавствовали. Вы же понимаете, что к примеру УТ или ERP для FMCG розницы (да и не FMCG) не подходит никак (там половины нужных модулей нет). И допилить УТ до нужного состояния это все равно что из танка самолет сделать. Особенно с учетом убогости возможностей рефакторинга в платформе. И Астор с нуля писал, не понимаю почему не показатель.


                              1. gennayo
                                01.10.2019 15:06

                                Писал Астор с нуля на 1С потому, что уже имел штат специалистов по 1С, а не потому, что осознанно выбрал эту платформу. То, что типовые от 1С — далеко не идеал, спорить не буду, это мне вполне очевидно.


                                1. o4karek
                                  01.10.2019 15:18

                                  Астор — образовывался как 1с-ный франч :)


                                  1. gennayo
                                    01.10.2019 15:29

                                    Ну, что и требовалось доказать :)


                                1. Vplusplus
                                  02.10.2019 19:06

                                  Помню ту конфу для розничной торговли (Модный магазин), их первая попытка перейти на 8-ю платформу. Долго они пытались нам её внедрить, всё время хотели, чтобы мы переделали свои бизнес-процессы под их алгоритмы. В результате год потерянного времени и куча денег в никуда. Потом перешли на самописку на основе типовой Розницы.


                                1. strange2007
                                  04.10.2019 07:39

                                  >> То, что типовые от 1С — далеко не идеал
                                  А мне нравятся больше, чем крутые поделки на других языках, в т.ч. и на 1С. Просто если множество факторов собрать в кучу, то типовые, увы, выигрывают.


                                  1. gennayo
                                    04.10.2019 07:47

                                    Нравится <> Идеал. То, что могло быть намного хуже — согласен. Но могло быть и намного лучше :)


                              1. nirom
                                02.10.2019 11:33

                                … это все равно что из танка самолет сделать

                                Ох, как всё это знакомо.


                    1. Neikist
                      01.10.2019 13:56

                      Но в конце автор и задается вопросом почему платформу 1с выбирают для разработки новых решений, вместо выбора более удобных вещей. У меня честно говоря только одно предположение — бренд и сеть франчайзи которая допилит в любой деревне за копейки новую колонку в отчет.


                      1. gennayo
                        01.10.2019 14:14

                        Так кто выбирает то, приведите примеры?


                        1. Neikist
                          01.10.2019 14:18

                          Например компания в которой я работал пишут «Итилиум», «1С: ТОИР», «1С:RCM». Но то ладно, то уже черт знает сколько лет франч (хотя для мобильных приложений их никто не заставлял 1с выбирать, наверно, отношения с вендором не очень хорошо знаю).
                          А так, сколько на инфостарте статей про новые «нетленки»? Иногда даже от частных лиц. Внутренние проекты иногда начинают на 1с, хотя даже не планируют во вне выпускать, но тут наверно по наличию ресурсов выбирают, какие программисты есть под рукой, те и пишут.


                      1. Veidt Автор
                        01.10.2019 14:29

                        Ну вы же понимаете, что код как в статье допиливать — это мягко говоря не каждому под силу. Тем более в деревне. Мне стремно в него лезть, боясь что где-то что-то упадет, а уж франчу…

                        Собственно на том же рынке FMCG розницы в Астор даже компании со своим штатом 1С программистов боятся лезть (не то что франчи).


                        1. skrimafonolog
                          04.10.2019 08:50

                          Ну вы же понимаете, что код как в статье допиливать — это мягко говоря не каждому под силу. Тем более в деревне. Мне стремно в него лезть, боясь что где-то что-то упадет, а уж франчу…

                          Именно по этому качеству ваша система сливает 1С вчистую.
                          Уж что-что, а программисты по 1С как раз сыщатся влегкую.
                          Но не те, кто станет разбераться в вашей системе.

                          Собственно на том же рынке FMCG розницы в Астор даже компании со своим штатом 1С программистов боятся лезть (не то что франчи).


                          Да ладно, боятся.
                          Может, просто потому что нужно работать на том рынке, что ты хорошо знаешь и который тебе и приносит хорошее бабло?

                          Это как Боинг стал бы автомобили строить. Тоже интересный рынок. Но не его. Они на самолетах специализируются.


                      1. strange2007
                        04.10.2019 08:34

                        >> бренд и сеть франчайзи которая допилит в любой деревне за копейки новую колонку в отчет.
                        Это малая часть так-то. В основном дело в том, что 1С просто заточена под решение задач, а не реализации крутого кода. И да, в 1С всё на русском можно писать.
                        Смотрите, есть проблема с резервированием изменённых файлов. Типа, изменённые складывались что бы в папку отдельную. Мелочная штука, но капец как её не хватает на всех предприятиях, где я бывал. В т.ч. и дома! Готовый софт разношёрстный, но капец какой нестабильный и как правило привязан то к ОС, то к точке нет, то к бухлу разработчика. В общем первые три версии писал на асме. Выкидывал в итоге, потому что ОС меняется, API меняется и прочее. Проще переписать, чем разобраться в километрах асмового кода.
                        Потом писал на PureBasic-е. и через какое-то время упирался в те же грабли — винда обновилась, всё отвалилось, в своём же коде разбираться просто лень.
                        Итог какой? Правильно! 1С!!! Хоть через 10 лет залазишь и можешь тут же всё доработать. Платформа идеально поддерживает тренд изменения ОС и стоит и на работе и дома. Понимаете? Я этого не хотел, но так или иначе всё равно пришёл к 1С. Она по всем описанным факторам просто выгоднее.


                        1. Neikist
                          04.10.2019 12:02

                          Ну вы еще бы в машинных кодах писали вместо того чтобы взять java, .net, python и подобное.


                          1. strange2007
                            04.10.2019 12:11

                            Т.е. точка нет круче 1С, потому что имеет более низкий уровень и круче ассемблера, потому что имеет гораздо выше уровень? Хм… позиция из разряда «я весь в белом, а вы в грязи».
                            Но смысл был не про это, а именно про цену создания и поддержания этой идеи. Цена — основной двигатель автоматизации! Не крутость среды разработки или кода, а именно цена. На точке нет, например, цена будет гораздо выше, чем на 1С из-за обновлений виндовс, установки новой среды разработки и абсолютной нечитаемости кода через какое-то время. Это применимо именно ко мне! Например, для плюсовика самое дешёвое будет писать такую утилиту как раз на сях


                            1. Neikist
                              04.10.2019 12:14

                              C# лучше потому что язык статически типизированный с ООП и нотками функциональщины. А не потому что кто то более выскоуровневый кто то менее. Да и что это за параметр «крутость»? Важно удобство, скорость решения задач, сложность поддержки и развития и прочее.


                              1. skrimafonolog
                                04.10.2019 12:36

                                C# лучше потому что язык статически типизированный с ООП и нотками функциональщины.


                                Лучше вообще?
                                Или, все же, лучше для задач, в которых используется 1С?

                                Понимаете в чем дело:

                                Если вы возьметесь реализовывать учетную систему для бизнеса с C# прямо сейчас, то, конечно, кода будет значительно больше на тех же задачах, для которых предназначена 1С.

                                Ведь язык 1С управляет объектами, предоставленными ему платформой.

                                То есть выразительность для написания сложных алгоритмов — это не то, что является необходостью/крутостью в данном случае.

                                Понимаете, в чем дело:

                                Если язык обладает крутостью как C#, он усложнен. Но эта сложность не востребована на алгоритмически простых задачах.


                                1. Neikist
                                  04.10.2019 12:51

                                  Наложите любой современный язык на 1с — и увидите как резко растет производительность (можно с опциональной типизацией вроде typescript, python). Плюсы ООП и статической типизации не в выразительности для написания сложных алгоритмов (что бы под этим не подразумевалось), а в возможности повышать уровень абстракции (ооп) и делать это относительно безопасно и с минимумом ошибок (статическая типизация, контракты, интерфейсы). Плюс поддержка такого кода легче так как снижается количество ошибок и не нужно в голове держать нижележащие слои при реализации бизнес логики.
                                  И что за крутость? Что это за параметр такой?


                                  1. skrimafonolog
                                    04.10.2019 13:02

                                    Плюсы ООП и статической типизации не в выразительности для написания сложных алгоритмов (что бы под этим не подразумевалось), а в возможности повышать уровень абстракции (ооп)


                                    Это одно и то же.

                                    Вот только значительная часть абстракций в 1С вынесена за пределы самого языка, реализована в платформе.

                                    и делать это относительно безопасно и с минимумом ошибок (статическая типизация, контракты, интерфейсы). Плюс поддержка такого кода легче так как снижается количество ошибок и не нужно в голове держать нижележащие слои при реализации бизнес логики.


                                    Да, все правильно.

                                    Видимо, и плюсы динамической типизации вам известны тоже?

                                    Ну а теперь назовите плюсы динамической типизации и наложите их на задачи в 1С — и вам все станет ясно.


                                    1. Neikist
                                      04.10.2019 13:04

                                      Вот только значительная часть абстракций в 1С вынесена за пределы самого языка, реализована в платформе.

                                      Вот в этом пункте у нас нестыковка основная. Вы считаете что вынесена в платформу, я считаю что даже БСП довольно низкоуровневая штука, а уж о своих абстракциях для работы с предметной областью — и говорить нечего.


                                      1. skrimafonolog
                                        04.10.2019 13:43

                                        Вот только значительная часть абстракций в 1С вынесена за пределы самого языка, реализована в платформе.


                                        Вот в этом пункте у нас нестыковка основная. Вы считаете что вынесена в платформу, я считаю что даже БСП довольно низкоуровневая штука, а уж о своих абстракциях для работы с предметной областью — и говорить нечего.


                                        «Значительная часть в платформе» != «Все подряд в платформе».

                                        Функционал того, что вы называете БСП, не такой уж и навороченный, что только за ради его следовало бы вводить дополнительные механизмы работы с абстракциями.

                                        Ведь это не бесплатно. Платой будет усложнения языка программирования для решения более типичных задач.

                                        Ну а те, кто разрабатывают типовые конфигурации — переживут. Основные деньги делаются не благодаря им.

                                        А только потому, что 1С легко под себя подправить на месте — потому бизнес ставит себе 1С и уверен, что если что понадобится он легко и просто под себя подгонит. Этим занимаются программиста «на местах». Вот для этой основой массы программистов и не нужно усложнять работу.


                                        1. Neikist
                                          04.10.2019 13:47

                                          Еще раз, не ради БСП, а ради того что мы строим над своими данными и логикой а так же бсп. Ну и какой нибудь пайтон не сильно сложнее 1с (если в дебри не лезть).


                                          1. skrimafonolog
                                            04.10.2019 13:55

                                            Ну и какой нибудь пайтон не сильно сложнее 1с (если в дебри не лезть).


                                            Об этом и речь.
                                            Сложнее всего осваиваются новичками базовые абстрации языков программирования.

                                            А затем уже идут сравнительно легко усваиваемые различия. Исключений среди распространенных языков программирования, что основаны на совсем другой парадигме — немного.

                                            Поэтому изучение другого языка для сложившегося программиста даже рядом не похоже на эту проблему для начинающего.


                                            1. Neikist
                                              04.10.2019 13:57

                                              Вот не сказал бы. Можно ли назвать начинающими программистами людей которые по 5-7 лет на 1с пишут? А для них даже java или пайтон освоить гораздо сложнее чем программисту на C# например. Знаю немало примеров. Просто другие концепции часто применяются в современных промышленных языках которые к 1с неприменимы из за отсутствия ООП того же.
                                              А вот писать на питоне в стиле 1с, но с добавлением типов в аргументы — мне кажется любой 1сник за пару дней осилит.


                    1. LeshaLS
                      01.10.2019 14:01

                      Сравнение сложных IT-систем (в частности, ERP) очень больная тема. Все описанные в статье проблемы имеют прямое отношение к стоимости доработки и сопровождения. Или Вы считаете, что все современные подходы к разработке направлены не на это, а просто на то, чтобы потешить эго разработчиков?


                      1. gennayo
                        01.10.2019 14:17

                        Имеют, конечно, в общем. Но если есть готовое решение для производства от 1С, и нет такого от lsfusion, например, — не имеют, в частности :))


                        1. LeshaLS
                          01.10.2019 14:20

                          Это статья не про lsFusion, а про 1С. Возможно будет еще и про то, как это сделано в lsFusion. И выше я писал, что если речь идет о производстве на 1С и другой технологии, то эта статья помогает понять, как минимум, что плохо в фундаменте той, что на 1С.


                          1. gennayo
                            01.10.2019 14:24

                            Так ведь нет ничего другого в РФ за такие деньги, вот в чём проблема. Я и пытаюсь объяснить, что не конкурируете вы с 1С никак на уровне платформы.


                            1. LeshaLS
                              01.10.2019 14:30

                              Как минимум, lsFusion — это альтернатива для разработки так называемых «нетиповых» решений. О чем, например, указано в статье.


                              1. gennayo
                                01.10.2019 14:47

                                Ну да, альтернатива. Только не для 1С. Вы сильно преувеличиваете значение нетиповой разработки с нуля на платформе 1С в настоящее время.


                                1. LeshaLS
                                  01.10.2019 14:50

                                  Вся суть статьи в том, что у платформы 1С много проблем. Давайте не будем скатываться в обсуждение рынка бизнес-приложений и типовых конфигураций. То, что в США на COBOL'е работает куча крупных компаний, автоматически не делает COBOL классной платформой для разработки приложений.


                                  1. gennayo
                                    01.10.2019 14:58

                                    Да, у 1С много проблем. Но почему это так волнует lsfusion?


                                    1. Ta_Da
                                      01.10.2019 15:04

                                      Даю подсказку. Открываем список статей в блоге компании lsfusion. Смотрим количество плюсов и комментариев в статьях с критикой 1С и SQL, сравниваем с количеством авторов публикаций в блоге. Потом смотрим количество комментариев и плюсов в статьях без критики 1С и SQL (последние штуки 3-4), тоже сравниваем с числом авторов статей в блоге. Делаем выводы.


                                    1. Veidt Автор
                                      01.10.2019 15:40

                                      «Возможности ничего не стоят, без проблем которые они решают.» © будем считать мой.


        1. Veidt Автор
          01.10.2019 12:10
          +1

          «Совпадение, не думаю».

          Давайте так, это Хабр. Если с каким то пунктом вы не согласны, отлично, дайте развернутый комментарий, покажите что автор не прав (вы же понимаете что многие на Хабр ради комментариев заходят). И тогда все поймут что это просто «маркетинговый бред», «автор просто не разбирается» и все в таком духе.


          1. gennayo
            01.10.2019 12:33

            Нет, я получил честные ответы ответы на все свои вопросы, дальнейшая дискуссия смысла не имеет.


            1. KoToSveen
              02.10.2019 02:49

              КонецДискуссии


      1. strange2007
        04.10.2019 07:29

        В статье рассказывается система со стороны кодера и совсем никаким боком не затрагивается область бизнес-приложений. В том-то и проблема, что это трындец какие разные вещи. С одной стороны бизнесмену всё равно какой крутой или кривой код, ему то всё видится только в виде бизнес-объектов, тогда как с другой стороны, идёт измерение крутости кода


        1. skrimafonolog
          04.10.2019 07:56

          В статье рассказывается система со стороны кодера и совсем никаким боком не затрагивается область бизнес-приложений. В том-то и проблема, что это трындец какие разные вещи. С одной стороны бизнесмену всё равно какой крутой или кривой код, ему то всё видится только в виде бизнес-объектов, тогда как с другой стороны, идёт измерение крутости кода


          Все правильно пишите.

          И если бы речь шла о сугубо технической вещи, которую рядовой пользователь не видит, с чем непосредственно не взаимодействует — выбор бы делали технические специалисты, ориентируясь на чисто технический аспект.

          Но здесь это не так.

          Авторы ссылаются на опыт глубоко подкапотачный вещей типа PostgreSQL vs Oracle.
          Но там действуют другие правила.


        1. Veidt Автор
          04.10.2019 10:46

          В статье рассказывается система со стороны кодера и совсем никаким боком не затрагивается область бизнес-приложений.

          Издеваетесь? Как раз основной посыл статьи, что вместо того, чтобы фокусироваться на бизнес-задачах разработчику 1С приходится заниматься всякой ерундой, вроде ручных блокировок, директив компиляции, callback'ов, ЗначениеВРеквизитФормы, связыванием списков и реквизитов и т.п.


          1. IamAlexy
            04.10.2019 10:51

            в 1С больше инструментарий, а вы это преподносите как минус…
            Да — в вашем мире и в вашей области автоматизации эти инструменты избыточны и ненужны… но ваше решение с 1С практически нигде не пересекается, по этому по сути вы еще не очень доросли до этих инструментов.

            Ну не нужна вам асинхронность и управление серверными вызовами — да… вы просто не сталкивались с такими бизнес-задачами… а 1С сталкивался в полный рост…

            это не делает 1С хуже — это делает 1С универсальнее и сложнее.

            а с точки зрения разработчика — ну давайте реализовывать функционал фильтрации результатов поиска при вводе по строке по вхождению в наименование товарной позиции… у кого будет проще решение?

            monosnap.com/file/ORhXPM24Lg4tmcFPob8Qs92cTY12XJ

            сколько вы времени потратите и вообще сможете эту бизнес-задачу реализовать?


          1. strange2007
            04.10.2019 11:04

            Да на фьюжене пока форму нарисуешь, уже забудешь её назначение. А если сначала ещё и регистры к ней описывать, тогда надо отдельное ТЗ писать с подписями и прочей бюрократией.
            Мало того, я писал про то, что в статье не затрагивается то, что нужно покупателям — бизнес-логика! Нет этого у фьюжен!
            Вспомните с каким лозунгом 1С зашла на рынок: «своевременная сдача отчётности». Не крутость кода или алгоримтов, а с тем, что нужно покупателям!


          1. skrimafonolog
            04.10.2019 11:27

            Как раз основной посыл статьи, что вместо того, чтобы фокусироваться на бизнес-задачах разработчику 1С приходится заниматься всякой ерундой, вроде ручных блокировок, директив компиляции, callback'ов, ЗначениеВРеквизитФормы, связыванием списков и реквизитов и т.п.

            Совсем не так много этой работы как вам кажется.
            Скажем, мне ручные блокировки понадобились прошлый раз, дай вспомню, года два назад. Да и директивы компилятора — пожалуй что уже как с полгода не писал.

            И, у 1С все это было автоматом — 2/3 того, что вы перечислили — это сравнительно поздние нововведения. Раньше и без них было — да прям как у вас.

            Однако, оказлось, что чем более разноплановых задач ставят перед 1С — тем более разнообразные инструменты полезнее.

            Ваше восприятие таковым кажется, потому как вы не имеете достаточно опыта с той системой, что критикуете.

            Это нормальное восприятие любой новой системы. Ваша система — тоже не исключением будет, ежели кто соберется на нее перейти — людей ждет такой же батхерт при входе в новую для себя технологию, что и у вас возник с 1С.


            1. Veidt Автор
              04.10.2019 12:03

              Раньше и без них было — да прям как у вас.

              Нет не как у нас. Раньше все (а точнее большинство) на клиенте было и автоматически блокировалось кучу лишних данных. Что не масштабируемо. А в lsFusion все масштабируемо — все на сервере приложений, прозрачные материализации и update conflict'ы из коробки и т.п.
              Однако, оказлось, что чем более разноплановых задач ставят перед 1С — тем более разнообразные инструменты полезнее.

              Нет, у них возникли проблемы с масштабируемостью, а не разноплановые задачи.


              1. skrimafonolog
                04.10.2019 12:57

                Нет, у них возникли проблемы с масштабируемостью, а не разноплановые задачи.


                Зачем делать функционал, пока в нем не возникло потребности?

                Это одно и то же:

                1. Ранее использовалось с небольшими базами данных и для них и создавалось. К чему там лишние сложности для разработчиков, когда автоматика платформы справлялась.
                2. Возникала задача использовать с большими базами данных — она же проблема масштабирования.


                Вы о чем вообще спорите?
                О том, что есть 2 способа блокировок на выбор прикладного программиста (автоматический и ручной) и это плохо?


                1. Veidt Автор
                  04.10.2019 13:57

                  О том, что получилось два механизма. Один простой, но не работающий. Второй сложный но работающий. Почему не сделать один простой и работающий (то есть чтобы «автоматика платформы справлялась»).


                  1. skrimafonolog
                    04.10.2019 14:39

                    Один простой, но не работающий

                    Кто вам сказал-то что он неработающий? Те, кто не умеют их готовить? Гы.

                    Не испытываю проблем с автоматическими блокировками, кроме весьма редких случаев — ручные понадобились в прошлый раз даже не в этом году, а намного дольше я их не использовал почему то.


                    1. Veidt Автор
                      04.10.2019 14:52

                      Кто вам сказал-то что он неработающий? Те, кто не умеют их готовить? Гы.

                      Речь шла не только про блокировки, а и про ОФ, про ОткрытьФормуМодально и т.п. Но даже касательно автоматических / ручных блокировок. Вы в курсе что в 1С автоматические блокировки ВСЮ таблицу в PostgreSQL блокируют, а в MS SQL на сложной логике и большом количестве пользователей у вас эскалации через раз будут, после чего база тоже в клинч начнет входить.


  1. gennayo
    01.10.2019 12:04

    del


  1. anikin-v
    01.10.2019 12:14

    Ах тыж, на святое покусился


  1. kolu4iy
    01.10.2019 12:29

    А у вас есть свои интеграторы/внедренцы?
    Ну просто демо-продукт на сайте он совсем… Ущербный…
    Что-то более похожее на реальную жизнь увидеть бы.


    1. Veidt Автор
      01.10.2019 12:54

      Вы про эту демку? (но там только часть функционала, можете кликнуть на модули посмотреть, что именно там сделано)

      Это рыба, на которой впрочем работает большое количество предприятий >= 4к сотрудников, причем все модули от производства, до автозаказов (кроме бухгалтерии, HR и фронта).


  1. RaFaeL-NN
    01.10.2019 12:31

    логика объектов напоминает обычный ORM, правда, со своими особенностями:

    Никаких one-to-many, many-to-many отображений нет, их функцию выполняют так называемые табличные части — коллекции внутренних объектов, фактически агрегированных в основной объект.

    Подчиненный справочник с владельцем и есть классическое one-to-many


    1. Veidt Автор
      01.10.2019 12:43

      Ну это все равно не совсем классический one-to-many, потому как, как я понимаю, работает между двумя одинаковыми типами (справочник-справочник), скажем справочник с регистром или документом вы так не свяжете. Но да про них, я что-то забыл, точнее про подчиненные справочники у меня был отдельный пункт, но потом исчез, а в другие не дописал. Сейчас попробую немного изменить статью.


      1. philya
        01.10.2019 21:10

        Почему один объект справочника, на который ссылаются 1000000 записей регистра остатков и 1000000 записей документа, который породил эти записи регистра, это не one-to-many?


        1. gennayo
          01.10.2019 21:15

          Потому, что это many-to-one :))


        1. Veidt Автор
          01.10.2019 21:43

          Вы из справочника через точку можете написать что-то вроде: Товар.ДокументыПрихода[10].Дата?


          1. RaFaeL-NN
            01.10.2019 22:48

            А где так можно писать, и какой документ нужно считать 10-м?


            1. Veidt Автор
              01.10.2019 23:02

              Ну почти во всех ORM. Например в Java указываете OneToMany и @JoinColumn для List и у вас будет коллекция с документами. В данном случае будет рандомный документ, хотя вроде можно порядок указывать в таком маппинге. Но 10 это я для примера написал. Пусть будет «FOR Товар.ДокументыПрихода».


              1. RaFaeL-NN
                01.10.2019 23:33

                Так цикл по выборке и в 1С можно и список выведет без проблем. Если конечно товар это реквизит документа прихода (а не его табличной части), что я только один раз в реальной конфе видел


          1. philya
            01.10.2019 23:20

            Ну маппинг у 1с не такой богатый, как у хибернейта. Смогу написать Товар.ДокументыПрихода[10].Документ.Дата


  1. DMGarikk
    01.10.2019 12:41
    -2

    Запросы по старинке пишутся в строках (смотри примеры выше). Это создает как минимум две проблемы


    Никто не пишет вручную запросы, 98% разработчиков используют СКД (которую вы не поняли и решили что оно не нужно) в том числе в качестве редактора запросов.
    Вы таки не забывайте что даже среди обычных разработчиков довольно немного народа знают SQL больше чем select/insert/update/join а через СКД можно создавать очень мозголомные конструкции в текстовом представлении которых даже имея большой опыт в 1С без бутылки водки не разобраться (и то потом в дурку увезут)

    Учитывая это вы просто переносите свой опыт из других систем на 1С в стиле «ой тут не как в pl/sql всё плохо»… ага… будет у нас программист 1С, программист pl/sql ещё dba и веб программер… а потом мы вспомним что пишем конфигу для заводика со штатом 100 человек.

    на 1С можно наваять сложную систему учета, и она будет работать, за то время пока для обычных 'фреймворков и sql' будут только писать ТЗ и набирать народ с вилкой 180-250

    И это при том что если взять SAP или какойнить AX, то оказывается что 1С не сильно и хуже, а в некотором смысле гораздо более дружелюбнее к разработчику


    1. Veidt Автор
      01.10.2019 12:50

      Я нигде не писал что вручную. Внимательно почитайте. Я писал что в строках.

      И в том же УТ, там 95% запросов это и есть примитивные select join (причем с промежуточными результатами во времянках). И я написал почему. Хотите вот сейчас пять случайных мест открою и вставлю сюда запросы. Ну или вы тоже самое сделаете.

      Учитывая это вы просто переносите свой опыт из других систем на 1С в стиле «ой тут не как в pl/sql всё плохо»… ага… будет у нас программист 1С, программист pl/sql ещё dba и веб программер… а потом мы вспомним что пишем конфигу для заводика со штатом 100 человек.

      Так в этом наоборот и проблема. Что 1С должен и в вебе и в SQL и в ORM разбираться и в запросы руками предикаты проталкивать. И потом у относительно небольших компаний штат 1С программистов — 15 человек. А у нас есть отдел из 10 человек, который дорабатывает нон-стоп и поддерживает 40 клиентов (в основном крупных), в которых в сумме 60к человек работает.


      1. DMGarikk
        01.10.2019 12:57
        -1

        И потом у относительно небольших компаний штат 1С программистов — 15 человек

        проклятие 1С в том что основные их клиенты это малый-средний бизнес, и им не надо штат в 15 человек

        Я работал в одной средней конторе (500чел штат, офисы по всей стране) где 1С была ядром всего фин.блока и частью бекофиса основной (финансовой, это фин-контора) ИТ системы… у нас было два человека 1С-ника… и был отдел который поддерживал эту ИТ систему… как раз 15 человек java-программеров которые по 2-3 недели пилили задачи которые мы в 1С рисовали за 1-2 дня… и в итоге часть некритичного функционала начали сгружать в 1С из-за того что это быстрее, дешевле и эффективнее получалось


        1. Veidt Автор
          01.10.2019 14:02

          500 человек штат и целых 2 1С программиста? У нас я говорил выше есть ИТ отдел на 10 человек, который дорабатывает custom made решения для 40 клиентов с 60к человек штатом в сумме (у многих по 3-5 достаточно непростых задач в день закрывается).

          Я просто не до конца понимаю, что именно быстрее там так сильно получалось. Особенно с учетом, когда запросы надо вот так писать.

          Запрос
          ВЫБРАТЬ
              РасходнаяНакладнаяСостав.Номенклатура,
              УчетНоменклатурыОстатки.КоличествоОстаток
          ИЗ
              Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
                  ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки(,
                                       Номенклатура В (
                                             ВЫБРАТЬ Номенклатура
                                             ИЗ Документ.РасходнаяНакладная.Состав
                                             ГДЕ Ссылка = &Документ)) КАК УчетНоменклатурыОстатки
                  ПО УчетНоменклатурыОстатки.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
          ГДЕ
              РасходнаяНакладнаяСостав.Ссылка = &Документ И
              (УчетНоменклатурыОстатки.КоличествоОстаток < РасходнаяНакладнаяСостав.Количество ИЛИ
                  УчетНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL)
          


          1. Neikist
            01.10.2019 14:09

            Ну, современная Java все же получше чем 6-7. А уж если задействовать другие JVM языки вроде котлина, груви, кложи, скалы и прочих — можно вообще чудеса декларативности показывать.


          1. gennayo
            01.10.2019 14:19

            Угу, сравнили — ваш отдел не поддерживает бухгалтерию, зарплату и производство, и при этом все клиенты из одной отрасли.


            1. Veidt Автор
              01.10.2019 14:35

              Из вот этого списка:

              Human Resource.
              Inventory.
              Sales & Marketing.
              Purchase.
              Finance & Accounting.
              Customer Relationship Management(CRM)
              Engineering/ Production.
              Supply Chain Management (SCM)

              Поддерживается все кроме Accounting (у многих Finance мы тоже закрываем) и HR. Хотя да производство там простое (общепитовское). Есть клиенты из разных отраслей, в том числе даже BPM (некоторые очень публичные, которых по этой причине пока не можем называть). Хотя да, не спорю, есть перекос в FMCG розницу, где 1С не вытягивает по производительности и эргономике (также как и в банках) Но это временно.


          1. DMGarikk
            01.10.2019 14:22

            есть ИТ отдел на 10 человек, который дорабатывает custom made решения для 40 клиентов

            ну вы интегратор-франч, вам конечно проще делать типовые простые вещи в потоке и драть деньнги как какбудто вы с нуля каждый раз пишите

            в моем примере этим занимается внутренний отдел разработки без привлечения оутсорса (вообще я не люблю оутсорс, который высасывает килотонны денег со слабым выхлопом и многомесячными препирательствами в согласовании ТЗ...)… а до этого нам 1С внедрял интегратор со штатом в десяток 1Сников, да… меня тогда взяли чтобы 'понять чё вообще происходит, каждый месяц по 3 ляма платится, результатов почти нет' — в итоге все свелось к 2м человекам в штате и повышением результативности разработки в сотни раз.

            тут уже разговор превращается борьбу менеджерскими скиллами по поводу отъема денег у контрагентов прикрываясь правильными словами.


            1. Veidt Автор
              01.10.2019 14:39

              ну вы интегратор-франч, вам конечно проще делать типовые простые вещи в потоке и драть деньнги как какбудто вы с нуля каждый раз пишите

              Вы думаете что на нашем рынке 1С нет? Но мы за счет эффективности все равно существенно дешевле чем свои ИТ-отделы и другие решения на 1С. И там далеко не простые типовые вещи (почитайте хотя бы задачи какие там решаются, а в FMCG рознице с ассортиментом в 100к взаимозаменяемых товаров требования к эргономике и производительности огромные)
              а до этого нам 1С внедрял интегратор со штатом в десяток 1Сников, да… меня тогда взяли чтобы 'понять чё вообще происходит, каждый месяц по 3 ляма платится, результатов почти нет' — в итоге все свелось к 2м человекам в штате и повышением результативности разработки в сотни раз.

              Где вы таких клиентов берете? 2 человека в штате, это с налогами и остальными затратами уже под полляма рублей. И это для компании со штатом 500 человек. Щедрый там финдир.


              1. DMGarikk
                01.10.2019 16:01

                Щедрый там финдир.

                Затраты на франча были в разы больше
                Также контора полуайтишная, и ИТ отдел в целом это самая большая статья затрат в принципе. и 'два человека в штате на 1С' — это цветочки по сравнению 15 java-программеров, четверо плюсовиков и два отдела эксплуатации с обычными админами… одинесники по сравнению с основным отделом разработки это бедные родственники… (я в итоге и сбежал оттуда к явистам… геморроя на 50% меньше, а зарплата на 100% больше, отпад)
                ==
                и вообще, эта контора дочка огромной международной корпорации с забугорными акционерами, не испорченная 'российскими финдирами'


                1. Neikist
                  01.10.2019 16:04

                  геморроя на 50% меньше

                  А вы точно за 1с? А то как бы тут все в основном и утверждают что уж сильно много геморроя при работе с 1с.


                  1. DMGarikk
                    01.10.2019 17:09

                    немного не так,
                    за ту зарплату сколько платят при работе с 1С — слишком много геморроя причем не борьбы с платформой, а просто много задач и обязанностей вообще, которые подразумеваются под программистом 1С.

                    тоесть, я сейчас гораздо меньше всего делаю на питоне и эти вещи проще (занесло меня в эту сферу после явы), а получаю гораздо больше чем когда я работал с 1С
                    И это дело не в квалификации, со мной работал сеньор 1Сник (которого переманили из интегратора) имеющий огромный опыт в ERP, УПП и кучу одинесовских «специалистов»… и он получал меньше меня сейчас.
                    Это при том что мой коммерческий опыт программинга в 'обычных языках' у меня всего 5 лет. (я до этого был админом, а одинесил с 2005 года)
                    p.s. это всё в мерках Московских зарплат миддл-сеньорского уровня обоих сфер


                    1. Neikist
                      01.10.2019 17:14

                      Так может потому что

                      огромный опыт в ERP, УПП и кучу одинесовских «специалистов»

                      нигде толком не применим кроме 1с? Тогда как например C# разработчик спокойно переквалифицируется на Java или C++ при необходимости и ему не нужно будет в подробностях изучать кучу готовых «конфигураций» чисто прикладных. Да и знание прикладной области гораздо менее важно чем для 1сника. А для 1С сперва стоят знания конфигураций и предметной области, а только потом знания собственно приемов и практик программирования, работы ОС, сетей и прочего.


                      1. DMGarikk
                        01.10.2019 18:05

                        я не спорю. в итоге я и переквалифицировался на java/python


                        1. vidyakinsergey
                          01.10.2019 21:43

                          Какие задачи на питоне решаете что гемора меньше? А то может тоже из 1С свалить ) Питон и JS я знаю и смотрю по сторонам с прищуром ))


                          1. strange2007
                            04.10.2019 09:11

                            Лучше переходите. Чем раньше, тем лучше. Ниша питонов всяких, это кодить без задумываний про бизнесы, а 1С это абсолютно всегда геморрой и головняки, потому что бизнес постоянно трансформируется по разным причинам и постоянно меняются требования. В 1С надо будет абсолютно всегда изучать новые плюшки бизнесов, тогда как на питонах-явах этого ничего не надо.
                            Например, прям сейчас голову ломаю про логистику доставки людей на объекты, с тесной увязкой налоговых и логистикой материалов. Просто голова пухнет. И всё это за тарелку супа!


                            1. vidyakinsergey
                              04.10.2019 11:02

                              так это же хорошо, когда можешь решить реальную задачу бизнеса, понимая его проблемы и методику, а не тупо кодить по готовому ТЗ, в котором за тебя подумали как делать и ты не можешь шагнуть в сторону
                              А за тарелку супа или за масло с икрой — щас выбора много где от 150-180 предлагают на руки.
                              Просто если хочется за границу укатить, тогда 1С мешает


                              1. Neikist
                                04.10.2019 12:06

                                Специализация это вещь. Невозможно хорошо разбираться и в программировании и в бизнесе как предметной области. Что то будет отставать. Кому то нравится ковыряться в законодательстве, бух учете и прочей скукоте — пожалуйста. Но это не мое (хотя даже когда я работал в 1с франче этим не программисты а аналитики занимались). Мне же интереснее развиваться как программисту.


                                1. strange2007
                                  04.10.2019 12:41

                                  В точку! Но там только одна поправка — 1Сник знает, где что лежит, но не помнит ничего. Поэтому, например, бухгалтер назубок знает свой участок, а 1Сник при необходимости поднимает документацию и читает и читает…


                                1. vidyakinsergey
                                  04.10.2019 13:02

                                  Поэтому в 1С специально сделали примитивный язык, чтоб для решения задач не требовались годы опыта в Java или C# и можно было аналитику программировать (хотя сейчас уже вряд ли на 8.3, это в 7.7 простота была)
                                  С ростом сложности проектов в 1С сейчас тоже больше специализации, внедрения одним человеком остались в прошлом или только в маленьких городах на обновлении/допиливании бухгалтерии и УТ.
                                  Сейчас например только на внедрении одного модуля из «Управления Холдингом» может быть команда из человек 5-10 и задачи нифига не скучные ) И хайлоад и многопоточность и веб-сервисы и RabbitMQ встречается


                                  1. Neikist
                                    04.10.2019 13:07

                                    А язык по прежнему в одном месте. И почти хайлоадом занимался на 1с, и на веб/http сервисах собаку съел, и с шиной сообщений работал (правда какой то древней от ibm). Язык перестал соответствовать решаемым задачам. Вы верно подметили что даже на среднего размера проектах (от 1кк до 5кк) программист уже не играет в одно рыло и аналитика и программиста и админа. Тем не менее ему по прежнему приходится страдать.


                                  1. skrimafonolog
                                    04.10.2019 13:26

                                    Поэтому в 1С специально сделали примитивный язык, чтоб для решения задач не требовались годы опыта в Java или C#


                                    Вы как-то преувеличивайте значение знания конкретного языка программирования.

                                    Какие годы? Сам язык учится легко и просто.

                                    Сложно учатся концепии, принципы, паттерны и алгоритмы. Библиотеки? Ну какое-то время уходит. Но небольшое, все равно их никто целиком не помнит, все справочниками пользуются.

                                    Доводилось принимать программистов на работу (разговаривал с ними на техническом собеседовании). Неоднорактно убеждатся: можно брать и с чужим стеком, если толковый. Если специалист толковый, то он впоследствие довольно быстро осваивает новый для себя стек. И полноценно эффективно начинает работать через 1-2 месяцаа.


                              1. strange2007
                                04.10.2019 12:39

                                Я просто не до конца выразил мысль. Исправляюсь:
                                Автоматизация бизнеса, это 70-90% чтение и написание всякой фигни + постоянная болтология и оставшееся время, может быть, кодирование. Это реально для некоторых скучно. Поэтому если душа не лежит к всякой фигне, то лучше заранее переходить


                              1. skrimafonolog
                                04.10.2019 13:14

                                Просто если хочется за границу укатить, тогда 1С мешает


                                1) Ваше высказывание в контексте рекламируемой lsFusion — выглядит странно. Хотя, если за границу — это в Белоруссию, то, конечно.

                                2) Почему мешает-то? Программисткие навыки куда денутся? Автор этих строк легко и свободно начал использовать Go после многих лет с 1С. Если вы хотите уехать за границу, то вам больше мешает незнание языка человеческого.


                                1. Neikist
                                  04.10.2019 13:19

                                  Го кстати тот еще язык. Гугл тоже попытался принцип «чем проще тем лучше» реализовать, в итоге вышла фигня, и вот уже планируют дженерики добавлять)) А вы его только для себя используете, или на коммерческом проекте в составе команды нескольких го программистов? Я конечно ваш бекграунд не знаю, но мне например чтобы свалить с 1с (не просто что то для себя написать или несколько сотен строк в рамках 1сного проекта, а писать код в команде других, фуллтайм, за деньги) потребовалась пара лет изучения разных концепций, и я пока еще даже на мидл разработчика не претендую, хотя во франче не самом мелком, пусть региональном, старшим программистом был.


                                  1. skrimafonolog
                                    04.10.2019 13:38

                                    А вы его только для себя используете, или на коммерческом проекте в составе команды нескольких го программистов?


                                    На коммерческом.
                                    Причем, с плотной интеграцией с 1С — в результате я вообще незаменимый специалист получаюсь, знающий обе технологии.

                                    Я конечно ваш бекграунд не знаю

                                    30 лет и 15 языков программирования.
                                    Уверяю вас — трудно выучить только первый.
                                    Непросто — второй.
                                    Дальше уже элементарно. Ведь распространенные языки программирования — они же все похожи друг на друга. Ну это если не брать Хаскель какой нибудь, однако это экзотика.

                                    но мне например чтобы свалить с 1с потребовалась пара лет изучения разных концепций, и я пока еще даже на мидл разработчика не претендую, хотя во франче не самом мелком, пусть региональном, старшим программистом был.


                                    Ну а в Гугле вы были бы вообще джуном, независимо от языка программирования.

                                    Ерунда вся эта классификация. Объективно можно сравнивать только в пределах одного предприятия.

                                    Но на разных предприятиях — уже не корректно. Не существует единого стандарта даже в пределах одной области.

                                    Плюс названия должностей часто используют чтобы манипулировать:

                                    • Назовем должность солиднее. Поддержим ЧСВ. Но денег не добавим.
                                    • Или напротив — у нас жесткая тарифная сетка. Поэтому если тебя назвать senior, то платит придется больше. Не вариант. Сиди миддлом до скончания века.


                                    Все это не добавляет объективности всем этим названиям.


                                    1. Neikist
                                      04.10.2019 13:46

                                      30 лет и 15 языков программирования.
                                      Уверяю вас — трудно выучить только первый.
                                      Непросто — второй.

                                      Ну тогда понятно, даже спорить не буду. Но если речь идет о человеке у которого 1с первый и единственный — ему так просто соскочить не получится.
                                      Насчет того насколько просто языки учатся — в целом согласен (хотя библиотеки, фреймворки, системы сборки, SDK и прочее уже не так просто изучаются как сам язык), но вот какой нибудь хаскель я не возьмусь утверждать что легко освою, несмотря на хорошие знания 1с и котлин, неплохие джавы и поверхностные python.

                                      По второй части комментария тоже соглашусь, я скорее по своей внутренней классификации определяю.


                                      1. skrimafonolog
                                        04.10.2019 14:30

                                        Но если речь идет о человеке у которого 1с первый и единственный — ему так просто соскочить не получится.


                                        Сейчас же в школе, вроде, уже учат что-то?
                                        В любом случае — это проблема того человека. Мне его вот нисколько не жаль. Мы сами определяем свою жизнь. Я знаю точно, что после первого языка — тебе гораздо легче. Все остальное это оправдание лени.

                                        но вот какой нибудь хаскель я не возьмусь утверждать что легко освою, несмотря на хорошие знания 1с и котлин, неплохие джавы и поверхностные python.


                                        Ну дык Хаскель я и не считаю.
                                        А 98% распространенных языков — это потомки Алгола-68 или его ближайших родственников.


          1. philya
            01.10.2019 21:28

            Это пишется в 10 кликов мышью и "есть null" можно мышой перетянуть или руками набрать. Минут пять работы, если структуру базы данных знаешь. Видео записать? )


            И я бы еще вместо вложенного запроса породил временную таблицу с именем типа ТоварыДокумента, чтобы лет через 5 проще править было — запрос стал бы еще больше.


            Расскажите как быстро пишется запрос по трем таблицам в вашей системе. И как выглядит. Я вот не зная откуда вы это скопировали догадываюсь, что этот запрос выбирает строки расходной накладной, для которых не хватает остатков.


            1. Veidt Автор
              01.10.2019 21:45

              Я скопировал из методических рекомендаций самой 1С.

              Как это делается в lsFusion — тут. Вообще никаких запросов писать не надо.


              1. philya
                01.10.2019 23:11

                Суммируем все строки приходной накладной и вычитаем все строки расходной накладной? Я все правильно понимаю? При появлении еще 5 новых типов документов начинаем суммировать строки в них и вычитать/складывать? Или за GROUP SUM что-то более интересное, чем select sum()?


                receivedQuantity 'Суммарный приход' = GROUP SUM quantity(ReceiptDetail d) BY item(d), stock(receipt(d));
                shippedQuantity 'Суммарный расход' = GROUP SUM quantity(ShipmentDetail d) BY item(d), stock(shipment(d));
                currentBalance 'Текущий остаток' (Item i, Stock s) = receivedQuantity (i, s) (-) shippedQuantity (i, s);


                В 1с в модуле регистра при записи подобное поведение тоже можно реализовать. Выглядеть будет примерно так.


                Если Не ОбщийМодульПроверка.ПроверитьПоложительностьКоличества(ЭтотОбъект) Тогда 
                   Отказ = Истина;
                КонецЕсли;


                1. Veidt Автор
                  01.10.2019 23:22

                  Только в lsFusion это весь код. А вот ПроверитьПоложительностьКоличества покажете? Ну и заодно куда вы приведенный вами код будете помещать. Вообще было бы очень интересно посмотреть аналог примера из моей ссылки на 1С (но только весь код, а не додумайте сами)

                  При появлении еще 5 новых типов документов начинаем суммировать строки в них и вычитать/складывать?

                  Обычно при появлении 5 новых типов документов наследование и полиморфизм используются. То есть новые типы документов наследуют просто ReceiptDetail, и если надо перегружают реализацию / реализуют quantity. Больше ничего не меняется. Все декларативно и само автоматически работает.


                  1. philya
                    02.10.2019 00:18

                    Помещать в процедуру ПередЗаписью в модуле набора записей регистра.


                    Вы же не показываете код парсера вашего языка. Может быть чтобы превратить GROUP SUM в SELECT у вас миллион строчек ушло? Я с таким же успехом могу написать внешнюю компоненту и поместить метод ПроверитьПоложительностьКоличества туда.


                    Документ инвентаризация склада, который и приход и расход может от кого наследовать будете?


                    1. CrushBy
                      02.10.2019 07:23

                      Помещать в процедуру ПередЗаписью в модуле набора записей регистра.


                      Я не 1С программист и у меня нету 1С головного мозга. Мне все эти ваши «ПередЗаписью в модуле набора регистра» ни о чем не говорят.

                      Вы же не показываете код парсера вашего языка. Может быть чтобы превратить GROUP SUM в SELECT у вас миллион строчек ушло? Я с таким же успехом могу написать внешнюю компоненту и поместить метод ПроверитьПоложительностьКоличества туда.


                      Какая разница сколько строчек кода ушло на это? Мы сравниваем платформы. Можете писать внешние компоненты и складывать туда что угодно. Возможно 1С вам выпишет еще одну премию за новую и бессмысленную абстракцию.

                      Документ инвентаризация склада, который и приход и расход может от кого наследовать будете?

                      Делается интерфейс SkuLedger, и инвентаризация делает агрегированные объекты от классов, которые от него наследуются.

                      Не уходите от темы. Есть конкретная задача — давайте весь код, как ее реализовать. А то 1Совцы любят просто потрепаться, что вот я это сделаю супер быстро, а когда доходит до дела — сливаются.


                      1. philya
                        02.10.2019 10:03

                        Процедура ПриЗаписи(Отказ, Замещение)
                            Запрос = Новый Запрос;
                            Запрос.Текст = 
                                "ВЫБРАТЬ
                                |   ОстаткиТоваровОстатки.Товар КАК Товар,
                                |   ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток
                                |ИЗ
                                |   РегистрНакопления.ОстаткиТоваров.Остатки(
                                |           ,
                                |           Товар В (&Товары)
                                |               И Склад В (&Склады)) КАК ОстаткиТоваровОстатки
                                |ГДЕ
                                |   ОстаткиТоваровОстатки.КоличествоОстаток < 0";
                        
                            Запрос.УстановитьПараметр("Склады", ЭтотОбъект.ВыгрузитьКолонку("Склад"));
                            Запрос.УстановитьПараметр("Товары", ЭтотОбъект.ВыгрузитьКолонку("Товар"));
                        
                            Если Не Запрос.Выполнить().Пустой() Тогда
                                Отказ = Истина;
                            КонецЕсли;
                        КонецПроцедуры

                        Будет работать при любой записи в регистр остатков. Строчек больше, но их без последнего если сгенерировал конструктор запроса.


                    1. Veidt Автор
                      02.10.2019 09:05

                      Помещать в процедуру ПередЗаписью в модуле набора записей регистра.

                      Ну так они так и делают, и что из этого получается (3 запроса на огромное количество строк) я написал в статье.
                      Может быть чтобы превратить GROUP SUM в SELECT у вас миллион строчек ушло?

                      Так это не ваши проблемы. Это проблемы платформы. Вы как разработчик этот код не пишете.
                      Документ инвентаризация склада, который и приход и расход может от кого наследовать будете?

                      От обоих. В lsFusion множественное наследование есть.


                      1. philya
                        02.10.2019 10:26

                        Ну так они так и делают, и что из этого получается (3 запроса на огромное количество строк) я написал в статье.

                        https://habr.com/ru/company/lsfusion/blog/468415/?reply_to=20700475#comment_20700763 один запрос по регистру остатков вместо двух по всем строкам расходных и приходных. 20 строк, из которых половина текст запроса сгенерированный конструктором, супротив 5 строк скрытых запросов сгенерированных ORM.


                        Вы сравниваете удобный пример, с системой которая вынуждена реализовывать плохо структурированные требования налогового кодекса. Когда вы сможете сделать расчет НДФЛ, с учетом ликвидаторов, летчиков, владельцев одного, двух и более детей, материальной помощи студенту до 4000 рублей, тогда можно будет оценивать сложность и поддерживаемость.


                        От обоих. В lsFusion множественное наследование есть.

                        Два склада в одном документе? Как это отобразится в таблицу?


      1. D01
        02.10.2019 23:28

        Так нажмите на строке запроса правой кнопкой мыши и выберите пункт «Открыть в конструкторе» (что-то похожее по смыслу, давно с 1С не работаю, точно не помню).

        Ну и джойны в запросах 1С есть. Когда нужно получить одно поле — пишется запрос, который получает одно поле (ну или когда надо много данных из разных таблиц), когда нужен объект — получаем весь объект.
        Хоть и не люблю 1С, но тем не менее на этой платформе можно написать так, чтобы работало быстро.


    1. alkresin
      01.10.2019 13:31
      +1

      > Никто не пишет вручную запросы
      Я пишу.

      > через СКД можно создавать очень мозголомные конструкции
      По моему глубокому убеждению, если вам требуется для решения учетных задач создавать «мозголомные конструкции», у вас что-то не так спроектировано, или инструмент имеет серьезные проблемы.


      1. DMGarikk
        01.10.2019 13:46

        Я пишу.

        я же не сказал что «все», конечно есть исключения

        если вам требуется для решения учетных задач создавать «мозголомные конструкции», у вас что-то не так спроектировано, или инструмент имеет серьезные проблемы.


        иногда чтобы выцепить десяток цифр раз в месяц, проще сделать пятиэтажный запрос, чем городить десяток регистров и индексов ради сокращения этого запроса до одного селекта.

        Сейчас работаю с человеком с такой точкой зрения, такие решения часто имеют под собой контекст в виде неограниченного бюджета на сроки разработки и на оборудование… никак не могу такое поддержать (эффективный менеджер у меня в голове плачет)


        1. Veidt Автор
          01.10.2019 14:04

          А зачем для запросов, которые я приводил в статье СКД? Вот реально, там же один JOIN максимум.


      1. MenZurKa
        02.10.2019 12:23
        +1

        А зачем вручную писать запросы? Я понимаю, что в разговорах это звучит офигительно и прям «Тру», но смысл писать запрос руками, если есть удобный конструктор, ускоряющий и упрощающий жизнь? на написание маленького запроса с 2-3 Временными таблицами руками можно пол жизни убить + искать ошибку в опечатке «Субкотно»…
        ИМХО это какой-то особый сорт мазохизма, все же…

        Вы может еще Ctrl+C/Ctrl+V не пользуетесь?


        1. kuza2000
          02.10.2019 18:55

          И я пишу. Но не всегда прямо только руками, иногда сделаю заготовку конструктором и правлю руками, а иногда и наоборот. Как быстрее. Зачем писать руками:
          1. Конструктор не позволяет писать комментарии, и убивает уже написанные — одного этого достаточно, что бы не пользоваться им редактирования уже написанных запросов.
          2. Для меня текст запроса гораздо более нагляден, чем бесконечное число закладок в закладочке в конструкторе. Так проще изучать запрос, и сразу вносить комментарии. Еще было бы проще с нормальной синтаксической подсветкой по запросу :(
          3. Скажу тайну — в других средах разработки нет конструктора, а есть подсказка по именам таблиц. Поэтому там не может быть ошибки в «Субконто...». И, оказывается, что написать запрос с клавиатуры часто проще и быстрее, чем щелкать мышкой по закладкам и прокручивать списки с именами таблиц и полей. Так что еще вопрос, где особый сорт мазохизма…
          4. Конструктор может не все.


          1. MenZurKa
            03.10.2019 09:03
            -1

            Я не против, пишите, но все ваши 4 пункта просто придирки:
            1) Ну не позволяет, это вообще не проблема, для начала — необходимо писать понятные запросы, к которым максимум можно оставить комментарий до текста запроса — комментарии в тексте запроса 1С имхо — моветон.
            2) Это вкусовщина и привычка, есть подозрение, что вы не особо владеете конструктором, либо очень сильно привыкли к ручному текстингу.
            3) Спасибо за тайну, но речь идет про 1С, в других средах пускай хоть «кофа с чаем» будет, ну и написать запрос в 1С часто проще и быстрее сделать в конструкторе, если это не запрос выбора из одной таблицы + форматирование запроса будет корректным и читаемым и на него вы не потратите кучу времени.
            4) Конструктор может не всё — никто не может всё, а конструктор — облегчает жизнь разработчика.

            Поймите, я не против, чтоб вы или кто-то другой писал запросы без конструктора, это ваше дело и ваша жизнь, но нельзя отвергать прогресс. Конструктор не совершенен, но он облегчает разработку и экономит время программиста 1С, как и другие фишки типа Ctrl+Space, F12, Alt+Shift+F. Это все просто экономит жизнь и нервы.
            А уж если брать другие языки, так в Java — можно программировать и в обычном блокноте, и есть такие люди, но тот же Notepad++ удобнее и практичнее…


            1. Neikist
              03.10.2019 09:10
              +1

              Конструктор помогает как раз только с простыми запросами. Как только нужно что то поправить в сложном запросе где нужно на экране видеть сразу все данные по нескольким таблицам — конструктор ничем помочь не может, он даже по одной таблице не может всю инфу отобразить.


              1. MenZurKa
                03.10.2019 11:11

                Как только нужно что то поправить в сложном запросе где нужно на экране видеть сразу все данные по нескольким таблицам


                В сложном запросе, без конструктора, у вас все данные не влезут на экран.
                Вы устанете руками дописывать и разбирать запрос с 10-15 временными таблицами, кучей соединений, вычислений, переименований, куда вам надо добавить выборку из не типовых регистров и обособленной выборкой данных (при крупной выборке это больше 500 строк запроса, клесиком листать устанешь).

                он даже по одной таблице не может всю инфу отобразить


                Как это не может? Что вы под этим понимаете?

                Я, очень давно, считал, что СКД — отстой, Универсальный отчет на 8.2 — это божественно, а обычный интерфейс по сравнению с управляемым — божественен, но это только потому, что я не умел правильно работать с данными механизмами, сейчас же, при возвращении в обычный интерфейс и платформы 8.2 и старше — я ужасаюсь как сложно работать без удобных и современных механизмов.


                1. Neikist
                  03.10.2019 11:18
                  +1

                  8.2 я и сам терпеть не могу. А под полным отображением инфы об одной таблице я собственно и понимаю отображение на экране одновременно информации о составе выбираемых полей, источниках таблицы, группировках, условиях и отборах и прочему. Чтобы это в конструкторе увидеть — приходится как зайцу по вкладкам прыгать. При этом часто желательно видеть как данные по текущей таблице, так и данные по прошлой.


                  1. MenZurKa
                    03.10.2019 11:42

                    Так придирка в основном в малом?
                    Бог с ним, я не буду переубеждать и ругаться. Если вас это устраивает и вы не теряете на этом свое время и нервы, то пожалуйста :)

                    Индивидуально все, я вообще работаю на темно-синем фоне редактирования кода, коллеги кривятся, а мне красота)


                    1. Neikist
                      03.10.2019 11:43

                      Меня в общем то и это не сильно устраивало (отсутствие автокомплита и компайл тайм проверок), потому ни с 8.2 ни с 8.3 больше не работаю.


              1. strange2007
                04.10.2019 09:39

                >> Конструктор помогает как раз только с простыми запросами
                Не правда! Как раз наоборот сложные запросы лучше и проще в конструкторе. Когда пару дестяков пакетов и они всячески переплетаются, как раз в конструкторе проще видеть всё сразу и перед глазами, тогда как текстовый запрос замучаешься анализировать, мотая скрол туда-сюда. В итоге для без конструктора составляешь карту пакетов на листочке, прописываешь связи всяческие и только потом пытаешься хоть что-то поменять.
                Примечание: Честно признаюсь, запрос, состоящий из 102 пакетов (это в ЗУПе такое попадается) анализировать не могу ни в конструкторе, ни в текстовом виде.
                Примечание №2: Например, запрос для Р/Л занимает 2935 строк, а это всего 66 пакета!


                1. Neikist
                  04.10.2019 12:08

                  Ну, я обычно конструктором редактировал простые запросы до 5 пакетов, запросы на десятки пакетов мне уже удобней было править руками. Именно править правда. Набрасывать скелет все же конструктором удобнее было из за отсутствия автокомплита.


            1. kuza2000
              03.10.2019 14:49

              >комментарии в тексте запроса 1С имхо — моветон
              ??? Комментировать код — моветон ???!!!


              1. MenZurKa
                03.10.2019 15:07

                Комментарии В ТЕКСТЕ ЗАПРОСА, типа такого:

                Запрос = Новый Запрос(
                "|ВЫБРАТЬ
                |* //Комментарий о моей офигенской дописке
                |ИЗ
                |Справочник.ВариантыОтчетов КАК ВариантыОтчетов");

                Это моветон.
                Либо до, либо после текста запроса необходимо ставить комментарий, патамушта если запрос будет большой или разработчик слепой, то твой коммент не увидят, а при правке запроса консолью твой коммент канет в лету


                1. kuza2000
                  03.10.2019 17:54

                  Код SQL ничем принципиально не отличается от обычно программного кода, и точно так же, там есть необходимость писать комментарии. 1С приучила пользоваться конструктором, и не писать комментарии в запросах, потому что это не позволяет конструктор. Но это не значит, что это правильно. Это, на самом деле, проблема.
                  Посмотрите код ERP. Там уже есть комментарии в запросах, некоторые из них мне с экономили часы разборок с кодом. Вот, копирую пример из типовой ERP:
                  |ВЫБРАТЬ // Оплата поставщикам через подотчетное лицо (Дт 60.01 :: Кт 71)


            1. kuza2000
              03.10.2019 14:59

              Вообще, я не говорю — что конструктор плохо. Или что писать руками — плохо. Надо уметь все и применять то, что эффективнее. Руками писать — это однозначно гибче. Но конструктором бывает быстрее. Но не всегда.
              Простой пример. В запросе есть выборка во временную таблицу. Потом она обрабатывается еще в десятке запросов. Вдруг выясняется, что данные надо в этой выборке взять из другой таблицы, с другими названиями полей. Остальное не меняется. Если в конструкторе начать менять выборку в эту таблицу, конструктор безнадежно портит всю обработку, что следует далее.
              В тексте это делается элементарно — просто исправляешь название таблицы и имена полей.

              Причем здесь прогресс — не понимаю. Есть язык запросов (диалект SQL). Что бы на нем писать, надо его знать и понимать. Знать и понимать — это значит уметь читать его текст, и уметь писать на нем. Это главное. Все остальное — это всего лишь вспомогательные инструменты.


              1. gennayo
                03.10.2019 15:07

                Конструктор безнадёжно устарел, это факт. Но уж в EDT то всё-всё будет :))


        1. alkresin
          03.10.2019 09:53

          Я не нахожу этот конструктор удобным. Куча вкладок, кнопок, галочек, часто с невразумительными, интуитивно непонятными подписями. Как там у Радченко, главного 1с-писателя в одном из описаний создания отчета: у вас получился не тот результат, это потому что на пред-предыдущем шаге вы забыли на вкладке… поставить третью сверху галочку на дополнительной панели… — что-то вроде этого.
          И мелкий шрифт, который нельзя (!!!) изменить.
          Нет, спасибо. Конфигуратором (даже не скд) я обычно пользуюсь в последний момент, когда надо уже написанный и отлаженный фрагмент кода скопипастить в модуль и сохранить. А до того предпочитаю пользоваться текстовым редактором, отлаживаюсь через веб-сервис с помощью своей утилиты. Конфигуратор по мне — слишком тормозной и неудобный инструмент.


      1. loki82
        02.10.2019 16:55

        Расскажите это органам требующим квартальную декларацию по алкоголю.


      1. strange2007
        04.10.2019 09:27

        >> у вас что-то не так спроектировано, или инструмент имеет серьезные проблемы
        Тоже сторонник таких методов, но задачи разные бывают. Например, всегда очень сложные отчёты, даже для понимания, у финансистов. Особенно когда они производят план-фактный анализ делегирования фин.управления. Там просто трэш. Не зависимо от платформы, там атас!
        Ну или недавно для кадровиков делал сводный отчёт по сотрудникам. Там тоже ну очень много сложностей получилось и что-то мне подсказывает, что не сильно это от платформы зависит.


    1. Neikist
      01.10.2019 13:59

      98% разработчиков используют СКД

      Результатом работы которого является тот же запрос в виде строки, и который запросто накроется в рантайме если переименовать реквизит/справочник ибо проверку корректности всех запросов после изменения структуры конфигурации в 1с возложили на разработчика.
      Да и иногда запросы формируются динамически, от условий каких то, через конкатенацию строк.

      UPD. Я под конец моей работы с 1с (на 3-4 год) конструктором запросов конечно пользовался, но внутри него открывал текстовое редактирование, ибо так удобнее. И да, при чем тут СКД, когда мы про запросы в коде говорим, а не в отчетах?


    1. Veidt Автор
      01.10.2019 14:22

      на 1С можно наваять сложную систему учета, и она будет работать, за то время пока для обычных 'фреймворков и sql' будут только писать ТЗ и набирать народ с вилкой 180-250

      В 8.3? Я собственно статью и написал, что наваять на ней систему, которая будет нормально работать на >10к записей, не сильно проще чем на том же .Net. А если с lsFusion сравнить, где ни одной из верхних 21 проблем нет (а это еще далеко не все проблемы), то это разница будет как между лошадью и автомобилем. Причем lsFusion под LGPL лицензией, то есть открытыми исходниками, бесплатно и т.п.


      1. MenZurKa
        02.10.2019 12:36

        Не любят в наше время честно вести бизнес. Вместо того, чтоб делать свой продукт качественным и конкурентоспособным (оно может так и есть на самом деле), начинают черный маркетинг на крупных ресурсах.
        Сравнение лошади и автомобиля в комментарии выглядит как популистическая байка.
        1С — известные крупняки, у которых огромный выбор решений, бекграунда, комьюнити, специалистов, франчей и тд. У них хотя бы разъемы подходят к местному бизнесу
        IsFusion — платформа, которая только пытается выйти на рынок, предлагая подобный 1С функционал.

        Я бы хотел почитать аналогичную этой статью о 21 минусе IsFusion.


        1. CrushBy
          02.10.2019 12:38

          Я бы хотел почитать аналогичную этой статью о 21 минусе IsFusion.

          Так разберитесь в lsFusion и напишите. Мы даже ее заплюсуем, насколько сможем. Мы никогда не были против открытого обсуждения любых проблем.


          1. strange2007
            04.10.2019 09:44

            Вы же в 1С не разобрались от слова совсем, но уверенно рассуждаете))))))


            1. Veidt Автор
              04.10.2019 10:43

              Вот надоели уже люди с такими комментами. Ну так ответьте по пунктам, если считаете, что автор где-то не разобрался.


              1. IamAlexy
                04.10.2019 10:45

                управление серверными вызовами — полный провал…


              1. strange2007
                04.10.2019 12:49

                Основа — 1С-ка, это система для автоматизации бизнеса. Авторы фьюжен этого вообще не понимают. Бизнесу нужны подсчёты денег, сдача отчётности и прочее, а не то что рекламируют авторы темы (крутой код). Это основа!!! От неё полностью всё зависит.


        1. Veidt Автор
          02.10.2019 12:52

          1С — известные крупняки, у которых огромный выбор решений, бекграунда, комьюнити, специалистов, франчей и тд. У них хотя бы разъемы подходят к местному бизнесу

          Когда Форд сделал автомобиль, тоже было много стойл, сена, конюхов, известные крупняки и т.п. И по вашему он проблемы лошадей не должен был упоминать?
          А вообще я уже писал:
          «Возможности ничего не стоят, без проблем которые они решают.»


          1. skrimafonolog
            02.10.2019 12:56
            -1

            Когда Форд сделал автомобиль, тоже было много стойл, сена, конюхов, известные крупняки и т.п. И по вашему он проблемы лошадей не должен был упоминать?


            Дык Форд то выиграл по итогу как мы знаем.
            А вы еще нет.
            И не факт что выиграете.
            Как не выиграли еще 5 подобных же перспективных «убийц 1С» в этом веке.

            Вам пишут, что у 1С есть неоспаримые преимущества помимо технологического совершенства (хотя и в этом плане 1С на весьма хорошем уровне).

            А вы в ответ — «зато мы более технически совершенны» (что кстати не очевидно из ваших статей).

            Однако, так как продукт 1С не шняга, незначительным техническим преимуществом (если оно есть вообще) не сместить 1С с рынка.

            Об этом ваш оппонент вам и пишет.


            1. Veidt Автор
              02.10.2019 14:02

              Как не выиграли еще 5 подобных же перспективных «убийц 1С» в этом веке.

              Таких убийц еще не было.
              хотя и в этом плане 1С на весьма хорошем уровне

              И статья это очень хорошо показывает.
              незначительным техническим преимуществом

              Ничего себе незначительным. Тут все проблемы максимально фундаментальны.


              1. skrimafonolog
                02.10.2019 14:04

                Как не выиграли еще 5 подобных же перспективных «убийц 1С» в этом веке.

                Таких убийц еще не было.


                То есть вы не изучили опыт предшественников?


                1. Thosteam
                  03.10.2019 15:37

                  Вы же говорите о ком-то конкретном? Можете озвучить их («убийц»)? Мне действительно интересно.


                  1. gennayo
                    03.10.2019 15:57

                    CUBA Platform :)) Но они вовремя поняли, что пиариться на 1С — не очень хорошая идея.


                    1. Veidt Автор
                      03.10.2019 16:16

                      Это очередной классический ORM с огромным порогом вхождения (ничем не отличающийся от остальных 100). Все равно, что трактор с автомобилем сравнивать.


                      1. gennayo
                        03.10.2019 16:20

                        Уважаемый, вы не поняли мой ответ. Я не сравнивал ваши с Кубой технические достоинства, а сравнивал желание попиарится за счёт более известного конкурента.


      1. skrimafonolog
        02.10.2019 13:21
        -1

        Причем lsFusion под LGPL лицензией, то есть открытыми исходниками, бесплатно и т.п.


        Это имеет значение только для небольшой части потенциальных клиентов вашей системы.
        Вы не забывайте, что ваш продукт вовсе не OpenOffce для дома — а это продукт для бизнеса.

        Стоимость платформы 1С — это копейки.
        По сравнению со стоимостью работ по ее обслуживанию и доработе.

        Ну а ковырять ваши исходники и улучшать ваш продукт, будет вообще мизер. Это нормально.
        Известно же, что большинство людей, даже активно ратующих за Open Source и принипиально будущих сидеть на неудобном свободном открытом ПО вместо удобного пропритетарного — на деле всего лишь потребители. Вносящих вклад в Open Source — крайне незначительное число.
        Ну а уж бизнесу, который и принимает окончательное решение — это вообще предпоследний аргумент.

        Согласен, в каких то случаях это будет приципиально. Например, когда есть свой большой штат квалифицированных разработчиков, те могут и поковырять исходники вашего продукта. Но что то мне подсказывает, что если такие люди есть — то они уже свое и написали.

        Если вы посмотрите на то, как это происходит в мире — как продукты автоматизации бизнеса все больше платные. Бесплатных мало.

        Доминируют только те бесплатные — что базовые кирпичики типа nginx, OpenOffice. Как что сложное и очень ответственное — а система автоматизации это сердце бизнеса — так бизнес уже не ведется на халяву и предпочитает платить разработчикам.

        Безусловно исключения есть. Но их скорее мало, чем много.


        1. Veidt Автор
          02.10.2019 14:03

          Стоимость платформы 1С — это копейки.
          По сравнению со стоимостью работ по ее обслуживанию и доработе.

          Вы уж определитесь как-то. То дорабатывать ничего не надо. То это основная стоимость.


          1. skrimafonolog
            02.10.2019 14:10

            Стоимость платформы 1С — это копейки.
            По сравнению со стоимостью работ по ее обслуживанию и доработе.


            Вы уж определитесь как-то. То дорабатывать ничего не надо. То это основная стоимость.


            Одно другому не противоречит:

            Если делать с нуля, а не брать за основу 1С — то стоимость работы программиста вообще устремляется в небеса. Не так это будет только для мелких задач.

            Речь-то о том, что когда речь идет об серьезной адаптации под хотелки заказчика, то стоимость самой 1С это копейки в общих затратах из-за того, что работы это всегда дорого, это не дешевое тиражируемое решение.

            Да, в ряде случаев — когда достаточно типовых решений — это не так. Работы по доработке мало, стоимость самой 1С сравнительно велика относительно работ. Но тут ваш вариант с open source не может реализовать приимущество своей бесплатности, так как спектра типовых решений у вас нет.

            В вашем случае большинство внедрений сводится к тому, что типовых нет и нужно много работы. Ну экономим мы на стоимости ядра, но переплачиваем за доработку. Плюс время.


            1. Veidt Автор
              02.10.2019 15:01

              Речь-то о том, что когда речь идет об серьезной адаптации под хотелки заказчика, то стоимость самой 1С это копейки в общих затратах из-за того, что работы это всегда дорого, это не дешевое тиражируемое решение.

              Так в этом и смысл. И в этом случае качество платформы выходит на первый план. Чем оно выше, тем стоимость доработки ниже.

              Плюс в таких случаях выгоднее взять решение попроще и его доделать, чем сложнее и его переделывать. То есть проще построить новый дом из крупных панелей, чем перестраивать старый.


              1. skrimafonolog
                02.10.2019 15:12

                И в этом случае качество платформы выходит на первый план. Чем оно выше, тем стоимость доработки ниже.


                Это если платформа предлагает более высокую производительность программиста.

                Вы же принципиально отказываетесь от методик, ускоряющих разработу, таких как элементы визульного программирования.

                Гипотетически ваш путь дает больше гибкости, больше удобства, но — разработка без визуального программирования получается дороже.

                А производительность самой платформы в наш век быстрых и дешевых серверов и дорогих программистов значения имеет мало.

                Плюс в таких случаях выгоднее взять решение попроще и его доделать, чем сложнее и его переделывать. То есть проще построить новый дом из крупных панелей, чем перестраивать старый.


                Вы это серьезно?
                У меня теща к своему частному дому просто пристроила 2 комнаты. Ей это обошлось в 50 000 рублей (ну и плюс внутрення отделка за отдельные деньги потом).

                Вы серьезно считаете, что снести весь дом целиком и построить его из панелей — было бы дешевле? Да как бы не в 50 раз она сэкономила относительно предлагаемого вами варианта.


                1. Veidt Автор
                  02.10.2019 15:29

                  Вы же принципиально отказываетесь от методик, ускоряющих разработу, таких как элементы визульного программирования.

                  Визуальное программирование не ускоряет программирование. Текстом писать гораздо быстрее, в статье на эту тему все расписано по пунктам. Производительность повышается путем повышения уровня абстрагирования, с чем в 1С — беда.
                  У меня теща к своему частному дому просто пристроила 2 комнаты. Ей это обошлось в 50 000 рублей (ну и плюс внутрення отделка за отдельные деньги потом).

                  А если теще комната маленькой покажется и она захочет расширить ее на 10 см, а на кухне окна в пол и высокие потолки сделать, расскажете потом как в 50к уложились.
                  Вы серьезно считаете, что снести весь дом целиком и построить его из панелей — было бы дешевле?

                  Не видели видео как дома разрушают и строят почти такие же? Казалось бы зачем.


  1. Kwisatz
    01.10.2019 13:18

    Кроме всех прочих минусов у 1с есть два огромных, на мой взгляд:

    1. Интерфейс, да он универсален, но в итоге он жрет просто невероятное количество времени. Многие, кому я делал интерфейсы, работающие с данными 1с, потом просили все больше и больше таких вещей. Потому что, когда время заполнения, например, ПКО сокращается в несколько раз, а иногда — в несколько десятков раз, то это имеет осязаемые экономический эффект.
    Если работаем с характеристиками (напр одеждой) то расход времени уже за гранью добра и зла.

    2. Интеграторы. Почти все: лень, наплевательское отношение, некомпетентность. Простой пример: разослал запрос на 50 лицензий + сервер, разброс сумм был впечатляющим, в половине случаев лицензия на сервер отсутствовала. Далее 9 из 10 начали рассказывать о том что нужно обязательно winserv, обязательно mssql, о сложностях поддержки итд. Если спросить про linux то 9,8 из 10 начинает жалобно завывать. Это вообще единственная сфера, где я размахиваю перед людьми существенными деньгами а они в ответ хамят и бросают трубки.


    1. Veidt Автор
      01.10.2019 14:11

      1. Да, с тем же вебом они явно что-то намудрили. Я не понимаю как при таком простом DOM у них demo-ma.1c.ru так тормозит. Вообще эта тема просто не влезла в статью. Куда логичнее кстати было бы сделать просто вход для custom frontend'а, скажем генерить тот же код на реакт, и чтобы при необходимости разработчик мог его изменять. Типа как тут. Но 1с походу принципиально ни с кем не интегрируются.

      2. Ну это следствие определенной консолидации рынка с одной стороны и низкой IT-грамотности с другой стороны.


      1. Kwisatz
        01.10.2019 14:23

        Дело не только в тормозах, сам интерфейс это ужас и ад.


        1. strange2007
          04.10.2019 09:59

          С точки зрения психологии восприятия информации альтернатив не встречал. Например, раньше кнопка «Записать» была снизу справа. И это именно для того, что бы прежде чем на неё нажать, человек автоматически пробегал взглядом по форме. Сейчас же, когда всё направлено на минимизацию элементов формы «Записать» уже слева сверху, как раньше у отчётов. Что-то мне подсказывает, что это связано с тем, что человеческое восприятие адекватно анализирует только 5-8 объектов и всё. Соответственно если спроектировать идеальную форму, то нажимая на «Записать» в левом верхнем углу человек неосознанно будет анализировать всю форму.
          Ну и так во всех мелочах. Писать много лень, да и занудство это.
          В общем уверен, что у Вас простое дело привычки — в 1С не как в той крутой системе


          1. Kwisatz
            04.10.2019 17:31

            в 1С не как в той крутой системе

            Она была создана после того как я несколько лет работал с 1с.

            В общем уверен, что у Вас простое дело привычки

            Создайте в базе 5 футболок с размерной сеткой xs-xl и 5 цветами, потом выставьте счет на эти футболки. Если у вас не было такого опыта раньше, скажите, с какой итерации вы это сделаете)

            Сейчас же, когда всё направлено на минимизацию элементов формы

            Направление только выбрано так себе, делать это нужно не так.

            Кстати за перемещение элементов интерфейса в непредсказуемом направлении вообще разработчики должны гореть в аду.


  1. Ilha
    01.10.2019 13:25
    +1

    Статей с критикой 1С на Хабре достаточно (например, один, два, три), но, на мой взгляд, они либо слишком много внимания уделяют всяким мелочам, вроде неправильной организации меню, либо рассуждают о слишком абстрактных вещах, в которых 1С, возможно, и не виноват.
    Потому что, например, некая компания Тринион — консалтинговая, и об 1С рассуждает далеко не айтишник, а походу вообще заказной копирайтер, потому что при личном общении их «лицо» с трудом ровно на русском выражается. У вас же классный, айтишный взгляд, не ссылайтесь на гуманитариев :-)


  1. m-rv
    01.10.2019 13:46
    +1

    такой объемной попытки «объять» эту тему я еще не видел. ))
    есть еще как минимум две проблемы:
    — общий контекст для разных тредов. т.е. в платформе реализовать синглтон невозможно по определению. весь контекст существует в рамках одного треда.
    — сами разработчики. они просто не хоят по-другому. я делал решения для как минимум двух перечисленных вами проблем: запросов на изменение и функционального стиля кода — меня закидали тухлыми помидорами за то, что я тут со своими улучшайзингами лезу в их прекрасный 1С


    1. Veidt Автор
      01.10.2019 14:14

      Это да. Про проблемы с многопоточностью я действительно забыл. Но справедливости ради в бизнес-приложениях она нужна не так часто.

      PS: Кстати в процессе обсуждения похоже набирается материал для второй части :).


      1. m-rv
        01.10.2019 14:36

        будете писать вторую часть — можете пользоваться: infostart.ru/public/1087149


        1. Veidt Автор
          01.10.2019 14:42

          Спасибо за наводку, почитаю.

          P.S.: Не думал, что инфостарт статьи с критикой 1С пропускает.


          1. D01
            04.10.2019 17:38

            А вот взгляд с другой стороны
            forum.mista.ru/topic.php?id=843057


  1. EvilBeaver
    01.10.2019 14:02
    +1

    Дежа вю. Вы ведь уже писали раньше про то, что 1С говно. Вот даже ссылка нашлась ваша же: https://m.habr.com/ru/company/lsfusion/blog/465221/


    1. Veidt Автор
      01.10.2019 14:06

      Не поверите, но в этой статье даже ссылка на ту статью есть. Но там всего один маленький кейс — Отсутствие наследования и полиморфизма рассматривался. А это более глобальный разбор полетов так сказать.


    1. Neikist
      01.10.2019 14:07

      Та статья, имхо, гораздо более спорная, и только про один аспект. Эта статья гораздо лучше аргументирована на мой взгляд.


      1. MenZurKa
        02.10.2019 14:01

        Автор обучается, еще несколько статей и все однозначно поймут мысль, которую он хочет донести
        *сорказьмы


        1. Veidt Автор
          02.10.2019 14:04

          Поверьте те кто может, уже давно поняли мысль, которую пытался донести автор. Ну а «горбатого, могила исправит».


    1. vicros
      01.10.2019 14:15

      Дежавю не дежавю, но текущая статья просто шикарна. 1С говно — и вы с вашим 1Script и прочими костылями тому подтвержение.


      1. EvilBeaver
        01.10.2019 14:37

        О, и мне помидорчик достался, прям даже с переходом на личности. Ну не воспитали вас мама с папой, чтож, горевать не буду, мало ли мудаков на свете


        1. vicros
          01.10.2019 14:59

          Нет в данном случае не хотел Вас оскорбить, я об общем выводе из ситуации — 1С не достаточно развита поэтому Вам в лице сообщества приходится делать их работу, а Вы с 1Script и прочими BSL лишь больше развращаете этого монополиста. Не обижайтесь на критику, но Вы как разработчик 1С разве не испытываете боли от перечисленных в статье фактов? Самое забавное что на рациональную критику всегда логично предоставлять какое решение или ответ — а тут никто ответить не может так как ничего не может сделать с монополией, а как известно монополия без конкуренции — не ведет к развитию, собственно это я и наблюдаю.


  1. Neikist
    01.10.2019 14:06

    Не полностью согласен с частью пунктов, но перечислено многое из того что сподвигнуло меня уйти из разработки на 1с спустя 4 года, о чем не жалею (пусть ушел не в разработку бизнес систем на других языках и платформах, а в андроид разработку).


  1. m-rv
    01.10.2019 14:07

    А еще 1С совершила один подвиг: благодаря ей тысячи и тысячи российских программистов не могут мечтать о том, чтобы завести трактор!


    1. gennayo
      01.10.2019 14:22
      +1

      Кто из них этого реально хочет — свободно перейдёт на другие языки и таки заведёт :))


      1. m-rv
        01.10.2019 14:40

        ну… зависит от того что вы вкладываете в понятие «свободно»… 1С это всеже довольно изолированный мир и, условно, будучи синьером «там» — вы не сможете претендовать на мидла «тут» по умолчанию.
        даже джуном влезть не просто, а учитывая еще что все-таки привыкаешь к определенному уровню достатка, обрастаешь семьей и ипотекой — почти невозможно


      1. loki82
        02.10.2019 22:10

        Сужу по себе. Очень не свободно. Когда кодил на 1С 15 лет. И пытаешься осмыслить нормальные подходы к программированию, то оно как-то тяжело укладывается. Сильно не хватает скелета, основ не знаю как назвать.
        Я видел развитие 1С от 6.0 до текущего момента. И вот писать на ней теперь это адский ад. Одни только создания и вызовы оповещений чего стоит. Серьезно. Оцените.

        Процедура ОповещениеОбУстановкеВнешнихКомпонент(ДополнительныеДанные) Экспорт
          Если  ДополнительныеДанные["Источник"] = "Asterisk-Native" тогда
            ПослеУстановкиКомпоненты = Новый ОписаниеОповещения("ОповещениеОбОтветеПользователя", УправлениеТелефониейКлиент);  
            ПоказатьВопрос(ПослеУстановкиКомпоненты,"Требуется перезапуск программы. Перезапустить?",РежимДиалогаВопрос.ДаНет,15,КодВозвратаДиалога.Да,,КодВозвратаДиалога.Да);
          КонецЕсли;
        КонецПроцедуры
        
        Процедура ОповещениеОбОтветеПользователя(Результат,ДополнительныеДанные) Экспорт
        	Если Результат =КодВозвратаДиалога.Да тогда
        		ЗавершитьРаботуСистемы(Ложь,Истина);
        	КонецЕсли;
        КонецПроцедуры

        А вот это все:
        &НаКлиенте
        ПроцедураНаКлиенте,
        &НаСервере
        процедураНаСервере
        , да еще и без контекста. Да еще и в общих модулях проставь галочки клиент не клиент, сервер не сервер, глобальный не глобальный, ВнешнееСоединение.
        Были задачи для интеграции сайта личного кабинета и http-сервисов 1С. Так у меня на vueJS + vuex строк получилось сильно меньше чем на 1С. Сейчас изучаю golang и теперь есть с чем сравнивать. Пример уже не приведу, но получалось так что простейшее действие на 1С выполнялось в 20 строк кода. А на go 4 строки.
        Вызывать обновление формы клиента из серверной части только недавно научились. До этого пришлось написать компоненту которая по «ВнешнемуСобытию» лезла на сервер за подробностями. Ну вот как такое называется?
        Но есть и положительные моменты, хуки жизненного цикла документа(ПередЗаписью, ПриЗаписи, ПослеЗаписи — они очень необходимы. И если мне в другом ПО говорят что этого нет. Значит продукт очень молодой, и не дошел до задач которые решаются такими вызовами.


        1. Veidt Автор
          02.10.2019 22:51

          Но есть и положительные моменты, хуки жизненного цикла документа(ПередЗаписью, ПриЗаписи, ПослеЗаписи — они очень необходимы. И если мне в другом ПО говорят что этого нет. Значит продукт очень молодой, и не дошел до задач которые решаются такими вызовами.

          Такие события это детский сад. Хуки на вычисляемые данные вот это вещь. С ней такие вещи можно делать, что 1С и не снилось.


          1. loki82
            02.10.2019 23:03

            Я так понял вы один из разработчиков lsFusion. Честно. Дважды читал ваши статьи и дважды пытался понять по вашему сайту как все устроено. Читал по диагонали. Но вот как бы полноценной документации не увидел. И меня смущает java+tomcat. Очень плохие ассоциации из iiko. Вообще давно хочу решить несколько стандартных задач. Ваш продукт вроде подходит, но я прихожу к выводу что сервер должен быть сервером а клиент клиентом. И все это общаться на стандартизированном API.


    1. EvilBeaver
      01.10.2019 14:45

      Не знаю ни одного человека (в т.ч. 1С-ника) который бы очень хотел завести трактор, но не мог. Вот прям хотел, но не мог, 1С проклятый мешает. Все кто хотел — уехал, подучился, прокачался, а некоторые и прямо со скиллами 1С-ника уехали 1С-ить — никаких проблем.


  1. Dima_dd
    01.10.2019 14:43

    (без необходимости гадания, что же это за поля и таблицы — _Fld16719 и _Document5759)
    . Зачем гадать, можно без проблем расшифровать значение любой таблицы или поля.


    1. Veidt Автор
      01.10.2019 14:46

      Ключевое слово тут — расшифровать. Очень удобно, когда в SQL Profiler'е анализируешь запрос.


      1. Dima_dd
        01.10.2019 15:27

        не очень корректное сравнение, расшифровать поле/таблицу в 1с, минута времени, ноль интеллектуальных затрат.


        1. Neikist
          01.10.2019 15:28

          Серьезно? А потом держать в памяти или выписывать куда то и постоянно проверять все расшифрованные названия? Вы издеваетесь?


          1. mihailfilatov
            01.10.2019 15:45

            А для чего?


            1. CrushBy
              01.10.2019 15:50

              Для чего читать планы запросов и смотреть профайлером «дорогие» запросы? Лучше же там видеть нормальные названия полей и таблиц, а не белиберду. Разве нет?


              1. Dima_dd
                01.10.2019 16:50

                Да, в профайлере не посмотришь, небольшое неудобство есть. Но я думаю вряд ли даже 1/2 процента 1с программистов сталкивается с этой задачей хотя бы раз в неделю. И как написано в заголовке статьи это уж точно не тянет глобальную фундраментальную проблему.


              1. strange2007
                04.10.2019 10:18

                >> Для чего читать планы запросов и смотреть профайлером «дорогие» запросы?
                И в правду, зачем? 20 лет в 1С тружусь и вот никогда такой мысли не было. Может кто-то не умеет правильно её готовить?


                1. Neikist
                  04.10.2019 12:10

                  Сколько у вас было максимум пользователей в одной базе?


                  1. CrushBy
                    04.10.2019 12:14

                    Кстати, не совсем корректный вопрос. Мы у одного клиента предоставляли доступ из внешнего личного кабинета через JSON Api по заполнению профиля пользователя (у нас в базе хранится и получается эта информация). Зарегистрировалось за неделю что-то около 100К пользователей. Можно сказать, что у нас в системе было 100К пользователей?


                    1. Neikist
                      04.10.2019 12:16

                      Да, поправлюсь. Одновременных пользователей (кстати, вы описали немного нелегальное использование, 1с на каждого пользователя использующего веб или хттп сервисы требует отдельную лицензию, пусть технически это и не так).


                  1. strange2007
                    04.10.2019 12:54

                    400. Круглые сутки. Только вот реальная нагрузка была, когда нашёл контору всего со 100+ пользователями. Вот там всё ложилось нафиг.
                    И да, приходили крутейшие автоматизаторы-оптимизаторы и все делали одну и ту же ошибку — надо автоматизировать бизнес, а не кичиться крутостью кода. Именно поэтому все кодеры делали только хуже, ну а мой дружбан как раз всё сделал по семиуровневой модели разработки и сейчас контора вообще тормозов не знает.

                    А вообще, должно быть понимание, что 1000 пользователей бьющих один документ, раз в 5 минут и формирование фин.отчётности одним человеком, это капец какие разные нагрузки. Один человек гораздо больше грузит систему. А если к нему добавить бухгалтерию с расчётом себестоимости, то и несколько тыс операторов не создадут такую нагрузку


                    1. Neikist
                      04.10.2019 13:03

                      Ну вообще согласен с тем что нагрузка не совсем прямо связана с количеством пользователей одновременных, но корреляция тем не менее есть.
                      Нам помню приходилось разбирать планы запросов когда запускали ТОИР в магните, 1000+ обычных одновременных пользователей и пара тысяч мобильных (которые в целом работают оффлайн ибо часто находятся вне сети, но создают нагрузку когда предварительно загружают все нужные им данные для использования локально, а так же изменения из ассоциированных узлов планов обмена). В общем когда пользователей начали массово запускать в базу, параллельно вести паспортизацию оборудования (миллионы элементов довольно тяжелого справочника), запускать обмен с мобилками — бегали в мыле и искали и оптимизировали запросы, бизнес логику, с блокировками разбирались и еще много чем заниматься приходилось. Хотя мне, признаю, планы запросов разбирать не приходилось. Коллега готовился к эксперту и все такие задачи себе загребал для наработки практики.


                      1. strange2007
                        04.10.2019 16:18

                        Признаюсь — весь мой опыт по оптимизации, это накидывание серверов в стойку. Просто оптимизация запросов гораздо дороже обходится и в конечном итоге тормознутее получается. В общем я не сторонник тонкой настройки софта.


                    1. skrimafonolog
                      04.10.2019 13:50

                      ну а мой дружбан как раз всё сделал по семиуровневой модели разработки


                      Можно поподробнее, пожалуйста?


                      1. strange2007
                        04.10.2019 16:14

                        6. Внешние изменения (изменения законодательства, форс-мажорные обстоятельства) — Уровень не поддаётся оптимизации, т.к. находится
                        за рамками воздействий предприятия. На этом же уровне располагается и обновление системы. И да, по этому пункту тоже очень слабое
                        влияние.
                        Обновления конфигураций и изменение законов.

                        5. Стратегические изменения (руководители предприятия) — Оптимизация подразумевает разумности руководителя. Тоже
                        слабооптимизируемый, т.к. для собственника низшие слои не всегда авторитетны. Если руководитель придумал не совсем правильную идею, то хоть
                        заоптимизируйся, но всё будет упираться как раз в эту идею.
                        На этом же уровне учитывается стратегическое развитие конторы. Нельзя умничать по этому пункту, если действия могут навредить компании. Кочевряжеться можно только
                        если по 6 уровню всё расползается.

                        4. Тактические идеи (заказы от сотрудников организации) — Оптимизация самая «горячая». Иногда приходится тратить месяцы, чтобы вразумить
                        пальцегнутого заказчика. Особенность этого уровня в том, что неудачи усиленно сваливаются на исполнителя.

                        3. Программная реализация отдельных блоков. Можно долго переписывать бюджетирование ERP, при этом получится «так себе поделка», а можно изучить
                        методологию и использовать то, что давно придумано и сделано. Или, например, можно потратить год на оптимизацию отдельного блока, а он потом
                        уже никому и не нужен. Поэтому лучше сделать проще

                        2. Оптимизация кода. Оптимизация запросов, кода и т.д.

                        1. Оптимизация софта

                        0. Оптимизация «железа»

                        Через это сито прогоняешь любую задачу и почти в ста процентах ниже пункта №3 спуска нет и всё работает прекрасно


          1. Dima_dd
            01.10.2019 15:49

            Куда вписывать, зачем держать в памяти, в 1с открыл обработку которая показывает соотв. объектов метаданных таблицам и нашел. Дело минуты.


            1. Neikist
              01.10.2019 15:59

              CrushBy выше уже ответил.


  1. DikSoft
    01.10.2019 14:57
    +2

    Для полного счастья не хватает ещё пары камней в огород 1С.
    1) Низкий порог вхождения разработчика, когда «по образцу» без понимания механизмов можно писать совершенно раздолбайский код, типа перебор всех строк и сравнение, вместо запроса, и он будет работать! Из первого камня следует второй:
    2) Очень жестокая ловушка «роста масштаба». До определенного размера всё это «раздолбайство» реально «летает», а потом «вдруг» при достижении некоторого предела начинает резко и конкретно тормозить. И вот чтобы разгрести этот накопившийся чудо-код, нужны уже совершенно другие затраты на разработчиков. Откуда и мощный негатив и зачастую презрительное отношение уже ко всем 1С-кодерам.


    1. Veidt Автор
      01.10.2019 15:14

      Низкий порог вхождения в 1С — это иллюзия, которая уже давно далека от реальности. Собственно наличие SQL внутри 1С (то есть JOIN'ов с типами) задирает уже задирает порог вхождения достаточно высоко. Хотя если забить на масштабируемость, то да не предельно высоко, но все равно высоко.

      А с масштабируемостью — даже .Net будет проще. lair не даст соврать.


      1. lair
        01.10.2019 15:15

        lair с 1С не работает. К счастью.


        1. Veidt Автор
          01.10.2019 15:19

          Ну я про то, что в .Net то все просто. Там и работа с запросами в языке, и явная типизация, и много чего еще, про что не раз говорилось в предыдущих темах. Ну и я куски 1С кода в статье приводил. В .Net же явно красивее. Нет?


          1. lair
            01.10.2019 15:21

            Я, если честно, не горю желанием читать статью. По моим субъективным ощущениям, в .net — красивее, да.


          1. retran
            02.10.2019 15:50

            Проходил мимо и не смог не вмешаться.

            Мне интересно каким образом вы смешали и по каким критериям сравниваете язык программирования общего назначения C#, платформу .NET, технологическую платформу и фреймворк 1С: Предприятие и ее мягкий слой в виде предметно-ориентированного скриптового языка BSL?


            1. Veidt Автор
              02.10.2019 15:54

              Все очень просто берем абстрактную сложную информационную систему. И представляем, что мы ее разрабатываем / или нам нужно ее доработать, и она написана на .Net / 1C / / Python / lsFusion и т.п.


              1. retran
                02.10.2019 16:08

                Не могу себе представить сложную информационную систему написанную на .net или python.

                Могу представить систему, где бэкенд написан на c# версии 7 (или на vb.net) на фреймворках asp.net core и ef core и работает под .net core, или python + flask + еще куча всего, а фронтенд — на typescript и react, например.

                Так что с чем сравниваем?


                1. Veidt Автор
                  02.10.2019 16:51

                  Странно мне казалось, что в .net что-то и для фронтенда есть. Призывается lair во второй раз. На чем фронт обычно делают при использовании .Net.

                  Но ок, пусть фронтенд на реакте будет, хотя да конечно это порог вхождения увеличит, тут я действительно немного преувеличил. Но подождем lair'а.


                  1. lair
                    02.10.2019 17:21

                    Вот зачем вы меня в эксперты всея .net записываете? У меня там вполне узкий ограниченный круг интересов.


                    И таки да, по моим представлениям, если вообще нужен интерактивный фронт (потому что обычный HTML-то можно на чем угодно сгенерить), берут фронт-енд фреймворк. Есть контролы, есть хелперы, есть интеграции — каждый сам для себя выбирает, как ему удобно делать.


                  1. retran
                    02.10.2019 17:47

                    На чем фронт обычно делают при использовании .Net

                    На чем угодно и в зависимости от того какой фронт.
                    Призывается lair во второй раз.

                    Если для вас это так важно, то я, в общем-то, почти уверен, что lair подтвердит мою правомочность разговаривать и про дотнет и про 1С.


                    1. lair
                      02.10.2019 17:51

                      Это вообще забавно, конечно, что вообще призодит в голову идея, что такие вещи должен кто-то третий подтверждать.


                      1. retran
                        02.10.2019 18:06

                        Argumentum ad verecundiam же. Он тебе доверяет :))))


                        1. Veidt Автор
                          02.10.2019 18:21

                          Ну просто в свое время, lair так усиленно рассказывал как в .net все круто (в том числе в споре про логику форм емнип), что у меня сложилось впечатление, что в .net логика представлений (фронтенд) из коробки. Тока правда я так и не понял, а что .net предлагает для форм использовать? Богомерзкий javaScript?


                          1. retran
                            02.10.2019 18:33

                            .net не предлагает использовать для форм ничего. Есть множество фреймворков, каждый из которых предлагает что-то свое. И в .net первичен рантайм.

                            1С в первую очередь предлагает один единственный «фреймворк-платформу» (в которую входят изоморфные «управляемые формы»), а рантайм и язык являются производными от этого фреймворка и жестко заточены под конкретные задачи.

                            Я не понимаю как можно сравнивать полноценный язык общего назначения с DSL, который проектируется под очень узкий и конкретный набор задач и конкретный узкий рынок. С какой-то натяжкой можно еще сравнить какой-нибудь фреймворк или набор фреймворков (как технологический стек) для .NET с 1С и… на конкретных задачах, под которые затачивалась 1С, этот конкретный стек будет проигрывать по критериям скорости и стоимости разработки и поддержки. Пока вы не наткнетесь на задачу, которая в рамках 1С нереализуема.


                            1. kryvichh
                              02.10.2019 18:48

                              Ну если под узким рынком иметь ввиду бизнес-приложения, то их вполне можно писать и на 1С, и на .NET, и на Java, и на Delphi (вполне успешно). И потому можно сравнивать и по удобству для программера, по поддержке платформ (ОС, mobile, БД — Java рулит, в т.ч. lsFusion), по скорости работы решения и требовательности к ресурсам (тут Delphi на коне), по наличию готовых решений (в России 1С вне конкуренции) и т.п.

                              В данной статье автор затронул только технический аспект: удобство для разрабов, язык разработки, простота поддержки и доработки, управление версиями и т.п.


                              1. retran
                                02.10.2019 19:00

                                если под узким рынком иметь ввиду бизнес-приложения


                                Конечно, и тогда по совокупности факторов 1С в России вне конкуренции в small и medium business и потихоньку начинает подпирать SAP в больших энтерпрайзах.

                                В данной статье автор затронул только технический аспект: удобство для разрабов, язык разработки, простота поддержки и доработки, управление версиями и т.п.


                                Здесь надо все-таки различать легаси, которое существует по историческим причинам и с наличием которых никто не спорит, включая саму 1С, и сознательные решения, которые делают платформу удобной на узких задачах, но отвратительной на задачах на которых ее сравнивают с языками общего назначения.


                                1. kryvichh
                                  02.10.2019 19:22

                                  В статье приведены технические проблемы самой платформы 1С, вне зависимости от решаемых задач.

                                  Что касается продажи готовых решений, то тут зарабатывает в основном сама 1С или франчайзи. Поэтому большинству посетителей Хабра или даже той же Мисты такой бизнес карман не наполнит.

                                  А если потребуются доработки готового решения, где уже смогут заработать тысячи программистов по всей стране, то для них (нас) технические удобства платформы уже играют немалую роль. И писать на Basic-подобном языке, без новомодных фич, без полноценного функционального IDE становится уже не так интересно на фоне Visual Studio, IDEA или даже Delphi.


                                  1. retran
                                    02.10.2019 19:45

                                    без новомодных фич


                                    Без каких?

                                    без полноценного функционального IDE


                                    А что не так с EDT?

                                    Я серьезно спрашиваю, потому что возможно смогу объяснить почему введение каких-то фич из языков общего назначения в DSL может быть не лучшей идеей.


                                    1. kryvichh
                                      02.10.2019 20:20

                                      Ну, например, что касается языка: интеграция языка доступа к БД в язык платформы, с автодополнением, подсказками и т.п. (как раз по теме разработки бизнес-приложений). Свёртывание блоков кода. Замыкания. Типизирование переменных и проверка на типы во время компиляции (мне как Дельфисту это особенно не нравится в 1С). Полноценное ООП с наследованием и полиморфизмом. Параллелизм. Ну и т.д. и т.п. Просто сравните язык 1С с С#, Java, Python или Delphi, и всё вылезет.

                                      Дальше IDE: рефакторинг, синхронное редактирование идентификаторов (в Delphi очень удобно), графическое выделение структуры (вертикальные полоски в Delphi), переход на определение функции/переменной по Ctrl-Click, возможность отредактировать код во внешнем редакторе, про системы контроля версий писал автор, ну и т.д. — открыть описание фич любой современной IDE и пройти по списку. Насчёт EDT я не знаю, сравниваю со встроенным IDE которое идет с 1С 8.2 (Конфигуратор).

                                      Дальше Debugger: тоже самое… Ну я думаю вы и так прекрасно знаете, насколько современные IDE ушли вперёд за последние скажем 5 лет. А основная функциональность IDE 1C застыла на уровне наверное 1С 7.7 — это аналог первых версий Delphi и Visual Basic.


                                      1. retran
                                        03.10.2019 12:23

                                        Просто сравните язык 1С с С#, Java, Python или Delphi, и всё вылезет.


                                        Так нельзя же их сравнивать, это разные вещи.

                                        Давайте по порядку:

                                        интеграция языка доступа к БД в язык платформы, с автодополнением, подсказками и т.п. (как раз по теме разработки бизнес-приложений).


                                        Да вот только linq query syntax в C# получился достаточно сомнительным и его не так много людей используют.

                                        Замыкания.


                                        Соглашусь.

                                        Типизирование переменных и проверка на типы во время компиляции


                                        Я с вами в целом соглашусь, а вот любители языков с динамической типизацией — нет, и далеко не факт, что здесь нужна статическая.

                                        Полноценное ООП с наследованием и полиморфизмом.


                                        Зачем?

                                        Параллелизм.


                                        Он в 1С есть, сознательно урезанный.

                                        Свёртывание блоков кода.


                                        Дальше IDE: рефакторинг, синхронное редактирование идентификаторов (в Delphi очень удобно), графическое выделение структуры (вертикальные полоски в Delphi), переход на определение функции/переменной по Ctrl-Click, возможность отредактировать код во внешнем редакторе, про системы контроля версий писал автор


                                        Почти все есть в EDT.


                                        1. skrimafonolog
                                          04.10.2019 12:22

                                          Типизирование переменных и проверка на типы во время компиляции


                                          Я с вами в целом соглашусь, а вот любители языков с динамической типизацией — нет, и далеко не факт, что здесь нужна статическая.


                                          Как любитель статической типизации и при это хорошо знакомый с 1С — совершенно не понимаю статическая типизация в 1С.

                                          Это же узкозаточенный язык, манипулирующий готовыми типами объектов.

                                          Не нужно тут проводить аналогий с языками программирования общего назначения. На тех языках вы будете писать все алгоритмы, да. Но в 1С значительная часть алгоритмов реализована движком платформы и скрыта от вас, находится вне языка программирования 1С, вы получаете в использование просто готовые объекты.

                                          Так что сложность алгоритмов кода 1С не столь велика. Там больше манипуляций с готовыми объектами, что движком поставляются.

                                          И использование статической типизации в данном случае — только усложение кода и работы с ним.

                                          Опять таки, это позволяет куда как проще производитель организацию слабосвязанных модулей.


                                          1. kryvichh
                                            04.10.2019 13:49

                                            Когда изучаешь чужую разработку в 1С, в процедуру приходит параметр Нечто, без указания типа, как быстро определить что это? Как получить доступ к его свойствам, методам? По контексту? Искать вызовы этой процедуры и уже там выяснять (и запоминать) тип? А если процедуры вложенные, бежать по лесенке до верха стека вызовов?

                                            Допустим выяснили, что Нечто — это ссылка на НекийДокумент. Чтобы обращаться к членам класса всё равно придётся держать открытым окно конфигуратора с описанием этого документа. И вручную печатать нужные члены в код…

                                            Ну да это всё и так известно. И что язык 1С давно и безнадёжно устарел всем понятно. Но налаженная инфраструктура, тонны разработок, десятки тысяч специалистов их спасает. Однако если платформа будет дорожать, то бесплатные опенсурсные проекты, созданные на десятилетия позже 1С с учётом всех новинок в программировании, могут составить ей мощную конкуренцию. Даже без всех неоспоримых плюсов 1С.


                                            1. Neikist
                                              04.10.2019 13:52

                                              Как получить доступ к его свойствам, методам? По контексту? Искать вызовы этой процедуры и уже там выяснять (и запоминать) тип? А если процедуры вложенные, бежать по лесенке до верха стека вызовов?

                                              Прямо вьетнамские флешбеки словил… Это конечно немного решается комментариями — но так себе((


                                            1. skrimafonolog
                                              04.10.2019 15:19

                                              Когда изучаешь чужую разработку в 1С, в процедуру приходит параметр Нечто, без указания типа, как быстро определить что это?


                                              Это понятно.

                                              Не неразрешимая проблема. Говорящие названия переменных используют для подобного случая. И/или комментарии.

                                              Согласен, что в языках со статической типизацией можно использовать и другие методы. Но это не неразрешимая в языках с динамической типизацией проблема. И кстати, а чем вам поможет, если переменная в чужой разработке типа «МойСуперПуперТипНеСкажуЗачем»?

                                              А теперь посмотрите доводы тех, кто написал серьезные вещи на PHP (та еще древняя версия была без всей этой новомодности; Facebook), Python (Google, Dropbox первой версии) и пр. — почему они в свое время выбрали именно языки без статической типизации.

                                              Допустим выяснили, что Нечто — это ссылка на НекийДокумент. Чтобы обращаться к членам класса всё равно придётся держать открытым окно конфигуратора с описанием этого документа. И вручную печатать нужные члены в код…


                                              Зачем?
                                              Просто типизируйте явно эту переменную.

                                              Нечто = Документы.НекийДокумент.СоздатьДокумент();


                                              Я всегда так делаю.
                                              После этого IDE подсказывает.
                                              Потом типизацию убираю.

                                              Понятно что это не совсем идеальный вариант. Но рабочий.

                                              Вы же предлагаете вводить коренные изменения в языке ради решения проблемы, что решается просто.


                                              1. kryvichh
                                                04.10.2019 15:26

                                                Ну да, это не новый спор. Основной довод — меньше печатать. Можно ещё комментарии в SQL-код не вставлять, для ускорения процесса так сказать.


                                                1. skrimafonolog
                                                  04.10.2019 15:52

                                                  Ну да, это не новый спор. Основной довод — меньше печатать.


                                                  Да нет, не он.
                                                  Вы рассуждаете о примитивных типах — когда просто тип в переменной, которая пришла в параметрах функции.
                                                  Тут действительно — чего сложного тип прописать в параметрах.

                                                  А ежели туда передается не число и не строка, а аж целая структура? Его же объявить нужно.

                                                  И это будет уже не просто одно слово на каждую переменную.

                                                  В языках со статической типизаций нааааааааамного больше кода.

                                                  Правда для компенсации — языки с динамической типизацией требуют больше кода для тестов. Вот только, положа руку на сердце, уж чем-чем а текстами часто пренебрегают.


                                                  1. kryvichh
                                                    04.10.2019 16:02

                                                    А кто мешает
                                                    type TMyType = TSomeClass<Integer, TIterator>(TParent1);
                                                    и потом использовать тип TMyType?
                                                    И печатать немного, и переменная типизированная.


                                                    1. skrimafonolog
                                                      04.10.2019 16:13

                                                      А кто мешает
                                                      type TMyType = TSomeClass<Integer, TIterator>(TParent1);
                                                      и потом использовать тип TMyType?
                                                      И печатать немного, и переменная типизированная.


                                                      То, что мешает вашему гипотетическому программисту из вашего примера давать говорящие названия переменным или комментарии писать к параметрам.

                                                      Полагаю, ровно тоже будет и мешать делать то, что вы предлагаете.


                                      1. strange2007
                                        04.10.2019 10:46

                                        Все описанные недостатки либо сделаны в 1С 8.3 (а сейчас как раз она используется), либо очень даже вредны. Например, ООП, это плюшка кодеров, которые делают красивый код. Но это абсолютная ненужность для программистов-аналитиков. которые рассуждают объектами бизнеса, а не методами сортировки массивов данных.
                                        Типизация переменных тоже ерунда полная. Изначально типизация появилась из-за технических ограничений. Далее типизацию оставили как дань прошлому, так и из-за того, что тру-кодеры начали кодить разношёрстные каши с километровыми листингами и анализировать это стало как минимум страшно. Так вот хоть типизация спасала от явных ошибок.
                                        В рамках парадигмы 1С надо делать каждый модуль (или серию модулей) максимально изолированным и максимально понятным без лишних затрат времени. В этом случае типизация просто бессмысленна как вид.
                                        При этом локальные переменные всегда в 1С объявляю))))


                                        1. Alexeyslav
                                          04.10.2019 11:44

                                          Типизация просто отвлекает когда человек занимается бизнес-процессами, а система требует определиться с типами переменных. Но в результате возникает другая проблема: какой результат должен быть у выражения 1+1? «2» или может «11» или вовсе «11.0» это беда многих языков с универсальным типом данных. Причем в бизнес-задачах уже заранее известно с какими данными мы работаем — строка, целое число или вещественное. Второй менее важный вопрос как организовано хранение массивов этих чисел, массив чисел типа VARIANT объёмом в миллион значений может запросто откусить кусок памяти в 100Мб и все операции с таким массивом будут происходить с постоянным перевыделением памяти и тасканием десятков мегабайт туда-сюда. Хотя наверно для 1С это не очень актуально, но кто знает… копейка рубль бережёт.


                                          1. kryvichh
                                            04.10.2019 12:00

                                            Типизация спасает от многих неочевидных ошибок, на этапе компиляции. И позволяет быстро разобраться с чужим кодом. Но сейчас даже в Delphi — строго типизированном языке — появился вывод типов, т.е. когда тип переменной очевидно и однозначно выводится из присваиваемого значение, тип можно не указывать. Это здоровый компромисс.


                                        1. Neikist
                                          04.10.2019 12:11

                                          Изначально типизация появилась из-за технических ограничений

                                          Гы, вы это скажите С или асму где типизация не строгая. Да и лисп появился очень давно, там типизация динамическая.


                                      1. skrimafonolog
                                        04.10.2019 12:10

                                        Свёртывание блоков кода.

                                        А давно этого нет у 1С?

                                        Дальше IDE: рефакторинг, синхронное редактирование идентификаторов (в Delphi очень удобно), графическое выделение структуры (вертикальные полоски в Delphi), переход на определение функции/переменной по Ctrl-Click, возможность отредактировать код во внешнем редакторе, про системы контроля версий писал автор, ну и т.д. — открыть описание фич любой современной IDE и пройти по списку.


                                        Полноценно работает только для языков программирования со статической типизацией.


                                      1. skrimafonolog
                                        04.10.2019 12:16

                                        Дальше Debugger: тоже самое… Ну я думаю вы и так прекрасно знаете, насколько современные IDE ушли вперёд за последние скажем 5 лет. А основная функциональность IDE 1C застыла на уровне наверное 1С 7.7 — это аналог первых версий Delphi и Visual Basic.


                                        Да ладно, «застыла»…
                                        Удаленная отладка — это свежее так навскидку — то чего не было 7.7.

                                        И кстати, что там такого революционного произошло в отладчиках?

                                        Насколько вижу — большая часть отладачных механизмов в современных IDE для всех языков — еще времен Turbo Pascal, он это все умел с версии 5, выпущенной в 1988.


                                  1. skrimafonolog
                                    04.10.2019 12:05

                                    Что касается продажи готовых решений, то тут зарабатывает в основном сама 1С или франчайзи. Поэтому большинству посетителей Хабра или даже той же Мисты такой бизнес карман не наполнит.

                                    Очень хорошо зарабатываю на 1С как программист.


                          1. lair
                            02.10.2019 19:29

                            Ну просто в свое время, lair так усиленно рассказывал как в .net все круто (в том числе в споре про логику форм емнип)

                            А можно ссылку? А то я уже детали забыл.


                            у меня сложилось впечатление, что в .net логика представлений (фронтенд) из коробки

                            Когда-то, во времена Windows Forms, была. Для веба никогда не было, asp.net — отдельный фреймворк.


                            Но неоднократно же говорили, что нельзя сравнивать .net, который платформа общего назначения, с платформой разработки бизнес-приложений. И кажется мне, что я о подобных платформах и говорил.


                            Тока правда я так и не понял, а что .net предлагает для форм использовать?

                            Что хочешь, то и используешь. На базовом уровне — HTTP in, HTTP (HTML) out, но даже это не в ядре.


              1. retran
                02.10.2019 16:31

                Эти ваши демо-приложения lsFusion сыпят в браузер джавовыми исключениями, поэтому я еще больше не понимаю что с чем мы сравниваем? Java и .NET?


  1. androidt1c
    01.10.2019 14:58
    +1

    Много чего в куче: и платформа, и примеры из типовых конфигураций. Но есть вещи, с которыми не поспоришь:

    Как следствие, в последних версиях 1С постепенно приобретает «болезнь SAP» — на любое пожелание заказчика, ему говорится: «вы просто неправильно работаете, есть best practice, вы тоже должны работать именно так»

    К сожалению, это так. 1С пошла по пути безумного усложнения типовых конфигураций, которые иногда не могут сделать то, что умели прежние, а доработка — в разы сложнее. Теряется гибкость решений, сопровождение 1С становится или дороже, или менее эффективным. Очень плохой путь выбрала 1С.


    1. Veidt Автор
      01.10.2019 15:17

      Много чего в куче: и платформа, и примеры из типовых конфигураций

      Типовые приведены для иллюстрации практик использования.
      К сожалению, это так. 1С пошла по пути безумного усложнения типовых конфигураций, которые иногда не могут сделать то, что умели прежние, а доработка — в разы сложнее.

      А них выбора не было по двум причинам:
      1. Малый бизнес они окучили, надо было переходить к среднему (тем более что совсем малый начал переходить на SaaS)
      2. Рынок из greenfield превратился в brownfield, где «пришло-ушло-осталось» уже у всех есть, а значит нужно продавать «лучшее враг хорошего».


      1. androidt1c
        01.10.2019 15:36

        Был у них выбор. Средний бизнес прекрасно жил на обычных формах и толстом клиенте. Переход на УФ принес кучу затрат, а многие средние и крупные остались на ОФ. 1С плюнула в лицо всем предприятиям, внедрившим конфигурации на обычных формах, перестав поддерживать старые типовые конфигурации. Отдельный привет внедрившим УПП — сложные проекты (а УПП не для ларьков предназначалась) предлагается просто выкинуть в мусорку и внедрять ERP.
        Перед глазами пример: фирма работала на 7.7, пытаются есть кактус разрекламированной УТ 11, и каждый день всё больше задаются вопросом: «а не перейти ли на УТ 10»?
        Почему нельзя было УФ сделать удобной отдельной опцией, не выбрасывая десятилетний труд всех программистов в помойное ведро?
        Беда рынка в том, что конкурента пока нет, но он обязательно появится, если 1С не повернется лицом к пользователям.
        Сама платформа — очень удобна, позволяет вести быструю и эффективную разработку. (хотя в последнее время 1С слишком увлеклась добавлением в неё смайликов(!), при отсутствии таких элементарных вещей, как оператор паузы или воспроизведения звука)


        1. o4karek
          01.10.2019 15:42

          Поддержка УПП прекращается с 2022 года.
          По крайней мере так сама 1С говорит: 1c.ru/news/info.jsp?id=25625


          1. morohon
            01.10.2019 19:48

            Не путайте поддержку отраслевых решений и типового решения.


            1. o4karek
              01.10.2019 19:56

              А 1с писала отраслевые решения на УПП?


              1. morohon
                01.10.2019 20:04

                В письме приведён список решений со ссылками на solutions. Там по идее должны быть указаны разработчики этих решений (я, к сожалению, с большинством из них даже не работал). В большинстве своём отраслевые решения пишут партнеры фирмы 1С и продают их. В данном случае, в инфописьме говорится о конфигурациях, которые разработаны на базе 1С: УПП (взята типовая поставка 1С: УПП (которую разработала фирма 1С) и добавлены определенные модули для удобства или специализированного учета). Т.е. снимаются с поддержки конфигурации партнеров, но не сама базовая поставка 1С: УПП (для неё пока только увеличилась стоимость сопровождения ИТС)


                1. o4karek
                  01.10.2019 20:10

                  Да, немного был неправ. Речь про отраслевые. Есть письмо про прекращение продаж УПП, но пока нет информации о прекращении поддержки.
                  Но даже в этом раскладе — об окончании поддержки предупредили за 3 года, дали список конф, на которые можно перейти. Скорее всего, в этих конфигурациях есть механизм перехода с предыдущих версий.
                  Т.е. это в любом случае не предложение выкинуть в мусорку текущий продукт.


                  1. vis_inet
                    02.10.2019 06:14

                    Насколько я знаю, механизма перехода с УПП на другие конфигурации нет.


        1. skrimafonolog
          02.10.2019 06:21

          1С плюнула в лицо всем предприятиям, внедрившим конфигурации на обычных формах, перестав поддерживать старые типовые конфигурации


          До недавних пор еще версия 6 поддерживалась (та, что потеряла актуальность еще в начале века).
          Версии 7.7, что уже более 10 лет как неактуальны — еще поддерживают.
          Ну а уже 8-ка с обычными формами — вполне себе обновляются.

          Вы имеете ввиду что их перестали развивать?
          Дык ресурсы то не бесконечны.
          Лучше пусть сосредоточатся.


          1. androidt1c
            02.10.2019 10:15

            Зик 7.7 — снята с поддержки
            ЗУП 2.5 — сняли (мы приняли решение сидеть на 2.5 КОРП, но сколько это счастье будет длиться — неизвестно).
            УТ 10 и УПП — поддерживаются по остаточному принципу, а поддержка УПП — платная и цена будет расти (1С так обещает).
            При этом, никаких особых преимуществ в новых конфигурациях нет, кроме чудовищного интерфейса, абсолютно не годного для быстрой работы юзера.


            1. skrimafonolog
              02.10.2019 10:27
              +1

              Зик 7.7 — снята с поддержки

              Да? Вы про технологию 20-ти летней давности? Дык они долгонько поддерживали.
              А правда, что снята с поддержки?
              Я вот вижу, что последниее обновление — еще от этого года.

              а поддержка УПП — платная

              Это ОС Windows, что постоянно продается для новых пользователей и новых устройств поддерживается вам бесплатно за счет других людей.

              В продуктах с ограниченным числом пользователей вечная бесплатная поддержка невозможна.
              Да и никогда не была поддержка у 1С бесплатной (кроме какого-то там небольшого количества месяцев сразу после покупки).


    1. o4karek
      01.10.2019 15:27

      А был-ли другой путь? Последние лет 25 типовые конфигурация постоянно усложняются. Ну не нужна будет в сегодняшнем мире никому конфа для торговли, которая по возможностям соответствует, например, 5-му ТиСу :)


      1. Neikist
        01.10.2019 15:29

        Модульность? О которой кстати автор писал.


        1. o4karek
          01.10.2019 15:33

          Какая модульность?! Нет здесь серебряной пули. Красивых слов много, и проблем при использовании столько же (если не больше).


          1. Neikist
            01.10.2019 15:35

            Ну как сказать. Очень многие программные продукты вполне себе живут с системами плагинов/модулей. Иногда эти плагины довольно сильно так расширяют функциональность в нужную сторону в нужном виде. Но да, в текущем виде это у 1с бы не вышло сделать по причине сильно упрощенного языка и ограничений платформы.
            Да и некоторые вещи можно было бы поставлять как SDK и библиотеки.


            1. o4karek
              01.10.2019 15:46

              Много экономических продуктов живут с системами плагинов? Плагин для ФАРа относительно легко сделать. А вот когда есть система с развесистой логикой использования данных и кто-то к этим данным внезапно что-то добавляет — как оно делать-то будет? Когда все вместе?


              1. Neikist
                01.10.2019 16:03

                К сожалению судить трудно, на практике только с 1с работал из разных учетных платформ. Но даже на 1с во многом можно было бы предусмотреть точки расширения и интерфейсы для взаимодействия. А после доработки языка и платформы это можно было бы сделать еще проще и в большем количестве мест.
                Ну и, естественно, от разработчиков типовых тоже бы потребовались затраты времени на адаптацию кода к такому.


                1. o4karek
                  01.10.2019 16:10

                  Стоп. Так «трудно судить» или «многие живут с плагинами»?
                  Возьмите обычную, примитивную учетную задачу (например, остатки и продажа товаров в количественно-суммовом выражении) и прикрутите к ней «систему плагинов». А потом начните это разнообразно изменять со всех сторон. А потом подключите еще один плагин, потом еще один, а потом оторвите первый.
                  А потом представьте, что будет, если третий плагин использовал данные первого. И как со всем этим должна жить базовая функциональность.
                  Понятно, что в лозунгах все будет просто и тривиально, ибо изоляция, разделение и т.д. Но тогда почему система, построенная на таких принципах, еще не завоевала весь учетный мир и не свергла никого из текущих жильцов этого мира?


                  1. Neikist
                    01.10.2019 16:15

                    Интерфейсы, контракты, фасады над модулями и прочее — как раз для таких целей. По крайней мере мой 4-летний опыт с 1с и пусть пока всего 1 летний с ООП, статической типизацией, хорошими билд системами и IDE — подсказывают что это вполне возможно. К сожалению без строгих доказательств(

                    Но тогда почему система, построенная на таких принципах, еще не завоевала весь учетный мир и не свергла никого из текущих жильцов этого мира?

                    Ну как бы в Java и C# вполне себе рулят в учетных системах по миру насколько знаю. Да и SAP вроде штука довольно модульная в последнее время становится (хотя я его не трогал и не собираюсь).
                    Да и, имхо, 1с на подобном принципе и построена, только уровень абстракции ниже, а на уровне абстракции доступном разработчикам из за ограничений такое реализовать гораздо сложнее.


                    1. o4karek
                      01.10.2019 16:32

                      Как я и говорили — в лозунгах все прелестно :)
                      Вы попробуйте спроектировать систему с плагинами, которые имеют свои данные. И сыграйте на этой системе тот пример, который я привел.

                      Ну как бы в Java и C# вполне себе рулят в учетных системах по миру насколько знаю

                      И что? У С++ тоже с модульностью относительно хорошо.


                      1. Neikist
                        01.10.2019 16:33

                        И что? У С++ тоже с модульностью относительно хорошо.

                        Вот только он имеет слишком много проблем как ЯП. Пусть даже мне чем то симпатичен.


                        1. o4karek
                          01.10.2019 16:45

                          ЯП здесь вообще не причем. Вы его сами включили. Я вам про модульность учетной системы, а вы мне про модульность ЯП для платформы.


                          1. Neikist
                            01.10.2019 16:48

                            Я к тому что имея нормальный язык на руках модульность в учетной (и не только, естественно) организовать намного проще.
                            Понятно что java нельзя платформой назвать. А вот JVM со всеми библиотеками для нее написанными, фреймворками, и прочим — уже тянет на платформу.


                      1. CrushBy
                        01.10.2019 16:36

                        Например, мы смогли нормально реализовать сложную систему с нормальной модульностью. Можете почитать вот тут как это делается.


                        1. o4karek
                          01.10.2019 16:49

                          И что?
                          «Если в исходном коде продукта произойдут какие-либо изменения, которые будут противоречить коду в зависимом модуле, то при запуске сервера будет выдана ошибка»
                          Привет, обновление продакшена :) В проде срочно нужны изменения базовой функциональности, текущую систему расширили с конфликтом и все радостно встало. Надо лезть руками и расшивать конфликт.
                          Нормально? Ну так берите в 1с расширения и делайте тоже самое.


                          1. CrushBy
                            01.10.2019 16:57

                            Так почему весь ERP или УТ не сделали на 1С расширениях, а? Может, потому что этот функционал сделали, мягко говоря, криво, и модульность делать с ним тяжело? Или как это объясните?


                            1. o4karek
                              01.10.2019 17:05

                              Ну, например, потому, что расширения (по мерках платформы) сделан относительно недавно (по мерках самой платформы).
                              Ну например, потому, что не существует серебряной пули для нормального(!) расширения базовой функциональности множеством модулей (что вы и подтверждаете сами). Особенно, если эти модули а) взаимодополняют, б) разрабатываются разными разработчиками и в) могут произвольно подключаться/отключаться.
                              Почему ваша суперсистема микромодулей не может сама разрешить конфликт при обновлении? Может потому, что вы «этот функционал сделали, мягко говоря, криво и» нормальную «модульность с ним делать тяжело»? :)


                              1. CrushBy
                                01.10.2019 17:09

                                Почему ваша суперсистема микромодулей не может сама разрешить конфликт при обновлении


                                А как она должна сама разрешить конфликт, если вы добавляете на форму элемент, а формы уже нет?

                                что вы и подтверждаете сами

                                Это где я подтверждал? Серебряной пули не существует, но бывает «лучше и хуже». Так вот в 1С с модульность хуже, чем много где. В lsFusion, например, модульность сделана гораздо лучше.


                                1. o4karek
                                  01.10.2019 17:20

                                  Вы же сказали, что

                                  смогли нормально реализовать сложную систему с нормальной модульностью
                                  . Вы сами привели простой(!) пример, с которым ваша система не справилась. Согласитесь, это странно. Такие уверенные заявления и нельзя в примитивном случае автоматически проблему решить.
                                  И пока ваша декларативная модульность ничем от 1с-ской не отличается.


                                  1. DAleby
                                    01.10.2019 17:26

                                    Вы сами привели простой(!) пример, с которым ваша система не справилась

                                    Это был не пример того, как система не справилась, а пример того, как система подскажет программисту, что он что-то забыл при изменении базовой функциональности.


                                    1. o4karek
                                      01.10.2019 17:48

                                      А будет пример того, как она хоть с чем-то справится? Или эта «сложная система с нормальной модульностью» умеет только в git'e исходники хранить и бесконфликтное двустороннее слияние делать? Если последнее, то это не плохо само по себе, но не тянет (ИМХО) на столь пафосное название


                                  1. CrushBy
                                    01.10.2019 17:30

                                    Издеваетесь? Что значит не справилась? Это искусственный интеллект что-ли по-вашему? Если в Java или любом другом языке вы используете библиотеку, а там поменялись классы и интерфейсы, то перестанет собираться проект. При этом, там везде нормально реализована модульность. Не подменяйте, пожалуйста, понятия.


                                    1. o4karek
                                      01.10.2019 17:44

                                      Что значит — издеваюсь? Вы же сами написали, что сделали сложную систему с нормальной модульностью.
                                      Сейчас ваша модульность (как и 1с-ская) при любом несогласованном шаге парализует работу прода и надо вручную собирать рассыпавшееся. Разницы нет. Значит и у 1с-а есть сложная система с нормальной модульностью?
                                      ЗЫ: Мы не про Java (и остальное прочее) говорим, а про платформу для автоматизации экономической деятельности.


                                      1. CrushBy
                                        01.10.2019 17:49

                                        Сейчас ваша модульность (как и 1с-ская) при любом несогласованном шаге парализует работу прода и надо вручную собирать рассыпавшееся. Разницы нет. Значит и у 1с-а есть сложная система с нормальной модульностью?


                                        Перевожу. На Java и SQL надо писать на английском языке. Разницы нет. Значит SQL = Java.

                                        То, что система не работает, если в зависимом модуле что-то поменялось — это нормально и везде так.

                                        А то, что расширения в 1С сделаны криво доказывает то, что УТ и ERP их не используют в коробке. Более того, наличие отдельных конфигураций Бухгалтерия, ЗУП, УТ, ERP (а не одного продукта с подключаемыми модулями) говорит о том, что все плохо с модульностью в 1С (ну или 1С-разработчики не дружат с разработчиками самой платформы).


                                        1. Ta_Da
                                          01.10.2019 17:59

                                          А то, что расширения в 1С сделаны криво доказывает то, что УТ и ERP их не используют в коробке

                                          Расширения предназначались для настройки решения при внедрении, поэтому в коробке ими и не пользуются.

                                          УТ — это составная часть ERP, по сути — ERP это УТ + модули. Кодовая база одна.

                                          То что у вас «модульность, когда мы клиенту подключаем за денежку то что ему нужно и ничего лишнего», в 1С — механизм функциональных опций, когда все уже внутри коробки, но появляется в интерфейсе/используется в коде только после установки галочки в настройках.


                                          1. CrushBy
                                            01.10.2019 18:03

                                            Я вижу, что вы плохо понимаете, что такое модульность. На всякий случай, галочки в интерфейсе — это не оно.


                                            1. Ta_Da
                                              01.10.2019 18:07

                                              Я хорошо понимаю что такое модульность. Но раз уж вы сравниваете ужей с ежами, считаю себя в праве заниматься тем же.
                                              С точки зрения заказчика, ваша модульность от «поставим галку и теперь у вас есть скидки» не отличается ничем.
                                              С точки зрения разработчика различие не более чем вопрос удобства.


                                              1. CrushBy
                                                01.10.2019 18:10

                                                С точки зрения разработчика различие не более чем вопрос удобства.

                                                А еще скорости и качества его работы. Что собственно и является основным критерием качества платформы.


                                        1. o4karek
                                          01.10.2019 18:03

                                          Перевожу

                                          Не. Вы язык не понимаете, чтобы переводить :)
                                          Более того, наличие отдельных

                                          Приведите пример нормального расширения данных (включая алгоритмику, использующую эти данные) — поговорим. Пока у fusion нет нормальной модульности по данным — говорить особо не о чем.


                                          1. CrushBy
                                            01.10.2019 18:04

                                            А Вы статью читали, что я кидал? Что значит «модульность по данным»? Там прекрасно добавлялись новые поля к строкам заказа, например.


                                            1. o4karek
                                              01.10.2019 19:59

                                              У вас приведен тривиальный, не интересный пример. Но даже в этом примере не показано то, каким образом базовые алгоритмы будут учитывать расширенные данные и что будет происходить, когда расширение демонтируют из базы.


                                              1. CrushBy
                                                01.10.2019 20:11

                                                Есть понятие — абстрактные свойства. Это аналог интерфейсов в классическом программировании. Через них и реализуются «расширение» алгоритмов. Собственно регистры — это и есть одно из их применений.


                                                1. o4karek
                                                  01.10.2019 20:15

                                                  Т.е. простого примера не будет? Без конкретного языка, простыми и понятными русскими словами? С описание разрешения конфликтов и т.д.
                                                  Ну нет, так нет.


                                                  1. CrushBy
                                                    01.10.2019 20:29

                                                    А регистры — это и есть простой пример реализации интерфейсов. А глобально можно еще вот что: в базовом модуле делаете formula = ABSTRACT NUMERIC[14,2] (X, Y, Z). Затем используете ее в модуле как formula(x, y, z). А в других модулях можете делать реализацию этой формулы как угодно. То есть, например, так параметризуете формулу расчета автозаказа, а затем делаете 5 модулей с разничным способом подсчета (которые могут зависеть от совершенно разных показателей).


                  1. strange2007
                    04.10.2019 16:11

                    Именно так и дорабатываю стандартные конфы. Максимальная изоляция, семиуровневое сито и дело сделано. Хоть что отрывай, и будет отваливаться только функционал плагина.
                    Почему никто так не делает? Даже образованные люди не могут поверить, что это возможно. А я и не спорю с ними. Работает и ладно.
                    Ах да, плагины на 1С пишу, что бы всё было обыденно для любого 1Сника


                    1. gennayo
                      04.10.2019 16:14

                      А никто так не делает потому, что сам вендор так не делает, только и всего.


                      1. strange2007
                        04.10.2019 16:21

                        Увы, нет, не правда. Люди дорабатывают стандартные конфы методом вмешательства в недра оной. Таким образом они подсаживают клиента на свою незаменимость. Мой же девиз — всё должно работать максимально долго без 1С-ника.
                        Вот и вся разница))))


                        1. gennayo
                          04.10.2019 16:42

                          Есть те, кто просто не видит смысла делать по-другому, не имея в виду никаких далеко идущих целей, так как тупо проще, да и вендор часто так-же поступает, жестоко ломая совместимость БСП, например.


                1. skrimafonolog
                  02.10.2019 06:32

                  Много экономических продуктов живут с системами плагинов?

                  Но даже на 1с во многом можно было бы предусмотреть точки расширения и интерфейсы для взаимодействия


                  Это существует.
                  Но далеко не заходят в этом.

                  Проблема в том, что эти точки взаимодействия или передают какие-то стандартизованные данные, которые должны быть на все случаи жизни.

                  Или передают совершенно абстрактные структуры, что снижает и понимание и повышает вероятность ошибок и не дает возможности автоматический контроль осуществлять.

                  Та модульность, о которой вы говорите — хороша для задач, где ядро обозримо — его можно сразу сделать на все случаи жизни.

                  В этом смысле — ядро у 1С есть.


            1. skrimafonolog
              02.10.2019 06:27

              Ну не нужна будет в сегодняшнем мире никому конфа для торговли, которая по возможностям соответствует, например, 5-му ТиСу :)

              Модульность?

              Красивых слов много, и проблем при использовании столько же (если не больше).

              Очень многие программные продукты вполне себе живут с системами плагинов/модулей


              Ну как они там живут — довольно плохо.

              Речь или о простейшем функционале — там конечно можно сделать успешно.

              Или о регулярных проблемах интеграции модулей и их взаимодействия — один модуль обновили/добавили — 2 других заглючили.

              Не стоит конечно совсем ее списывать со счетов, но возможности модульности ограничены.


          1. CrushBy
            01.10.2019 15:35

            Действительно. Я тоже считаю, что все эти ООП, модульности и прочая ерунда — просто вселенский заговор и красивые слова. Надо только по старинке: процедурное программирование в блокноте.


            1. gennayo
              01.10.2019 15:40

              Кстати, а у вас есть аналог 1С-ной БСП?


              1. CrushBy
                01.10.2019 15:46

                БСП — это винегрет из кучи несвязанного функционала, разработчиков которого настолько презирали в 1С, что не включили этот функционал в саму платформу?
                Ну или это была специальная команда спасения, которая доделывала то, что не смогли реализовать в платформе.

                Например, Групповое изменение объектов. В lsFusion это есть, по умолчанию, из коробки в любой форме (и сразу же в динамическом списке).

                Даты запрета изменения — для этого есть CONSTRAINT. Зачем под это отдельные абстракции заводить? Видимо точно премии за это получают. Ну и т.д.


                1. Neikist
                  01.10.2019 16:06

                  Не, ну нафиг БСП в платформу включать, абсолютно лишнее это. Общался кстати немного с разрабом БСП в сети — показался из всего 1сного контингента самым адекватным.
                  У БСП конечно есть проблемы, но они во многом из ограниченности языка вытекают.


                1. GedKo
                  02.10.2019 11:31

                  Даты запрета изменения — для этого есть CONSTRAINT. Зачем под это отдельные абстракции заводить? Видимо точно премии за это получают. Ну и т.д.


                  потому что дата запрета для Васи и Коли — это разные даты, а еще их часто употребляют в сочетании различных аналитик (организация, склад, раздел учета, ...)


                  1. CrushBy
                    02.10.2019 11:34

                    Так ради бога. В lsFusion пишите любые выражения в CONSTRAINT, где можете смотреть на что угодно. Зачем для этого дополнительные абстракции?


                    1. strange2007
                      04.10.2019 16:24

                      Писать? Хм… и чем тогда отличается от 1С-вских дат запрета? Там тоже пишешь универсальную штуку или используешь БСП без дописок.


              1. Veidt Автор
                01.10.2019 15:46

                Если не считать всяких странных вещей вроде анкетирования пользователя есть. Это если вы про планировщики, политики безопасности, профилировщики, настройки таблиц и т.д. и т.п.


        1. gennayo
          01.10.2019 15:35

          Да, это было бы верным решением. Но, похоже, время уже упущено.


  1. apapacy
    01.10.2019 15:21

    Сразу скажу, что не являюсь профессиональным 1с программистом, хотя в свое время приобрел версию 8.х (не помню точно индекс) для обучения программированию. И еще скажу сразу, что я с большим уважением отношусь к системе 1с. И обращу внимание что разработчики 1с и разработчики на 1с это разные категории, точно так же как разработчики .Net и разработчики на .Net это тоже совсем не одно и то же.


    По поводу недостатков 1с у меня есть свое мнение и оно такое: основных глобальных недостатка 2
    1) 1с пока что не повернулось лицом к проблеме перехода на мобильные устройства. Да есть и уже давно версия для доступа через веб-браузер. Есть возможность работать с клиентами по технологии SOAP. Однако все упирается в механизм стыка сервера 1с с удаленными клиентами через серверы Apache или ISS с глючными и низкопроизводительными полключаемыми к этми серверам модулями.
    2) 1с пока что не имеет в своем арсенале оптимальных модулей календарного планирования для сложных изделий и многооперационных техпроцессов.


    Теперь о "критике" (не Автора статьи) 1с.


    Критика эта зачастую носит характер какого-то неприятия на подсознательном уровне. При этом часто "критики" судя по их аргументам работали с версиями 1с 5.х максимум 6.х. Отчасти эта критика подогревается конкурирующими группами разработчиков или посредников. С одной стороны критикуют внедренцы зарубежных ERP систем или разработчики отечественных ERP систем. С другой стороны — ИВЦ промышленных предприятий, которые разрабатывают самописные корпоративные системы и видят в 1с аналог Excel который будет мешать внедрению самописных.


    Почему я очень уважаю 1с еще начиная с версии 7.0


    1) К обычным для работы с базами данных визуальными компонентами было добавлено еще несколько очень удобных:


    • Документ = заголовок+табличная часть в одном флаконе — экономит массу времени на разработку
    • Табличная часть — может выводиться в несколько строк — также не встречается в стандартных палитрах других разработчиков
    • Справочник — при задание поля типа справочник сразу становятся доступными все действия, включая редактирвоание, доабвление новых эеоементов ну и конечно посик, яильтры и т.п.

    2) Была решена задача с оптимизацией итогов. Идея очень простая: В регистрах хранятся итоги за год, месяц и последнему документу. За другие периоды (не начало/конец месяца) просчитываются разностью от ближайшей точки времени.


    3) Распределенная база данных из коробки (в том числе синхронизхация модет быть достаточно экзотичесокй например по email)


    Чуть позже дам комментарий по тексту статьи. С Автором я не во всем согласен.


    1. Ildarovich
      02.10.2019 17:17

      1с пока что не имеет в своем арсенале оптимальных модулей календарного планирования для сложных изделий и многооперационных техпроцессов
      Занимаюсь данной темой, сомневаюсь, что возможно типовое решение, а тем более, что оно должно быть в платформе.


      1. apapacy
        04.10.2019 15:35

        Большинство ТОП-овых ERP как раз на этом делают свою ставку.
        Например SAP — имеют что-то для планирования встроенное закрытое от конечных пользователей и даже от партнеров.
        MS Dynamix — собственно перекупили два как бы сейчас сказали стартапа — Axapta и Navision как раз ради этой функциональности.
        JD Edvards — тоже говорили на презентации что имеют такие модули.


        За исключением наличие этих модулей они все явно уступают 1с, т.к. являются закрытыми, не имеют и близко ничего подобного как предметно-ориентирвоанный язык 1с.


        Конечно не может быть нечто подходящее для всех типов производств. Однако все производства сводятся к разным типам (массовое, крупносерийное, среднесерийное, мелкосерийное, единичное, дискретное, неипрерывное, однопередельное, многопередельное, сборочное, механообрабатывающее и т.п.) — от которых существенно зависит система планирования.


        1. NitroJunkie
          04.10.2019 15:46

          не имеют и близко ничего подобного как предметно-ориентирвоанный язык 1с.

          Ну вот не надо. У Axapta и SAP есть свои DSL причем ABAP даже более предметно-ориентирован. Хотя конечно им обоим как и 1С далеко до идеала.


  1. unfilled
    01.10.2019 15:26

    Так, например, если вы будете проверять, что сумма значений полей из двух разных таблиц должна быть больше некоторого значения, то при одновременном редактировании значений этих полей в обеих таблицах в блокировочнике все будет хорошо (точнее возникнет дедлок, в результате которого одна из транзакций откатится), версионник же благополучно запишет оба этих изменения в базу, нарушив тем самым ваше ограничение. Что же тогда поддерживает версионник в плане целостности?

    wut? При чём здесь а) deadlock и b) целостность из ACID? Насколько я понял, о чём вы говорите, возможно, нарушена будет некая «целостность» с т.з. приложения, но логическая целостность (C в ACID) нарушена не будет.


    1. Veidt Автор
      01.10.2019 15:35

      Речь шла просто о целостности, «с т.з. приложения» или «логическая» не важно. Может правильнее было написать согласованность (из русской википедии про ACID):

      Согласованность является более широким понятием. Например, в банковской системе может существовать требование равенства суммы, списываемой с одного счёта, сумме, зачисляемой на другой.

      Но тут это чисто игра терминами.

      DeadLock притом, что если две транзакции делают:
      SELECT x FROM A, SELECT y FROM B, потом делают проверку на x+y > 5, а потом записывают одна в A, другая в B, то будет dead lock. Версионник запишет и ничего не скажет.


      1. unfilled
        01.10.2019 15:43

        Но тут это чисто игра терминами

        ну так не играйте ими, зачем вы ACID приплели, если у Consistency там чёткое определение есть?
        DeadLock притом

        зависит от isolation level, не так ли?


        1. Veidt Автор
          01.10.2019 15:53

          ну так не играйте ими, зачем вы ACID приплели, если у Consistency там чёткое определение есть?

          Цитата из википедии:
          Consistency ensures that a transaction can only bring the database from one valid state to another, maintaining database invariants: any data written to the database must be valid according to all defined rules, including constraints, cascades, triggers, and any combination thereof. This prevents database corruption by an illegal transaction, but does not guarantee that a transaction is correct. Referential integrity guarantees the primary key – foreign key relationship. [6]

          Более того в этой же статье consistency failure описано, ровно так, как я описал.
          зависит от isolation level, не так ли?

          Ну как бы нормальные уровни целостности по умолчанию подразумеваются. Не ручные же блокировки делать.


          1. unfilled
            01.10.2019 15:56

            Ого, в версионниках constraint'ы могут нарушаться? Вот это новость.

            Read Committed — не нормальный уровень?


            1. Veidt Автор
              01.10.2019 16:03

              Ого, в версионниках constraint'ы могут нарушаться? Вот это новость.

              Consistency is a very general term, which demands that the data must meet all validation rules.

              Это не обязательно constraint на значение полей в одной таблице.
              Read Committed — не нормальный уровень?

              Нет, именно по причине проблем с согласованностью.


              1. unfilled
                01.10.2019 16:48

                Вы почему-то берёте устоявшиеся термины, присваиваете им иное значение, удобное вам, и строите на этом цепочку рассуждений. Какие constraints могут нарушаться в Oracle или postgre, из-за того, что они версионники? Validation rules кто задаёт? Как может СУБД из выполнять, если они только в голове программиста?
                Read committed же вполне нормальный уровень изоляции — обеспечивает то, что обещает — зафиксированные в момент чтения данные и в нём не будет дедлока в вашей ситуации. Вы же не оговариваете условия — вы пишете — в блокирочниках дедлоки, в версиоониках согласованность по бороде идёт. А это совсем не так.


                1. Veidt Автор
                  01.10.2019 17:24

                  Я то термины из Википедии беру. А вы почему то термины конкретных реализаций конкретных СУБД используете.


                  1. Yo1
                    02.10.2019 13:34
                    +1

                    чувак прав. учи уровни изолированности. если используешь RC то чего ты вдруг от него требуешь согласованности? на IL serializable будет ошибка сериализации. блокировочник же на RC в принципе ничего не гарантирует, нет даже гарантии того что остаток счета не считается несколько раз.


                    1. Veidt Автор
                      02.10.2019 14:05

                      От RC я вообще ничего не требую. Serializable подразумевается по умолчанию.

                      на IL serializable будет ошибка сериализации.

                      UPDATE CONFLICT будет? В версионнике? Вы уверены?


                      1. Yo1
                        02.10.2019 16:00

                        в теоретическом версионнике конечно. но не апдейт конфликт, а ошибка сеариализации. в оракле честного serializable нет, зато у постгреса вроде есть честный serializable, который обязан рубить все, что попробует выдать результат отличный от того что должен был бы получится от сериализованных транзакций.
                        но это все не столь важно. толку от честного и блокировочного serializable ноль, в реально жизни это просто не взлетает, а реально весь фин сектор сидит на оракле с его не совсем честным но полноценно работающим serializable, где нужно выставлять select for update на подобные чтения. практика показала, что это работает.


                        1. NitroJunkie
                          02.10.2019 16:44

                          Собственно про это и написано в статье. Что в версионниках жертвуется согласованностью и надо либо материализовать данные для которых важна целостность (то есть ограничения) или for update'ы вставлять.


                          1. Yo1
                            02.10.2019 17:46

                            ну так и неверно написано. все версионники кинут ошибку сериализации. исключение оракл, который не стал приносить в жертву здравый смысл и реализовал свой serializable, который не совсем честный, но подходит для того что бы считать деньги.


                            1. Veidt Автор
                              02.10.2019 18:15

                              PostgreSQL тоже не кинет update conflict (хотя что-то уже начал сомневаться, но там же логика update conflict элементарная, просто сверяется что версия транзакции равна версии записи). Про какие версионники речь вообще?


                              1. Yo1
                                02.10.2019 19:50

                                To guarantee true serializability PostgreSQL uses predicate locking, which means that it keeps locks which allow it to determine when a write would have had an impact on the result of a previous read from a concurrent transaction, had it run first. In PostgreSQL these locks do not cause any blocking and therefore can not play any part in causing a deadlock. They are used to identify and flag dependencies among concurrent Serializable transactions which in certain combinations can lead to serialization anomalies.


  1. capitannemo
    01.10.2019 15:36
    -1

    Вспоминается…

    Давайте рассуждать о крахе и подъеме Голливуда, не видя ни одного фильма. Давайте сталкивать философов, не читая их работ. Давайте спорить о вкусе устриц и кокосовых орехов с теми, кто их ел, до хрипоты, до драки, воспринимая вкус еды на слух, цвет на зуб, вонь на глаз, представляя себе фильм по названию, живопись по фамилии, страну по «Клубу кинопутешествий», остроту мнений по хрестоматии.

    Хотелось ответить автору по существу… а существа то и нет.
    Автор просто имеет обыкновение хаять то о чем он понятия не имеет.
    Как и базового понимания зачем вообще нужна трехзвенная архитектура программ.
    Обычно от людей перешедших с иксела такое слышишь
    С тем же успехом можно предавать анафеме компьютеры и далее до адептов плоской Земли.
    Кстати вы же с калькулятора сюда пишете?
    P/S Понял откуда растут ножки.
    Эх, моська…
    Это же изобретатели велосипеда с картинки — создатели могучего языка пятого (!) поколения. И все их тридцать два адепта )
    Вы ребята похвалитесь когда у вас будет хотя бы тысячный пользователь.
    Попробуйте статьи писать о своем могучем языке, а не хулить то в чем не разбираетесь.
    У 1С два десятка миллионов только лицензионных пользователей.
    Тут даже не слон и моська, а слон и мушка.


    1. Veidt Автор
      01.10.2019 15:43

      О, профессионалы появились в комментариях. Просветите же наконец меня дремучего.

      Вот лень повторяться в третий раз, поэтому процитирую себя же.

      Давайте так, это Хабр. Если с каким то пунктом вы не согласны, отлично, дайте развернутый комментарий, покажите что автор не прав (вы же понимаете что многие на Хабр ради комментариев заходят). И тогда все поймут что это просто «маркетинговый бред», «автор просто не разбирается» и все в таком духе.


      1. Honomer
        01.10.2019 16:30

        Нет, друг. До Давида и Голиафа ещё очень и очень далеко. Давидов было очень много, но пока ни один них положения 1С на рынке не поколебал. В лучшем случае, занял какую-то свою, крохотную нишу. Говорить про это можно будет, когда вы приблизитесь к охвату хотя бы 1% рынка. Пока речь идёт наверное про десятитысячные, если не меньше, доли процента. На уровне статистической погрешности. :(


        1. CrushBy
          01.10.2019 16:37

          Nokia тоже так говорила.


          1. o4karek
            01.10.2019 16:51

            Элоп слегка сознательно утаптывал Нокию под МС :)
            В пользу мобильной винды Элоп закрыл все новые разработки Нокии в области мобильных ОС. Так что Нокия слегка не сама сдохла.


          1. Honomer
            01.10.2019 17:13

            Как по мне, Нокия сознательно тупила и выпускала довольно странные решения, не говоря уже про то, что они легли под MS. 1С же на месте не стоит и продолжает развиваться.


            1. CrushBy
              01.10.2019 17:16

              1С же на месте не стоит и продолжает развиваться.

              Да, придумывая все новые и новые костыли (ой, то есть абстракции). Но, как я понимаю, Вы за монополию? Чтобы был только 1С со своими ключами, платной документацией и т.д.


              1. Honomer
                01.10.2019 17:36

                Я за объективность.
                Автор топит против 1С и говорит, что его система лучше. Причём не приводя в пример достоинства своей системы, а выпячивая недостатки первой и ничего не говоря про её достоинства. Мне кажется это достаточно «грязная игра».
                Я не спорю — может быть его система лучше. Но заявлять это можно будет только тогда, когда она займёт хотя бы какую-то долю рынка. До тех пор это беспредметный спор о технических «плюшках», которые конечному пользователю абсолютно фиолетовы — ему нужно свои ежедневные задачи решать. Доля рынка 1С показывает, что она с этим справляется. Как с этим справится система топикстартера — увидим.


                1. CrushBy
                  01.10.2019 17:40

                  Аргументация в стиле: «У меня тут >80% голосов, а вы все идите в… Когда победите на выборах, тогда и приходите».

                  До тех пор это беспредметный спор о технических «плюшках»

                  Habr — технический ресурс, и тут идет обсуждение технических аспектов, а не маркетингового bullshit.

                  Причём не приводя в пример достоинства своей системы

                  А Вы все наши статьи прочитали? Там только достоинства и описываются.


                1. DAleby
                  01.10.2019 17:44

                  Причём не приводя в пример достоинства своей системы
                  В блоге, в котором размещена эта статья, есть набор статей, где рассказывается о достоинствах.
                  Но заявлять это можно будет только тогда, когда она займёт хотя бы какую-то долю рынка.
                  Это называется «сперва добейся». Так себе позиция. Да, эта статья в основном о «технических плюшках» и написана она не для конечных пользователей (если речь о пользователях решений).


                1. Veidt Автор
                  01.10.2019 19:35

                  А теперь слово автору. Статья и так получилась на 36 страниц, и в ней есть много намеков как надо было делать (и как сделано в lsfusion(. И если бы я ещё начал подробно про lsfusion писать она бы еще в два раза больше получилась, а я уверен и эту многие даже до половины не дочитали.

                  Впрочем статья «почему lsfusion а не 1с?» будет. Хотя уже сейчас очевидно, что надо было их вместе выпускать :(

                  Ну и про заявлять что лучше — это курица, яйцо. Чтобы занять долю рынка нужно заявлять и объяснять, что мы и делаем этими статьями.


        1. Veidt Автор
          01.10.2019 16:38

          Давидов было очень много, но пока ни один них положения 1С на рынке не поколебал

          Ну назовите хоть один, у которого не было хотя бы половины из 21 проблем в статье. Ну или хотя бы треть возможностей из этого списка. Ничего близко похожего на самом деле до еще не было. Так что взлетит или не взлетит можно пока только гадать.


          1. gennayo
            01.10.2019 16:43

            Взлететь может и взлетит, но не в качестве конкурента 1С.


            1. Honomer
              01.10.2019 17:15

              Тогда в категорию «Давидов» не попадает.


          1. Honomer
            01.10.2019 17:10

            Iscra Framework, например. Тоже себя позиционировали, как «низвергатель 1С». А сейчас у них сайт продаётся.


            1. Veidt Автор
              01.10.2019 17:23

              И сколько у них из перечисленных 33 достаточно фундаментальных возможностей было? Ну или хотя бы каких из проблем 1с не было?


              1. Honomer
                01.10.2019 17:40

                Извините, это в 2007 году было, я уж так не вспомню. Но «топили» они знатно. С пеной у рта. А сайт, как я уже сказал, умер и продаётся, сейчас не посмотреть.


                1. Veidt Автор
                  01.10.2019 18:21

                  Одного топления недостаточно. Нужно ещё фундаментальные преимущества иметь. Как например эпл перед Нокиа.


          1. zag2art
            01.10.2019 21:19

            а почему список должен быть именно «этот»? вы уверены, что именно это нужно рынку?


            1. Veidt Автор
              01.10.2019 21:56

              Ну потому что эти возможности — это отражение описанных в статье проблем. И практически все они выстраданы в результате разработок, доработок и внедрения больше чем сотни различных проектов.


              1. gennayo
                01.10.2019 22:03

                То есть, субъективное, никакими серьёзными данными не подтверждённое, личное мнение.


                1. Veidt Автор
                  01.10.2019 23:05

                  А вы хотите по данным «Независимой Ассоциации Разработчиков Бизнес-Приложений»? Но вообще тот список достаточно всеобъемлющий, касается практически все NFR (нефункциональных требований к системе).


                  1. gennayo
                    02.10.2019 05:46

                    Я хочу, чтобы вы задумались, когда даёте самохвалебные безапелляционные ответы на серьёзные вопросы.


      1. redokov
        02.10.2019 17:28

        Как только Давидику исполнится 4 и если он не умрет от голода, 1С купит его и Давидик вольется в дружную семью 1С: Предприятия!


        1. Veidt Автор
          02.10.2019 17:29

          С голода он уже не умрет точно, вы хотя бы список клиентов гляньте. А когда 1С очухается (с их то глобальным видением) будет уже поздно.


          1. redokov
            03.10.2019 11:01

            Поглядим еще лет 5. Впереди глобальные кризисы, рецессии и пр. радости. Будет здорово, если появится еще один крупный игрок на рынке ЕРП систем и систем автоматизации бизнеса. Это заставит остальных двигаться шустрее.


  1. Dima_dd
    01.10.2019 15:46

    По СКД, вообще какой то сумбур написан, вообще не разобрались. Он нужен для быстрого создания легко настраиваемых отчетов. Настройки у все отчетов в одном стиле, так что пользователям легче привыкать/настраивать новые отчеты. Как интерфейс для доступа к данным он практически не используется, заменой форм не является точно, а эргономика у него вполне достойная, дело привычки. СКД это очень большой + 1с. Вот до его появления была дичь.


    1. Veidt Автор
      01.10.2019 16:01

      Ну просто в статье про подбор многие реально предлагали WYSIWYG реализовывать при помощи отчетов (то есть СКД).

      Хотя я то как раз хорошо понимаю, что основное применение СКД — настраиваемые отчеты. Но, я про это в статье тоже написал, непонятно зачем их настраивать. Для печатных форм это бесполезно, а для аналитики есть куда более удобные и быстрые BI инструменты (позволяющие при этом не нагружать оперативную базу).


  1. cyhdyk
    01.10.2019 15:49

    Когда собственный продукт на столько гавно, что описывать его даже не хочется :))


    1. Veidt Автор
      01.10.2019 15:50

      Не влезло в одну статью. Следующая скорее всего будет: Почему lsFusion, а не 1С? Ровно с тем же оглавлением и как эти проблемы решаются в lsFusion.


      1. gennayo
        01.10.2019 16:02

        Лучше бы вы рассказали, как решаете проблемы бизнеса, а не проблемы 1С :))


        1. o4karek
          01.10.2019 16:04

          У них нет проблем с бизнесом :) Это еще из первой статьи было понятно.


          1. gennayo
            01.10.2019 16:10

            Вот смотрю я их демо, и думаю, странно как-то это всё.


  1. Honomer
    01.10.2019 16:10
    +1

    Извините, статья показалось заказной «джинсой», которая в конце ненавязчиво рекламирует ваш продукт.

    Вы сознательно умалчиваете (или не знаете, что ставит под вопрос вашу компетентность и ценность статьи вообще) наличие в 1С механизмов, которые описываете как отсутствующие.
    Например, вы пишете:

    Например, запретить ситуацию, когда количество к отгрузке становится меньше 0, или послать какое-нибудь уведомление в этом случае.

    Платформа 1С для любого реквизита позволяет задать минимальное или максимальное значение. При записи можно выполнить так называемую «проверку заполнения», откуда совершенно элементарно можно
    послать какое-нибудь уведомление


    Отношения один-к-одному и один-ко-многим присутствуют. Например, подчинённый справочник или регистратор регистра.

    Ну и так далее.


    1. Veidt Автор
      01.10.2019 16:32

      Платформа 1С для любого реквизита позволяет задать минимальное или максимальное значение. При записи можно выполнить так называемую «проверку заполнения», откуда совершенно элементарно можно

      Для ресурса регистра позволяет? Кол-во к отгрузке как вы понимаете не реквизит справочника. И насколько элементарно это делается приведено в статье. Всего под 1к строк кода. Тем более что никакого события на изменения кол-ва к отгрузке нет.
      Отношения один-к-одному и один-ко-многим присутствуют. Например, подчинённый справочник или регистратор регистра.

      Это два частных случая. А как отображение справочника на документы как в ORM сделать? Но я дополню статью уже писал, руки просто не дошли.
      Ну и так далее

      С удовольствием послушаю и подкорректирую статью.


      1. Ta_Da
        01.10.2019 16:40

        А как отображение справочника на документы как в ORM сделать?

        Т.к. я не настоящий сварщик — подскажите на примере, какую задачу (в терминах бизнеса или техническую/интерфейсную) вы хотите решить?


      1. Honomer
        01.10.2019 16:47

        Для ресурса регистра позволяет? Кол-во к отгрузке как вы понимаете не реквизит справочника.

        Конечно. А количество чего-нибудь к отгрузке в 1С обычно делается через реквизит табличной части. Там тоже можно.

        Не нужно писать про недостатки 1С, этого навалом. Напишите нам как ваша система решает потребности пользователей.


        1. Veidt Автор
          01.10.2019 22:04

          Конечно

          Мы наверное недопоняли друг друга. Речь шла о событиях и ограничениях на остаток ресурса регистра.

          Будет еще статья: Почему lsFusion, а не SQL?


    1. Ta_Da
      01.10.2019 16:38

      Платформа 1С для любого реквизита позволяет задать минимальное или максимальное значение. При записи можно выполнить так называемую «проверку заполнения», откуда совершенно элементарно можно

      Автор говорит про контроль отрицательных остатков. Он во всех темах этот пример приводит, мол «у нас контроль отрицательных остатков на уровне платформы, а в 1С обязательно надо писать килобайты кода размазанного по сотне процедур».
      Хотя
      а) этот код можно было бы написать проще, но в типовых придерживаются определенных стандартов (пусть и не идеальных) и универсальности (т.е. есть ряд других проверок и условий выполнения данной проверки);
      б) сравнивая 1С и lsfusion показывает огромные запросы для 1С и вызовы процедур на lsfusion. Тот факт, что эти запросы в 1С можно тоже «спрятать» в процедуре автора не смущает. При этом, когда задается вопрос вида «если не нужно контролировать остатки для склада N, как это сделать?», отвечает в стиле «всего-лишь вызвать процедуру isWarehouseN(Warehouse)» не описывая что происходит внутри этой процедуры.
      и т.д.


      1. Veidt Автор
        01.10.2019 16:50

        Нет в lsFusion нигде ничего не спрятано.

        CONSTRAINT quantityAvailable(Stock st, Sku sk) > 0;

        И все.

        В 1С же логика обновления товар к отгрузке пишется отдельно, в статье ее нет (плюс часто по много раз, плюс часть сценариев запрещается, плюс она сложнее декларативной), а проверка ограничений пишется дополнительно (и именно она приведена в статье).


        1. gennayo
          01.10.2019 16:53

          И если всё-же нам таки надо будет отгрузить «в минус» — то всё, приехали?


          1. Veidt Автор
            01.10.2019 17:18

            Уже сто раз в предыдущих темах обсуждали. Добавьте в constraint любое условие например AND NOT godMode, или отключите ограничение для соответствующей роли.


            1. gennayo
              01.10.2019 18:17

              Это костыль, если что :))


              1. CrushBy
                01.10.2019 18:19

                А правильно как в 1С, сделать неоперативное проведение, которое будет работать по принципу, если очень хочется, то можно? Вот это реально бред…


                1. gennayo
                  01.10.2019 18:23

                  Да при чём тут 1С, не бывает идеальных систем, и ваша- не исключение, как бы вам этого не хотелось.


              1. Veidt Автор
                01.10.2019 18:24

                Что значит костыль? Платформа же не сможет угадать условие какое вы хотите. Но вы пишете его ровно в одном месте, а дальше все платформа все делает за вас. И так как я приводил в статье извращаться не надо.


                1. gennayo
                  01.10.2019 18:38

                  godMode — не костыль? Ну ок…


                  1. Veidt Автор
                    01.10.2019 19:07

                    Это я для примера привел. А вы по какой логике собственно хотите разрешить нарушать ограничение? По ролям добавьте к условию AND NOT currentRole = admin.


                    1. gennayo
                      01.10.2019 19:11

                      Например, если сегодня последний день месяца и Луна в Юпитере. Дело не в условии, а в том, как вы предлагаете решать проблему.


                      1. Veidt Автор
                        01.10.2019 19:20

                        Ну мы предлагаем решать проблему декларативно, задав условие и забыв. А 1с все на разработчика перекладывает, то есть предлагает решать проблему императивно — самому определять точки проверок и писать запросы этих проверок (хотя нормальные платформы это делают сами)


        1. Honomer
          01.10.2019 16:56

          А партионный учёт у вас есть?
          Или весь товар на складе — это одна большая «партия»?
          Если есть — на каких принципах работает и как закрывает партии?

          И не говорите, что партионный учёт не нужен.


          1. Veidt Автор
            01.10.2019 17:21

            Fifo, lifo точно есть, остальные не знаю, не по моей части. Но точно знаю что расписывание по партиям идёт сразу причем даже при приеме реализации в крупных сетях супермаркетов. А она принимается с актуальностью минута, и именно с такой актуальностью люди видят остатки по партиям. Представляете нагрузку?


            1. Honomer
              01.10.2019 17:45

              Ок. Есть партионка.
              Тогда как происходит корректировка задним числом, которая «затрагивает только те данные, которые требуется»? Что будет если я месяц назад в документе спишу товар, который через неделю активной деятельности по этой товарной позиции вдруг окажется в минусе? Когда об этом узнает пользователь? Как это повлияет на движения документов, которые двигали эту позицию в эту неделю? Тот документ, которой я ввёл утром вдруг «откатится» и скажет, что «я не могу, товара нет»? а если за него уже деньги получили?


              1. MenZurKa
                03.10.2019 09:30

                Хороший вопрос, жаль на него не дали ответа :(


              1. Veidt Автор
                03.10.2019 10:09

                Смотрите, в текущем типовом решении остаток в динамике не проверяется. Но текущий проверяется (то есть CONSTRAINT стоит на currentBalance), то есть если текущий остаток по какой-нибудь из партий уйдет в минус пользователь сразу узнает. Можно добавить CONSTRAINT и на balance на дату, но это уже оверхед. Для этого удобнее использовать отдельные процедуры перерасчета / до расчета. Правда если в конкретных логиках есть ограничения зависящие от партий какие-нибудь (например запрет продажи ниже себестоимости) могут быть вопросы. То есть в простых случаях система разрешит поменять задним числом, а если что-то пойдет не так начнет ругаться и требовать администратора.

                Про «откатится» и «товара нет», не понял. Ограничения на новые изменения, старые тут причем?


        1. Ta_Da
          01.10.2019 17:21

          Еще раз, поправьте меня, если я буду в чем-то не прав.
          1) Есть таблица БД с тремя колонками:
          Stock и SKU — в терминах 1С это «измерения регистра»
          ? некоторая колонка «количество» — в терминах 1С это «ресурс регистра».
          Для данного ресурса вы задаете красивое и простое ограничение «quantityAvailable(Stock st, Sku sk) > 0;», что подразумевает, что по любой комбинации Stock и SKU не должно быть отрицательного остатка (ну и в контексте описанной).
          Ок. Отлично.
          В 1С такая проверка также делается 1 простым запросом, который вам приводился на стороннем форуме.
          Но после этого начинаются интересные вопросы:
          1) Как будет выглядеть проверка, если нужно контролировать остатки только по части складов/SKU? В 1С — добавляем условие в запрос, у вас — добавляем внешние функции с проверками, которые будут порождать дополнительный запрос (ну ок, у вас волшебный оптимизатор, который автоматически склеивает все в один запрос к БД).
          2) Как будет выглядеть это ограничение, если нужно проверять не только «остаток не стал нулевым», а «остаток с учетом резервов не стал нулевым»? Опять же — в 1С мы редактируем все тот же запрос. А у вас?
          Любопытно увидеть для вариантов «резерв это еще одна колонка таблицы» и «резерв, это колонка в другой таблице БД»?

          И т.д. и т.п.


          1. Veidt Автор
            01.10.2019 22:10

            В 1С такая проверка также делается 1 простым запросом, который вам приводился на стороннем форуме.

            В 1С это делается минимум 3 запросами на 1к строк. В статье это описано. Именно проверка что quantityAvailable >0, логика расчета (а точнее императивного обновления) quantityAvailable в 1С отдельно, ее в статье нет.
            Как будет выглядеть проверка, если нужно контролировать остатки только по части складов/SKU? В 1С — добавляем условие в запрос, у вас — добавляем внешние функции с проверками, которые будут порождать дополнительный запрос (ну ок, у вас волшебный оптимизатор, который автоматически склеивает все в один запрос к БД).

            Нет, добавляем в условие ограничения. Никаких внешних функций, о чем вы?
            Как будет выглядеть это ограничение, если нужно проверять не только «остаток не стал нулевым», а «остаток с учетом резервов не стал нулевым»? Опять же — в 1С мы редактируем все тот же запрос. А у вас?

            Редактируем условие ограничения:
            CONSTRAINT quantityAvailable(Stock st, Sku sk) — quantityReversed(st, sk) > 0;
            Вы реально не понимаете как это делается в lsFusion?


            1. Ta_Da
              01.10.2019 22:32

              В 1С это делается минимум 3 запросами на 1к строк

              Еще раз. В 1с это делается 1(!) запросом строчек на 10. Пример на Мисте лично я вам приводил. Это если мы говорим о простой табличке SKU|Stock|Quantity и таком же простом документе, без дополнительной логики.

              Вы реально не понимаете как это делается в lsFusion?

              Нет, это вы меня не понимаете, как мне кажется.
              Как ваша платформа понимает, что делать когда вы пишете «quantityReserved(st,sk)»?
              Как много таких «предопределенных» действий определено и как будет выглядеть условие, если мы выходим за рамки простой захардкоженной проверки по 1-2 реквизитам, а условие накладывается в зависимости от данных в других таблицах?

              Если колонка Reserved находится в другой таблице, как платформа понимает, что quantityReserved нужно считать именно по ней?


              1. DAleby
                01.10.2019 23:02

                Как ваша платформа понимает, что делать когда вы пишете «quantityReserved(st,sk)»?
                Давайте попробуем еще раз на пальцах (насколько смогу). quantityReserved в данном случае в терминологии lsfusion называется «свойство». Свойство — это, грубо говоря, некоторая вычисляемая функция (как в математике), То есть какая-то штука, которая принимает на вход параметры, и возвращает значение, являющееся результатом некоторого вычисления. Только кроме логических, арифметических и т.п. операторов в lsfusion для вычисления есть еще операторы композиции, группировки, рекурсии и т.д.

                Теперь вы хотите повесить ограничение на какое-то сложное вычисляемое значение. В lsfusion для этого значения вам нужно создать свойство (оно может быть создано и прямо в инструкции CONSTRAINT). То есть его нужно создать в любом случае, если хотите его вычислить, это и есть описание логики. Создаваться оно будет, как описывалось выше, в коде с помощью существующих операторов. quantityReserved в данном примере — это просто ранее объявленное свойство с соотвествующей логикой, вычисляющей то, что она должна по примеру вычислять.


                1. Ta_Da
                  01.10.2019 23:08

                  quantityReserved в данном примере — это просто ранее объявленное свойство с соотвествующей логикой, вычисляющей то, что она должна по примеру вычислять.

                  Отлично. Мы вышли на финишную прямую.
                  Теперь повторю первоначальный вопрос: чем отличается «ранее объявленное свойство с соответствующей логикой», которое вы загоняете в CONSTRAINT от «объявленной ранее функции 1С ПроверитьОтрицательныеОстатки(Документ)», обращение к которой будет загнано в событие «ОбработкаПроведения»?

                  И там и там нужно заранее написать код. И там и там в нужном месте указать его вызов (да, я понимаю что у вас это не совсем «вызов метода», но с точки зрения трудозатрат программиста по нажиманию кнопок клавиатуры разница небольшая).


                  1. Veidt Автор
                    01.10.2019 23:12

                    И там и там нужно заранее написать код

                    В lsFusion одну строку. А в 1С три запроса на тысячу строк. Если нет, приведите здесь, как должны были сделать разработчики типовых, чтобы это был один запрос.


                    1. Ta_Da
                      02.10.2019 07:07

                      Если нет, приведите здесь, как должны были сделать разработчики типовых, чтобы это был один запрос

                      Вас не смущает сравнение ограничения для таблички из 3 колонок в вашем примере и таблички в 10+ колонок (в силу добавления партий, характеристик и т.д.) в типовой УТ?

                      Еще раз привожу пример запроса, который проверяет наличие остатков в аналогичном вашему примеру (имена объектов метаданных специально сократил):
                      ВЫБРАТЬ *
                      ИЗ РегистрНакопления.ОстаткиТоваров.Остатки КАК Остатки((Склад, Товар) В (
                      Выбрать Товары.Ссылка.Склад, Товары.Товар
                      ИЗ Накладная.Товары КАК Товары
                      ГДЕ Товары.Ссылка = &Накладная))
                      ГДЕ РегистрОстатков.Остаток < 0;

                      Устраивает? Да, ваши quantityReserv будут (наверное) проще в написании в случае простых примеров (и совершенно не очевидно, что будут настолько же просты и немногословны, в случае более сложных условий), но и у 1С это не «3 запроса по тысяче строк кода».

                      Опять же, никто не мешает, для проверки простых условий, написать на 1С функцию isEqual(Объект, Поле, Значение) или isLess(Регистр, СтруктураИзмерений, Ресурс, ЗначениеРесурса) и использовать при проверках ее, а не писать руками запрос, повторив при этом то, что у вас на уровне ядра (подобные функции активно использовались разработчиками TDD и BDD движков для 1С).
                      Да, вероятно, при этом производительность будет ниже вашей системы, но уж точно решение не будет многословнее (а мы ведь тут топим за количество строк?).


                      1. CrushBy
                        02.10.2019 07:30

                        Я не знаю, сколько раз можно писать одно и то же. В примерах 1С все делается красиво, а в УТ — через 1К строк кода. Есть конечно вероятность, что УТ разрабатывали идиоты. Но мне как-то кажется более вероятным, что просто решение из примеров дико тормозит, поэтому приходится так делать.

                        В lsFusion проверяется такое ограничение одной строкой как в примерах, так и в production системах с 1К+ одновременных пользователей.


                        1. Ta_Da
                          02.10.2019 07:37

                          Есть конечно вероятность, что УТ разрабатывали идиоты. Но мне как-то кажется более вероятным, что просто решение из примеров дико тормозит, поэтому приходится так делать.

                          Конечно, это ведь логично. Проверка с помощью одного запроса тормозит гораздо больше, чем проверка с помощью выполнения трех запросов. И нет, многословность не связана с дополнительной логикой, более сложной структурой таблиц (тоже возникшей не просто так) и другими нюансами, о которых точно могут сказать только разработчики типовых решений.

                          В примерах 1С все делается красиво, а в УТ — через 1К строк кода

                          Хотите сравнивать типовые решения — выкладывайте в свободный доступ свое ERP решение в полной обвязке из всех модулей. Тогда будем сравнивать функции/код решений.
                          Хотите использовать свои примитивные демо примеры с таблицами в 2 колонки — сравнивайте их с примитивными примерами на 1С.

                          В lsFusion проверяется такое ограничение одной строкой как в примерах, так и в production системах с 1К+ одновременных пользователей.

                          Я рад за LSFusion. Только надо понимать что такое эти ваши «1К+ пользователей» (что конкретно они делают), что из себя представляет железо и конкретное решение используемые у заказчика. Тогда и сравнивать.


                          1. CrushBy
                            02.10.2019 10:01

                            Конечно, это ведь логично. Проверка с помощью одного запроса тормозит гораздо больше, чем проверка с помощью выполнения трех запросов. И нет, многословность не связана с дополнительной логикой, более сложной структурой таблиц (тоже возникшей не просто так) и другими нюансами, о которых точно могут сказать только разработчики типовых решений.

                            Ну вот, а в lsFusion один раз пишешь — и все оптимизируется само.

                            Хотите сравнивать типовые решения — выкладывайте в свободный доступ свое ERP решение в полной обвязке из всех модулей.

                            Любое сложное решение состоит из множества мелких. Это называется модульностью. Вот мы и обсуждаем эти маленькие кусочки.

                            Я рад за LSFusion. Только надо понимать что такое эти ваши «1К+ пользователей» (что конкретно они делают), что из себя представляет железо и конкретное решение используемые у заказчика. Тогда и сравнивать.

                            Все, что делают в розничных магазинах. Заказывают товар, списывают, формируют отчеты и выполняют все остальные процессы. Сервер один (но разбит на 2 виртуальные машины). 2 процессора Intel (за 5К каждый), 256ГБ памяти, SSD в RAID-10. В сумме с дисками сервер стоит около 15-20К.


                            1. MenZurKa
                              03.10.2019 09:40
                              -2

                              Ну вот, а в lsFusion один раз пишешь — и все оптимизируется само.

                              Это сарказм? Оптимизируется само… слов нет… Оно само налоговую отчетность сдает? Или может фуру разгружает само?


                      1. Veidt Автор
                        02.10.2019 09:14

                        Еще раз привожу пример запроса, который проверяет наличие остатков в аналогичном вашему примеру (имена объектов метаданных специально сократил):
                        ВЫБРАТЬ *
                        ИЗ РегистрНакопления.ОстаткиТоваров.Остатки КАК Остатки((Склад, Товар) В (
                        Выбрать Товары.Ссылка.Склад, Товары.Товар
                        ИЗ Накладная.Товары КАК Товары
                        ГДЕ Товары.Ссылка = &Накладная))
                        ГДЕ РегистрОстатков.Остаток < 0;

                        Еще раз, вы похоже не понимаете почему они так делают. Регистр которые они проверяют, может изменяться в куче разных мест, кучей разных способов, например там может изменяться только одна запись (при изменении одной записи в документе, они там руками дифф для этого строят). То есть к никакой Накладная.Товары нельзя обращаться, так как а) там этих видов документов изменяющих регистр могут быть сотни б) тогда ограничение будет проверяться для всей накладной, а не одной измененной записи. Поэтому делают вот так извращенно как написано в статье.

                        В lsFusion все вышесказанное делается автоматически. Платформа сама следит что изменилось, и запросы делает только для измененных строк и т.п.


                        1. Ta_Da
                          02.10.2019 09:30

                          То есть к никакой Накладная.Товары нельзя обращаться, так как а) там этих видов документов изменяющих регистр могут быть сотни б) тогда ограничение будет проверяться для всей накладной, а не одной измененной записи. Поэтому делают вот так извращенно как написано в статье.

                          Это вы похоже не понимаете.
                          1) У 1С контроль остатков реализуется на уровне прикладного объекта, который меняет остатки, а не на уровне таблицы остатков. В том числе, логика проверки для разных документов может быть различной, а для каких-то документов вообще отсутствовать. Поэтому вообще не важно сколько таких видов документов, это никак на сложность запроса не влияет.
                          2) Никто не мешает в качестве параметра в запрос передавать список товаров/складов для проверки, тогда можно один и тот же запрос использовать для разных документов.
                          3) Еще раз, не путайте сложную логику конкретного типового решения и принятые в нем стандарты кодирования и «в 1С нельзя сделать по-другому». Вы задали вопрос «как можно было бы написать на 1С аналог нашего quantityAvailable(st,sk)>0.

                          В lsFusion все вышесказанное делается автоматически. Платформа сама следит что изменилось, и запросы делает только для измененных строк и т.п.

                          Нет, не так. Платформа автоматически вешает проверки. Но логику проверок нужно писать разработчику. Как только логика проверок становится сложнее — разработчику приходится писать много кода.


                          1. Veidt Автор
                            02.10.2019 10:00

                            Вы опять уходите от ответа. Я специально нашел изолированный пример в УТ (именно чтобы нельзя было сказать, что так делается для других целей). Вы сказали, что это можно сделать одним запросом, привели пример, но этот запрос не заработает, так как упадет потому что «Накладная» не найдена (а что вместо ее писать надо не понятно), плюс будет тормозить, так как будет ограничение для всех строк вычислять.

                            Как только логика проверок становится сложнее — разработчику приходится писать много кода.

                            Не надо будет. Это ваши додумки. Нужно просто чуть чуть изменить условие. Дописать +f(a) или AND NOT g(a).


              1. Veidt Автор
                01.10.2019 23:10

                Еще раз. В 1с это делается 1(!) запросом строчек на 10. Пример на Мисте лично я вам приводил. Это если мы говорим о простой табличке SKU|Stock|Quantity и таком же простом документе, без дополнительной логики.

                А зачем разработчики типовых это делают 3-мя запросами. В lsFusion тоже самое делается одной строкой.
                Как ваша платформа понимает, что делать когда вы пишете «quantityReserved(st,sk)»?

                Еще раз, не путайте задание логики вычисления показателя (хотя и она в lsFusion гораздо проще) и логики ограничения на этот показатель. Я в статье сравнивал вторую часть.
                Если колонка Reserved находится в другой таблице, как платформа понимает, что quantityReserved нужно считать именно по ней?

                Что вы прицепились к этим таблицам. В lsFusion это все прозрачно, можете одной строкой переложить все в одну таблицу, а можете разложить каждый показатель в свою таблицу. Логика ограничений никак не поменяется.


                1. Ta_Da
                  01.10.2019 23:16

                  А зачем разработчики типовых это делают 3-мя запросами. В lsFusion тоже самое делается одной строкой.


                  1) возможно, внутренние стандарты команды или 1С;
                  2) возможно, неотрефакторенная кодовая база от ERP (т.е. в ERP используется аналогичный запрос, но делаются дополнительные проверки);
                  3) возможно, legacy или говнокод;
                  4) еще масса причин, которую точно смогут сказать только авторы конкретной типовой.

                  Нет, исходя из ответов на другие мои комментарии не одной строкой. Само свойство quantityAvailable(st,sk) «описывается ранее».


                  1. Veidt Автор
                    01.10.2019 23:38

                    Я уже устал повторять, что мы сравниваем не задание логики quantityAvailable (хотя и это сравнение далеко не в пользу 1С), а логику проверки, что этот показатель больше 0. И вы так и не написали, как должны были это делать разработчики типовых. Что где и когда проверять.


                    1. Ta_Da
                      02.10.2019 07:11

                      Я уже устал повторять

                      А я устал повторять, что вы сравниваете ужа и ежа.
                      Вы берете свой демо пример, который с точки зрения бизнес-логики соответствует местами решению из книжки «1С за полчаса для самых маленьких» и сравниваете количество кода в нем с одним из наиболее «навороченных» решений от 1С, которое на рынке уже много лет (т.е. обросло функциями и legacy).


                      1. Veidt Автор
                        02.10.2019 09:17

                        Ну возьмите ERP в части оптовой и розничной торговли (а не производства БУХ и ЗУП) и сравните. В lsFusion ERP есть многие вещи которых у УТ нет даже близко (впрочем обратное тоже верно). Но вы сложность сравните и посмотрите реальный живой код и коммиты (они на гитхабе есть). И там реально все делается CONSTRAINT'ами и событиями.


                        1. Ta_Da
                          02.10.2019 09:36

                          Ну так и сравните, с удовольствием почитал бы.
                          На примере сопоставимых по сложности бизнес-задач. С учетом тех проблем и задач, которые решает 1С, а вы вывели на внешние системы (безотносительно того, правильный у вас подход или нет, но часть задач вы со своей платформы просто сняли и это очевидно повлияло на сложность прикладного кода и платформы).

                          Пока что же, происходит подмена понятий.
                          Я же не пишу статью «зачем в XLS добавили макросы, вон у 1С есть маханизм табличных документов, макросов нет и пользователям не нужно».


                          1. CrushBy
                            02.10.2019 10:07

                            Так вы же скажете, что мы неправильно на 1С решаем задачу. Напишите все-таки решение задачи на 1С из вот этой статьи. Вот и сравним.


                            1. botokash
                              02.10.2019 10:44

                              Данную задачу разработчикам 1С не нужно решать с переходом на платформу 8.3.11, там появился встроенный механизм истории данных, который можно крутить программно как хочешь. И вроде даже еще в БСП второй редакции была самописная подсистема версионирования, но ее сейчас актуализировали под платформенный механизм.


                              1. Veidt Автор
                                02.10.2019 10:46

                                Там механизм версионирования — это по сути логирование только первичных данных и только целиком как в Confluence. То есть к приведенной статье никакого отношения не имеет.


                                1. botokash
                                  02.10.2019 10:54

                                  В различных приложениях регулярно возникает задача по поддержке логики изменения во времени некоторого атрибута объекта относительно некоторого субъекта (или субъектов). Например, это может быть изменение розничной цены товара в магазинах или показателей KPI для сотрудников.

                                  Тогда не понимаю, в чем предмет гордости механизмом вашего продукта? Вы сами в статье упоминали регистры сведений, периодические изменения именно там и реализовываются.


                                  1. CrushBy
                                    02.10.2019 10:58

                                    Так покажите, как это делается. Только именно с группами складов как в статье. И чтобы при изменении группы склада все менялось автоматически. Будет проще чем в lsFusion с 150 строками кода?


                                    1. botokash
                                      02.10.2019 14:08

                                      Не понимаю вашу страсть к количеству строк кода =) Я сам разработчик 1С, и прочитав статью уже примерно вижу решения и совсем не вижу проблемы. Ну будет у меня 5 запросов и 500 строк кода, в чем проблема то? В 1С я сделаю необходимую задачу бизнесу быстро и в срок, а за синтаксическим сахаром или красивым кодом вечером сяду в питоне покодить. Или уже написанный код в 1С отрефакторю, что бы в 300 строк уложиться.


                1. Magister7
                  02.10.2019 13:12

                  А зачем разработчики типовых это делают 3-мя запросами. В lsFusion тоже самое делается одной строкой.

                  Потому что:
                  1) В случае изменения документа остатки проверяются только по тем товарам, по которым есть изменение.
                  2) Там контроллируется в том числе ситуация вида "убрали товар из прихода и после этого по нему появился отрицательный остаток" (контроль в приходных документах).


                  1. Veidt Автор
                    02.10.2019 13:17

                    Я то это знаю. Вы это Ta_Da обьясните.


                    1. Magister7
                      02.10.2019 14:06

                      Т.е. я правильно понял, что в lsFusion аналогичный описанному мной контроль делается одной строкой?


                      1. Veidt Автор
                        02.10.2019 14:57

                        Да, только Ta_Da то ли понять, то ли признать этого не хочет.


                        1. Magister7
                          02.10.2019 18:32

                          Т.е. контроллируются только те строки документа, в которых изменилось количество, верно? А если нужно контроллировать все?
                          Собственно вопрос к чему: в случае 1С можно написать абсолютно любой алгоритм — пусть местами и монструозно, но можно. А как у вас?
                          Всё равно ведь эта логика где-то должна быть описана, чтобы потом проверять её одной строчкой — и не факт что это описание будет проще. Хотя, повторюсь, lsFusion я не знаю от слова "совсем", возможно и ошибаюсь.


                          1. Veidt Автор
                            02.10.2019 22:09

                            Не совсем понял. Вы пишете CONSTRAINT любой сложности. Платформа сама все контролирует, изменилась одна запись, проверит для одной. Изменились все для всех. Изменились любые данные, проверит только для этих данных. Вы его не обойдете. То есть такой CONSTRAINT как в СУБД только без ограничений, что одна запись одной таблицы. И вообще без каких либо ограничений.

                            и не факт что это описание будет проще.

                            Оно по определению проще, так как вы просто условие задаете. Декларативное правило. Не знаю как еще объяснить. А дальше не ваши проблемы.


                            1. Magister7
                              02.10.2019 22:27

                              Не знаю как еще объяснить.

                              На примере может быть? Допустим, возьмем тот же склад. Учет ведется в разрезах: Организация, Склад, Партия. Нужно контроллировать, что по сочетанию "Организация-Партия" мы не уходим в минус. Т.е. при контроле остатков — склад не учитывать.


                              1. Veidt Автор
                                02.10.2019 22:45

                                Как-то так:
                                balance(Organization o, Stock s, Batch b) = GROUP SUM ...; (ну или income(o,s,b) — outcome(o,s,b))

                                balance(Organization o, Batch b) = GROUP SUM balance(o, Stock s, b);
                                CONSTRAINT balance(Organization o, Batch b) < 0 MESSAGE 'Остаток должен быть положительным';

                                Вот тут пример простого склада если интересно, чтобы понимать как это приблизительно выглядит.

                                Ну или вот как это выглядит в продакшне.


                                1. Magister7
                                  02.10.2019 23:27

                                  Ага, примерно понял. Выглядит интересно.
                                  Ещё два вопроса:
                                  1) Я правильно понимаю, что при вводе, например, расходной накладой — строки записываются сразу, и сразу списывают товар со склада? Или все-таки записываются потом, по условной кнопке "Провести"? Если второй вариант — то описанная проверка остатков получается по факту выполняет запросы в цикле?
                                  2) Прочитал ещё другую статью где описывали про "движения по регистрам" если брать терминологию 1С. Не совсем понял как при этом реализовать, например, "сворачивание" строк — т.е. если в накладной несколько позиций с идентичным товаром, то как получить в регистре только одну запись?


                                  1. Veidt Автор
                                    02.10.2019 23:52

                                    Я правильно понимаю, что при вводе, например, расходной накладой — строки записываются сразу, и сразу списывают товар со склада? Или все-таки записываются потом, по условной кнопке «Провести»? Если второй вариант — то описанная проверка остатков получается по факту выполняет запросы в цикле?

                                    Сразу в той же транзакции. Но никто не мешает писать:

                                    isPosted = DATA BOOLEAN (Document);
                                    income = GROUP SUM quantity(InvoiceDetail i) IF isPosted(invoice(i)) BY stock(invoice(i)), sku(i);

                                    И тогда income и balance будут обновляться когда например будет isPosted установлено в true. Ну или сразу если документ вводится проведенным.

                                    Запросы в цикле никогда не выполняются, все компилируется в минимальное число запросов, независимое от количества записей.
                                    Прочитал ещё другую статью где описывали про «движения по регистрам» если брать терминологию 1С. Не совсем понял как при этом реализовать, например, «сворачивание» строк — т.е. если в накладной несколько позиций с идентичным товаром, то как получить в регистре только одну запись?

                                    Можно взять сделать
                                    quantity = GROUP SUM quantity(InvoiceDetail i) BY invoice(i), sku(i); // свойство (функция) получится с двумя параметрами Invoice, Sku

                                    А дальше генерим SkuLedger.
                                    // для всех quantity не NULL генерим объекты класса InvoiceSkuLedger
                                    CLASS InvoiceSkuLedger: SkuLedger;
                                    invoiceLedger(Invoce invoice, Sku sku) = AGGR InvoiceSkuLedger WHERE quantity(i, s);
                                    // прописываем реализации абстрактных свойств
                                    sku(InvoiceSkuLedger i) += sku(i);
                                    stock(InvoiceSkuLedger i) += stock(invoice(i));


                                    1. Magister7
                                      03.10.2019 00:52

                                      Запросы в цикле никогда не выполняются, все компилируется в минимальное число запросов, независимое от количества записей.

                                      Т.е. в данном примере при установке флага isPosted у Invoice система "увидит" что он влияет на InvoiceSkuLedger, и сгенерирует на все строки один запрос UPDATE который обновит остатки?


                                      Если так то выглядит необычно — это вы по факту определяете граф зависимости данных и пересчитываете его?


                                      1. Veidt Автор
                                        03.10.2019 16:18
                                        +1

                                        Т.е. в данном примере при установке флага isPosted у Invoice система «увидит» что он влияет на InvoiceSkuLedger, и сгенерирует на все строки один запрос UPDATE который обновит остатки?

                                        Грубо говоря да. Там скажем два запроса может быть, но смысл в этом.
                                        Если так то выглядит необычно — это вы по факту определяете граф зависимости данных и пересчитываете его?

                                        Очень упрощенно, но да. Строится граф событий / материализаций, которые при изменении записи запускаются / обновляются. С кучей оптимизаций естественно.


                                        1. Magister7
                                          03.10.2019 20:03

                                          Ага, отлично.
                                          Ещё вопрос — в документации вижу возможность писать обычный Java-код, но не совсем понял область применения.
                                          Например, есть ли возможность сделать записи "из ничего", в смысле обычным императивным кодом. Пользователь нажал кнопку "Сделай мне хорошо", система выбрала через SQL что-то, дальше посчитала как-то, выдала пользователю таблицу, он руками исправил как считает нужным, нажал "Записать" и система записала их ещё куда-то. Ну или без отображения пользователю — просто посчитать и записать.


                                          Вобщем, есть ли обычное императивное программирование? Можно ли "мешать" код lsFusion и Java в одной форме, например?


                                          1. Veidt Автор
                                            03.10.2019 22:25

                                            Смотрите, за императивный код отвечают действия. Там есть операторы изменения, показа форм и т.п. Java код подключается как:
                                            myAction INTERNAL 'my.MyAction';
                                            И дальше используется как обычное действие на lsFusion. То есть да можно мешать, строго говоря при выполнении между ними нет разницы, они все в одной JVM.

                                            Область применения — нестандартные задачи, как например симплекс метод или какие-то супер сложные интеграции, которые не решаются обычными HTTP запросами с JSON'ами и XML'ами (это все можно на lsFusion делать).


                          1. DAleby
                            02.10.2019 22:24

                            Хочу добавить к предыдущему ответу, что в любом случае в lsfusion никто не отбирает возможность создавать руками события и добавлять обработчики на эти события.


        1. al_bozo
          01.10.2019 23:47

          А не надо в регистр пихать бизнес-логику. Мало того, что контроль при списании — штука для сугубо простых случаев, а в том же классическом партионном учете, например, все делается наоборот — сначала формируется дерево остатков по партиям, а потом уже по нему мы списываем по фифо, лифо, фефо и как ещё нужно в целом от бизнес-потребности. Так ещё и в 1с нет аудиторского следа, поэтому проведение задним числом — норма жизни, и только регистратор "знает", где контроли нужны, а где совсем нет.


      1. o4karek
        01.10.2019 16:53

        А самое главное — совершенно непонятно, зачем в небутиковой рознице нужен контроль остатков :) А уж если этот контроль реализован во фронте — это просто очень здорово :)


      1. Honomer
        01.10.2019 16:54

        А… речь про это… Извините, из слога автора сразу не понял, так как предыдущие его посты не читал.

        Что-то не думаю, что внутри его процедура isWarehouseN менее монструозна, чем в 1С, если речь идёт хоть о какой-то минимально сложной проверке.


        1. Ta_Da
          01.10.2019 17:47
          +1

          Что-то не думаю, что внутри его процедура isWarehouseN менее монструозна, чем в 1С, если речь идёт хоть о какой-то минимально сложной проверке.

          Но эту процедуру мы не увидим. По крайней мере до сих пор, все эти процедуры скромно скрывались.
          На предложение точно также прятать проверку остатков в 1С за процедуру «НетОтрицательныхОстатков(Документ)» реагируют тоже не слишком адекватно.

          Ну т.е. идет сравнение ужа с ежом:
          — простые встроенные в платформу проверки из lsfusion, которые быстро превращаются в цепочку вызовов неизвестных внешних процедур, как только проверка становится сложнее чем «проверить чтобы не ноль».
          — сложные проверки с кучей условий, написанные в одном из типовых решений на 1С.

          Да, если бы такие ограничения были встроенными в платформу, наверное было бы полезно. Но на практике, я могу вспомнить буквально пару-тройку случаев, когда такой простой проверки бы хватило для решений, которые я разрабатывал/поддерживал.
          Вероятно, той же логики придерживались и разработчики платформы.

          Можно считать это синдромом утенка или чем угодно, но если абстрагироваться от «круто было бы, если бы в платформе было все что только можно придумать», примерной аналогией будет карандаш с ластиком на конце. Да, удобно, но на практике все равно в комплект к нему нужно покупать нормальный.


          1. CrushBy
            01.10.2019 17:55

            А давайте вы на 1С сделаете пример вот отсюда. Там всего 150 строк кода и у нас ушло на это час где-то. Давайте такой же на 1С и сравним. Чтобы не быть голословными. Там всего одна форма.


            1. philya
              01.10.2019 22:35

              Ушло где-то 10 минут. Вот весь код, который написал.


              Процедура ОбработкаПроведения(Отказ, РежимПроведения)
                  Движения.ЦеныСкладов.Записывать = Истина;
              
                  Запрос = Новый Запрос;
                  Запрос.Текст = 
                      "ВЫБРАТЬ
                      |   ПрайсСклады.Ссылка.ДатаНачала КАК ДатаНачала,
                      |   ПрайсСклады.Ссылка.ДатаОкончания КАК ДатаОкончания,
                      |   ПрайсСклады.Склад КАК Склад,
                      |   ПрайсТовары.Товар КАК Товар,
                      |   ПрайсТовары.Цена КАК Цена
                      |ИЗ
                      |   Документ.Прайс.Товары КАК ПрайсТовары,
                      |   Документ.Прайс.Склады КАК ПрайсСклады
                      |ГДЕ
                      |   ПрайсСклады.Ссылка = &Ссылка
                      |   И ПрайсТовары.Ссылка = &Ссылка";
              
                  Запрос.УстановитьПараметр("Ссылка", Ссылка);
              
                  РезультатЗапроса = Запрос.Выполнить();
              
                  ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
                  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                      ЗаполнитьЗначенияСвойств(Движения.ЦеныСкладов.Добавить(), ВыборкаДетальныеЗаписи);
                  КонецЦикла;
              КонецПроцедуры
              

              Еще минут за 10 прикручу отчет на скд, который будет для конкретного склада, на конкретную дату делать прайс. Сколько времени это займет у вас?


              1. CrushBy
                01.10.2019 22:45

                Дайте код всего приложения, пожалуйста. И где здесь группы складов? И как обрабатывается, когда склад переходит в другую группу? И мне нужен не отчет, а форма, где можно добавлять прайсы и смотреть текущие значения. Давайте уходить от «1С головного мозга» и делить все на отчеты/документы/проведение.

                И что значит:

                Сколько времени это займет у вас?

                Там в статье весь код. Абсолютно. Просто вставляете в try online и наслаждаетесь.


          1. DAleby
            01.10.2019 18:00

            Мы вам уже на это не один раз отвечали, что логика в CONSTRAINT может быть абсолютно любая, то есть вы можете повесить ограничение на любое вычисляемое свойство. Мне, например, непонятно, что именно вам непонятно в слове «любая»? Вот все, что сможете на нашем языке (полном по Тьюрингу) изобразить, на все и можно будет повесить одной строкой кода.

            простые встроенные в платформу проверки из lsfusion, которые быстро превращаются в цепочку вызовов неизвестных внешних процедур
            Вы столько уже написали в обсуждениях нашей платформы, но до сих пор не поняли, что никаких «процедур» в обсуждаемом контексте у нас нет.


            1. Ta_Da
              01.10.2019 18:04
              +1

              Вы столько уже написали в обсуждениях нашей платформы, но до сих пор не поняли, что никаких «процедур» в обсуждаемом контексте у нас нет.

              Детский сад, штаны на лямках.
              Что скрывается за «quantityAvailable(Stock st, Sku sk) > 0»?
              Что такое «quantityAvailable»? Функция? Процедура? Оператор?

              Для любого существующего во вселенной условия у вас уже есть встроенный оператор(процедура, функция) вида «Condition42()» или для сложной бизнес-логики придется писать свой оператор(процедуру, функцию)?


              1. CrushBy
                01.10.2019 18:07

                Вы понимаете разницу между декларативной и императивной логикой? Процедура — это последовательность выполнения команд. Так вот в lsFusion нету никакой последовательности команд при задании, например, остатка.


                1. Ta_Da
                  01.10.2019 18:09

                  Вы так и будете уходить от конкретных ответов съезжая на вопросы терминологии?


                  1. CrushBy
                    01.10.2019 18:14

                    Так, а какой вопрос то? В lsFusion ограничение на остаток делается одной строкой (см. статью про регистры). В УТ это делается через мозгодробильный приведенный выше код (да, я понимаю, что УТ писали идиоты, которые не следует рекомендациям платформы, и у них есть какая-то тайная причина так делать).


                    1. Ta_Da
                      01.10.2019 18:20

                      Так, а какой вопрос то?

                      Перечитайте мои комментарии в этой ветке. Участки текста, которые начинаются с большой буквы и заканчиваются знаком "?" — называются вопросами. Пожалуйста, ответьте на все или часть из них.

                      Для простоты добавлю ссылки на комментарии:
                      habr.com/ru/company/lsfusion/blog/468415/#comment_20698057
                      habr.com/ru/company/lsfusion/blog/468415/#comment_20698375


                      1. CrushBy
                        01.10.2019 18:23

                        Мне казалось, что мы тему с регистрами и остатком обсосали уже в предыдущей статье про регистры. Не увидел ни одного нового вопроса по сравнению с теми обсуждениями.

                        Когда вы задаете вопросы «Что скрывается», то Вы сами переходите на обсуждение терминологии.


              1. DAleby
                01.10.2019 18:42

                Это не детский сад. Термин «процедура» подразумевает императивное выполнение, которого там нет. И это просто маркер недопонимания.


  1. Zlobnost
    01.10.2019 16:17

    А давайте просто скажем, что есть 1С, продукт, который закрыл большой рынок и реализовал многие потребности и простоту для клиентов в свое время и никто до сих пор этого не повторил.
    Давайте сделаем хоть минимального конкурента и тогда скажем что 1С не торт.
    Я сам в прошлом программист 1С и мне многое не нравится, то блин, крутых программистов куча вокруг, но никто не решил сделать хорошего конкурента.


    1. Veidt Автор
      01.10.2019 16:33

      и никто до сих пор этого не повторил.


      lsFusion не только повторил, а и перегнал на целое поколение. Да решения пока сейчас с фокусом на FMCG розницу и оптовую торговлю, но это вопрос времени.


  1. tan76
    01.10.2019 16:21

    В 1С отчеты еще зачем-то пытаются выполнять функции обычных форм (то есть обладают интерактивностью)
    Если вы про отчеты обычные, то интерактивность в виде расшифровок очень полезная штука. А если про регламентированные отчеты, (которые и заполняются по данным бух. учета и имеют возможность ручного ввода) так это просто находка для бухгалтера! Это я вам как бухгалтер говорю.


    1. Veidt Автор
      01.10.2019 16:35

      Это я к тому, что отчеты в 1С зачем-то пытаются использовать для задач, для которых они не предназначены. Расшифровку куда проще сделать на формах, зачем тянуть этот функционал в печатные формы?

      Бухгалтерия и прикладные абстракции бухгалтерии (!) в платформе это отдельная тема.


      1. Ta_Da
        01.10.2019 16:54

        Это я к тому, что отчеты в 1С зачем-то пытаются использовать для задач, для которых они не предназначены.

        А как же ваше непоколебимое заверение «пользователи хотят как в excel»?
        Ну и пример можно — «задач для которых они не предназначены»?
        И кстати, исходя из какой логики вы считаете что «не предназначены»?

        Расшифровку куда проще сделать на формах, зачем тянуть этот функционал в печатные формы?

        Вот вы опять. Не «печатная форма», а «табличный документ». Который действительно может быть «печатной формой» («бланк договора», «бланк накладной», «этикетка») — и в таких случаях расшифровка не используется и никакой интерактивности (больше чем «разрешить внести изменения/изменить параметры печати») обычно не добавляется, и «выходная форма отчета», в которой в качестве «расшифровки» и «интерактивности» предполагается переходы к более детальным отчетам, открытия форм документов/справочников, упомянутых в отчетах и т.д. И, внезапно, добавляется это обычно по просьбе пользователей.


        1. Veidt Автор
          01.10.2019 22:17

          А как же ваше непоколебимое заверение «пользователи хотят как в excel»?

          Ну так для этого формы надо использовать.
          Ну и пример можно — «задач для которых они не предназначены»?

          В теме про подбор люди предлагали отчеты использовать для реализации WYSIWYG интерфейсов ввода.
          И кстати, исходя из какой логики вы считаете что «не предназначены»?

          Потому что для работы с информацией, которую не надо печатать, есть формы.
          «табличный документ», «выходная форма отчета»

          Это опять таки какие то странные очередные дырявые абстракции 1С. Непонятно зачем нужные, когда есть формы. И ни в одной другой технологии их нет.


          1. Ta_Da
            01.10.2019 22:41

            Ну так для этого формы надо использовать.

            *ирония* Получается, что когда 1С не дает редактировать данные в динамических списках, то это минус 1С. Когда у вас нет возможности (при необходимости!) использовать для интерактивной работы табличный документ — это все равно недостаток 1С?

            В теме про подбор люди предлагали отчеты использовать для реализации WYSIWYG интерфейсов ввода.

            Потому что для работы с информацией, которую не надо печатать, есть формы


            В теме про подбор, вами (возможно, не лично, а кем-то из коллег), утверждалось, что подбор «как в excel» реализовать невозможно. Вариант с табличным документом приводился как один из возможных вариантов реализации, причем в номинации «ну если хотите, можно и так извратиться».

            Непонятно зачем нужные, когда есть формы. И ни в одной другой технологии их нет.

            Не совсем понимаю вас. Есть возможность использовать табличный документ как простую неинтерактивную форму.
            Есть возможность, навешивать на табличный документ события и работать с ним интерактивно.
            В чем проблема-то у вас? Не нравится — не используйте. У меня пользователи просили реализовать им интерактивность в печатных формах. Не вижу в этом проблемы.


            1. Veidt Автор
              01.10.2019 23:14

              *ирония* Получается, что когда 1С не дает редактировать данные в динамических списках, то это минус 1С. Когда у вас нет возможности (при необходимости!) использовать для интерактивной работы табличный документ — это все равно недостаток 1С?

              Я не знаю, что такое табличный документ. Это какой-то плод больной фантазии одного из разработчиков 1С. Есть формы. Зачем нужна вторая абстракция?


              1. Ta_Da
                01.10.2019 23:20

                Я не знаю, что такое табличный документ. Это какой-то плод больной фантазии одного из разработчиков 1С. Есть формы. Зачем нужна вторая абстракция?

                Табличный документ — это свой велосипед 1С, который они написали для того чтобы не привязываться к Excel. Так же как и файловая база у них появилась, когда использование SQL не планировалось.
                Вы поступили проще — взяли готовые решения.


                1. Veidt Автор
                  01.10.2019 23:40

                  Надо будет кстати про табличный документ в избыточные абстракции дописать. Не лень будет, сделаю, спасибо :)


                  1. Ta_Da
                    02.10.2019 07:17

                    Надо будет кстати про табличный документ в избыточные абстракции дописать

                    Непонятно только, что вы этим докажете. Ну т.е. у вас большая часть статей идет с позиции «в 1С вот этого нет, а у нас есть».
                    А тут, внезапно, что-то есть у 1С и нет у вас. Но это опять оказывается недостатком 1С.

                    Еще раз: там где 1С исторически позволяла не использовать сторонние продукты (т.е. платить только за лицензии 1С), с помощью своего движка табличных документов и своей файловой СУБД, вы предлагали заказчику купить EXCEL и SQL (ну или не предлагали купить, но подразумевали что у него эти продукты уже установлены).
                    Называть это недостатком 1С и преимуществом LSFusion, по моему мнению, странно.


      1. tan76
        02.10.2019 10:17
        +1

        Я согласен, что расшифровку проще делать на форме, но форму не распечатаешь. А труд бухгалтера включает в себя подготовку неких отчетов. Подготовка эта состоит из следующих шагов, формируем к примеру, «оборотку», глаз цепляется за некую незнакомую цифру. Кликаем в неё (прямо в цифру), формируем «карточку счета», пробежав по карточке глазами понимаем что все в порядке, закрываем карточку, печатаем «обротку». Здесь нет места дополнительным формам, настройкам и кликам, механизм расшифровок именно так и должен работать.


  1. Deaddy
    01.10.2019 16:27

    Сталкиваюсь с 1с только как админ, win+mssql, linux+postgres, только серверная часть.
    По моему скромному опыту, 70% проблем (тормоза, зависания и т.д.) решаются регулярным перезапуском сервисов. Что как бы намекает нам на не самый лучший код этих самых сервисов.
    Остальные 30% — надо просто потерпеть и дождаться не кривого релиза.
    Сорри, если кого обидел.


  1. VSOP_juDGe
    01.10.2019 16:40

    Черт с ним с lsFusion, он только пару месяцев назад на рынок вышел, но любая из связок .Net+MSSQL или Python+PostgreSQL будет уж точно не хуже.


    Сколько программистов, времени и денег нужно, чтобы написать аналог УТ на .net + mssql? Со всеми документами, отчетами, печатными формами?
    Может ли небольшое торговое предприятие позволить себе такие затраты? И главное, зачем?
    Подумайте лучше, почему САП покупают. Он дороже 1с во много раз, монструознее на порядок, а язык еще более убог.


    1. Veidt Автор
      01.10.2019 17:15

      Вот народ. Вы статью читали? Я писал про специализированные решения и самописки.


      1. VSOP_juDGe
        02.10.2019 09:18

        Любая ут постепенно превращается в самописку, никто ее не обновляет, как бухгалтерию. Но взять ее за основу гораздо быстрее, чем писать с нуля на дотнет.


  1. apapacy
    01.10.2019 17:30

    Продолжаю свой коммент https://habr.com/ru/company/lsfusion/blog/468415/#comment_20697189 теперь по существу сказанного Автором статьи


    По пунктам


    Объекты: Справочники, Документы и т.д.

    "Отображением на таблицы разработчик никак не управляет, и вообще оно скрыто от него (хотя ничего особенного в нем нет)" — ну то есть и претензий нет и спорить не о чем


    "Никаких one-to-many, many-to-many отображений нет" — ну это же не SQL база данных. Почему они должны там быть?


    Неэффективное получение данных объектов


    Автор рассматривает насколько я понял выборку в стиле ранних версий 1с Пока Выборка.Следующий() Цикл. В то время как еще с версий 7.7 можно все выбирать запросами аналогичными SQL.


    Таблицы / Представления: Регистры


    Регистры представляют движок для получения итогов без необходимости пересчета всех записей. По логике рассчитанный раннее итог + итог за расчитанный период. При этом выборка итогов за последний год и за последние 20 лет будет примерно одинакова.


    "Регистры поддерживаются в очень частных случаях"


    Они для этого и предназначены (итоги)


    "Отсутствие ограничений и событий для значений регистров"


    В чем недостаток? Их там просто нет. Почему это фатально? Регистр чекается при проведении документа. Если условие нарушается документ не проводится.


    "В параметрах виртуальных таблиц можно использовать только константы"
    В этом разделе есть замечание: "Ну или находить минимум / максимум дат и высчитывать остатки и обороты. В любом случае оба этих способа как неудобны, так и не производительны одновременно." — для остатков и оборотов есть регистры.


    Запросы
        Запросы в строках
        Отсутствие оптимизатора запросов

    "1С также поддерживает свою файловую СУБД и PostgreSQL, которые работают по принципу «что вижу, то и выполняю»." Файловую практически систему не используют. Против отсутствия оптимизации в PostgreSQL думаю будут возражать те кто с ним работает.


        Отсутствие расширенных SQL возможностей

    Ну и что?


        Отсутствие запросов на изменение

    Нужно сначала поверить что запросы на изменение это добро а их отсутствие это зло. Я бы сказал, что наоборот.


        Отказ от автоматических блокировок

    Ну и что? Вы считаете что при открытии документа он должен сразу блокирвоаться? Так было в версиях 7.х когда не было большого количества квалифицированных разработчиков. Сейчас это нужно делать явно.


    Формы
        "Отказ от единого потока выполнения: разделение логики на сервер и клиент"

    Я бы переформулировал. Это возможность разделить логику на клиентскую и серверную. Решение об отказе от одного или другого вариант решает разработчик.


        Отказ от синхронности

    "Поэтому, чтобы, например, показать диалог, 1С приходилось создавать новое окно (вкладку) браузера, что, в свою очередь" — не уверен что в браузерном расширением работают большинство пользователей.


        Отказ от WYSIWYG: разделение интерфейса на запись и чтение

    — Невозможность обращаться в списках к реквизитам форм / текущим значениям других списков
    Избыточные уровни абстракций

    -


    Закрытая физическая модель

    Я бы переформулировал. Разработчику 1с даны все необходимые для разрвботки средства без необходимости обращаться к физической модели базы данных. Параллельно даны широкие возможности для интеграции своих модулей


    Отсутствие наследования и полиморфизма

    -


    Отсутствие явной типизации в коде

    -


    Отсутствие модульности

    -


    Ставка на визуальное программирование
    Спорно. Я бы переформулировал. Используя визуальное программирование можно сделать очень много. Практически все что нужно в обычном случае. Для нестандартных случае есть интерфейсы для разработки кастомных модулей.


    По бизнес-части комментирвоать не буду. Действительно если бы не было 1с у отечественных разработчиков был бы дополительный плюс для автоматизации бизнеса.


    1. CrushBy
      01.10.2019 17:34

      Спорно. Я бы переформулировал. Используя визуальное программирование можно сделать очень много. Практически все что нужно в обычном случае


      А вас не смущает, что в самых популярных фронтенд технологиях для разработки GUI(!!!) React и Angular все делается кодом, а не визуальным программированием? Визуальное программирование — это для настроек максимум. Для промышленной разработки с ним больше проблем, чем преимуществ. Опять же напоминаю про gitflow.


      1. apapacy
        01.10.2019 17:45

        Не смущает. Потому что благодаря визуальному интерфейсу я мог бы на 1с сделать автоматизацию работы подразделения на предприятии на котором работал 20 лет назад за два дня. А на React, если бы он тогда был — делал бы пару месяцев.


        1. Neikist
          01.10.2019 17:50

          Кроме разработки есть еще и поддержка. А она в визуальном программировании та еще боль часто. Особенно на командах больше 10-20 человек. Особенно спустя время.


        1. CrushBy
          01.10.2019 17:53

          Так я же не отрицаю, что для примитивных случаев визуальное программирование подходит. Но не для промышленного с большим количеством функционала и разработчиков.


          1. apapacy
            01.10.2019 18:07

            Экономические данные на предприятиях в большинстве случаев имеют алфавитно-цифровой формат. То есть в известном смысле являются примитивными.


            Единственная нетривиальная задача, которая может решаться в рамках экономических данных — это вот та самая задача Джонсона (или как сейчас говорят MES, ASP) о которой я уже упомянул выше и которую 1с не решает и это ее действительный недостаток.
            Но если бы она решалась, то ее решение было бы преимущественно не рисованное в интерфейсе а написанное текстом, возможно отдельным нативным модулем.


            И в этом случае 1с (или не 1с) можно было бы продавать за миллиарды вне зависимости от прочих достоинств и недостатков.


            1. CrushBy
              01.10.2019 18:12

              Такое ощущение, что то, что вы написали — просто сгенерированный псевдонаучный текст. К сожалению, даже не знаю, что на него ответить, и какое это имеет отношение к промышленной разработке бизнес-приложений.


              1. apapacy
                01.10.2019 18:14

                Прямое.


        1. Veidt Автор
          01.10.2019 18:29

          Ну а мы бы кодом сделали за полдня. Я не пойму, вы статью читали? Там все по пунктам. Почему вдруг мышкой должно быть быстрее чем клавиатурой?


          1. MenZurKa
            03.10.2019 10:05

            В 1С можно и кодом сделать, в чем проблема?


    1. Veidt Автор
      01.10.2019 22:29

      Честно говоря не знаю, как это комментировать. Вы либо не читали статью, либо совсем ее не поняли.


  1. vasilyevii
    01.10.2019 18:43

    Во-первых, спасибо автору за хороший технический анализ платформы, правда я не понял, а зачем он?
    Ни для кого не секрет, что 1С это Г****, но его почему покупают. Я думаю, 1С это как Макдональдс на рынке бизнес ПО – да, вредно, но быстро, дешево и даже вкусно.

    После 10 лет внедрения 1С на проектах разных масштабов могу проще объяснить плюсы и минусы:

    Для потребителя (то есть для бизнеса в России и СНГ, другие пока только в перспективах):
    Плюсы:
    1. Дешево и сердито для малых и средних компаний — лицензии и стоимость разработки/внедрения по сравнению с западными аналогами в разы меньше, доступность специалистов выше.
    2. А куда вы денетесь? Аналогов нет, скоро правительство запретит использовать другое ПО для подготовки и сдачи налоговой и прочей отчетности (шучу конечно, хотя...).

    Минусы:
    1. Дорого и вредно для больших компаний.

    Первый кейс, это когда хотят какую-нибудь ERP от 1С натянуть на свой мегазавод, а потом сталкиваются с проблемами производительности и масштабируемости (в 1С даже такая сертификация есть на «эксперта по технологическим вопросам», это такой супермен, который должен уметь натянуть сову на глобус с помощью bash, регулярки и знаний вьюшек в СУБД).
    Есть выше комментарий по этому поводу, с которым соглашусь 100%, по поводу низкого порога входа, который в последствии создает ограничения на масштаб систем.
    Да и с подрядчиками в 1С на такие масштабные проекты все очень печально

    Второй кейс, это когда в холдинге много мелких компаний, и они все по отдельности хорошо сидят на 1С, но управляющая компания хочет, например, автоматизировано собирать управленческую отчетности с этого зоопарка. Идея даже кажется ничего себе, пока не начинаешь ее реализовывать, все равно приходим к «не плохо было бы всех дочек натянуть на одну ERP», а далее смотрите первый кейс.

    2. Бизнес-логика, заложенная в 1Сных ERP не дотягивает до западных.
    В общем серьезные менеджеры в серьезных компаниях это понимают, и не хотят 1С. Исключения в гос. компаниях, где их заставляют сверху в рамках импортозамещения.

    Для специалистов плюсы в том, что в России это стабильно, низкий порог входа, копеечку можно заработать. Есть шанс, что пойдет на экспорт, тут недавно рассказали, что в Италии уже 2.5 тысячи программистов 1С (пока не успел проверить информацию).
    Минусы — это зарплаты, когда я начинал они были выше чем у «трушных» программистов, сейчас меньше. В общем, это проблема любого бизнеса в России, который ориентируется на внутренний рынок, хочешь денег – работай на экспорт.
    Ещё один из плюсов, субъективных, работая на внедрениях 1С приходится погружаться в прикладную область, то есть в бизнес-процессы компаний. Так начинаешь разбираться в том, как работает бизнес, хороший опыт для тех, кто в будущем видит себя предпринимателем, управляющим.


  1. Programmierus
    01.10.2019 18:47

    Для меня 1С остался чем-то из давно забытого, что я не трогал более 20 лет… Сейчас вот опять пришлось и получается, что найти исполнителя очень сложно. Кто-то может подсказать почему?


    1. gennayo
      01.10.2019 19:06

      Так, вроде, очевидно, почему — задача нетиповая за 1000р/час. Одинесники такого не любят :))


      1. skrimafonolog
        02.10.2019 05:53

        Для меня 1С остался чем-то из давно забытого, что я не трогал более 20 лет… Сейчас вот опять пришлось и получается, что найти исполнителя очень сложно. Кто-то может подсказать почему?


        Так, вроде, очевидно, почему — задача нетиповая за 1000р/час. Одинесники такого не любят :))


        Этого никто не любит за копейки.
        То же самое можно сказать про веб — CMS вам поднимут за дешево, но если вы хотите по ставкам оплаты как за CMS создать настоящее полноценное веб-приложение с нуля — то за ту ставку что CMS не найдете вменяемого специалиста.

        По мне так — там рядовая работа.
        Просто на не том сайте ищут.

        Но, должен отметить, что это, действительно слишком дешево.
        Так как работа на стыке технологий.

        И те, кто освоили этот стык — зарабатывают уже больше, чем обозначанная сумма.

        Если бы я был заказчиком в этом проекте и хотел бы сэкономить — я бы нашел разных людей на разные части проекта.

        Платить же «регулярно за поддержку и обслуживание» человеку, которые может это все корректно настроить — слишком расточительно, если у фирмы такие бюжеты.


        1. gennayo
          02.10.2019 05:55

          Рядовая для того, кто это уже хотя-бы один раз делал. Но есть подозрение, что тот, кто что-то такое уже делал, за 1000 в час работать не будет.


      1. Programmierus
        02.10.2019 13:38

        Написал я тут одинокий коммент из отпуска, а тут целая дискуссия ;) Отвечу в Вашем комментарии как-то в общем… На самом деле ценник 1000 руб/час был совершенно взят «с потолка». Такой предложил первый исполнитель нам сам еще в первой итерации «цена договорная». И мы готовы были двигаться в любом направлении. Никакого фидбека на тему «слишком мало платите» или «согласен, но хочу столько-то» — не последовало. ОК. Сделал заказ с договорной ценой. Сомневаюсь, правда, что проблема была в этом.

        Что касается демагогии на тему того, что «стык стеков» и т.п. Прочитайте, пожалуйста, сами задание. Мы сами достаточно немаленькая IT-структура. У нас свой кастомный кластер на базе Proxmox (нам не нужна помощь в его настройке), свой AD-сетап и т.п. Мы выдаем готовые виртуалки и просим на них поставить и настроить 1С. Все, что касается остальных стеков мы делаем сами.


        1. gennayo
          02.10.2019 13:54

          Если вопрос не в деньгах, зачем вы ищете удалёнщика, а не обратитесь к организации с соответствующими компетенциями? Вот, например, ребята что-то похожее делали cloud.yandex.ru/blog/posts/2019/09/1c-proton


          1. Programmierus
            02.10.2019 18:13

            По организационным и географическим особенностям.

            Организационное: 1С для нас лишь капля в море — 1% от тех услуг, которые мы предоставляем материнскому холдингу. Нам не нужен корпоративный субподрядчик. Текущий сетап (после основной настройки) успешно поддерживается вообще местным московским сисадмином. Если не разводить ню-ню и не надувать пузыри, то я не вижу в чем проблема обслуживать тоже самое удаленно, по необходимости, уже в рамках предложенной нами модели. Мы сами успешно деплоим весь корпоративный софт, в т.ч. сложные ERP типа SAP/DATEV из Германии хоть даже в Гонконг. Все работает через Application Delivery. И поддерживаем, удаленно, да.

            Географическое: мы вообще сидим в Германии. Тут со специалистами 1С как-то так себе ;)


            1. gennayo
              02.10.2019 18:23

              Это всё понятно, непонятно, почему вы считаете, что организация точно так-же, как фрилансер, по удалёнке не сможет решить вашу задачу?


              1. Programmierus
                02.10.2019 18:29

                Тем, что наш опыт показывает, что это банально неэффективно и чревато проблемами. Особенно и очень особенно в этом секторе. На практике задачу выполняет все равно один человек, в лучшем случае два человека. Над ним ставится Х «менеджеров» (Х выбрать по вкусу жирности конторы).

                Коммуникация с конечным исполнителем, в итоге, усложняется и искажается пропорционально Х. Обрастает ненужными нам услугами, сложными юридическими нюансами и бесконечными конференц-коллами. Это энтерпрайз в том месте, где мы его не хотим.

                Потом каждую мелочь решить — целый цирк с согласованиями и допами. Потом еще непосредственный исполнитель со всеми ноу-хау увольняется, приходит новый и начинается вообще бардак.

                Вставать на обслуживание кому-то в контору на полный стек — да. Мы сами такое предоставляем, фактически. Просто поставить и настроить 1С на готовый кластер, который обслуживает уже своя квалифицированная команда, а потом решать проблемы по необходимости — нет, спасибо. Мы хотим законтрактить непосредственно исполнителя, платить ему справедливо, но иметь «доступ к телу».


                1. gennayo
                  02.10.2019 18:36

                  Странные вы, по ссылке, которую я приводил выше, именно такая работа — получили задачу от клиента, решили её, получили оговорённую оплату и ждут следующих задач. Далеко не во всех компаниях такая бюрократия, как вы описываете. Подозреваю, что всё-таки денег сэкономить хотите.


                  1. Programmierus
                    02.10.2019 21:48

                    Нет, ну если вы настаиваете…


                    1. gennayo
                      02.10.2019 21:57

                      Не настаиваю, конечно. Увидел непонятное для себя, пытаюсь разъяснить.


    1. vasilyevii
      01.10.2019 19:22

      Linux, PostgresSQL — это уровень 1С Эксперта по технологическим вопросам, искать удаленщика на 1000 рублей в час на такую задачу, я бы не стал


      1. beerchaser
        01.10.2019 21:34

        Это не уровень 1С эксперта по технологическим вопросам. Данная задача решается тремя специалистами:
        1. Системный администратор — настройка авторизации, запуск сервера приложений на linux, запуск web-сервера для сервисов 1С на чем-нибудь (как вариант linux), установка сервера баз данных. С учётом количества баз, сервер приложений и, скорее всего, веб-сервер должен быть не одинок, т.е. имеем кластер. Также возможно потребуется разносить базы по серверам БД, ибо иопсы и утилизацию ЦПУ и net никто не отменял. Т.к. все это хозяйство будет искрить и переливаться всеми цветами радуги, требуется система мониторинга, хотя бы по основным параметрам.
        2. Dba для PostreSQL. Ну или хотя бы человек, который представляет, какие ручки там крутить, с учетом, что 200 баз, некоторый бардак и резервное копирование никто не отменял.
        3. И, наконец, программер 1С, который должен будет переписать функционал COM на веб-сервисы; совместно с системным администратором придумать, как обеспечить работу Астрал, не вывалившись в него; совместно с DBA добиться приемлемой производительности ( минус 20% от MS SQL) и разгрести некоторый бардак, попутно создав новый. Причем работа всех этих специалистов будет проходить в режиме «давай-давай».
        Поэтому вхождение в предлагаемую задачу без предварительного обследования и проектирования конечной системы можно характеризовать классическим «Слабоумие и отвага». Стремление посадить на эту задачу удаленщика — не менее классическим :" не гонялся бы ты поп за дешевизною".


        1. vasilyevii
          01.10.2019 22:16

          Вот мы и получили реальный пример почему 1С Г****

          А именно потому, что на задачу, где по хорошему, требуется 3 специалиста и проектный подход, заказчик ищет удаленщика по ставке в два раза меньшей, чем стоимость услуг самой дешевой дамы с низкой социальной ответственностью


          1. Ta_Da
            01.10.2019 22:25

            Хм. Т.е. если жадный и некомпетентный заказчик будет искать себе java разработчика за тарелку супа, то это признак того что java — говно?
            Примечательно, что в описанном случае заказчик себе исполнителя так и не нашел.


            1. vasilyevii
              01.10.2019 22:36

              Когда заказчики массово начнут искать java разработчиков за тарелку супа, значит да, это будет значить, что джава превратилась в говно, и никто не собирается вкладывать в нее деньги


              1. skrimafonolog
                02.10.2019 05:58

                Когда заказчики массово начнут искать java разработчиков за тарелку супа, значит да, это будет значить, что джава превратилась в говно, и никто не собирается вкладывать в нее деньги


                Зайдите на Upwork, посмотрите, какие Android-приложения (на Java) хотят себе заказчики за 3 копейки. Массово.

                Это время уже настало лет 5 назад.


                1. vasilyevii
                  02.10.2019 13:52

                  Я бы не делал выводы о джаве по мобильной разработке
                  Там явно найдётся масса мелких заказчиков, которые для своей кафешки за углом хотят сделать крутое приложение за 3 копейки (больше у них нет)
                  Здесь же пример когда 200 учетных баз с персональными данными своих клиентов хотят доверить удаленщику. Узнать бы что за консалтинговую компанию он представляет


            1. Sjam
              02.10.2019 12:57

              Не java, но продукт на ней.


          1. o4karek
            01.10.2019 22:33

            Интересно, почему мальчика за еду ищет кто-то, а гавно — 1с?
            Т.е. если ищется персональный водитель на Мерса, который (заодно) будет обслуживать машину и охранять хозяина, на 20 000 рублей в месяц — виноват Мерседес, так что-ли?
            А когда ищут админа Винды, который должен тянуть сеть, разбираться в Офисах, вебе и принтерах, приходящий на 1 час в месяц и на 15 штук — гавном будет Винда?
            Интересная логика :)
            Тут заказчику данных работ стоит слегка оглядеться и понять, что он хочет и сколько это сейчас стоит.


            1. vasilyevii
              01.10.2019 22:44

              Проблема в том, что данный пример он не такой уж фантастический
              Проблема на рынке 1С такая есть, заказчик жмет как может, а это просто очередной наглядный пример
              В итоге платформа, типовые конфигурации и услуги подрядчиков получаются очень плохого качества
              Но как-то живут с этим, обзывают 1С гавном, но продолжают на нем ехать


              1. skrimafonolog
                02.10.2019 06:04

                Интересно, почему мальчика за еду ищет кто-то, а гавно — 1с?
                Т.е. если ищется персональный водитель на Мерса, который (заодно) будет обслуживать машину и охранять хозяина, на 20 000 рублей в месяц — виноват Мерседес, так что-ли?

                Проблема в том, что данный пример он не такой уж фантастический
                Проблема на рынке 1С такая есть, заказчик жмет как может, а это просто очередной наглядный пример


                Пффф.
                Потусуйтесь на форуме веб-программистов, потусуйтесь на форуме Андроид-программистов — вы ровно те же самые жалобы прочитаете.

                Прочитайте исторические книги про извозчиков, к примеру — и 200 лет назад люди все так же жаловались на жизнь.

                Это не проблема платформы.
                Это проблема экономики и человеческой психики — все заказчики хотят дешевле, все исполнители хотят дороже.


                1. vasilyevii
                  02.10.2019 13:59

                  Выше уже писал, тут надо понимать, о каком мы рынке говорим
                  Мобильные приложения/сайтики и энтерпрайз
                  Это очень важно, так как спрос там формируется совершенно по разному


                  1. skrimafonolog
                    02.10.2019 14:15

                    Выше уже писал, тут надо понимать, о каком мы рынке говорим
                    Мобильные приложения/сайтики и энтерпрайз
                    Это очень важно, так как спрос там формируется совершенно по разному


                    Энтерпрайз бывает тоже разный.
                    Вашими же словами:

                    Там явно найдётся масса мелких заказчиков, которые для своей кафешки за углом хотят сделать крутое приложение за 3 копейки (больше у них нет)


                    От того, что совпадают ключевые слова «1С, программисты» не следует делать вывод, что все едино.

                    Бывают и такие предприятия как вы написали — «киоск и два прилавка». А бывают и серьезно вкладывающиеся в свою автоматизацию предприятия.

                    И пусть и там и там люди называются программистами 1С — но это люди сильно разной квалификации и с сильно разными зарплатами.


              1. o4karek
                02.10.2019 07:26

                Только совершенно непонятно, как жлобство (или непонимание ситуации) заказчика относится к продукту, который он использует.
                Если назвать «типовой» ситуацию, когда заказчик хочет за 3 копейки сделать космический корабль — то этой ситуации 100500 миллионов лет. Оно было всегда, с того момента, как появилось платное оказание услуг.
                Но причем здесь 1с — решительно не понятно.


                1. vasilyevii
                  02.10.2019 13:56

                  Покажите мне пример когда SAP или Oracle ищут за копейки
                  Продукты этого уровня уже имеют репутацию, что к их внедрению нужно подходить очень ответственно, и бюджеты рассчитывать соответственно


                  1. o4karek
                    02.10.2019 14:07

                    Они не хотят озвучивать з/п: hh.ru/employer/854


                    1. vasilyevii
                      02.10.2019 14:14

                      Я не только о ЗП специалистам (не думаю что там сильно больше)
                      Я говорю и бюджетах на внедрение / поддержку этих систем
                      Я не раз сталкивался с проектами, где логика их инициаторов была примерно «дела у компании идут плохо, надо резать косты, давайте начнём с ИТ, и так переходим на 1С»


                      1. o4karek
                        02.10.2019 14:19

                        И что? Я не понимаю, куда вы клоните. Достаточно часто САП — это профанация и освоение бюджета. Когда годами внедряют САП, а учет ведут по-прежнему (например) в 1с. Потом или деньги кончаются или власть меняется и САП забывается или остается для материнской компании.
                        Изначально мы начали с того, что качество продукта никак не определяется количеством денег, который какой-то клиент хочет заплатить за услуги по продукту.


                        1. vasilyevii
                          02.10.2019 15:11

                          Я клоню к тому, что 1С зарекомендовал себя на рынке как дешевое решение
                          Понятно, что рынок так устроен, что покупатель хочет дешевле.

                          Но, по своему опыту, я вижу как большая часть заказчиков люто жмут бюджеты на внедрения, причем не задумываясь о долгосрочных последствиях, таких например, как деградация производительности при увеличении объема накопленных данных в таблицах.

                          Или, например когда заказчик зажал денег на проработку автоматизированного бизнес-процесса с учетом особенностей внедряемого типового решения.

                          Но самое печальное в этом, то что находятся подрядчики, который за эту условную тарелку супа, без проработки методологии или технической архитектуры берутся внедрять 1С.

                          В результате мы получаем озвученные выше проблемы, что 1Совские системы не масштабируются, деградируют и тп.


                          1. CrushBy
                            02.10.2019 15:13

                            В результате мы получаем озвученные выше проблемы, что 1Совские системы не масштабируются, деградируют и тп.


                            И минусы в карму 1С, что дает путь другим игрокам. Так как потом бизнес начинает считать, что 1С — плохо и рассказывать своим товарищам.


                          1. skrimafonolog
                            02.10.2019 15:24

                            Но самое печальное в этом, то что находятся подрядчики, который за эту условную тарелку супа, без проработки методологии или технической архитектуры берутся внедрять 1С.

                            В результате мы получаем озвученные выше проблемы, что 1Совские системы не масштабируются, деградируют и тп.


                            Редко когда это бывают неразрешимые проблемы.
                            Разве что когда данных много, а на спецов денег вообще жаль.

                            Так то на сегодня проще купить более мощный сервер. Это и дешевле и быстрее.

                            Есть и решения «через 1С». Очистка данных старых (выведение старых данных из базы в отдельную). Есть доработка прозводительности уже сделанного решения.

                            Это все делается постепенно, по мере возникновения проблем. Поэтому бизнесу выгодно. Есть же простое правило «деньги сегодня это лучше, чем те же самые деньги завтра» (из-за инфляции и потери бизнеса из-за выведения денег из оборота сразу большими кусками).

                            Тут все довольны — и бизнес, потому что сэкономил. И разработчики — потому что разработали, а потом еще раз доработали.

                            Еще раз общаю ваше внимание:

                            У бизнеса более другой подход, более прагматичный. Там немного другая логика работает.

                            Ваш технарский подход про идеальную систему про необходимое совершенство — не прокатывает.

                            Проиллюстрирую ситуацию из своего прежнего еще админского опыта:
                            Про прагматичность бизнеса
                            Много лет назад работал я на фирме. И они каждую неделю покупали новый принтер, просто выкидывая старый. Потому что нагрузку не выдерживал. Всего на фирме принтеров было много.

                            Почему не выдерживал? Потому что покупали самый дешевый лазерный принтер, «типа для домашнего применения»

                            И вот при очередной покупке принтеров директор подмахнул мне не глядя счет на очередной принтер. Я в тот раз выбрал высокопроизводительную дорогую модель.

                            Когда этот принтер приехал, естественно руководитель заметил его в офисе. Удивился. Проверил стоимость.

                            Потом вызвал мне к себе и с цифрами детально показал, что дешевые принтера фирме выгоднее. Вкратце: более надежные хоть и имеют больший ресурс, но этот ресурс непропорционально выше, чем выше их цена.

                            В конечном итоге новый принтер понравился скоростью печати — при печати толстенных прайсов это было важно. Таким образом по одному высокопроизводительному принтеру в каждом филиале мы закупили.

                            Но основную массу принтеров все так же брали дешвые малопроизвоидительные. Это выгоднее.

                            А бизнес — прагматичен.


                            1. vasilyevii
                              02.10.2019 16:15

                              Раньше тоже этого мнения был, что вот технари они не понимают бизнес, что лучше сегодня внедрить сырую систему, чем ждать ещё уловных пол года год пока архитекторы уже разродятся стабильным решением.

                              Но не так давно поменял свое мнение, проработав в одной ИТ-компании, у которой был другой, «технический правильный» подход. Теперь я считаю, что такой правильный подход оправдывает себя в долгосрочной перспективе.


                              1. skrimafonolog
                                02.10.2019 16:17

                                Раньше тоже этого мнения был, что вот технари они не понимают бизнес, что лучше сегодня внедрить сырую систему, чем ждать ещё уловных пол года год пока архитекторы уже разродятся стабильным решением.

                                Но не так давно поменял свое мнение, проработав в одной ИТ-компании, у которой был другой, «технический правильный» подход. Теперь я считаю, что такой правильный подход оправдывает себя в долгосрочной перспективе.


                                Это же о разном:

                                Есть долговременные стратегические разработки, а есть те, что оперативно должны быть внедрены — и это разные вещи.

                                И оперативно требующих внедрения — подавляющее большинство.


                                1. vasilyevii
                                  02.10.2019 16:24

                                  Есть куски сбоку, которые можно без особой подготовки эджайлом автоматизировать, но в результате получается «ласкутная» автоматизация, что в долгосрочной перспективе приведет к тому, что вы все равно захотите покрыть бизнес-процессы одной ЕРП


                                  1. skrimafonolog
                                    02.10.2019 16:34

                                    но в результате получается «ласкутная» автоматизация, что в долгосрочной перспективе приведет к тому, что вы все равно захотите покрыть бизнес-процессы одной ЕРП


                                    И что?

                                    Вот например, на сегодня у меня задача подключить ПО интернет магазина (там внутри в бэкофисе 1С) к очередной курьерской службе.

                                    Параллельно пилится новый интернет-магазин.
                                    По вашей логике — нужно дождаться его? И сразу скопом впилить туда универсальные механизмы курьерских служб?

                                    Дык за это время (а это еще год наверно) куча заказчиков будут менее удовлетворены, а магазин переплатит за доставку.

                                    Для бизнеса «лоскутные» вещи (а это на самом деле тоже большие деньги в прибыли — по прикидкам эта курьерская служба сэкономит им за полгода после ввода в экслуатацию столько, что магазин сможет меня месяц содержать; но это же разовая затрата на меня — а потом у них чистая экономия) бывает что даже более важны, чем стратегические — ибо на стратегические можно денег не заработать ежели оперативными вещами не заниматься.


                          1. o4karek
                            02.10.2019 15:35

                            И почему в результате гавном становится 1с, а не заказчик, жмущий бюджет? Почему вы переворачиваете ситуацию с ног на голову?
                            Замените «1С» на «lsFusion», «SAP», «Axapta» — что-то изменится? ИМХО — ничего. Только виноват все равно будет заказчик, жмущий бюджет, а не система на нормальное внедрение которой бюджет жмется.


                            1. vasilyevii
                              02.10.2019 16:20

                              Потому что компания 1С уже сделал репутацию своему продукту, как «дешевому». В результате потенциальный покупатель не считает, что нужно в бюджет закладывать ресурсы на хорошее проектирование и проработку методологии например.


                              1. skrimafonolog
                                02.10.2019 16:28

                                Потому что компания 1С уже сделал репутацию своему продукту, как «дешевому». В результате потенциальный покупатель не считает, что нужно в бюджет закладывать ресурсы на хорошее проектирование и проработку методологии например.


                                Да ладно.
                                Вполне себе успешно работаю с бюджетами и под миллион.

                                Просто внедрения бывают разные.
                                Требовать от ларька с двумя прилавками больших денег — бесполезно.

                                Хотите больше денег — работайте на другом рынке, не у ларечника. А на рынке крупных внедрений.
                                1С это или не 1С — разницы не имеет.


                              1. o4karek
                                02.10.2019 17:05

                                Даже на 7.7 делали большое количество разных (в том числе и тяжелых) внедрений. Понятно, что понятие о «тяжести» 20 лет назад и сейчас слегка разнятся, но тем не менее. А очень много народу «осталось» в начале 00-х, и оттуда вещает о дешевизне и непригодности 1С: Предприятия. Просто рынок базовой версии и проекта для какого-нибудь Камаза — они разные. И исполнители у этих проектов НИКОГДА не пересекутся.


                  1. skrimafonolog
                    02.10.2019 14:20

                    Покажите мне пример когда SAP или Oracle ищут за копейки


                    Разброс зарплат с 1С очень большой по причине внедрения как на малых так и на больших предприятиях.

                    Покажите мне пример, где SAP или Oracle внедряют на небольшом предприятии.

                    SAP/Oracle в среднем предприятия покрупнее, чем те, с которыми работают 1С. А вот если взять пересечения — вот тут и сравнивайте заплаты.


          1. beerchaser
            02.10.2019 05:42

            В данном случае следует заметить, что при всех недостатках платформы 1С, причина — дао заказчика, а не качество инструмента. Считаю, что каждый должен отвечать за себя.
            Проблема 1С, как платформы, в том, что она не сделала качественный рывок — не стала фреймворком. Поэтому приходится тащить на себе поддержку ide, поддержку репортера, поддержку файловой СУБД ( хотя это в принципе уже могли вырезать), поддержку скриптового нетипизированного языка (если память мне не изменяет, в девичестве vbscript, вроде даже лицезировался у МС), странную модель работы с данными (о чем и пишет ТС). Все это съедает ресурсы, которые могли бы быть направлены на развитие. Но это -дао разработчика системы.


    1. morohon
      02.10.2019 00:12

      Как связан 1С-Фрилансер с тем, что написано в задании? Вы кого ищете то?


    1. pauls0
      02.10.2019 12:20

      имхо — много гимороя… как бы и что бы 1с не говорила — работать полноценно она может только в экосистеме windows. авторизация 1с в ad и так проблематична если доменов несколько (fqdn передает горячий привет), астрал + интеграции с зупом — это тоже все заточено под win/com. в пингвине надо будет вероятно извращаться, искать инфу которой по сути нет — основная масса коммюнити 1с-ников сидит на windows. а тем кто «шарят» ваш заказ «за 1000» не интересен


      1. gennayo
        02.10.2019 12:37

        Это уже не так, последние типовые от 1C встают на PG без малейших проблем.


        1. Sjam
          02.10.2019 12:56

          только патченные же 1с. Если у вас есть сведения о работе 1с с ванильным postgresql опишите подробнее


          1. gennayo
            02.10.2019 13:01

            Ну да, патченные. Зачем ставить на ванильный, если есть с бесплатными патчами от вендора?


          1. skrimafonolog
            02.10.2019 13:34

            Это уже не так, последние типовые от 1C встают на PG без малейших проблем.

            только патченные же 1с. Если у вас есть сведения о работе 1с с ванильным postgresql опишите подробнее


            вы хотели сказать «на пропатченые PostgreSQL»?
            да 1С и не скрывала, что изменила под себя часть PostgreSQL, чтобы сделать его более похожим по поведению на MS-SQL, так как изначально под MS-SQL и затачивали 1C.


  1. TEEN_true
    01.10.2019 19:03

    Очень интересно, но ничего не понятно.
    Знал бы 1С — смог бы сравнить с сапом.
    Мое знакомство с 1С было лишь, как пользователь и эникей. Еще с 7.7 я заметил то, что многое следовало бы доработать. А с выходом 8ой версии было красиво, но расплачивались долгим откликом интерфейса на разные действия. Блокировки были первое время очень доставучие. База росла, как на дрожжах и за год переваливала за террабайт. Её 1Сники «обрезали», а старую базу архивировали. С 7.7 помню, что начинали каждый год новую базу с нуля и переносили карточки клиентов для работы.
    Сейчас это выглядит, как каменный век.

    Как я считаю: взять подход реализаци решений в крупных зарубежных компаниях и использовать это в внедрении 1С, то она была бы лидером по очень многим параметрам.
    Очень часто попадались проектанты, которые ломали зубы при внедрении алкогольки в готовой конфе 1С, мечтая о новенькой панамере. Из-за низкого порога вхождения — кого только не берут в консалтинг.

    Да и хочется знать, есть ли у 1С похожие продукты:
    — Solution manager — централизованное управление решениями, учет и техподдержка, репликация пользовательских настроек,
    — Process Integration(PI) — шина данных для интеграции с другими удаленными PI или сторонними системами,
    — Business Warehouse(BW) — хранение огромного количества данных предприятия, BI — анализ и агрегация данных BW.
    Список на самом деле огромный, но эта та часть, о которой имею представление.

    На счет обновлений 1С — это печально. У немецкого продукта обновления выходят хоть и не так часто, но любой найденный баг правится кодерами из сап и на основе такого фикса выпускается нота, которая публикуется и описывается для тех, кто может столкнуться с такой бедой. Тот находит её по симптомам и именам объектов и может себе скачать в систему и пофиксить проблему.

    Как ни странно, но abap развивается и получает очень удобные конструкции.
    Ну, а интерфейс — помимо GUI клиента имеется очень неплохой web, с таким же функционалом.


    1. vasilyevii
      01.10.2019 22:33

      Вы сравниваете SAP, у которого годовая выручка ~27 млрд $, с небольшой российской компанией
      В России всего 5 компаний, выручка которых больше чем у SAP
      У 1С выручка в 2018 ~0.7 млрд $,
      Сотрудников 100.000 SAP и если не ошибаюсь 1.000 в 1С.

      В общем я к тому, что SAP может себе это позволить
      А 1С даже с такими ресурсами делает вполне рабочий инструмент для автоматизации бизнеса


  1. SergeyUstinov
    01.10.2019 21:55
    +1

    Главная проблема 1С лежит не в платформе, а в весьма посредственном прикладном функционале.
    Они его не вылизывают.
    Я работаю с MS NAV. Там большая часть основных таблиц за 15 лет поменялась слабо. Есть недостатки, но они исправляются и вылизываются. А у 1С куча конфигураций с сильно перекрывающимся функционалом. И при этом ни одна из них не доведена до нормального уровня.


  1. Sjam
    01.10.2019 21:56

    Но почему в репозиториях на github нет ни одного readme?
    Где есть документация по особенностям «языка» IsFusion? Или java это и есть основной язык?


    1. CrushBy
      01.10.2019 22:15

      Потому что там (на github) предполагается все вести только на английском. А пока материала на английском нету: в процессе перевода.

      Можете посмотреть другие статьи в этом блоге — там много примеров.
      Плюс можно посмотреть примеры (в частности, How-To).


      1. Sjam
        02.10.2019 11:53

        Благодарю за ответ, однако не понимаю связи readme и «предполагается все вести только на английском». В чем сложности написать небольшой readme в markdown? На любом языке. И в чем сложность разместить два readme? Особенно если есть на русском?


        1. DAleby
          02.10.2019 11:58

          С отсутствием readme — это просто, скорее, недосмотр. Сделаем.



  1. kryvichh
    01.10.2019 23:21
    +1

    Мне кажется, некоторые читатели прохладно восприняли этот обзор, потому что в России 1С особенно глубоко пустила свои корни. Много фирм и много разработчиков изучили эту платформу и язык, со всеми её + и -. И люди в любой альтернативной платформе, способной потенциально поколебать эту громадину, видят угрозу для себя. Никому не охота терять работу, разоряться или выбрасывать из головы огромный опыт 1С-разработки. А бесплатная и открытая платформа особенно опасна в этой связи, в отличии от дорогущих западных ERP.

    А вам бы лучше перетягивать 1С-разработчиков на свою сторону. Расскажите, как реализовать разные сущности 1С в вашей системе. Вот те же 1С-овские регистры накопления и сведений, как они реализованы в lsFusion, есть ли для них специальные абстракции, проще ли их сделать? Или как сделать справочник с периодическими значениями полей, например, список сотрудников, из которого можно извлечь данные о директоре и главном бухгалтере на указанную дату? Как прочитать данные их файла Excel? Как сделать простейшее мобильное приложение, работающее с вашей ERP (например, формирование заказа на смартфоне и отправка в ERP)? И т.д. и т.п.


    1. mikleh
      02.10.2019 09:18

      Не без этого — обидно же когда хают свое родное. С другой стороны, Вы правильно подметили, много разработчиков изучили и пользовались. А вот автор(ы) изучили 1С довольно таки поверхностно (например, в СКД явно не разобрались, а это очень важная технология в мире 1С), поэтому местами статья вызывает резко негативную реакцию.

      Ну проведем параллели: допустим, разработчик на Cobol, который никогда профессионально не писал на C#, напишет критическую (можно даже сказать разгромную) статью о недостатках этого языка. Как думаете, что у него выйдет? А ведь платформа разработки бизнес-приложений — это гораздо более сложная система, чем язык программирования, вообще-то.


      1. Veidt Автор
        02.10.2019 09:19

        Сто раз уже отвечали. Ну так ответьте конструктивно по пунктам. И СКД тут уже тоже много раз обсудили.


        1. mikleh
          02.10.2019 09:31

          Мне не очень интересно обсуждать качество самой статьи, потому что его уже выше обсудили, меня больше заинтересовала тема: почему эту статью именно так восприняли, а не по-другому.


  1. nitrosbase
    01.10.2019 23:33

    Безотносительно 1С, а так, к словам прицепиться:


    Обычно бизнес-приложения принято разделять на два контура: OLTP и OLAP.
    В OLTP люди обычно принимают оперативные решения и отражают уже произошедшие события, OLAP же используется для принятия стратегических решений.

    Смотря что за бизнес, где и чей… Вот Gartner всем предсказывает операционализацию аналитики и аналитизацию операционной деятельности; сontinuous intelligence взамен business intelligence.
    Там, где это счастье уже наступило, хотят не отдельных OLTP и OLAP, а того, что называют HTAP и «translytical».


    С этой точки зрения верным путем идут товарищи. Только пару терабайт какой-нибудь NVRAM этому СКД добавить, конечно, бы.


  1. Asmody
    02.10.2019 00:00

    Фундаментальный труд! Феноменальный! С нетерпением жду продолжений «Почему не SAP?» и «Почему не DAX?»


    1. BlessYourHeart
      02.10.2019 05:42

      Автор анонсировал тут выше

      Будет еще статья: Почему lsFusion, а не SQL?

      Иногда мне кажется, что автор работает на конкурентов этого lsFusion и провоцирует людей задавать неудобные вопросы и пишет ответы, которые вызывают еще большие вопросы.


    1. CrushBy
      02.10.2019 07:37

      Asmody, тогда советую подписаться на наш блог, а то можете пропустить :) На мисте то уже поняли всю опасность фузины и сразу же трут все ветки про нее.


      1. Asmody
        02.10.2019 08:46

        Читаю вас с воодушевлением! Я вообще люблю юмористические произведения.


    1. Veidt Автор
      02.10.2019 09:21

      Там сложнее, у SAP вся информация за семью печатями. А у DAX проблемы в общем-то схожие (хотя и у SAP тоже). Но еще раз, русскоязычный рынок это все же промежуточный этап, пока переводы готовятся.


  1. nitro80
    02.10.2019 03:13

    Так сложилось, что на хабре многие 1С не любят, но порой складывается впечатление, что немногие из этих людей хорошо понимают, за что они его не любят.

    Я знаю, почему не люблю именно я: допустим есть небольшой коллектив, 2-3-4 человека работают в 1с. Железо не серверное конечно, но работает всё хорошо.
    А спустя год — не вывозит уже. Тупит неЩадно :)
    1сники разводят руками, мол докупайте оперативку, меняйте диски, купите другой сервер :(


  1. IsyanovDV
    02.10.2019 03:21

    По поводу технических вещей срач уже начался, поэтому добавлять не буду. Я только попытаюсь прокомментировать фразу:

    А вот зачем 1С в качестве платформы разработки выбирают разработчики отраслевых решений, а также ИТ-директора для создания решений внутренней автоматизации (так называемые «самописки») — это, конечно, загадка. Черт с ним с lsFusion, он только пару месяцев назад на рынок вышел, но любая из связок .Net+MSSQL или Python+PostgreSQL будет уж точно не хуже. При этом не надо будет мучаться с ключами защиты, и платить лицензии за платформу, которая местами не то что не помогает, а наоборот мешает. Все ради одной реально полезной абстракции — регистры (которая легко реализуется как средствами СУБД, так и средствами того же .Net) и сомнительной пользы визуального программирования? Причем с конечными клиентами все более-менее понятно: на постсоветском пространстве для многих из них покупка программы — это приблизительно тоже самое, что и покупка мебели в офис. Но решение о создании отраслевых решений и самописок принимают люди с большим опытом в IT. Они-то чем думают?


    На этот счет можно написать не одну статью, но все это все равно сведется к трем постулатам:
    — нет идеальной системы / платформы, это всегда компромисс, выбор завит от целей и ресурсов;
    — несмотря на определенные недостатки платформа 1С позволяет довольно таки оперативно автоматизировать много бизнес-процессов, многим возможностей платформы достаточно;
    — у других решений свои недостатки, и зачастую они перекрывают теоретические преимущества над 1С (как простой пример: в моем регионе найти хорошего разработчика на 1с в разы легче чем разработчика на ".Net+MSSQL или Python+PostgreSQL"), опять же «и платить лицензии за платформу» — надо будет платить за разработку и долго ждать результата, ну и много других приколов.

    Плюс у многих компаний есть уже работающие на 1С системы, замена их на что-то другое — это еще та задача, в том числе по времени и ресурсам.

    И повторюсь, выбор платформ идет от задач и ресурсов, ИТ-директора именно этими понятиями и оперируют. Так что полегче с выводами.


  1. skrimafonolog
    02.10.2019 05:20

    и приводят либо к существенному росту порога вхождения, либо к серьезному падению производительности, либо к значительным трудозатратам со стороны разработчика.

    Гы-гы. А ведь и не придерешься — ведь любой функционал можно обкакать, используя эти 3 критерия.

    Хотя всем трем критериям одновременно ничто удовлетворить не может.


    1. Veidt Автор
      02.10.2019 09:23

      Хотя всем трем критериям одновременно ничто удовлетворить не может.

      lsFusion может, но это уже откровенной рекламой звучит.


      1. vasilyevii
        02.10.2019 10:00

        Вы так нахваливаете эту платформу, меня лично заинтересовало
        Подскажите пожалуйста, где я могу поискать вакансии на нее?


        1. Veidt Автор
          02.10.2019 10:08

          Я вам в личку скинул пример вакансии.


      1. skrimafonolog
        02.10.2019 10:00

        Хотя всем трем критериям одновременно ничто удовлетворить не может.


        lsFusion может, но это уже откровенной рекламой звучит.


        Для несложных система такое может быть, конечно.

        Но как только вы выстроите сколько-нибудь развитый продукт — всё меняется.
        Давайте сравниваться с тем, что взаимозаменяемо, а не мелких частных случаях.

        В частном случае бывает эффективнее свою маленькую программку с нуля реализовать, что способен сделать любой программист средней руки. Но утверждать при этом что его программа лучше 1С… гм… некорректно. На этой конкретно задаче — да, лучше. Но при этом не покрывает еще 99% задач, что покрывает 1С — так что это некорректное сравнение.


        1. Veidt Автор
          02.10.2019 10:10

          Вот тут ссылка на один из продуктов. Там можете покликать на модули и посмотреть функционал. Вот тут список клиентов в Беларуси с описанием проектов (пример).


          1. skrimafonolog
            02.10.2019 12:10
            -1

            Вот тут ссылка на один из продуктов. Там можете покликать на модули и посмотреть функционал. Вот тут список клиентов в Беларуси с описанием проектов (пример).


            Понимаете — успех lsFusion — это если бизнес заинтересуется.
            Ориентация на бизнес, судя и по этой статье и по комментариям и по сайту — так себе.
            Вы на все смотрите с точки зрения технарей.

            Простите, но без набора доступных типовых решений — платформа не особо интересна для бизнеса.

            А для технарей…
            Тот функционал я и сам могу написать. И не хуже чем вы — так как это будет узкозаточенное решение, это будет проще.

            Если мне понадобится что-то написать с нуля — я это и на Go/С#/Kotlin сделаю, но никак не на lsFusion.

            Вот если бы на lsFusion были бы доступны полнофункциональные реализации того, что в 1С называется типовые прикладные решения (конфигурации) на большинство случаев жизни, то да, другое дело.

            Там много-то и не надо: торговля/производство/бухгалтерия/кадры-зарплата розница/опт мелкий/средний бизнес — полагаю около 5 конфигурацию достаточно; под розницу нужна возможность использовать торговое оборудование.

            P.S.:
            С прикладными решениями под учет зарплаты-бухгалтерии — все еще грустнее.
            Если прочие базируются на простом здравом смысле, то эти — на законодательстве, под изменения которого нужно подставиваться регулярно.
            Если 1С это обеспечивает, а lsFusion нет — то у lsFusion ниша только «автоматизация для собственного учета, не для учета с взаимодействием с государством».


            1. Veidt Автор
              02.10.2019 14:12

              Давайте так, лезть в бухгалтерию и ЗУП особого смысла нет (даже SAP в них не лезет). В текущем ERP надо конечно докрутить производство и финучет, но это вопрос времени. Сейчас фокус на FMCG розницу и custom made у нас (последнего кстати тоже предостаточно).


  1. skrimafonolog
    02.10.2019 05:26

    А вот зачем 1С в качестве платформы разработки выбирают разработчики отраслевых решений, а также ИТ-директора для создания решений внутренней автоматизации (так называемые «самописки») — это, конечно, загадка.


    Потому как это эффективно.

    Бизнесу нужно не идеальное решение задач бизнеса.
    Бизнесу нужно решение задач, чтобы уже работать начало уже завтра, а не через 2 года. А через 2 года — будет нужно уже другое решение, а вы еще первое не закончили пилить — это не эффективный путь.

    Плюс не каждый можете себе позволить потратить миллионы на разработку.
    Ну а не потратив миллионы — эдак вы наколенными поделками только простые вещи закрыть сможете. Тут не спорю, средней руки разработчик очень простые вещи легко может и с нуля сделать, без 1С.

    Вот и получается, что взять отлично подходящий под задачу уже существующий продукт и допились его под себя — выгоднее.

    Ну и не забывайте — что всем этим кому-то нужно заниматься.
    Даже если у вас и есть миллионы, то супер-специалистов, способных не просто их «освоить», а выдать качественный результат — кот наплакал.

    И положиться на методу разработки с 1С, положиться на большое число знающих её людей — вполне себе рациональное решение.


    1. CrushBy
      02.10.2019 07:35

      Это классический уход от ответа. Никто не спорит, что 1С захватил под себя рынок с крайне кривой технологией. Здесь же предлагается бесплатная и открытая альтернатива. Я понимаю, что 1Совцы боятся этого, так как потеряют преимущество в том, что они научились разбираться в этом велосипеде с картинки. На мисте, когда кто-то пытается поднять обсуждение этого тут же не просто закрывают тему, а грохают ее. Видно, что 1Совцы очень любят диктатуру вместо демократии.


      1. Ta_Da
        02.10.2019 07:42

        На мисте, когда кто-то пытается поднять обсуждение этого тут же не просто закрывают тему, а грохают ее. Видно, что 1Совцы очень любят диктатуру вместо демократии

        Ну самим-то не стыдно врать?
        Неделя обсуждения, 6 или 7 тем (новую вы сами создали недавно). Ни одна не удалена.
        Тему закрыли причем когда стало понятно что оно скатилось в оскорбления и уходы от ответов с вашей стороны.

        Я понимаю, что 1Совцы боятся этого

        Я лично готов прийти на Хабр и написать о своей горькой судьбе, как только потеряю работу из-за LSFusion. Благо, я даже в одной стране с вами нахожусь и часть клиентов у нас с вами общие.
        Но пока что этого почему-то не произошло.


        1. CrushBy
          02.10.2019 08:09

          За последний день там создавали 3 темы со ссылкой на эту статью. И их не просто закрывали, а грохали. Но вы пытаетесь доказывать что там все хорошо, и 1Совцы конечно приемлют критику и свободу слова. Что-то мне это напоминает…

          Создайте сами тему и посмотрите через сколько ее грохнут. Миста — квинтэссенция всей экосистемы 1С.


          1. Ta_Da
            02.10.2019 09:05

            Что-то мне это напоминает

            Неужели вы намекаете на Хабр, где можно потерять возможность писать комментарии, если мнение не совпадет с мнением большинства или нарушает правила ресурса?


            1. CrushBy
              02.10.2019 10:03

              Вы надеюсь понимаете, чем демократия от диктатуры отличается? В демократии тоже большинством многое решается, но мнение меньшинства также учитывается. Возможность писать комментарии можно потерять, только если начать оскорблять всех подряд.


              1. skrimafonolog
                02.10.2019 10:20

                В демократии тоже большинством многое решается, но мнение меньшинства также учитывается.


                Вы неверно трактуете термины. Это как классификация — на балконе стояла Маша, мешок с картошкой и пустое ведро.

                Диктатура отличается тем, что это очень жесткое мнение.
                Как пример, ситуация с НСДРП в фашисткой Германии. Это была обычная партия, изначально пришедшая к власти путем демократических выборов, в соответствии с пожеланиями народа.

                Да и демократию вы идеализируйте:

                На самом деле там учитывается мнение лишь того меньшинства, что может перекинуться к другому кандидату и поменять результаты выборов.

                Но все кандидаты — всё же ставленники большиства. Или около-большинства (типа с поддержкой от 45% выборщиков — за счет избирательных технологий могущие прийти к власти)


          1. o4karek
            02.10.2019 09:33

            Так там же причину написали — юмористические ветки на Мисте по пятницам разрешено заводить.


            1. kryvichh
              02.10.2019 10:17

              Юмористические? Хмм.
              «Сначала они тебя не замечают, потом смеются над тобой, затем борются с тобой. А потом ты побеждаешь.»
              Хотя в последнем я лично пока не убеждён.


              1. o4karek
                02.10.2019 10:21

                Так каков вопрос, таков и ответ. На данный момент это похоже на «Вокруг смеха».
                Если будет по-другому — будет и другое воприятие


      1. skrimafonolog
        02.10.2019 10:11

        Никто не спорит, что 1С захватил под себя рынок с крайне кривой технологией.


        Успех 1С вполне объективен.
        Рассудил свободный коммерческий рынок — куда уж демократичнее процедура.

        Бизнес не интересует идеальная технология. Сферическая в ваккууме идеально — не дает экономических преимуществ.

        Бизнес интересует эффективная в использовании технологиях, от которой можно получать реальную экономическую пользу здесь и сейчас.

        Здесь же предлагается бесплатная и открытая альтернатива.


        Таких только в этом веке уже предлагалось на моей памяти штук пять.

        Все они малофункциональные и посему заменить 1С не способны.
        Малофунциональны они закономерно: только такую — простую систему — и можно по-быстрому написать и получить все плюшки типа скорости работы.

        Как только ваша система начинает решать все больши и больше задач бизнеса, как только она становится более универсальной и более функциональной — она усложняется и в ней вылазят косяки, нельзя все предусмотреть идеально.

        В каких то случая lsFusion внеднять целесообразнее 1С.
        Но сравнивать тачку для груза и грузовик — некорректно. У каждого своя ниша.


  1. skrimafonolog
    02.10.2019 05:36

    Понятно, что самому 1С на качество платформы в общем-то наплевать. У них такие бюджеты на разработку типовых решений, что они могут их хоть на ассемблере писать. Конечно, дорабатывать такие решения — занятие не самое простое и приятное, но, как говорится, «проблемы индейцев шерифа не волнуют».


    А вот это — неправда.

    Что там внутри ядра 1С — можно только гадать.
    Но типовые прикладные решения поставляются с исходными текстами. И по ним хорошо видно как продумано подошли к проектированию.
    Человек, дорабатывающий 1С — очень быстро на типовых учится правильному подходу — там есть чего посмотреть.

    Недостатки, разумеется, тоже есть как и положено в больших продуктах.
    Опыт подсказывает, что недостатки есть так же и у вас.
    Не ошибается только тот, кто вообще ничего не делает.

    С поправкой на масштабность, где ошибки все равно будут — спроектированны нынешние типовые на заглядение хорошо.


    1. Ta_Da
      02.10.2019 06:50

      Опыт подсказывает, что недостатки есть так же и у вас.

      Вы невнимательно читаете. У LsFusion нет недостатков (или их тщательно скрывают).

      Я для себя из статей вынес следующие факты:
      1) Если сравнивать 1С,SQL,SAP… и LSFusion по критериям «быстро, дешево, качественно» — LSFusion выигрывает по всем трем показателям.
      2) 1С,SQL,SAP… примитивнее, но изучить LSFusion проще и быстрее.
      3) 1С,SQL,SAP… это дорого, но разработчики на LSFusion зарабатывают больше и условия труда лучше.
      4) Если чего-то в LsFusion нет, то только по одной из причин:
      а) это неправильно;
      б) это не нужно пользователям;
      в) это не нужно программистам;
      г) слишком просто и не интересно делать;

      и т.д.


      1. skrimafonolog
        02.10.2019 06:55

        У LsFusion нет недостатков (или их тщательно скрывают).


        Из того, что я успел понять, взглянув поверхностно — LsFusion довольно простая система.
        У таких вполне может и не быть явных косяков.
        Unix Way — не дураки придумали: «выполняя очень маленькие задачи, мы можем делать их очень хорошо»
        А заведомо сложным-то является создание большого продукта.


        1. CrushBy
          02.10.2019 08:18

          Из того, что я успел понять, взглянув поверхностно — LsFusion довольно простая система.


          В том то и дело, что в 1С — десятки (если не сотни) различных дырявых бессмысленных абстракций, а в lsFusion все строится на 5 основных (классы, свойства, формы, события, ограничения). И на них можно сделать гораздо более сложные вещи, чем на 1С (см статьи хотя бы).

          Я понимаю, что 1Совцы научились копаться в этом велосипеде и теперь это их ценность (и высокие зарплаты). А в lsFusion — любой дурак разберется. И это для них угроза.


          1. Ta_Da
            02.10.2019 09:08

            И на них можно сделать гораздо более сложные вещи, чем на 1С (см статьи хотя бы)

            Делайте, кто ж мешает. Пока, почему-то, только разговоры и решение для узкой ниши рынка в одной небольшой стране.

            Я понимаю, что 1Совцы научились копаться в этом велосипеде и теперь это их ценность (и высокие зарплаты). А в lsFusion — любой дурак разберется. И это для них угроза.

            Так все-таки разработчики на 1С получают больше чем разработчики на lsFusion или меньше? У вас путаются показания. Получается, что 1С это сложно и хорошо оплачивается, а lsFusion — «любой дурак разберется и заплатят не очень много, меньше чем в 1С»?
            Вам уже говорили — низкий порог входа в технологию, это не всегда плюс. Пример 1С как раз-таки это показывает.


          1. skrimafonolog
            02.10.2019 10:35

            В том то и дело, что в 1С — десятки (если не сотни) различных дырявых бессмысленных абстракций, а в lsFusion все строится на 5 основных (классы, свойства, формы, события, ограничения). И на них можно сделать гораздо более сложные вещи, чем на 1С (см статьи хотя бы).


            Браво!

            Я вам больше скажу — на языке универсальном языке программирования типа C# или Java можно написать куда как более крутые вещи, чем на 1С или lsFusion.

            Да безусловно.

            Вопрос только каких это будет стоить усилий/денег, если стоит задача написать что то объемное.

            В том то и дело, что в 1С — десятки (если не сотни) различных дырявых бессмысленных абстракций


            1С хорошая тем, что заточенная на вполне определенные задачи.

            И именно эти задачи решаются гораздо быстрее, что принципиально порой для выживания бизнеса в условиях современной конкуренции.

            Быстрее — это намного быстрее. Это, даже может статься, что и в десятки раз меньше времени уходит у программиста, чем на более универсальных инструментах.

            Если ваша задача не ложится на принципы на 1С, то, конечно, смысла использовать 1С нет.


            1. CrushBy
              02.10.2019 10:44

              Вопрос только каких это будет стоить усилий/денег, если стоит задача написать что то объемное.

              Гораздо меньше, чем на 1С.

              Вы сейчас рассуждаете о высоких материях, даже не изучив предмет (lsFusion). Давайте, вы для начала потратите столько времени на изучение lsFusion, сколько автор потратил на изучение 1С, и тогда можно будет обсуждать более предметно.


    1. Veidt Автор
      02.10.2019 09:27

      Но типовые прикладные решения поставляются с исходными текстами. И по ним хорошо видно как продумано подошли к проектированию.

      Вы вообще код видели? Я специально его отрывки в статье приводил. Понятия не имею как можно его дорабатывать. Там просто квинтэссенция сильно связного низкоуровневого кода. Кровь из глаз идет. Я когда его lsFusion разработчикам показал, первая реакция «ЧТО ЭТО?».


      1. skrimafonolog
        02.10.2019 10:44

        Вы вообще код видели? Я специально его отрывки в статье приводил. Понятия не имею как можно его дорабатывать.


        Судить по небольшому участку кода?
        «Хорошо спроектированное» — это хорошо спроектированное в объеме всего проекта.
        Грамотно разложенные абстракции прикладной области.
        Которые вы в масштабах статьи просто невозможно привести.

        Ну или нужно посвятить всю статью целиком разбору одной абстракции.

        Там просто квинтэссенция сильно связного низкоуровневого кода. Кровь из глаз идет. Я когда его lsFusion разработчикам показал, первая реакция «ЧТО ЭТО?».


        Какую реакцию вы ожидаете от незнакомой системы?
        При условии, что она не примитивные задачи решает — там понятно можно просто и красиво.

        Есть такое наблюдение:

        Чем универсальнее система, чем более сложные вещи она позволяет делать — тем более специализированные люди с ней могут работать.

        Пример из веба:

        Отличная вещь CMS. Низкий порог входа. Владелец сайта даже сам может её поставить и эксплутатировать. Программисты не нужны.

        Но как только хотелки владельца сайта заходят слишком далеко — все, приехали. Опять ему нужен квалифицированный программист. Для начала — специалист глубоко разбирающийся в этой CMS.
        Это нормально.


        1. Veidt Автор
          02.10.2019 14:15

          При условии, что она не примитивные задачи решает — там понятно можно просто и красиво.

          У нас она тоже очень сложные вещи решает в достаточно большом сегменте (FMCG розница). До которых 1Ским решениям как до луны. И там такого треша как в УТ — нет.


          1. skrimafonolog
            02.10.2019 14:26

            У нас она тоже очень сложные вещи решает в достаточно большом сегменте (FMCG розница). До которых 1Ским решениям как до луны. И там такого треша как в УТ — нет.


            Так уж сложилось что с данным сегментом знаком не понаслышке.
            Не стану утверждать, что это простая-примитивная задача на большой сети.
            Но там нет никакого особого треша, вызванного 1С, сверх обычного рабочего треша. Конечно если вы не за копейки исполнителей нанимаете.
            Ну и использовать одну только чистую УТ в сети FMCG это некомпетенция исполнителя.


            1. Veidt Автор
              02.10.2019 15:09

              Треша как в УТ, я имею ввиду в коде (то есть там, где вы видели, код лучше чем в УТ? решение на базе УТ дорабатывалось?). Вы то утверждаете, что когда задача сложная он неизбежно появляется. Так вот нет. Код даже при этом можно оставлять модульным и слабосвязным.


              1. skrimafonolog
                04.10.2019 08:44

                Треша как в УТ, я имею ввиду в коде (то есть там, где вы видели, код лучше чем в УТ? решение на базе УТ дорабатывалось?). Вы то утверждаете, что когда задача сложная он неизбежно появляется. Так вот нет. Код даже при этом можно оставлять модульным и слабосвязным.


                Никакого особого треша в коде, кроме обычного треша, присущего очень большим продуктам там не имеется, не передергивайте.

                Если еще в ранних версиях типовых конфигураций 7.5, тех, что разрабатывались на границе веков — еще можно предъявить претензии по кривой архитектуре.

                То уже начиная с 7.7, с которой шла конфигурация Торговля и Склад 9 — видно как они тщательно концепции перед тем как начать собственно написание кода.

                Еще раз:

                Некая программа решает задачи. И всё. Что там внутри — даже не вторично для бизнеса а где то на 100 месте.

                Код внутри 1С не мешает (в том числе и мне как программисту) решать задачи для бизнеса, а помогает.

                Да, он не идеальный.
                Но такового не существует.

                Если взять вашу концецию про полуфабрикат — так вот ни мне не бизнесу он задачи не решает. Его нужно сначала взять и собрать. А это — совсем другой сегмент заказчиков — тех, что не торопятся, пока работают на чем то другом, тех, что делают стратегические разработки, тех, где есть большие бюджеты.

                То есть ваш конкурент это как бы SAP, а не 1С.
                Но с другой стороны у SAP куда как больше готовых решений и опыта на все случаи жизни, чем у вас.
                Гм…

                Получается ваш рынок это нечто среднее — между 1С и SAP?


                1. gennayo
                  04.10.2019 08:53

                  Ну с учетом их планов захватить мир — 1С им точно не конкурент :))


                  1. skrimafonolog
                    04.10.2019 08:56

                    Ну с учетом их планов захватить мир — 1С им точно не конкурент :))


                    Это сложно.

                    В мире свободная конкуренция началась гораздо раньше чем в Белоруссии и РФ.

                    И компьютеры для целей коммерческого использования — на Западе раньше начались.

                    Так что там все уже поделено и переделено. Написано и вылизано.

                    Внедриться, конечно, можно. Но это ой как тяжело на зрелом-то рынке. Да и основное большое лавэ уже подняли конкуренты.

                    Не мне конечно решать, а руководству lsFusion. Однако целесообразность не видится. Разве что какая-то из белорусских сетей, использующих lsFusion пойдет в РФ или Польшу и принесет lsFusion с собой.


                    1. gennayo
                      04.10.2019 09:01
                      -1

                      Такой инновационной платформы, как lsFusion ещё не было, как только CIO компаний всего мира оценят всю её мощь — выкинут то старьё, на котором сидят, и прибегут к ним с деньгами. Дело за малым — перевести документацию на английский язык.


                1. Veidt Автор
                  04.10.2019 10:41

                  Получается ваш рынок это нечто среднее — между 1С и SAP?

                  Вот тут с вами соглашусь. Но на самом деле рынка коробок уже нет лет как 5-10. Все новые проекты — это сложные проектные решения с глубокой кастомизацией (потому как у большинства уже лет 10 все как-то уже автоматизировано).


                  1. akryukov
                    04.10.2019 12:20

                    Вы какую-то статистику собирали, чтобы делать выводы вроде "рынка коробок уже нет 5-10 лет".
                    Я думаю всякие мелкие бизнесы появляются постоянно, а значит потребность в коробках все равно остается.


                    1. NitroJunkie
                      04.10.2019 12:34

                      Вы какую-то статистику собирали, чтобы делать выводы вроде «рынка коробок уже нет 5-10 лет».

                      Я на этом рынке 21 год. И наблюдаю его очень давно.
                      Я думаю всякие мелкие бизнесы появляются постоянно, а значит потребность в коробках все равно остается.

                      Мелкие может и появляются. А вот малые и средние очень мало. Экономика стагнирует, если вы помните. То есть потребность в коробках то остается, но очень маленькая по сравнению со сложными проектными решениями.


                      1. gennayo
                        04.10.2019 13:37

                        Не экономика стагнирует, а происходит процесс укрупнения и консолидации бизнеса. Т.е. среднего бизнеса, основного потребителя услуг по доработке типового 1С, становится всё меньше. А у крупняка уже совсем другие запросы, им одной коробки мало 100%


                  1. skrimafonolog
                    04.10.2019 15:45

                    Но на самом деле рынка коробок уже нет лет как 5-10. Все новые проекты — это сложные проектные решения с глубокой кастомизацией (потому как у большинства уже лет 10 все как-то уже автоматизировано).


                    Ваши высказывания фантастичны, действительность я наблюдаю своими глазами иную в течение последних 20 лет:

                    Если мы говорим о мелочи — коробки там были и остаются.
                    Если мы говорим о крупняке — то так никогда и не было коробок.

                    Где-то лет 15 назад было немного иначе — даже мелкие пытались пилить свой софт. Но потом у них стали только коробки в основном.

                    А где-то 15 лет назад крупняк пытался использовать готовые вещи типа Галактики.

                    Но уже 15 лет как все четко и ничего не меняется.
                    Разве что коробки немного заменяются в SaaS.


  1. DenisTrunin
    02.10.2019 05:43

    Могу помочь показать/рассказать о том что вы называете Axapta. Но такого продукта больше нет, есть Dynamics AX2012(старая версия на оригинальной платформе — клиент Windows приложение) и Microsoft Dynamics 365 for Finance and Operations(новая версия, которую выпустили несколько лет назад, платформа полностью переписана под клауд применение — клиент — браузер). Функциональность обоих(то что вы называете конфигурацией) более или менее совпадает


    1. Veidt Автор
      02.10.2019 09:29

      Нас больше интересует Dynamics AX. Заранее спасибо.
      Начнем с базовых:
      1. Как у них с ORM, как в Hibernate (с настройками fetch'инга и маппинга) или как в 1C.
      2. Запросы в строках или в язык интегрировано?
      3. БОльшая часть логики в ORM или в запросах?


      1. DenisTrunin
        02.10.2019 15:55

        C SQL как правило нет прямой работы. В среде разработки вы определяете объект-таблицу, у нее есть поля(у каждого поля метка, хелп текст и прочее), методы, индексы, связи и прочее. Есть системная процедура которая синхронизирует это определение с SQL.
        В сам язык X++ встроенно подмножество SQL(с поддержкой на этапе компиляции)
        Соответсвенно вы пишете на этом языке.
        Пример вот отсюда
        docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/dev-ref/xpp-data-query

        LedgerJournalTrans ledgerJournalTrans;
        LedgerJournalTable ledgerJournalTable;
        LedgerJournalId jnJournalNum;
        Voucher vVoucher;
        Counter counter = 0;
        jnJournalNum = «999999_999»; //«000012_003»;
        vVoucher = «88888_888»; //«00001_IRG»;
        ledgerJournalTable =
        ledgerJournalTable::find(jnJournalNum);
        ttsBegin;
        while select forUpdate ledgerJournalTrans
        where ledgerJournalTrans.journalNum == jnJournalNum
        && ledgerJournalTrans.voucher == vVoucher
        {
        ledgerJournalTrans.Delete();
        counter++;
        }
        Строго разделения логики нет: можете все писать на формах(что конечно не рекомендуется), можете делать классы которые потом вызывать с форм, или наоборот классы которые будут запускать формы. Все это будет объектами
        Сила системы что для большинства типовых вещей не надо писать код, достаточно определить таблицу, форму к ней, и пользователь может вносить данные


        1. Veidt Автор
          02.10.2019 16:08

          Интересно, спасибо. Я правильно понимаю:

          1. Они также как и в linq, select'ы интегрировали в язык?
          2. Как связываются классы (объекты) и таблицы? Потому как по документации у них это два отдельных раздела.

          Ну и 3-й вопрос, чаще императивно или select'ами задачи решаются?

          Ну и чуть глубже. У них один flow или тоже есть отдельно клиентский код и серверный? И как реализуется тогда сценарий как в статье? Считал что-то из базы, спросил, дальше еще что-то считал из базы и так далее.


          1. DenisTrunin
            02.10.2019 16:26

            1. ну да, только Аксапта была разработа в 1998, а linq поновее. В новой версии вроде бы можно использовать linq, но примеров я не встречал, код получается более громоздкий чем встроенный язык
            2. Никак. Т.е. классы использовать желательно, но необязательно. Есть даже такая шутка, «сделал решение без единого класса» = «сделал говнорешение». Но как правило классы используют, соответственно стараются логику в них запихать, чтобы было удобно поддерживать
            3. код разделяется условно, в новой версии вообще не разделяется, весь код — серверный. Хотя если очень хочется можно разработать и свой контрол(в старой версии ActiveX, в новой Javascript), но это нетипичная задача.
            А какой конкретно сценарий в статье?


            1. Veidt Автор
              02.10.2019 17:09

              То есть в Axapta вообще ORM не делали? Красавцы если так.

              А какой конкретно сценарий в статье?

              Тут
              Считал что-то из базы, спросил, дальше еще что-то считал из базы и так далее.

              Ну и заодно, если можно вкратце по пунктам:
              1. Представления. В частности на дату?
              2. Материализованные представления?
              3. Триггеры per statement (то есть не по записям)?
              4. оконные функции, LATERAL JOIN, рекурсивные CTE?
              5. С какими СУБД работают? Оптимизируют запросы или транслируют как есть?
              6. DML (есть понятно при таком подходе, но на всякий случай)
              7. Блокировки? Я так понял forupdate и просто serializable? То есть никаких ручных блокировок как в 1С нет?
              8. Источники данных для списков? Произвольный запрос как в 1С? А как тогда редактирование списков реализуется?
              9. Наследование таблиц?
              10. С типизацией и модульностью ЕМНИП там все более менее нормально (так называемые модели для модульности), но на всякий случай.
              11. Everything-as-a-code? Таблицы и формы кодом задаются? В XML или на X++?
              12. Лицензируют платформу или решения?


              1. DenisTrunin
                02.10.2019 17:44

                ну да. по вопросам
                1. Представления. В частности на дату?
                Надо кодить
                2. Материализованные представления?
                нет
                3. Триггеры per statement (то есть не по записям)?
                стандартно
                4. оконные функции, LATERAL JOIN, рекурсивные CTE?
                нет

                5. С какими СУБД работают? Оптимизируют запросы или транслируют как есть? как есть, добавляя системную информацию(код компании), только SQL Server

                6. DML (есть понятно при таком подходе, но на всякий случай)
                да
                7. Блокировки? Я так понял forupdate и просто serializable? То есть никаких ручных блокировок как в 1С нет?
                блокировок нет для большинства таблиц т.к. используется readcommited stapshot, если 2 пользователя меняют одну и туже запись, будет ошибка.
                можно сделать чтобы была блокировка

                8. Источники данных для списков? Произвольный запрос как в 1С? А как тогда редактирование списков реализуется?
                да, если запись видна на форме, ее в общем случае можно редактировать

                9. Наследование таблиц?
                есть, но не особо работающая технология, скорее мешает

                10. С типизацией и модульностью ЕМНИП там все более менее нормально (так называемые модели для модульности), но на всякий случай.
                модели есть в новой версии, в старой из любого места можно вызывать любой объект

                11. Everything-as-a-code? Таблицы и формы кодом задаются? В XML или на X++?
                В новой версии хранится в хмл, в старой в бинарном виде. для редактирования используется визуальный редактор, хмл используется для сравнения

                12. Лицензируют платформу или решения?
                в новой клауд версии 200$ пользователь с полными правами\месяц, минимально 20 пользователей. Только платформу купить нельзя(это я считаю недостаток большой), т.е. отсекает кучу вариантов использований


                1. Veidt Автор
                  02.10.2019 17:57

                  Спасибо большое за ответ. Еще несколько уточнений тогда, если можно:

                  3. Триггеры per statement (то есть не по записям)?
                  стандартно

                  А обращение к таблице изменений (:new, :old в MS SQL, и transition tables в Postgres)
                  2 пользователя меняют одну и туже запись, будет ошибка.

                  Так, а обычно в БД уровень изоляции не serializable используют? И в версионном режиме MS SQL или блокировочном?
                  да, если запись видна на форме, ее в общем случае можно редактировать

                  То есть если я делаю в качестве источника списка select from x join y on x.f=y.f и начинаю вводить в поле из y, она реально в y будет изменять? И если я напишу select y.x, y.x + y.z from y, и буду изменять первую колонку (то есть x), вторая будет автоматически обновляться?


                  1. DenisTrunin
                    02.10.2019 18:21

                    А обращение к таблице изменений (:new, :old в MS SQL, и transition tables в Postgres)

                    Только для одной записи

                    Так, а обычно в БД уровень изоляции не serializable используют? И в версионном режиме MS SQL или блокировочном?
                    В версионном — readcommited stapshot


                    То есть если я делаю в качестве источника списка select from x join y on x.f=y.f и начинаю вводить в поле из y, она реально в y будет изменять?

                    Будет изменять то поле которое вы поместити на форму, да. Т.е. если поместите все поля и в грид на форме, можно будет менять любое поле из x и y. Условия связи можно не прописывать для формы, будет взято из определения таблиц, т.е. в простом случае помещаем на форму как источник данных х, потом у, говорим что они связаны по inner join

                    И если я напишу select y.x, y.x + y.z from y, и буду изменять первую колонку (то есть x), вторая будет автоматически обновляться?

                    да, это называется display метод, y.x + y.z — это любой код из X++ возвращающий одно значение которому будет передан текущая запись, плюс можно получить ссылку на форму
                    Есть еще также edit метод, когда вы можете разрешить изменять y.x + y.z, соответсвенно вам надо будет закодировать куда сохранять введенное значение


                    1. Veidt Автор
                      02.10.2019 18:31

                      Супер. Но все равно часть вещей непонятно:

                      В версионном — readcommited stapshot

                      А как тогда проблему одновременного редактирования остатка решают?
                      Будет изменять то поле которое вы поместити на форму, да. Т.е. если поместите все поля и в грид на форме, можно будет менять любое поле из x и y. Условия связи можно не прописывать для формы, будет взято из определения таблиц, т.е. в простом случае помещаем на форму как источник данных х, потом у, говорим что они связаны по inner join

                      А если связь не 1-к-1. Или скажем left join? Изменит для всех записей и добавит недостающие записи?
                      да, это называется display метод, y.x + y.z — это любой код из X++ возвращающий одно значение которому будет передан текущая запись, плюс можно получить ссылку на форму

                      Ок, а если допустим идет так:
                      select detail.skuId, sku.name from detail join sku и я меняю detail.skuId, sku.name обновится?
                      Ну если я скажем в верхнем списке делаю:
                      select sum.q from document join (select sum(quantity) as q from detail by documentId) sum on sum.documentId = document.id
                      а в нижнем
                      select quantity from detail
                      и в нижней таблице изменяю quantity, в верхнем списке сумма обновится сама?


                      1. DenisTrunin
                        03.10.2019 01:36

                        А как тогда проблему одновременного редактирования остатка решают?

                        Для таблицы остатков стоит сво-во блокировка при обновлении. Но сам механизм довольно сложен, но это уже детали
                        А если связь не 1-к-1. Или скажем left join? Изменит для всех записей и добавит недостающие записи?

                        left join нет. есть inner и outer. но записи в любом случае добавляться не будут
                        select detail.skuId, sku.name from detail join sku и я меняю detail.skuId, sku.name обновится?

                        Надо смотреть конкретный пример, но по системе да. т.е. пользователь может вводить или skuId или sku.name, соответсвенно система сама разрешит и обновит нужное поле
                        Ну если я скажем в верхнем списке делаю:
                        select sum.q from document join (select sum(quantity) as q from detail by documentId) sum on sum.documentId = document.id
                        а в нижнем
                        select quantity from detail
                        и в нижней таблице изменяю quantity, в верхнем списке сумма обновится сама?

                        Sum на формах не работает. т.е. если вам нужно отобразить 2 списка — заказ и строки заказа и у шапки нужно отобразить сумму по строкам. то вы кидаете на верхний список таблицу заказов, на нижний строки, также на верхний добавляете display метод для таблицы заказов который что-нибудь считает. Он будет обновляться автоматически


                        1. Veidt Автор
                          03.10.2019 09:50

                          Для таблицы остатков стоит сво-во блокировка при обновлении. Но сам механизм довольно сложен, но это уже детали

                          Блокировка на чтение или на запись?

                          Потому как если на запись это же не поможет. Кто-то влезет в середине транзакции (пока блокировка еще не стоит) поменяет остаток, и с RC изоляцией ерунда получится.

                          А если блокировка на чтение, это будет уже блокировочник с соответствующей проблемой с масштабируемостью.

                          Ну и в какой момент и на какие записи накладываются блокировки. Автоматически платформой или вручную разработчиком?
                          left join нет. есть inner и outer. но записи в любом случае добавляться не будут

                          left это и есть outer как я понимаю. Но тут вопрос вот в чем, я вывожу:
                          select sku.name from balance join sku on balance.skuId=sku.id
                          В balance 2 ключа склад и товар, то есть будет для одного sku много записей.
                          Я меняю name, сразу в списке это name для всех записей поменяется?
                          Надо смотреть конкретный пример

                          Ну он вроде более менее конкретный. То есть я меняю skuId, она видит что это влияет на поле sku.name, и что? Перевыполняет весь запрос, или строит новый запрос для его обновления.
                          также на верхний добавляете display метод для таблицы заказов который что-нибудь считает. Он будет обновляться автоматически

                          А проблемы N+1 не будет? если я там напишу select sum(quantity) from detail where detail.document = x, она не будет для каждого инвойса сверху (если там список инвойсов) выполнять этот запрос?

                          Ну и есть где-то учебная версия Axapta как у 1С?


  1. skrimafonolog
    02.10.2019 06:46

    Тема с визуальным программированием, а точнее low-code / no-code платформами то и дело всплывает то тут, то там с завидной регулярностью. Позиционируют себя эти платформы, как средства ускоряющие / упрощающие разработку. При этом почему программирование мышкой по их мнению должно быть априори эффективнее программирования клавиатурой — непонятно. Разработку действительно можно ускорить / упростить повышением уровня абстракций, но никак не способом ввода этих абстракций в систему. Одна строка кода в этом смысле лучше, чем пять кликов / перетаскиваний мышкой, не говоря уже о том, что скорость работы с клавиатурой у опытного разработчика как правило выше, чем скорость работы с мышкой.


    1) Потому что заметная доля работы прикладного программиста — это реализация взаимодействия с пользователем. Визуально интерфейс создавать удобно. Тем более, что в 1С он не произвольный, а стандартизированный.

    2) Кроме интерфейсов с пользователем визуальными средствами в 1С выполняется прежде всего этап проектирования структуры БД.

    3) А собственно программирование в 1С — уже программирование как и всегда, текстом. Вы точно не просто 1 разик поглядели на 1С? Визуальной составляющей там не так уж и много, чтобы «вообще не нужно было писать код»


    1. CrushBy
      02.10.2019 07:32

      Повторю то, что писал в комментариях выше:

      А вас не смущает, что в самых популярных фронтенд технологиях для разработки GUI(!!!) React и Angular все делается кодом, а не визуальным программированием? Визуальное программирование — это для настроек максимум. Для промышленной разработки с ним больше проблем, чем преимуществ. Опять же напоминаю про gitflow.


      1. gennayo
        02.10.2019 07:50

        До «управляемого интерфейса» формы рисовать на 1С было весьма неприятно. Да и сейчас — удовольствие ниже среднего. Стандартизация интерфейсов, однако, создание уютного мирка, где пользователи и программисты, переходя с одного предприятия на другое видят привычный интерфейс и не напрягают мозговых извилин :))


      1. skrimafonolog
        02.10.2019 10:50

        А вас не смущает, что в самых популярных фронтенд технологиях для разработки GUI(!!!) React и Angular все делается кодом, а не визуальным программированием?


        Вы немного о другом. Слишком уж в лоб сравниваете разные вещи. React и Angular — предназначены для формирования произвольного интерфейса пользователя. Интерфейс пользователя 1С — стандартизирован.

        Да и то, что предлагают в React/Angular — это не единственный путь. Есть же другой, куда как более заслуженный продукт — QTCreator.

        Для промышленной разработки с ним больше проблем, чем преимуществ.

        Авторам lsFusion?
        Безусловно. Визуальное средство создать сложнее.
        В языке — это дешево и сердито. То есть небольшими усилиями получаем с помощью языка вполне функциональные вещи.


        1. CrushBy
          02.10.2019 10:53

          Да и то, что предлагают в React/Angular — это не единственный путь. Есть же другой, куда как более заслуженный продукт — QTCreator.


          Так сравните количество разработчиков React/Angular и QTCreator? У кого больше? Значит что удобнее? Или думаете, что разработчики на React и Angular тоже были с 90х, как у 1С?


          1. skrimafonolog
            02.10.2019 11:00

            Так сравните количество разработчиков React/Angular и QTCreator? У кого больше?


            А ничё, что это совсем разные прикладные ниши? Где совсем разное количество заказчиков.


            1. CrushBy
              02.10.2019 11:02

              Разные. Но почему, по вашему, нету визуального конструктора для React, если это так круто?


              1. skrimafonolog
                02.10.2019 11:12

                Разные. Но почему, по вашему, нету визуального конструктора для React, если это так круто?


                Интерфейс не стандартизированный, в отличие от 1С.

                • Ведь весь смысл React/Angular — как раз и есть рисование интерфейсов.
                • А смысл 1С другой — автоматизация бизнеса.


                В 1С программисту легкое изготовление интерфейса визуальными средствами дает экономию времени и дает возможность сосредоточится на решении собственно основной прикладной задачи (работа с данными).

                Пользователям 1С же предлагаются стандартизация ради упрощения изучения. Изучил в одном месте — ожидаешь что по всей программе будет аналогично.

                Иначе программисты не будут делать единообразно. Ну хоть чисто для поразвлечь себя на работе: дай я так попробую, дай я эдак попробую. Собственно и сейчас такая проблема имеется, однако хоть и не в такой крайней форме, как это было бы с произвольными интерфейсами.

                Подытожу — задачи React и 1С — разные. Поэтому и подходы разные.


                1. CrushBy
                  02.10.2019 11:31

                  В 1С программисту легкое изготовление интерфейса визуальными средствами дает экономию времени и дает возможность сосредоточится на решении собственно основной прикладной задачи (работа с данными).

                  Возможно. Но проблема в том, что в 1С это совсем нетривиально, так как приходится извращаться с этими &НаСервере и &НаКлиенте. Сравните с тем, как это сделано, например, в lsFusion, где разработчику не надо всей этой фигней страдать.


    1. Veidt Автор
      02.10.2019 09:32

      Еще раз, я в самой статье описал плюсы и минусы визуального программирования. Про тонны кода в 1С поверьте я в курсе, просто реально многие 1С разработчики и не только, все еще живут иллюзией, что они только мышкой программируют и это круто и быстро.


    1. Neikist
      02.10.2019 10:49

      Потому что заметная доля работы прикладного программиста — это реализация взаимодействия с пользователем. Визуально интерфейс создавать удобно.

      По этому пункту как андроид разработчик(куда уж ближе к UI и пользователям) не соглашусь, предпочитаю пользоваться редактированием через текст при наличии визуального конструктора. Да и кастомные вьюшки по другому вообще не сделать. Максимум иногда в режим предпросмотра переключаюсь, но только под самый конец, оценить что налепил.

      Ну и да, визуальной составляющей в 1с реально дофига и больше, в сравнении с той же андроид разработкой, например.


      1. skrimafonolog
        02.10.2019 10:55

        По этому пункту как андроид разработчик(куда уж ближе к UI и пользователям) не соглашусь, предпочитаю пользоваться редактированием через текст.


        Давайте оставаться в контексте темы про 1С.
        В 1С интерфейс — стандартизованный. Узкозаточенный.

        Если уж про крайние случаи говорить, про изображение произвольного интерфейса пользователя, то там совсем другие правила начинают работать.


        1. Neikist
          02.10.2019 10:59

          Понимаете в чем дело, обычно первое что я делаю — как раз собираю примерно похожее на то что должно получиться из стандартных блоков. Которые прекрасно можно было бы накидывать на экран из палитры компонентов и выставлять нужные свойства. Если не нужны кастомные вью (которые вообще на котлине или джаве пишутся) — визуального конструктора достаточно для формирования интерфейсов. Вся нестандартность получается из вложенности одних вью в другие и настройке свойств, прямо как в 1с с управляемыми формами, очень похоже работа выглядит. Но все равно удобнее, быстрее и комфортнее работать с текстом напрямую. Это даже если забыть про всякое вроде конфликтов при мерже где текст вообще безальтернативен.


  1. Storm2003
    02.10.2019 09:30

    Странно. ЯП — это всего лишь инструмент. Как можно ненавидеть молоток за то, что им нельзя открутить саморезы?
    Единственное, что можно поставить в особенность языка — это изолированную платформу. Т.е. Вы не сможете, поставив некую dll, использовать вставку 1С. И, соответственно, в 1С вставить код на другом ЯП. Но это компенсируется тем, что вместе с ПО идёт IDE. И Вы всегда можете посмотреть, в чём затык и самостоятельно принять меры для его устранения, не ожидая реакции ТП.


    1. skrimafonolog
      02.10.2019 11:18

      Т.е. Вы не сможете, поставив некую dll, использовать вставку 1С. И, соответственно, в 1С вставить код на другом ЯП. Но это компенсируется тем, что вместе с ПО идёт IDE


      Чтобы вставить код на другом языке в 1С:

      Есть технология внешних компонент в 1С. Еще с прошлой версии 1С она есть, очень давно.

      Наоборот — вставить код 1С в другой язык — только вместе с платформой.
      У платформы для этого имеются несколько различных механизмов на выбор для вызова функций 1С извне платформы. Часть этих методов еще с прошлой версии 1С есть, то есть очень давно.


      1. Storm2003
        02.10.2019 11:33

        Да, с внешними компонентами — это я поторопился. Действительно, защищённые компоненты используются ещё с 7.7.


  1. botokash
    02.10.2019 10:54
    +1

    Мне понятен смысл размещения данной публикации тут. Мне не понятно, почему авторы решили «измерять» мнение сообщества 1С, кинув ссылку на мисту? Инфостарт более объективен в этом плане, разместите вашу статью там. Я уверен, вы получите так желаемую конструктивную критику и мнение сообщества 1С.


    1. DAleby
      02.10.2019 11:00

      Ссылку на мисте кинули не мы, как и все предыдущие ссылки на мисте.


      1. botokash
        02.10.2019 15:00

        Тогда извиняюсь, сам на мисте не сижу, но после кучи комментариев тут зашел на нее и действительно увидел кучу тем о вашем продукте. Но все таки очень рекомендую выложить все тут описанное на инфостарт. Представителей бизнеса, думаю, там побольше будет.


    1. Neikist
      02.10.2019 11:01

      Кстати согласен, на инфостарте вряд ли зарежут статью, да и коммьюнити там поадекватнее.


  1. DmitriiPopov
    02.10.2019 11:34
    -1

    В комментариях к прошлой статье я уже писал о том, что автор имеет явно недостаточно компетенций в 1С, чтобы всерьёз обсуждать эту платформу.
    Однако он с упорством, достойным лучшего применения, идёт дальше. Причем местами даже не особо напрягается в вопросе придания достоверности тому бреду, который несёт. Ляпы начинаются с самого начала — про якобы неэффективное считывание данных объектов и про регистры.
    Квалифицированные специалисты, знающие 1С, сразу видят целый ворох грубых ошибок, которые могут лишь указывать на полнейшее непонимание автором предмета, о котором он пишет.
    Неквалифицированные — напитаются очередными мифами об 1С.
    Статья — чистой воды черный пиар и попытка раскрутить свой продукт (lsFusion) за счет недостатков другого (1С). И автору совершенно наплевать — о реальных недостатках (которые безусловно тоже есть) идёт речь или о выдуманных и высосанных из пальца.

    PS Никогда ни один нормальный специалист не станет обсуждать и уж тем более критиковать ту технология в которой он плохо разбирается. Во-первых, это самого себя не уважать. А, во-вторых, грош — цена такой критики.


    1. CrushBy
      02.10.2019 11:36

      PS Никогда ни один нормальный специалист не станет обсуждать и уж тем более критиковать ту технология в которой он плохо разбирается. Во-первых, это самого себя не уважать. А, во-вторых, грош — цена такой критики.


      Да, я уже писал выше про ЧСВ некоторых 1С-программистов. Не хотите обсуждать по существу — не обсуждайте. Зачем писать бессмысленные комментарии?


      1. DmitriiPopov
        02.10.2019 17:32

        А как можно конструктивно обсуждать бред типа «в 1С объект читается всегда целиком… Как следствие, данных читается… слишком много — если надо получить только одно поле (реквизит)»???

        Это ведь классическое передёргивание. Когда смешивается правда (что объект считывается целиком) с откровенной ложью (когда надо получить лишь один реквизит).

        Ведь, когда надо получить один реквизит, никто не считывает объект целиком (а если где-то в самописках и встречается подобный *авнокод, то вопросы надо задавать никак не авторам платформы, что какой-то идиот микроскопом гвозди заколачивает). Вообще сама необходимость получения объекта может быть связана только с его модификацией или отображением на форме (форма документа, элемента справочника и т.п.), но никак не для чтения его реквизита(ов).

        И такие примеры буквально в каждом третьем абзаце.
        Пишем немножко правды и полуправды, добавляем чуть-чуть вымысла, приправляем откровенной ложью с передёргиванием и выдаём всё это за «конструктивную» критику.

        Браво! Отличная осмысленная статья!

        А что касается ЧСВ программистов 1С, так я им не страдаю.
        Я прекрасно знаю огромное количество недостатков платформы 1С и прикладных решений. В том числе в сравнении с другими средами и платформами. Только претензии эти имеют мало общего с тем, что Вы тут накропали. Это во-первых.
        А во-вторых, я никогда не стану писать что-либо о технологии, в которой недостаточно глубоко разбираюсь. У Вас же рука даже не дрогнула. И у кого из нас раздутое ЧСВ?..


        1. Veidt Автор
          02.10.2019 17:37

          Давайте так, если вы не поняли, о чем статья, не переживайте. Значит статья не для вас. Тот кто мог или хотел, тот понял.


        1. Neikist
          02.10.2019 17:58

          Ведь, когда надо получить один реквизит, никто не считывает объект целиком (а если где-то в самописках и встречается подобный *авнокод, то вопросы надо задавать никак не авторам платформы, что какой-то идиот микроскопом гвозди заколачивает). Вообще сама необходимость получения объекта может быть связана только с его модификацией или отображением на форме (форма документа, элемента справочника и т.п.), но никак не для чтения его реквизита(ов).

          В том и беда что это является говнокодом в 1с. Могли хотя бы костыль зафигачить вроде объявления считываемых данных для объектов для блоков кода (например аннотировать процедуру или модуль что любые обращения через точку считывают только указанные в аннотации реквизиты/ТЧ). Потому что нередко это бывает необходимо для бизнес логики, а не только для записи/отображения. Для массового чтения можно было бы сделать костыль вроде передачи объектов списком в специальную процедуру встроенную, и тогда бы за один запрос были прочитаны только нужные поля с последующим кешированием для обращения «через точку», но можно было бы работать с объектами, а не структурами, как сейчас нам предлагают сделанные для этих целей функции бсп. Наверняка можно и по человечески сделать, а не костылями как я описал, просто это что первое в голову пришло. Вот честно, ОбщегоНазначения.ПрочитатьРеквизит(СсылкаНаОбъект, «Наименование») и ей подобные выглядят ужасно и пользоваться ими неудобно, не говоря уж что кешировать приходится вручную если нужно, хотя можно было бы еще и этим управлять.


        1. kryvichh
          02.10.2019 18:12

          Предположу такой сценарий, что надо сделать групповое изменение определённого атрибута у группы документов, отобранных по определённым критериям. Как это будет происходить в 1С? Загружаем к себе весь документ, меняем атрибут, пихаем обратно в базу?


    1. Neikist
      02.10.2019 11:51

      Ну вот у меня спец по платформе (2 с копейками года назад примерно получен), опыт работы с 1с 4 года, участие в разработке отраслевой конфы (1С: ТОИР), внедрение ее на проектах (в т.ч. последний проект длился 2 года, и используется более чем 1к обычных пользователей и 2к мобильных), и я с автором согласен во многом, пусть местами не полностью. Я не компетентен в 1с?


    1. Veidt Автор
      02.10.2019 12:15

      Ну местные 1С-программисты потратив на изучение lsFusion на порядок меньше времени, чем я на 1С, почему-то не смущаются заявлять, что да тут те же проблемы и «очередной убийца 1С».

      Плюс, посмотрите на самый заплюсованный комментарий, не согласны — напишите по пунктам с чем, как комментатор веткой ниже.


      1. skrimafonolog
        02.10.2019 12:21

        Ну местные 1С-программисты потратив на изучение lsFusion на порядок меньше времени, чем я на 1С, почему-то не смущаются заявлять, что да тут те же проблемы и «очередной убийца 1С».


        Мало ли чего пишут технари.

        За последние 20 лет я таких «убийц 1С» видел 5 штук.

        Есть два подхода — чисто технический. Технарям нравится, это уже хорошо.

        Но есть еще и подход бизнеса и экономики.
        А бизнесу ваше решение — это все равно что на голом С им бы писали систему — специалисты далеки от прикладных задач, разработка более трудоемкая.

        1С сильна тем, что предлагает типовые решения, которые уже большей частью устраивают народ.

        Без этого — я не очень понимаю смысла вашей системы.
        Ведь простейшие вещи я и на голом универсальном языке программирования напишу, не на lsFusion (разумеется буду использовать доп. инструменты для интерфейсов и т.п.).

        А сложные — это дорого очень, мало кто оплатит. Так что если вещь не узкоспециальные требования имеет, которые с 1С плохо уживаются — то проще взять решение на базе 1С. И заказчик это тоже понимает, хотя бы по доступности решений/специалистов.


        1. CrushBy
          02.10.2019 12:25

          Ведь простейшие вещи я и на голом универсальном языке программирования напишу, не на lsFusion (разумеется буду использовать доп. инструменты для интерфейсов и т.п.).


          Ну напишите вот эти: раз, два, три.

          Посмотрим сколько у вас на это времени уйдет и сколько будет строк кода.


          1. skrimafonolog
            02.10.2019 13:29

            Ведь простейшие вещи я и на голом универсальном языке программирования напишу, не на lsFusion (разумеется буду использовать доп. инструменты для интерфейсов и т.п.).


            Ну напишите вот эти: раз, два, три.

            Посмотрим сколько у вас на это времени уйдет и сколько будет строк кода.


            Утрируйте. То, что вы привели — это как раз целесообразнее именно на 1С сделать.

            P.S.:
            Интересно, а у вас эти три приведенных вами вещи — сколько заняли?


        1. Veidt Автор
          02.10.2019 12:47

          За последние 20 лет я таких «убийц 1С» видел 5 штук.

          Ну вот вы тоже самое делаете.
          Ну назовите хоть один, у которого не было хотя бы половины из 21 проблем в статье. Ну или хотя бы треть возможностей из этого списка. Ничего близко похожего на самом деле до еще не было. Так что взлетит или не взлетит можно пока только гадать.


          1. skrimafonolog
            02.10.2019 13:04
            +1

            Чтобы расковырять ваши недостатки — вами нужно сначала занитересоваться и глубоко вникнуть. Однако пока не зачем это делать, извините.

            Вы не показали в чем ваши существенные премущества по совокупности. Какие-то отдельные косячки — несерьезно. Они и у вас есть, конечно же.

            А вот с более существенными вещами — с прикладными решениями и поддержкой российского законодательства — все грустно у вас.

            Предлагаете потратить на вас кучу времени просто потому что вы написали какие вы крутые? Гм. Да тут каждые 10 из 10 фирм на Хабре так пишут о себе.

            Тут замнутный круг, я понимаю. Но ничем помочь не могу. Статья воспринимается не убедительно, черезчур ангажировано. Только часть доводов правдива.

            Вы можете взять в штат высококвалифицированного 1С-ка, если уж решили делать «убийцу 1С». Тогда и ваши статьи и ваше развитие будет против реальных, а не мнимых недостатков 1С.


        1. mr_bag
          02.10.2019 13:39

          www.ultimatebusinessware.ru/2c/vs
          Один из «убийц».
          Но, как я понимаю, 1С господствует именно из за модели франчайзи.
          И, как мы знаем, выживают не самые идеальные, а самые приспособленные :)


          1. CrushBy
            02.10.2019 13:57

            Просили же LGPL, а не коммерческую платформу.


          1. Veidt Автор
            02.10.2019 14:16

            Ну и как у них с вышеописанными 21 проблемами? Те же яйца только в профиль?


  1. Mutuhan
    02.10.2019 11:34
    +3

    Автор путает мягкое с теплым, к тому же знания автора об 1С всеобъемлющие но не доскональные, а в некоторых местах автор сам признается, что некоторую идеологию 1С он трактует неправильно:

    Фактически ключевое отличие этих двух понятий заключается в том, что объекты используются для записи и чтения, а ссылки — только для чтения

    Объекты используются только для записи! в тоже время ссылки никогда не должны использоваться для чтения данных. Ссылка — в терминах sql это первичный ключ таблицы плюс сама таблица. Таким образом если метаобъект в конфигурации является ссылочным типом, то по ссылке мы можем получить указатель на таблицу базы данных плюс конкретную запись в этой таблице. Если же нужен доступ к данным, то как и в классическом SQL нужно использовать запрос. И в высоко нагруженных системах так и должно происходить. Обращение к реквизиту по ссылке допустимо, но скорее всего оставлено как пережиток прошлого из 7.7, где самого понятия ссылочного типа не было в явной форме.

    В принципе этого уже достаточно, чтобы скептически относится к рассуждениям автора, на тему «почему 1с плохая и даже убогая». Но тем не менее позвольте пройтись по некоторым пунктам…
    В 1С объект читается всегда целиком, в том числе с табличными частями, но не более того (без каких либо связанных данных). Как следствие, данных читается:

    либо слишком много — если надо получить только одно поле (реквизит)
    либо слишком мало — если в цикле надо обращаться к другим объектам по ссылке, мы получаем классическую проблему N+1 (один запрос для получения N объектов и по одному запросу для каждой ссылки).

    Зачем создавать объект, чтобы прочитать только один реквизит? Для каких целей понадобилось обращаться к другим объектам в цикле? Что это за конструкция такая, в которой данные объекта зависят от других объектов? Автор тут конкретно не догоняет, что такое объекты и для чего они нужны. Но тем не менее делает вполне конкретный вывод
    Такая убогость механизма ORM в 1С на самом деле обусловлена тем, что...

    далее про регистры
    Являясь по сути не более чем представлениями в SQL, усовершенствованными для работы со временем, представления в 1С наследуют (а иногда даже и усугубляют) все проблемы представлений в SQL.

    тут автор совсем не понимает, что такое регистр. По его мнению регистр это одна таблица плюс его представление (СрезПоследних, ОстаткиИОбороты и т.д.). На самом деле все гораздо сложнее: регистр в 1с это агрегирующий объект и связан он не с представлениями (aka View), а с промежуточными итогами, которые на самом деле представлениями никак не являются. Не знаком с lsFusion чуть менее чем совсем, но в одном из how-to там увидел механизм контроля остатков (Управление материальными запасами)
    receivedQuantity 'Суммарный приход' = GROUP SUM quantity(ReceiptDetail d) BY item(d), stock(receipt(d));
    shippedQuantity 'Суммарный расход' = GROUP SUM quantity(ShipmentDetail d) BY item(d), stock(shipment(d));
    currentBalance 'Текущий остаток' (Item i, Stock s) = receivedQuantity (i, s) (-) shippedQuantity (i, s);

    т.е. чтобы посчитать остаток запаса на складе, нужно взять приход и вычесть из него расход. Только хочется посмотреть, как это будет работать если записей в таблице овер дофига и нужно внести изменения «задним» числом. Тут конечно можно порассуждать, а давайте отделим оперативную базу от аналитической и вместо одного решения у нас будет два, а потому будем объяснять главному бухгалтеру, почему вчера эта циферка была такой, а сегодня она другая.
    Фактически, регистры в 1С поддерживают всего две операции: сумма и последнее по дате, сгруппированные по ключам таблицы

    промежуточные итоги они еще поддерживают. Сумму можно узнать за любой промежуток времени и последнее по дате можно узнать на любую дату. Представления конечно было бы круто иметь, только отсутствие оного особого неудобства это не создает. Если для каких-то особых задач оно все-таки понадобиться, то представления можно сделать средствами SQL, ведь доступ к физической модели ЕСТЬ, хоть автор и утверждает обратное. Но представлений в 1С нету не изза того что 1С не может их сделать. Они просто не нужны для выполнения тех задач, под которые 1С заточена.
    В параметрах виртуальных таблиц можно использовать только константы

    Автор имеет представление что такое виртуальная таблица, но как ей пользоваться — нет, к тому же сравнение ее с представлением неправильно. Виртуальная таблица — это не представление, а результат запроса к таблице регистра (движения плюс промежуточные итоги). Соответственно если параметры виртуальной таблицы меняются, то меняется и сама таблица. Как пример автор приводит абсолютно неоптимальный запрос, рабочий но не оптимальный. Скорее всего это изза того, что автор про пакетное исполнение запроса ничего не слышал.
    Но так как, в отличии от SQL, в запросах 1С отсутствует механизм изменения данных (так называемый DML), использование запросов никак не может помочь в вопросах записи большого количества данных. То есть, если вам понадобится создать сто тысяч дисконтных карт, вам придется вернуться назад в ORM

    было бы круто в 1с писать чтото «ОБНОВИТЬ РасходнаяНакладная КАК рн УСТАНОВИТЬ рн.Статус=ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхНакладных.Отгружена) ГДЕ рн.Ссылка = &Ссылка)». Порой этого действительно не хватает, если рассматривать данные когда они отделены от алгоритмов их обработки. К примеру выше если накладная закрыта, то нужно увеличить задолженность контрагента. Но на практике это редко применимо, в основном это требуется, когда нужно срочно чтото исправить, потому что ктото накосячил или при первоначальном заполнении (как часто требуется создание ста тысяч дисконтных карт?).
    Верхом садизма при этом является отсутствие в 1С замыканий и передачи функций в качестве параметров. То есть переменные контекста нужно самому сохранять, например, в какую-нибудь структуру, после чего передавать эту структуру параметром явно созданной и именованной процедуре обработке результата. В итоге получается что-то зубодробительное вроде

    Тут вообще ничего не понятно. Тот же самый питон движется в сторону отказа от синхронного многопоточного программирования в сторону корутин и асинхронных вызовов. Что не так с асинхронностью в 1С? А я скажу что не так: его там мало! Оно там используется только в тот момент, когда требуется прервать поток для ожидания действий пользователя. У разработчика нет возможности созданиях асинхронных вызовов и когда оно действительно нужно, приходится уже изголяться.
    Соответственно для этого в 1С и отделили данные формы от просто данных, но при этом в попытках сделать это разделение менее явным создали ряд очень странных абстракций. Например, класс в скобочках. Который выглядит как класс, крякает как класс, но не класс (например методы этого класса вызывать нельзя)

    Данные формы не являются данными объекта. Данные формы это отображение данных объекта. Т.е. открыть форму не подразумевает под собой открыть объект. Объект создается в момент записи данных формы, а не в процессе открытия формы. Если понимать как это работает, то на самом деле можно создавать довольно универсальные вещи. Обобщенно в большинстве случаев данные формы должны равняться данными объекта, но в ряде случаев 1С позволяет создавать универсальные формы, для различных объектов (см. конфигурацию Документооборот, как там реализован механизм вызова формы задачи бизнес процесса). Если понимать как это работает — можно создавать достаточно интересные вещи.
    И если с данными формы такое разделение было во многом вынужденным, то зачем понадобилось разделять команды формы и действия, я, если честно, не совсем понял. Может в комментариях кто-нибудь сможет это объяснить

    Какие действия?
    В общем получился какой-то франкенштейн, который при этом по функционалу пересекается с половиной других абстракций в 1С. В которые (например, формы) они еще и попытались интегрировать этот СКД. В результате понять что, где, когда и как нужно использовать — задача весьма неочевидная

    Рядовому пользователю нет необходимости понимать как работает СКД, в 99% случаев ему нужно настроить вариант отчета, с которым он потом и будет работать. Другой аспект — это СКД с точки зрения разработчика. Механизм достаточно сложный, но если его освоить, то скорость разработки отчетов и интерактивной выборки данных (а именно для этого используется СКД), повышается в разы и там нет никакой громоздкости.
    Как интерактивный интерфейс, то есть замена формам, СКД также плохо подходит, так как не умеет и половину того, что умеют формы

    Автор опять путает теплое с мягким. Зачем сравнивать СКД с формой? Это как? СКД не умеет многое того что умеет форма? Это тоже самое что лошадь не умеет много того, что умеет кофеварка. На самом деле открывая СКД автор, открывает форму, если СКД в отчете, то открывается форма отчета указанная в настройках, и она может быть универсальная, одна на всех. А может быть своя собственная, конкретно для данного случая. Гибко и просто.
    Про фатальные недостатки хочется спросить только одно? ЗАЧЕМ???
    Фатально — это значит обреченно. 1С обречена из-за того не умеет GIT и Eclipse? Зачем нужен PIP в 1С?
    Зачем нужные открытые репозитории в 1С когда весь девелопемент в 1С сводится к настройке типового решения, и этот девелопемент в 100% сугубо индивидуален для каждого заказчика. В большинстве случаев растиражировать готовое решение для конкретного заказчика на массовый сегмент — это не что иное, как пердеть в океане. Я понимаю в питоне форкнуть чужой проект, внести в него корректировки, установить зависимости и выложить обратно на GIT, как-то оправдно с точки зрения того, что это потом кому-то будет нужно. Но в 1С это зачем? Думаете кому-то поднадобится шлак, который Вы внедрили в ООО «Рога и Копыта»? Внедрений в 1С сделаны сотни тысяч, до отраслевых решений дошли всего десятки, и все эти решения получили статус «1С совместимо» и лежат в официальном репозитории 1С. И там есть контроль версий!!!


    1. Neikist
      02.10.2019 11:58

      весь девелопемент в 1С сводится к настройке типового решения

      Аж подгорает. А о тех кто свои решения пишет вы думали? Ну и не путайте гит и гитхаб.


      1. Mutuhan
        02.10.2019 12:27
        +1

        Что о них нужно думать? Я не отрицаю что существуют конфигурации написанные «с нуля» и они где-то используются. Но в основной своей массе, именно так как я и говорил. Внедрение = настройка типового решения. И чем дальше, тем процесс более очевидный.


        1. Neikist
          02.10.2019 12:28

          Ну во первых эти типовые решения пишут в самом 1с, во вторых всякие 1с совместно и совместимо пишутся кучей разработчиков по стране. И им хочется комфорта и эффективности.


          1. Mutuhan
            02.10.2019 12:49
            +1

            Я это знаю, меня интересует из-за чего у Вас подгорает? Вам хочется комфорта и эффективности, но эска к Вам несправедливо сурова? Вам что-то мешает создать решение, выложить его в открытый доступ, чтобы люди пользовались и радовались? Как взаимосвязаны процессы внедрения 1С с критикой качества платформы в этой статье?


            1. Neikist
              02.10.2019 12:53
              +1

              При чем здесь внедрение? Лично я эту статью вижу в первую очередь как критику платформы для разработчиков решений, либо для долговременной поддержки и развития готовых решений. А мешает сделать своё несравнимый объем ресурсов меня и 1с. Я просто предпочел с 1с свалить, как довольно простой выход.
              А подгорает из за того что вы почему то рассматриваете «весь девелопемент в 1С» как «настройку типового решения», а другого почти не существует по вашему.


              1. gennayo
                02.10.2019 13:06

                Эта статья — в первую очередь реклама своего решения за счёт известности 1С. Всё остальное — вторично.


                1. Neikist
                  02.10.2019 13:08

                  Ну это понятно, но тем не менее статья вполне качественная на мой взгляд.


                  1. gennayo
                    02.10.2019 13:21

                    Обычная рекламная статья, где недостатки платформы, которую lsfusion непонятно почему записали в свои конкуренты, преувеличены, а достоинства не упомянуты совсем.


                    1. Neikist
                      02.10.2019 13:23

                      Ну не сильно они и преувеличены, хотя я и не по всем пунктам согласен. Часть из них могут послужить причиной разработчику уйти, как в моем случае.


                      1. gennayo
                        02.10.2019 13:31

                        Так в том и дело, что те, кто работают с 1С, прекрасно о большинстве этих проблем осведомлены, а бизнесу эти проблемы не интересны. Для кого же эта статья тогда написана? Чтобы те, кто и так считали, что 1с — это шлак, остались при своём мнении?


                        1. Neikist
                          02.10.2019 13:34

                          Для чего статья написана — вы и так написали раньше, для рекламы lsFusion среди разработчиков. Возможно для тех 1сников что не пробовали другие технологии и потому могут не замечать минусов 1с отсутствующих у других (или имеющихся в меньшем объеме).
                          Тем не менее обсуждать верны ли или нет перечисленные недостатки не мешает, кому бы статья ни была предназначена.


                          1. gennayo
                            02.10.2019 13:40

                            Хмм… 1С-ники, не замечающие проблем 1С, смогут работать на lsfusion? Не думаю… И опять же, вы, например, перешли бы с 1С на lsfusion?


                            1. Neikist
                              02.10.2019 13:43

                              Я lsFusion не изучал пока, потому трудно сказать, интерес по крайней мере появился, может и посмотрю в очередном отпуске, но с 1с я ушел именно из за части перечисленных проблем. Правда я вообще ушел не в разработку бизнес приложений.


              1. Mutuhan
                02.10.2019 14:41

                Я имел в виду девелопмент у конечного заказчика. В 90 % случаев он сводится к настройке типового решения. Увы это так. Все остальное это узкоспециализировано и малопригодно для «решения из коробки». Не типовые решения существуют, но их очень мало. Но это не особенность платформы, а особенность российского бизнеса. Если на западе «best practices» что-то значит и твоя карьера действительно зависит от того, насколько ты хорошо эти практики знаешь, то в России все несколько по другому. Зачастую ход процесса внедрения зависит от компетенции топ-менеджмента. Зачастую многие топы сами не понимаю чего они хотят, но твердо уверены, что если поставить 1С то все у них будет в шоколаде. Качество платформы 1С тут обсолютно не причем.


                1. Neikist
                  02.10.2019 14:48

                  Тем не менее это не все случаи. Да и внедрение может заключаться в переписывании огромного куска функциональности и выкидывании трети существующего кода. И проект по внедрению может идти несколько лет силами нескольких разработчиков.


                  1. Mutuhan
                    02.10.2019 15:23

                    Кто же спорит что все это возможно? Другое дело кому это нужно и насколько востребовано повсеместно.


                    1. Neikist
                      02.10.2019 15:24

                      Я так понимаю разрабы lsFusion на повсеместность и не сильно претендуют (по крайней мере из того что я понял).


    1. Veidt Автор
      02.10.2019 11:58

      Объекты используются только для записи! в тоже время ссылки никогда не должны использоваться для чтения данных. Ссылка — в терминах sql это первичный ключ таблицы плюс сама таблица. Таким образом если метаобъект в конфигурации является ссылочным типом, то по ссылке мы можем получить указатель на таблицу базы данных плюс конкретную запись в этой таблице. Если же нужен доступ к данным, то как и в классическом SQL нужно использовать запрос. И в высоко нагруженных системах так и должно происходить. Обращение к реквизиту по ссылке допустимо, но скорее всего оставлено как пережиток прошлого из 7.7, где самого понятия ссылочного типа не было в явной форме.

      В принципе этого уже достаточно, чтобы скептически относится к рассуждениям автора, на тему «почему 1с плохая и даже убогая». Но тем не менее позвольте пройтись по некоторым пунктам…

      В 150 раз. Тезис простой — ORM в 1С есть (пережиток 7.7 или нет не важно). Он убогий, и 1С решили от него отказаться и правильно сделали (тут конечно ORM'ки не согласятся, но имеют право). Вы же просто подтвердили, что я написал.
      Зачем создавать объект, чтобы прочитать только один реквизит? Для каких целей понадобилось обращаться к другим объектам в цикле? Что это за конструкция такая, в которой данные объекта зависят от других объектов? Автор тут конкретно не догоняет, что такое объекты и для чего они нужны. Но тем не менее делает вполне конкретный вывод

      Вы похоже не знаете, что такое ORM, проехали, не читайте этот пункт (он для тех кто знает что это такое, и как это реализуется в других технологиях).
      регистр в 1с это агрегирующий объект и связан он не с представлениями (aka View), а с промежуточными итогами, которые на самом деле представлениями никак не являются

      Это называются материализованные представления это тоже упомянуто в статье. И в пункте про константу в качестве параметров промежуточные итоги тоже упомянуты.
      Только хочется посмотреть, как это будет работать если записей в таблице овер дофига и нужно внести изменения «задним» числом.

      В lsFusion есть материализация показателей. Читать тут (ссылка в статье тоже есть).
      промежуточные итоги они еще поддерживают. Сумму можно узнать за любой промежуток времени и последнее по дате можно узнать на любую дату. Представления конечно было бы круто иметь, только отсутствие оного особого неудобства это не создает. Если для каких-то особых задач оно все-таки понадобиться, то представления можно сделать средствами SQL, ведь доступ к физической модели ЕСТЬ, хоть автор и утверждает обратное. Но представлений в 1С нету не изза того что 1С не может их сделать. Они просто не нужны для выполнения тех задач, под которые 1С заточена.

      Представления это механизм декомпозиции и повторного использования (смотрите статью про SQL). И он очень важен с учетом перехода 1С на голый SQL. Без них получают миллионы строк не самого качественного кода, что мы и наблюдаем в типовых.
      Соответственно если параметры виртуальной таблицы меняются, то меняется и сама таблица.

      Не поверите, но в параметризованных представлениях та же фигня. Виртуальные таблицы это те же представления логически (с одним волшебным параметром Дата для оптимизации).
      Скорее всего это изза того, что автор про пакетное исполнение запроса ничего не слышал.

      Да прям-таки. Автор такие вещи знает про SQL, о которых вы и не задумывались (почитайте хотя бы про SQL статью).
      Тут вообще ничего не понятно. Тот же самый питон движется в сторону отказа от синхронного многопоточного программирования в сторону корутин и асинхронных вызовов. Что не так с асинхронностью в 1С? А я скажу что не так: его там мало! Оно там используется только в тот момент, когда требуется прервать поток для ожидания действий пользователя. У разработчика нет возможности созданиях асинхронных вызовов и когда оно действительно нужно, приходится уже изголяться.

      Вы вообще в курсе что такое замыкания и передача функций в качестве параметров? На JavaScript посмотрите и как там эти вещи решаются.
      Если понимать как это работает — можно создавать достаточно интересные вещи.

      А можно не городить огород и тоже создавать достаточно интересные вещи. Особенно с учетом того, что задача 1С разработчика решать бизнес-задачи, а не создавать интересные вещи.
      Рядовому пользователю нет необходимости понимать как работает СКД, в 99% случаев ему нужно настроить вариант отчета, с которым он потом и будет работать.

      Где вы таких пользователей берете. Они с отбором с трудом разбираются, а вы про настройку отчета.
      Автор опять путает теплое с мягким. Зачем сравнивать СКД с формой? Это как? СКД не умеет многое того что умеет форма?

      Сто раз уже обсуждалось почему. Например почитайте комментарии в статье про подбор.
      Про фатальные недостатки хочется спросить только одно? ЗАЧЕМ???

      Вы шутку про фатальный недостаток знаете?
      Фатально — это значит обреченно. 1С обречена из-за того не умеет GIT и Eclipse? Зачем нужен PIP в 1С?
      Зачем нужные открытые репозитории в 1С когда весь девелопемент в 1С сводится к настройке типового решения

      Про это все рассказано в разделе про модульность.


      1. Mutuhan
        02.10.2019 13:47

        В 150 раз. Тезис простой — ORM в 1С есть (пережиток 7.7 или нет не важно). Он убогий, и 1С решили от него отказаться и правильно сделали (тут конечно ORM'ки не согласятся, но имеют право). Вы же просто подтвердили, что я написал.


        Тут разговор был о том, что автор не до конца понимает различие между объектом и ссылкой 1С а не ОРМ. Цитата В 1С объект читается всегда целиком, в том числе с табличными частями, но не более того (без каких либо связанных данных). Как следствие, данных читается… либо слишком много — если надо получить только одно поле (реквизит). Зачем создавать объект в 1С когда требуется прочитать один реквизит? Объясните мне что тут хотел донести до читателя автор, ведь с точки зрения 1С это абсолютная тупость. Этот момент у меня не укладывается в голове, хотя опыт использования SQLAlchemy у меня есть.


        1. Magister7
          02.10.2019 13:52

          Зачем создавать объект в 1С когда требуется прочитать один реквизит?

          Подозреваю что автор больше акцентировал на том, что нельзя прочитать часть объекта в переменную типа "ДокументОбъект". Ну вот не нужна мне табличная часть в данный момент, например.
          На самом деле прочитать можно — запросом в структуру/соответствие/таблицу например. Только это уже не ДокументОбъект, а просто набор переменных.


          Хотя, ради справедливости, в применении к 1С необходимость такого сомнительна.


          1. Neikist
            02.10.2019 14:05

            На прошлой работе сильно страдали, был один «божественный» справочник, для оптимизаций чтения и записи приходилось кучу данных хранить в регистрах вместо табличных частей или реквизитов. Плюс с этим справочником нередко была нужна массовая работа с элементами, и запись пары десятков тысяч элементов при работе пользователей в базе была тем еще «удовольствием».


            1. Magister7
              02.10.2019 14:08

              Массовая работа — это да, отдельная история. Не зря вон разные удаления помеченных напрямую запросами SQL люди пишут.
              В вашей ситуации наверняка помогли бы "UPDATE xxx SET yyy=zzz", но этого в 1С нету )


              1. Neikist
                02.10.2019 14:12

                Увы, не помогло бы. Все таки нередко нужно чтобы триггеры срабатывали и при массовых апдейтах (хотя в 90% все равно Объект.ДополнительныеСвойства.Вставить(«ОтключитьПроверки») или подобное писали).
                Адекватный механизм тут построить сложно, но можно, просто это от 1с много работы потребовало бы.


                1. Mutuhan
                  02.10.2019 14:52

                  Вот тут и идет самая главная путаница:

                  Объект.ДополнительныеСвойства.Вставить(«ОтключитьПроверки»)

                  это вопрос не к платформе, а к разработчикам прикладного решения, а еще раньше к консультантам, которые данное прикладное решение выбрали. Если на 1С написать хрень собачью, то будет хрень собачья написанная на 1С. Если хрень собачью написать на C#, то будет хрень собачья написанная на си шарп. Что будет если написать хрень собачью на lsFusion никто не знает, возможно это будет радуга с розовыми единорогами… ведь никто никогда этого не делал


                  1. Neikist
                    02.10.2019 15:00

                    Начал было писать что вы неверно поняли посыл в контексте обсуждения (частичного vs полного чтения объекта aka частичного vs полного срабатывания триггеров), но потом стало лениво слишком, да и не уверен что друг друга понять сможем.


          1. Mutuhan
            02.10.2019 14:30

            Если сравнивать 8.3 с той же самой 8.0 — то разница глобальная. Возможно в 8.4 будут те же самые представления и передача функций в качестве параметров. Другой вопрос — зачем это нужно? Есть задачи с которыми 1С справляется на УРА оставляя позади конкурентов (в России Бухгалтерия Предприятия 3.0 это отраслевой стандарт де факто), есть задачи где эску лучше не использовать (как-то видел интернет магазин на http сервисе). В конкретно каждом случае нужны конкретные решения.

            П. С. согласен что замыканий на самом деле не хватает, но я в принципе изначально об этом написал — асинхронности в 1С мало. Автор статьи же заявляет что отказ от синхронности как один из недостатков


            1. Neikist
              02.10.2019 14:36

              Я так понимаю скорее не отказ от синхронности как недостаток, а невозможность написания асинхронного кода как синхронного.
              async/await какие нибудь или как корутины в котлине. Впрочем уверенности что автор тут имел в виду у меня нет, так что настаивать не буду.


    1. Magister7
      02.10.2019 13:45

      Вы, похоже, хорошо знаете 1С, но не так хорошо другие технологии.
      Пара замечаний:
      1) Представления не помешали бы, хотя без них тоже, конечно, можно. Как можно было в одной из первых УПП на 8.0 когда все модули глобальные (если память не подводит), или в 7.7 с только одним глобальным модулем :) Ну или без модулей менеджеров объектов — тоже можно было ведь;
      2) Замыканий на самом деле очень не хватает. Без них приходится делать портянки из функций, в итоге если использование веб-клиента не требуется, то многие просто забивают на асинхронность.


  1. telnov
    02.10.2019 11:42

    Странная и длинная статья. Часть критики абсолютно верная и имеет место быть. Однако… Рассматривать качества системы направленной на пользователя с точки зрения инженера это неверно. Ну например с технической точки зрения ГАЗ-66 это шедевр. Если случится ядерный апокалипсис, то ездить будут только такие машины. Надежные и абсолютно ремонтопригодные. Для того чтоб разобрать и собрать такую нужен только стандартный набор инструментов, который идет в комплекте с автомобилем. Однако с точки зрения пользователя это «адова тарантайка». Так вот с точки зрения пользователя 1С это лучшее решение на рынке. Почему?
    1. Дешево. Я б даже сказал очень дёшево. Базовую версию любой типовой конфигурации можно купить за копейки и сразу начать вести учет в программе. УНФ в этом плане просто великолепна. И не нужно ничего программировать. И даже лицензии уровня ПРОФ и КОРП стоят по сравнению с MS Dynamics и SAP очень дёшево.
    2. Программирование нужно только когда владелец бизнеса развивает свой бизнес. И даже в этом случае это не всегда нужно. Спектр уже предлагаемых готовых решений перекрывает практически все отрасли. И это основное преимущество 1С и даже на крупных проектах редко пишется что то с нуля.
    3. Конечный клиент никогда не выберет учетную систему по принципу «Чтоб было удобно программисту работать». А выбор бизнес системы всегда за конечным клиентом. Поэтому доводы данной статьи они ничтожны.
    4. И даже если рассматривать критику по существу, то собственно часть доводов статьи у меня как у действующего программиста 1С вызывает закономерный вопрос. Да это так, но нафига это вообще нужно в 1С? Часть… Ну да, это недостаток, но в общем то не мешает работать. А часть это откровенная чушь. Ну например то, что 1С не умеет работать с git. Ну во первых если есть прямые руки и прям такая необходимость, то можно заставить работать его даже с конфигуратором. EDT работает с git из коробки.


    1. CrushBy
      02.10.2019 11:47

      Не очень понимаю, зачем Вы сравниваете конфигурацию с платформой? Да, у 1С — плюс, что есть много готовых решений. Но это не отменяет недостатков платформы, описанных в статье.

      EDT работает с git из коробки.

      А подскажите, как Вы собираетесь мерджить сгенерированные при помощи визуального программирования XML файлы?


      1. pauls0
        02.10.2019 13:03

        А подскажите, как Вы собираетесь мерджить сгенерированные при помощи визуального программирования XML файлы?


        это вообще вопрос вопросов…

        ибо декларация управляемой формы в 1с это мягко говоря не xaml

        но тут 1С — как обычно «доступно и всерьез»

        сделала нечто похожее на настоящее, но не работающее. главное задекларировать что «у нас тоже»


        1. CrushBy
          02.10.2019 13:49

          Так в том и проблема, что 1С многие вещи делает по принципу, чтобы было как у всех. Но на практике получается велосипед как на картинке.


          1. pauls0
            02.10.2019 13:53

            это проблема потребителя — ему эти тонкости не интересны. ему главное обеспечить себе прикрытие от фискальных органов

            это проблема разработчика — но ему не привыкать. а которым скд последний мозг отбила еще и радостно хавают то, что им в корыто выливают


            1. CrushBy
              02.10.2019 14:00

              Люди когда-то и на ассемблере писали. Но все меняется и используемые платформы тоже. Основной посыл, что не стоит начинать нетленки писать на 1С, а лучше брать что-то лучше.


              1. pauls0
                02.10.2019 14:16

                лучше/хуже познается в сравнении

                а кто в среде 1с имеет опыт выходящий за ее пределы? по большому счету единицы

                кому вы там будете рассказывать про паттерны? про концепции типа solid?


                1. CrushBy
                  02.10.2019 14:22

                  Мы — никому. Как раз в lsFusion сейчас порог вхождения гораздо ниже, чем в 1С и там ничего не надо знать. Разработка на 8.3 с диким набором абстракций по сложности уже сопоставима с JS разработкой. Видели на мисте темы типа «Буду использовать только ОФ». Это не спроста.


                  1. skrimafonolog
                    02.10.2019 14:34

                    Мы — никому. Как раз в lsFusion сейчас порог вхождения гораздо ниже, чем в 1С и там ничего не надо знать. Разработка на 8.3 с диким набором абстракций по сложности уже сопоставима с JS разработкой.


                    Вы это серьезно?
                    1С одна из платформ с низким порогом входа, с которыми мне довелось поработать за последние 30 лет. Её же не нужно всю досканально изучить прежде чем начать работать. Базовых используемых в 95% случаев абстракций очень мало.

                    Если у вас еще проще — то тут уже начинают действовать закономерности: чем гибче и универсальнее платформа — тем больше нужно знаний, тем более специализированный специалист нужен. Если у вас специалист не нужен, то, есть существенные ограничения по функционалу, по универсальности применения.

                    А о каком тогда сравнении с 1С может идти речь?
                    Вы на разных сегментах рынка работаете.

                    Так и я могу сказать, что моя написанная на коленке за 2 дня утилита работает быстрее, чем 1С и lsFusion на этой задаче. Но то, что кроме этой задачи она больше ничего у меня выполнять не умеет — скромно промолчу. А написать подобную утилиту может любой программист средней руки.


                    1. CrushBy
                      02.10.2019 15:01

                      1С одна из платформ с низким порогом входа, с которыми мне довелось поработать за последние 30 лет.

                      Попробуйте lsFusion и удивитесь. Возьмите хотя бы примеры из статей и увидите насколько проще.


                  1. pauls0
                    02.10.2019 14:42

                    Видели на мисте темы типа «Буду использовать только ОФ»

                    видел. автора макнули в коричневое

                    причем люди настолько некомпетентные в 1с что только диву даешься — им видите ли привязки жить не дают… ну и сама 1с — вместо допилки ОФ — до вменяемого уровня сделали какую-то пародию на xaml. особенно доставляли первые версии — где надо было для построения формы сложнее «2+2» натыкивать в группы невидимые надписи, сплиттеры и прочие костыли

                    Разработка на 8.3 с диким набором абстракций


                    это особо никого не парит. что концепцию надо «чистить»… убрать независимые регистры сведений — слить его со справочником, а зависимые от регистратора регистры сведений и накоплений свести в одну сущность… выпиливать объекты которые никому не нужны типа «анализ данных»… что-то сделать с регистром бухгалтерии — чтобы он не был таким тормозным… linq ввести чтобы убрать простыни кода по выборкам из коллекций. и еще кучу всего

                    но проще на базе этого франкинштейна с родовыми травмами еще из 7.7 пытаться лепить «корпоративные продукты» и пихать их всем


                    1. CrushBy
                      02.10.2019 15:00

                      Если все это сделать, то и получится lsFusion.


              1. gennayo
                02.10.2019 14:27

                Да не пишет никто нетленки под 1С, если это изначально не контора, связанная с 1С/имеющая штат программистов 1С.


      1. telnov
        02.10.2019 20:14

        Не очень понимаю, зачем Вы сравниваете конфигурацию с платформой? Да, у 1С — плюс, что есть много готовых решений. Но это не отменяет недостатков платформы, описанных в статье.

        Нет не отменяет. Но и перечисленные недостатки никак не влияют на качество прикладных решений. Я говорю про то что конечному пользователю вообще по барабану ваши «недостатки платформы». Пользователя интересует продукт в целом. И платформа и конфигурация. Он не рассматривает эти вещи отдельно. Да и мне как разработчику эти ваши (перечисленные в статье) «недостатки платформы» тоже по барабану, т.к. я не решаю задачу как написать «изящный код». Или задачу «как мне рассчитать сферического коня в вакууме с использованием OpenGL при помощи 1С». Я решаю конкретные прикладные задачи клиента в области управленческого и бухгалтерского учёта, вот именно на это заточена платформа 1С и с этой задачей она прекрасно справляется и перечисленные «недостатки» никак на это не влияют. И тем более никак не будет влиять это на конечного клиента.


        1. CrushBy
          02.10.2019 20:24

          Да и мне как разработчику эти ваши (перечисленные в статье) «недостатки платформы» тоже по барабану, т.к. я не решаю задачу как написать «изящный код».

          Только то же самое можно на лучшей платформе можно делать быстрее, дешевле и качественнее. Но если у вас почасовая оплата, то вам конечно все равно. А это проблемы заказчика.

          вот именно на это заточена платформа 1С и с этой задачей она прекрасно справляется и перечисленные «недостатки» никак на это не влияют

          Мы живем в самой лучше стране в мире. И все остальные страны нам завидуют.


          1. telnov
            03.10.2019 09:45

            Только то же самое можно на лучшей платформе можно делать быстрее, дешевле и качественнее. Но если у вас почасовая оплата, то вам конечно все равно. А это проблемы заказчика.

            С чего Вы взяли что будет быстрей и качественней? Нет не будет или будет, но несущественно. Дешевизна, качество и скорость проекта по внедрению системы учёта очень слабо зависят выбранной платформы. Проблематика внедрения ERP систем гораздо шире чем техническая составляющая отдельно взятой платформы.
            Мы живем в самой лучше стране в мире. И все остальные страны нам завидуют.

            А это вы зачем написали? Вам не нравится так не живите. Вас никто не заставляет.


            1. Veidt Автор
              03.10.2019 10:33

              С чего Вы взяли что будет быстрей и качественней? Нет не будет или будет, но несущественно. Дешевизна, качество и скорость проекта по внедрению системы учёта очень слабо зависят выбранной платформы.

              Это все равно что говорить, что скорость прохождения трассы не зависит от автомобиля. На тракторе вы никогда гонку не выиграете.

              lsFusion фундаментально отличается от всего что есть на рынке. Это грубо говоря как сравнивать эпоху до SQL, и после SQL (а по уровню новых идей lsFusion возможно даже превосходит SQL). Хотя уверен, что даже когда появился SQL говорили:
              Проблематика внедрения ERP систем гораздо шире чем техническая составляющая отдельно взятой платформы.


              1. telnov
                03.10.2019 13:53

                Это все равно что говорить, что скорость прохождения трассы не зависит от автомобиля. На тракторе вы никогда гонку не выиграете.

                Не удачное сравнение. Скорость внедрения решения не зависит от скорости разработки. Чем меньше объем разработки тем лучше это решение. И тут не будет разницы на сколько быстро ведется разработка. 1С при внедрении на начальном этапе позволяет вообще обходится без разработки или с минимальным объёмом.
                lsFusion фундаментально отличается от всего что есть на рынке. Это грубо говоря как сравнивать эпоху до SQL, и после SQL (а по уровню новых идей lsFusion возможно даже превосходит SQL). Хотя уверен, что даже когда появился SQL говорили:

                Я с этим и не спорю. Вполне себе возможно. 1С это не самая лучшая с технической точки зрения платформа. Однако… Еще раз повторяю конечного клиента очень слабо интересует технические подробности системы учёта. Гораздо важней правильность ведения учёта. А учёт можно вести и в бумажных журналах.


                1. Veidt Автор
                  03.10.2019 15:36

                  Не удачное сравнение. Скорость внедрения решения не зависит от скорости разработки. Чем меньше объем разработки тем лучше это решение. И тут не будет разницы на сколько быстро ведется разработка. 1С при внедрении на начальном этапе позволяет вообще обходится без разработки или с минимальным объёмом.

                  Не совсем понял. Доработки как раз нужны именно на начальном этапе. И скорость внедрения очень зависит от скорости этих доработок.

                  Скажем вспоминая последние 5 проектов, в том же УТ нужно было бы очень много чего допиливать. То есть как-то их процессы может и можно было бы закрыть, но именно что как-то (через одно место), на что клиенты были просто категорически несогласны и просто разорвали бы договора.
                  Я с этим и не спорю. Вполне себе возможно. 1С это не самая лучшая с технической точки зрения платформа. Однако… Еще раз повторяю конечного клиента очень слабо интересует технические подробности системы учёта. Гораздо важней правильность ведения учёта. А учёт можно вести и в бумажных журналах.

                  Нет никакой правильности, если мы не про бух и налоговый учет говорим. Клиент всегда прав. А если не прав смотри пункт 1.


    1. NitroJunkie
      02.10.2019 12:27

      1. Дешево. Я б даже сказал очень дёшево. Базовую версию любой типовой конфигурации можно купить за копейки и сразу начать вести учет в программе. УНФ в этом плане просто великолепна. И не нужно ничего программировать. И даже лицензии уровня ПРОФ и КОРП стоят по сравнению с MS Dynamics и SAP очень дёшево.

      Вы же понимаете, что лицензии это малая часть стоимости владения. Самое дорогое это доработки и внедрение под специфику. А «пришло-ушло-осталось» и так уже у всех есть.
      2. Программирование нужно только когда владелец бизнеса развивает свой бизнес. И даже в этом случае это не всегда нужно. Спектр уже предлагаемых готовых решений перекрывает практически все отрасли. И это основное преимущество 1С и даже на крупных проектах редко пишется что то с нуля.

      А то что вы пишете важно только в условиях развивающегося рынка. А он сейчас стагнирует и консолидируется. Коробки уже никому не нужны.
      3. Конечный клиент никогда не выберет учетную систему по принципу «Чтоб было удобно программисту работать». А выбор бизнес системы всегда за конечным клиентом. Поэтому доводы данной статьи они ничтожны.

      Клиент будет выбирать по стоимости и эффективности внедрения. То есть сколько ему владение будет стоить и насколько эффективно он сможет вести в ней бизнес и впоследствии менять это решение вместе с изменением процессов своего бизнеса.
      Ну например то, что 1С не умеет работать с git. Ну во первых если есть прямые руки и прям такая необходимость, то можно заставить работать его даже с конфигуратором. EDT работает с git из коробки.

      Пробовали хоть раз?


      1. telnov
        02.10.2019 20:41

        Вы же понимаете, что лицензии это малая часть стоимости владения. Самое дорогое это доработки и внедрение под специфику. А «пришло-ушло-осталось» и так уже у всех есть.

        Да это малая часть стоимости владения, но и всё остальное будет вполне сопоставимо по цене. По моей уже достаточно обширной практике 9 из 10 клиентам, желающим доработать 1С, на самом деле не нужна никакая доработка. Он просто не умеет пользоваться штатным функционалом системы. А бывает и так, что слабо представляет что такое учёт и зачем он нужен. И по итогам в своей деятельности мы сталкиваемся с монструозными системами, в которые вложили миллионы просто из за того что клиент просто не желает менять свои сложившиеся техпроцессы даже если ему на пальцах доказываешь, что так не правильно и только по этому начинается цикл разработки 1С.
        А то что вы пишете важно только в условиях развивающегося рынка. А он сейчас стагнирует и консолидируется. Коробки уже никому не нужны.

        Вот тут я соглашусь полностью. И дополню. Просто программирование в 1С тоже на*** никому не упало. Клиенту сейчас ненужен программист 1С. Ему не нужна коробка. И тем более не нужен Ваш «изящный код» или «широкий функционал платформы». Клиенту нужно решение вопросов по учёту. Клиент хочет по итогам видеть прибыль и себестоимость. Клиент хочет видеть снижение налоговой нагрузки и повышение эффективности производства. А это уже прикладные задачи на стыке программирования и консалтинга.
        Клиент будет выбирать по стоимости и эффективности внедрения. То есть сколько ему владение будет стоить и насколько эффективно он сможет вести в ней бизнес и впоследствии менять это решение вместе с изменением процессов своего бизнеса.

        Несомненно. 1С — решение более чем конкурентоспособное в этом отношении. Вопрос только в правильности подхода к данному вопросу самого клиента и стоимость владения тут будет зависеть больше даже от принятых управленческих решений. Учет можно вести и в бумажных журналах. И в определенных «запущенных» случаях это будет дешевле и эффективней чем в 1С или SAP.
        Пробовали хоть раз?

        Пробовал, эксперимент прошел успешно, но пока EDT не использую. Конфигуратор + сетевое хранилище конфигураций. Будет время буду дальше функционал EDT изучать.


        1. Veidt Автор
          02.10.2019 22:03

          . Клиенту нужно решение вопросов по учёту. Клиент хочет по итогам видеть прибыль и себестоимость. Клиент хочет видеть снижение налоговой нагрузки и повышение эффективности производства. А это уже прикладные задачи на стыке программирования и консалтинга.

          А еще клиент хочет гибкость и умение системы изменятся вместе с ним. Любой бизнес это всегда пробы и ошибки, а также свои ноу хау. Поэтому сейчас лучше всего продается, мы сделаем все что вы хотите, быстро и дешево. А потом доработки вам будут стоить 100к рублей в месяц, а задачи будут решаться как из пулемета.
          Несомненно. 1С — решение более чем конкурентоспособное в этом отношении.

          Ну сейчас на рынке FMCG розницы в Беларуси 1С нам не конкурент от слова вообще. Посмотрим что будет в России. Типовых для этого сегмента у 1С нет.


          1. telnov
            03.10.2019 13:35

            А еще клиент хочет гибкость и умение системы изменятся вместе с ним. Любой бизнес это всегда пробы и ошибки, а также свои ноу хау. Поэтому сейчас лучше всего продается, мы сделаем все что вы хотите, быстро и дешево. А потом доработки вам будут стоить 100к рублей в месяц, а задачи будут решаться как из пулемета.

            Неблагодарное это дело угадывать желания других людей. По своему опыту скажу, что чаще всего клиент вообще не хочет никаких изменений в учётной системе, все изменения в нормальной ситуации они вынужденные. Например изменилось законодательство. Или появился крупный оптовик со своей системой и выдвинул требования к учёту. А ошибки и пробы они клиенту всегда денег стоят.
            Ну сейчас на рынке FMCG розницы в Беларуси 1С нам не конкурент от слова вообще. Посмотрим что будет в России. Типовых для этого сегмента у 1С нет.

            Вы плохо знаете конфигурации 1С. Уже давно всё есть. Есть 1С: Розница. Вторая версия правда мало пригодна для касс супермаркетов, однако есть например решение от партнёра 1С «Далион». Фишка 1С как раз таки в том, что всё придумано до нас. Догнать 1С в этом отношении будет очень тяжело любой новой платформе.


            1. Veidt Автор
              03.10.2019 15:29

              По своему опыту скажу, что чаще всего клиент вообще не хочет никаких изменений в учётной системе, все изменения в нормальной ситуации они вынужденные

              А я по своему опыту скажу, что наоборот каждый относительно крупный клиент (>=1000 сотрудников) выдвигает свои требования, часто противоречивые другим клиентам и это нормально. Потому как каждый бизнес работает по своим бизнес-процессам, и когда приходишь и говоришь заказчику, что он неправильно работает, он всегда отвечает: я построил этот бизнес сам с нуля методом проб и ошибок, и мне лучше знать как он должен работать. И кстати по факту оказывается прав.
              Вы плохо знаете конфигурации 1С. Уже давно всё есть. Есть 1С: Розница. Вторая версия правда мало пригодна для касс супермаркетов, однако есть например решение от партнёра 1С «Далион». Фишка 1С как раз таки в том, что всё придумано до нас. Догнать 1С в этом отношении будет очень тяжело любой новой платформе.

              Это вы мне кажется их плохо знаете. Там нету огромного количества модулей для FMCG сетей, скажем всякие ассортиментные матрицы, планограммы и т.п. И вообще плохо подходит под работу с ассортиментами в 100 тысяч товаров.

              1С Розница это для фирменной торговли в лучшем случае. Я во всяком случае не знаю ни одной сети супермаркетов на 1С Розница, а я знаю весь местный рынок к примеру.


              1. skrimafonolog
                03.10.2019 15:44

                Там нету огромного количества модулей для FMCG сетей, скажем всякие ассортиментные матрицы, планограммы и т.п.


                Вы преувеличивайте значимость наличия подобных модулей.
                Эти вещи делаются в 1С на заказ под конкретного клиента недолго и вполне за разумные деньги.

                Более того — готовые модуля не спасут вам ситуацию, ведь вы сами чуть выше говорите, что нормально подстраивать ПО под конкретного клиента:

                А я по своему опыту скажу, что наоборот каждый относительно крупный клиент (>=1000 сотрудников) выдвигает свои требования, часто противоречивые другим клиентам и это нормально. Потому как каждый бизнес работает по своим бизнес-процессам, и когда приходишь и говоришь заказчику, что он неправильно работает, он всегда отвечает: я построил этот бизнес сам с нуля методом проб и ошибок, и мне лучше знать как он должен работать. И кстати по факту оказывается прав.


                Но когда ровно то же самое говорится про 1С — это плохо.
                Когда ровно то же самое про вашу систему — это хорошо?

                Я во всяком случае не знаю ни одной сети супермаркетов на 1С Розница, а я знаю весь местный рынок к примеру.


                Потому что это вовсе не так делается, а примерно так:

                Вся сложная логика аналитика и первичные документы ведутся в 1С: Управление Торговлей.
                А в зале на кассе стоит узкоспециализированное ПО, довольно простое, функциональная 1С там не нужна.

                А 1С: Розница — это для небольших предприятий.


                1. Veidt Автор
                  03.10.2019 15:50

                  Вы преувеличивайте значимость наличия подобных модулей.
                  Эти вещи делаются в 1С на заказ под конкретного клиента недолго и вполне за разумные деньги.

                  Более того — готовые модуля не спасут вам ситуацию, ведь вы сами чуть выше говорите, что нормально подстраивать ПО под конкретного клиента:

                  1С как платформа для разработки / доработок очень неудобна (смотрите верхние 21 проблему и это еще далеко не все). Поэтому 1С спасают только готовые решения, и при отсутствии готовых модулей внедрять что-то на 1С тот еще мазохизм. Во всяком случае по сравнению с lsFusion.
                  Но когда ровно то же самое говорится про 1С — это плохо.
                  Когда ровно то же самое про вашу систему — это хорошо?

                  Я то как раз утверждаю, что решение — это полуфабрикат. Небольшая часть проекта. Главное это доработка / внедрение и вот тут на первый план выходит платформа, с которой как видно из статьи у 1С все очень плохо.


                  1. telnov
                    03.10.2019 16:13

                    1С как платформа для разработки / доработок очень неудобна (смотрите верхние 21 проблему и это еще далеко не все). Поэтому 1С спасают только готовые решения, и при отсутствии готовых модулей внедрять что-то на 1С тот еще мазохизм. Во всяком случае по сравнению с lsFusion.

                    Удобно это понятие исключительно субъективное, для кого то Linux это не удобно. А для меня всё вполне удобно. Кто то тоже считает что Linux это мазохизм. А мне норм.
                    Я то как раз утверждаю, что решение — это полуфабрикат. Небольшая часть проекта. Главное это доработка / внедрение и вот тут на первый план выходит платформа, с которой как видно из статьи у 1С все очень плохо.

                    Вот именно, что для 1С доработка это не главное. Установил и с первой минуты можно вести учет, а доработку под специфику можно оставить на потом.


                    1. Veidt Автор
                      03.10.2019 16:31

                      А мне норм

                      Ручной труд тоже многим норм. Но он медленнее и неэффективнее конвеера.
                      Установил и с первой минуты можно вести учет, а доработку под специфику можно оставить на потом

                      Странные у вас клиенты. Обычно «вы пока так поработайте, а потом доработаем» не прокатывает. Потому что все знают «нет ничего более постоянного чем временное». И все до внедрения ждут пока будет сделано именно так как они хотят (сейчас как правило все проекты выполняются поверх существующих, сейчас все же не 2000 год, поэтому они могут подождать)


                      1. skrimafonolog
                        04.10.2019 06:49

                        Установил и с первой минуты можно вести учет, а доработку под специфику можно оставить на потом


                        Странные у вас клиенты. Обычно «вы пока так поработайте, а потом доработаем» не прокатывает.


                        Потому что они не так говорят, как вы думаете.

                        Типично: заказчик перед внедрением смотрят типовую 1С и дает более-менее чёткие пожелания — а что бы хотели еще добавить.

                        Имея перед глазами уже имеющийся продукт ему проще сформулировать пожелания — их же куда как меньше этих пожеланий получается. Имеющаяся часть-то (большая) заказчика устраивает.


                        1. Veidt Автор
                          04.10.2019 10:38

                          Я вообще на это отвечал:

                          Установил и с первой минуты можно вести учет, а доработку под специфику можно оставить на потом.


                          1. skrimafonolog
                            04.10.2019 15:59

                            Я вообще на это отвечал:
                            Установил и с первой минуты можно вести учет, а доработку под специфику можно оставить на потом.


                            А я вам отвечаю, что можно и так и так. Законченность решения 1С позволяет внедрять сразу.

                            Зависит от конкретной ситуации.

                            И те и те клиенты — отнюдь не странные.


                  1. skrimafonolog
                    04.10.2019 06:00

                    1С как платформа для разработки / доработок очень неудобна


                    Вот только не неудобна.
                    Понятно, что вам, как привыкшему к другой платформе так кажется.
                    Но удобство — как раз огромный жирный плюс 1С.


                    1. Neikist
                      04.10.2019 12:22

                      Я с 1с начинал и проработал 4 года (в основном с 8.3) и да, считаю что неудобна.


                  1. skrimafonolog
                    04.10.2019 08:27

                    1С как платформа для разработки / доработок очень неудобна (смотрите верхние 21 проблему и это еще далеко не все). Поэтому 1С спасают только готовые решения, и при отсутствии готовых модулей внедрять что-то на 1С тот еще мазохизм. Во всяком случае по сравнению с lsFusion.


                    С одной стороны вы пишете статью, ориентируясь на технический аспект, что может убедить технических специалистов.

                    С другой стороны упираете на числовыми показателями — как это делают маркетологи в процессе облапошывания обычных пользователей, что далеки от технической составляющей.

                    21 — это просто число.
                    Реальная значимость конкретных разных недостатков — разная, вплоть до никакого.

                    Вы же сами и пишете про ваш 1 как минимум недостаток — отсутствие типовых решений, вы полуфабрикат предлагаете, вашими же словами.

                    А это — решение из 1990-х годов, модное тогда на заре массовой автоматизации. Таких тогда было много.

                    Не спорю, что кому-то оно и сейчас подойдет. Но таких заказчиков мизер.

                    При этом пытаетесь противопоставлять себя 1С, ориентированную на массовый рынок.

                    В массовом же рынке сейчас можно наблюдать тенденции прямо противоположенные тем концепциям, на которые вы упираете в своем решении — массовый рынок это типовые решния. И даже уже не только и не просто типовые — мир идет в SaaS, еще более унифицированный (и это не только с 1С и не только в РФ).

                    Так что, если поглядеть под этим углом, то получается, что один ваш недостаток по уровню вредности в продажах продукта перевешивает все недостатки конкурента.

                    Исключения, когда ваш продукт целесообразнее, есть — но их крайне мало. Самый большой рынок, подходящий под ваш продукт остался там, позади в 1990-годы. Выйдя ваш продукт тогда, — да, вы захватили бы все крупные и средние предприятия РФ.

                    Но сейчас требования к прикладному ИТ для автоматизации бизнеса уже изменились. Чисто технические аспекты стали менее важными. Вперед вышли аспекты более близкие к бизнесу. А на рынке, что держит 1С, вы явно не конкурент им даже по базовым концепциям.

                    Я так понимаю, что ваше противопоставление 1С — все то же маркетинговый ход, что и про 21 недостаток? Пользуемся популярностью мнимого конкурента, чтобы попиариться?


                    1. Veidt Автор
                      04.10.2019 10:37

                      А это — решение из 1990-х годов, модное тогда на заре массовой автоматизации. Таких тогда было много.

                      В массовом же рынке сейчас можно наблюдать тенденции прямо противоположенные тем концепциям, на которые вы упираете в своем решении — массовый рынок это типовые решния. И даже уже не только и не просто типовые — мир идет в SaaS, еще более унифицированный (и это не только с 1С и не только в РФ).


                      Это вы видимо плохо понимаете текущий рынок. У всех уже все как-то автоматизировано. И когда вы к ним придете, вам придется делать, а) так как у них уже сделано, б) то что они хотят чтобы у них сделано в) то про что они еще не знают, но должно быть сделано. И тут платформа это самое главное.

                      Исключения, когда ваш продукт целесообразнее, есть — но их крайне мало. Самый большой рынок, подходящий под ваш продукт остался там, позади в 1990-годы. Выйдя ваш продукт тогда, — да, вы захватили бы все крупные и средние предприятия РФ.

                      Как раз тогда был рынок коробок. Никого не интересовала кастомизация, так как ни у кого ничего не было автоматизировано, и можно было продавать/внедрять что угодно. Сейчас рынок сложных проектных решений. Даже САП заявляет что 60% проекта это его доработка. И здесь опять-таки как раз нужна платформа.


                      1. skrimafonolog
                        04.10.2019 16:07

                        Исключения, когда ваш продукт целесообразнее, есть — но их крайне мало. Самый большой рынок, подходящий под ваш продукт остался там, позади в 1990-годы. Выйдя ваш продукт тогда, — да, вы захватили бы все крупные и средние предприятия РФ.


                        Как раз тогда был рынок коробок. Никого не интересовала кастомизация, так как ни у кого ничего не было автоматизировано, и можно было продавать/внедрять что угодно. Сейчас рынок сложных проектных решений. Даже САП заявляет что 60% проекта это его доработка. И здесь опять-таки как раз нужна платформа.


                        Коробки в 1990-е годы?
                        Вы серьезно?


                        Иностранные коробки были только для крупняка. Дорогие.
                        Наших еще не было.

                        Тогда на рынке занимаемом 1С вообще ничего не было.
                        Тогда коробки для этого рынка только-только зарождались.

                        И писать под себя предприятию которое можете себе это позволить было нормальным (а зарплаты тогда были никакие — позволить нанять программиста могли многие)

                        Я потому и говорю, что тогда, выйдя со своим полуфабрикатом, вы были бы в рынке. Сейчас уже не так всё.

                        Именно что выбранная вами область и сужается в количестве требуемых внедрений. Из плюсов — требуемая сложность внедрений растет, значит, денег не меньше из-за уменьшения количества требуемых внедрений.


                    1. kryvichh
                      04.10.2019 11:01

                      В финале всё равно всё упирается в деньги. Допустим я — технический специалист, изучивший 1С и lsFusion и одинаково владеющий этими инструментами (это не так, но допустим!). И есть заказчик, которому что-то надо автоматизировать в своём бизнесе (оставим пока бухгалтерию и налоговый учёт в стороне, других задач в бизнесе — вагон и маленькая тележка). И у него есть определённая сумма на эту задачу.

                      Я могу написать решение на 1С, взяв готовую конфигурацию и допилив её с учётом требований. Либо возьму lsFusion + готовые модули на GitHub, и тоже допилив их с учётом требований. Клиенту всё равно, что под капотом, главное чтобы работало. Правильно?

                      А теперь считаем деньги. В случае 1) клиент должен купить платформу 1С, конфигурацию на N рабочих мест, возможно MS SQL. Всё что останется от бюджета, выделенного на разработку — моё. И 2) клиент не должен ничего покупать. Я поставлю ему PostgreSQL, JVM, и свою разработку. Все деньги — мои. Внимание вопрос: какого хрена я должен делиться с 1С своими деньгами?


                      1. IamAlexy
                        04.10.2019 11:16

                        одна из самых раздражающий ошибок «технарей» — это когда они считают хозяйские деньги… хотя у них задача не деньги считать а бизнес-кейсы реализовывать по возможности с прицелом на потенциальное развитие.

                        есть такая поговорка «кроилово — ведет к попадалову»

                        и да, схема «все что останется от бюджета -мое» не работает…


                        1. kryvichh
                          04.10.2019 11:30

                          Почему вы считаете что решение, основанное не на 1С, не позволяет в последствии развиваться? У lsFusion есть какие-то скрытые проблемы, о которых мы не знаем?


                          1. IamAlexy
                            04.10.2019 12:08

                            Разработчики lsFusion в статье например настаивают что асинхронность ненужна и 1С плохо сделала отказавшись от модальности и синхронности…

                            гугль например с 2014 от этого этой модальности отказался…

                            понятно что когда разработчики lsFusion разовьются до того что у них появится кейс с требованием асихнронности — они напишут стать о том как же хорошо в асинхроннсти смотрите какая у нас классная платформа… но 1С это проходила 6 лет назад…


                            1. Neikist
                              04.10.2019 12:27

                              Посмотрите как хорошо сделана асинхронность в дарте (кстати, однопоточность ограничена как в 1с, поток один, но есть изоляты (ака фоновые задания)), прям любо дорого посмотреть в отличии от 1с. Или на корутины посмотрите в котлине том же — вообще асинхронный код от синхронного не отличить.


                        1. kryvichh
                          04.10.2019 14:15

                          И насчёт денег… OK допустим эту задачу на lsFusion я сделаю за 2 месяца, а на 1С — за месяц, в 2 раза быстрее срока который клиент готов был ждать, за счёт более развитой платформы, готовых решений. Но при этом в 1-м случае я заработаю 100% денег, а во 2-м — 20%. Ну, может клиент даст ещё 5% сверху за скорость, но Нуралиев же даже руку не пожмёт! Он вообще не знает, что я существую, и приношу ему монеты в кубышку. И за что мне потом 3 месяца кормить детей, которые в 1-м случае были бы оплачены?


                          1. IamAlexy
                            04.10.2019 14:25

                            Но при этом в 1-м случае я заработаю 100% денег, а во 2-м — 20%.


                            а вы заработайте в первом случает 100% денег а во втором 300% где будет 100% за этот проект, еще 100% за следующий проект который вы в следующий месяц успеете сделать и еще 100% надбавка за скорость, качество и предоставляемые функциональные возможности платформой…


                            1. kryvichh
                              04.10.2019 14:50

                              Если бы всё было так просто. Клиенты с многочисленными задачами валяются прямо на дороге, идёшь и подбираешь самых жирных. И рядом никто локтями не толкается… :)


                              1. IamAlexy
                                04.10.2019 15:05

                                Вам никто не мешает сроки свои устанавливать же — ну делайте задачу на 1С не 1 месяц а те же 2 месяца…
                                просто больше гуляйте, больше на хабре сидите и больше пива пейте… заказчик же за 2 месяца платит :)

                                просто 1С вам дает варианты: сделать за 1 месяц быстрее лучше качественнее и с большим количеством дополнительных плюшек и уйти на другой проект/уехать в отпуск, или делать те же два месяца без дедлайнов не парясь забивая на все болт…


                                1. kryvichh
                                  04.10.2019 15:14

                                  Но ведь денег то я заработаю всё равно меньше в разы. Бюджет то у клиента один при любом варианте. Тут надо понять 1 важную вещь: если у тебя (у твоего бизнеса) хватает компетенции сделать всё одному, никому не откатывая, то зачем терять деньги? Закончились золотые времена, когда всем нужен был учёт, желательно вчера, желательно 1С. И сзади ещё очередь таких же бизнесменов с записями в тетрадках стоит. Теперь нет ни очереди, ни тетрадок. Каждого клиента нужно обхаживать, угождать и лелеять.


                                  1. IamAlexy
                                    04.10.2019 15:21

                                    Если у клиента бюджет один и сроки одни и те же то вам какая разница?

                                    320 рабочих часов пилить lsFusion а можете за те же деньги 160 рабочих часов пилить 1С

                                    на выходе клиент получает решение своих задач за свой бюджет, а в случае 1С еще 100500 дополнительных плюшек…

                                    вы на выходе получаете одинаковую сумму при вдвое меньших трудозатратах фактических…


                                    1. kryvichh
                                      04.10.2019 15:31

                                      Одинаковый бюджет <> одинаковый заработок, если программист из своего фактически кармана должен купить клиенту платформу 1С, клиентские ключи и вот это всё. Хотя уже купил у 1С и так и платформу, и типовые конфигурации, используемые в разработке. Если мы говорим про честный бизнес. Т.е. платим сначала за себя, платим за обновления, и потом ещё из денег бюджета платим для покупки 1С клиенту. И потом ещё за сопровождение клиент будет отстёгивать 1С (обновление платформы, типовой конфигурации), ну и вам немножко что останется.

                                      А ещё надо отстегнуть за сертификаты 1С (а то что ты за контора, у тебя даже сертификатов нет). И потом их подтверждать — тоже платить?


                                      1. IamAlexy
                                        04.10.2019 15:34

                                        Одинаковый бюджет <> одинаковый заработок, если программист из своего фактически кармана должен купить клиенту платформу 1С, клиентские ключи и вот это всё.


                                        хм… бред же.

                                        дальше что? чтобы не из своего кармана покупать генеральному ауди будем его на запорожце возить а деньги выделенные на автомобиль в карман положим?


                                        1. kryvichh
                                          04.10.2019 15:48

                                          Ну, смотрите, бюджет задачи $10000. Если есть достаточно компетенции и решаем с помощью opensource ERP, все $10000 — ваши. Если не хватает компетенции — покупаем из этих денег 1С (платформу, конфу, сервер SQL если надо), дорабатываем, оставшиеся $2000 — ваши (все цифры условные).

                                          Потом допустим бюджет поддержки будет $100 ежемесячно. Если вы делали проект самостоятельно — все деньги ваши. Если же использовали 1С, вам придётся делится с франчем или 1С этими деньгами, чтобы обновлять использованную типовую конфу, платформу, купленные платные модули. Иначе она через год устареет, выпадет из законодательства, перестанет работать с оборудованием клиента, и проч. Это — цена использования чужого труда.

                                          Да, когда-то быстро закрывался 1 проект, и шли на следующий, и зарабатывали на них оставшиеся $8000. А где сейчас брать, эти проекты?


                                          1. IamAlexy
                                            04.10.2019 15:51

                                            хм… если честно не понимаю вашей логики… разве где то такое бывает в реальной жизни а не при автоматизации ларька с пивом?

                                            ну ведь бред же: у меня на машину генерального есть 10 млн. рублей, если я ему куплю подержанную вазовскую за копейку за 50 000 р. то 9,95 млн я положу СЕБЕ в карман… а директора буду на копейке возить… и на бензине фирма сэкномит и запчасти дешевые…


                                            1. kryvichh
                                              04.10.2019 16:06

                                              Вы сравниваете OpenSource ERP с подержанной копейкой, а 1С — с Mercedes. По факту немного не так. У этой копейки может оказаться суперсовременный движок под капотом, а у Mercedes — старый дымный двигатель разработки конца 90-х.


                                              1. IamAlexy
                                                04.10.2019 16:09

                                                директор покупает плавность хода, мягкий диван и тишину в салоне…

                                                это технарь смотрит «ба… так тут в копейке тыща кобыл ща мы на треке как ее разгоним»

                                                а директору надо на мягком диване под спокойную музыку доехать от дома до офиса да еще максимально безопасно…

                                                почему то айтишники которые очень любят считать директорские деньги до этой простой мысли не доходят :)


                                                1. Neikist
                                                  04.10.2019 16:16

                                                  Директору нужно выжимать максимум прибыли при минимуме затрат. Либо потратиться очень сильно 1 раз, но с перспективой выжать еще больше через какое то время. Мягкие диваны и прочее его интересует разве что до тех пор пока это на его деловую репутацию влияет (кто будет дела иметь с ним если директор на копейке ездит? Наверно у него с деньгами совсем плохо и сотрудничать может быть опасно).


                                                  1. IamAlexy
                                                    04.10.2019 16:34

                                                    вы же понимаете то мы образно…
                                                    мягкие диваны это в контексте статьи которая УТ11 критикует например обмен с битриксом из коробки, мобильное приложение из коробки, срм из коробки, единая среда для всех учетных систем (а значит упрощение сопровождения и поддержки), море литературы курсов и прочих инструментов обучения и консультаци и тд и тп…

                                                    это все — «мягкие диваны»


                                                    1. kryvichh
                                                      04.10.2019 16:53

                                                      И чтобы посидеть иногда на хозяйском кожаном диванчике, 1С-ники платят заработанные кровью и потом деньги. Нет вопросов, каждому своё. Иногда и это приятно.


                                                      1. IamAlexy
                                                        04.10.2019 17:04

                                                        из какого кармана? вы чего?

                                                        вы пример приводите уровня: заказчик сказал выкопать канаву 3х50 метров глубиной 5 метров… и вы собираетесь ее копать руками так как бюджет выделенный на покупку трактора вы планируете себе в карман класть…

                                                        какой вменяемый заказчик на это купится?
                                                        в каком серьезном бизнесе такой подход?


                                                        1. kryvichh
                                                          04.10.2019 17:07

                                                          Опять сравниваете своё решение с лопатой, а 1С — с трактором…
                                                          Вы не в 1С работаете? )
                                                          P.S. Ладно, всё. Очень далеко ушли от темы…


                                                          1. IamAlexy
                                                            04.10.2019 17:10

                                                            я пишу в контексте системы предлагаемой авторами статьи — в контексте платформ lsFusion — а это действительно детский совочек по сравнению с «трактором» 1С… как в плане платформы так и в плане «коробочных» решений…


                                      1. skrimafonolog
                                        04.10.2019 16:26

                                        если программист из своего фактически кармана должен купить клиенту платформу 1С


                                        С какой радости?

                                        1) Весь банкет всегда за счет клиента. И он с радостью отдаст деньги за известный продукт 1С. Не заморачивайтесь этим.

                                        2) Стоимость разработки для серьезного проекта несопоставимо больше стоимости 1С. Для мелкого клиента, согласен, бесплатность lsFusion будет иметь значение. Но такой несерьезный клиент не потянет стоимость разработки на lsFusion.


                          1. skrimafonolog
                            04.10.2019 16:21

                            И насчёт денег… OK допустим эту задачу на lsFusion я сделаю за 2 месяца, а на 1С — за месяц, в 2 раза быстрее срока который клиент готов был ждать, за счёт более развитой платформы, готовых решений. Но при этом в 1-м случае я заработаю 100% денег, а во 2-м — 20%.


                            А вот это вы уже слишком много допускаете.
                            С чего это вы решили, что вам кто-то даст лишние деньги или что кто то их отнимет?

                            Напомню ваше первоначальное утверждение:

                            Я могу написать решение на 1С, взяв готовую конфигурацию и допилив её с учётом требований. Либо возьму lsFusion + готовые модули на GitHub, и тоже допилив их с учётом требований. Клиенту всё равно, что под капотом, главное чтобы работало. Правильно?


                            Так вот если клиенту все равно — то его интересует определенный результат за который он готов заплатить.

                            Если вы сделайте быстрее — сэкономленное время ваше.
                            И только.


              1. telnov
                03.10.2019 16:07

                А я по своему опыту скажу, что наоборот каждый относительно крупный клиент (>=1000 сотрудников) выдвигает свои требования, часто противоречивые другим клиентам и это нормально. Потому как каждый бизнес работает по своим бизнес-процессам, и когда приходишь и говоришь заказчику, что он неправильно работает, он всегда отвечает: я построил этот бизнес сам с нуля методом проб и ошибок, и мне лучше знать как он должен работать. И кстати по факту оказывается прав.

                Бывает прав, а бывает нет… То что он построил с нуля ничего вообще не значит. Но кто я такой чтоб спорить с клиентом? Если это нам выгодно мы делаем так как хочет клиент, предупредив о последствиях. Если клиент адекватный, то мы получаем от него деньги 2 раза. В первый раз за неправильное решение, а второй раз за правильное. Если нет, то расстаёмся, т.к. работать с неадекватами тяжело.
                С Розница это для фирменной торговли в лучшем случае. Я во всяком случае не знаю ни одной сети супермаркетов на 1С Розница, а я знаю весь местный рынок к примеру.
                Я ж сказал для супермаркетов на кассах 1С: Розница очень плохо подходит. Но был опыт и такой эксплуатации. Для товароведа 1С норм. У крупных сетей в России везде вообще свой самописный софт. Написанный и поддерживаемый собственными программистами. Часть из которого в т.ч. на платформе 1С. Например у сети Магнит. Туда в принципе со стороны не зайдёшь. Им никто не нужен.


                1. Veidt Автор
                  03.10.2019 16:24

                  Если это нам выгодно мы делаем так как хочет клиент, предупредив о последствиях. Если клиент адекватный, то мы получаем от него деньги 2 раза. В первый раз за неправильное решение, а второй раз за правильное.

                  И вот тут на первый план выходит платформа.
                  У крупных сетей в России везде вообще свой самописный софт. Написанный и поддерживаемый собственными программистами. Часть из которого в т.ч. на платформе 1С. Например у сети Магнит.

                  Не совсем так, там есть и ряд коробок (если мы про ТОП-500 говорим). И Магнит не на 1С. Посмотрите их вакансии:
                  hh.ru/vacancy/32394490
                  У них классика 1С — Документооборот, Бухгалтерия, ЗУП, СППР.
                  Остальное на всем подряд, от Java и C++ до Oracle и PostgreSQL.


                  1. telnov
                    03.10.2019 18:11

                    del


                  1. telnov
                    03.10.2019 18:13

                    И Магнит не на 1С

                    Магнит на 1С. Помимо перечисленных
                    Документооборот, Бухгалтерия, ЗУП, СППР
                    . Там есть еще и система ERP на 1С. Но ни одна из стандартных конфигураций «там не стояло». Всё написано с нуля. Как называется не помню. Они только платформу голую берут (да так тоже можно). Про это рассказывал преподаватель на курсе эксперта по тех. вопросам. В России все на 1С. Пройти мимо этой системы невозможно. Да. Недостатки есть. Багов навалом. Но практически все недостатки это продолжение тех преимуществ, которые есть. Есть ли платформы с технической точки зрения лучше. Конечно есть. Но клиент любит 1С. И есть за что… Всё. Уехал на Кубу…


                    1. Veidt Автор
                      03.10.2019 18:24

                      В FMCG-сетях достаточно мало 1С. Там Супермаг, GESTORI, SAP, Axapta и куча самописок в стиле Delphi+Oracle/MS SQL. И в Магните ни одной вакансии по 1С для бэка (а я периодически мониторил их для интереса). И представляя их схему управления они бы удавились платить деньги за лицензии платформы, от который, как мы видим из статьи, толку мало. Тем более что масштабируемость там начали добавлять, когда Магнит уже был достаточно большой, чтобы работать на 1С. Ваш преподаватель явно что-то перепутал.


                    1. Neikist
                      03.10.2019 18:33

                      Из стандартных 1сных без доработок — да. ЗУП у них точно помню был, с доработками вроде, но стандартный. Мы им ТОИР внедряли, тоже можно назвать стандартной конфой (но мучались с доработками года два).


        1. androidt1c
          03.10.2019 09:11

          «клиенту нужно решение вопросов по учёту. Клиент хочет по итогам видеть прибыль и себестоимость.» — именно! И когда в УТ 11 он ничего такого не получает — ни нормального резервирования, ни онлайн-себестоимости, ни удобного интерфейса для менеджеров, ни понятных взаиморасчетов, то делает круглые глаза: «это что — программа для учета?». А в «устаревшей» УТ 10, и даже ТиС всё это было! Да еще с возможностью простой донастройки под бизнес-процессы фирмы.


          1. telnov
            03.10.2019 13:22

            И когда в УТ 11 он ничего такого не получает — ни нормального резервирования, ни онлайн-себестоимости, ни удобного интерфейса для менеджеров, ни понятных взаиморасчетов, то делает круглые глаза: «это что — программа для учета?». А в «устаревшей» УТ 10, и даже ТиС всё это было! Да еще с возможностью простой донастройки под бизнес-процессы фирмы.

            Ну вот это вот полная чушь. Если внедрено через одно место и персонал клиента не обучен, то тогда да. В этом случае я видел и хуже ситуацию. УТ 11 не нужна никакая доработка. И резервирование там прекрасно работает и взаиморасчеты там великолепно сделаны. Себестоимость да… копейка в копейку онлайн невозможно посчитать, но предварительная считается вполне себе сносно, но если б вы понимали что такое себестоимость, то вам было бы очевидно почему так. На начальном этапе доработка учетной системы это вообще зло. Самое правильное это сначала научить клиента правильно использовать типовые механизмы, а потом после того как он научится ее использовать, после этого он банально сможет правильно сформулировать ТЗ на разработку. А иначе получается полная фигня. Ни учета ни прибыли ни себестоимости… Всё как Вы сказали.


  1. Veidt Автор
    02.10.2019 11:58

    del


  1. lotse8
    02.10.2019 12:08

    Я не специалист по 1C и по lsFusion, поэтому не берусь сравнивать технические их преимущества и недостатки. Только хочу обратить внимание автора, что конечная цель — это автоматизация бизнеса и решение задач бизнеса.

    Для бизнеса важно:
    1) Цена вопроса в комплексе, учитывая все
    2) Время поставки готового решения (не голой платформы)
    3) Умение и желание персонала с этим работать
    Подумайте и сравните свой продукт и решения 1С с этих позиций.

    1С ориентирована на бизнес, а ваш продукт на разработчиков. Это видно сразу по вашему сайту, для бизнеса там ничего, все только про технологии.
    1С предлагает готовые решения с возможностью их доработки за короткое время до нужд заказчика. Т.е. поставили и 80% задач уже сразу можно обрабатывать, а оставшиеся 20% постепенно допишут в обозримые сроки.
    Вы предлагаете голую платформу, где чтобы что-то начать, надо сначала поставить разработчикам задачу и разработать Техническое Задание. Это нужно напрягать мозг владельцам бизнеса и топ-менеджерам, это неопределенность по времени и соответственно неопределенность по деньгам и результатам. Потом аналогично разработка и приемка. А бизнесу нужно деньги зарабатывать уже сейчас. Ждать никто не хочет, неопределенность никто не любит. По второму пункту 1С рвет вас как тузик грелку.

    По третьему пункту — 1С на рынке уже 27 лет и откусила уже более 30%. Т.е. приблизительно можно сказать, что каждый третий сотрудник умеет работать с 1С. На вновь созданной с помощью вашей платформе автоматизированной системе работать никто не умеет. Обучать нужно всех.

    И, наконец, бизнес не интересует особо, что там и как под капотом — работает, и ладно.

    Вы, скорее всего, не понимаете своей ниши. Ваш продукт для разработчиков, поэтому вам надо идти к разработчикам и продавать его разработчикам. Или, если вы хотите продавать бизнесу, то вам нужно сначала разработать типовые отраслевые решения, как это сделано у 1С или Галактики. Без них бизнесу вы не нужны.


    1. Neikist
      02.10.2019 12:10
      +1

      Так они и продают его разработчикам, вот, на хабре пишут))


      1. lotse8
        02.10.2019 12:31

        На хабре да, согласен. Но на сайте у них: для бизнеса, для пользователей, для разработчиков — т.е. для всех.


    1. Veidt Автор
      02.10.2019 12:38

      1) Цена вопроса в комплексе, учитывая все
      2) Время поставки готового решения (не голой платформы)
      3) Умение и желание персонала с этим работать

      Забыли самое главное, возможность адаптироваться под конкретные бизнес-процессы заказчика и меняться вместе с изменением этих процессов.
      Подумайте и сравните свой продукт и решения 1С с этих позиций.

      Ну скажем на местном рынке FMCG-розницы 1С нам уже давно не конкурент. В ближайшее время будем выходить на российский и там 1С кстати тоже не самый главный игрок.
      1С предлагает готовые решения с возможностью их доработки за короткое время до нужд заказчика.

      Так собственно и статья о том, что не допишут (потому как платформа ну очень неудобна для этого). Точнее может даже и допишут, но силами своего ИТ-отдела из 5 человек. И самое смешное, потом будут думать, что дешево (хотя по факту выкидывать полтора миллиона рублей в месяц).
      Вы предлагаете голую платформу

      Нет у нас еще есть набор из 1300 модулей, из которых мы как из кубиков собираем ровно то, что нужно заказчику. Вы же реально не думаете, что мы с нуля все пишем. И сроки внедрения у нас куда ниже чем 1С (мы местный рынок просто разрываем, а 1С у пары самых упертых только стоит).
      Т.е. приблизительно можно сказать, что каждый третий сотрудник умеет работать с 1С

      Ну по такой логике каждый первый умеет пользоваться C++. На нем браузер написан, через который мы с вами общаемся.
      И, наконец, бизнес не интересует особо, что там и как под капотом — работает, и ладно.

      До момента, когда бизнес хочет что-то изменить в системе. Потом его очень сильно начинает это волновать по опыту.


  1. Neikist
    02.10.2019 12:17

    Кстати, вспомнил тут еще один минус. Сборка мусора в 1с как я понимаю на основе подсчета ссылок сделана, что ведет к утечкам из за циклических ссылок. Да, из за отсутствия ООП, замыканий, колбеков нормальных и прочего такое случается редко, но случается.


    1. skrimafonolog
      02.10.2019 12:28

      Сборка мусора в 1с как я понимаю на основе подсчета ссылок сделана, что ведет к утечкам из за циклических ссылок.

      Там разве модуль не переинициализируется при каждом открытии, к примеру, документа?
      В одном документе целый день не сидят (как правило) так что это не критично.


      1. Neikist
        02.10.2019 12:30

        А причем тут модуль? Создали структуру, в нее вложили массив, в него несколько структур, в одном из свойств которой случайно закинули ссылку на корневую структуру. Все, утечка готова. Ни к какому модулю никоим образом не привязана так как вещь в себе.


        1. skrimafonolog
          02.10.2019 12:39

          А причем тут модуль? Создали структуру, в нее вложили массив, в него несколько структур, в одном из свойств которой случайно закинули ссылку на корневую структуру. Все, утечка готова. Ни к какому модулю никоим образом не привязана так как вещь в себе.


          Все переменные модуля убиваются без разбора при его закрытии. Ничего там при закрытии уже не считается. Закрытие поэтому мгновенное (если нет записи в БД, конечно) — сколько бы «змей, кусающих себя за хвост» вы бы не создали в переменных в модуле.

          Попробуйте смоделировать — легко убедитесь.


          1. Neikist
            02.10.2019 12:43

            А 1с то глупые, свой инструмент делали для поиска циклических ссылок и выбрасывании исключения при создании таковой. А достаточно лишь модуль закрыть. (кстати что это означает?)

            https://its.1c.ru/db/metod8dev#content:5859:hdoc


            1. skrimafonolog
              02.10.2019 12:46

              А 1с то глупые, свой инструмент делали для поиска циклических ссылок и выбрасывании исключения при создании таковой.


              Это нормально.

              А вдруг да вы какой то модуль не закроете долгое время. Или обрабатываете особо сложным алгоритмом особо много данных.

              Лично я сталкивался с ростом потребления памяти на очень и очень нетривиальных многоступенчаттых отчетах, где далеко не один запрос, а друг за дружкой идут, готовя друг другу данные.

              Но на типовых задачах подобной проблемы даже рядом нет.

              И несмотря на то, что отчет съедал всю доступную память — при этом закрывался он довольно быстро. При закрытии модуля — все переменные убиваются сразу, одним махом.


              1. Neikist
                02.10.2019 12:48

                Я там выше ссылку кинул где утечка останется даже после завершения сеанса пользователем (судя по описанному утечка до завершения процесса сервера жить будет)

                Например, в форме описана переменная (или реквизит). При вызове процедуры, было установлено значение этой переменной. При выходе из процедуры значение этой переменной не сбросилось. Оно сбросится потом (когда будет закрыта форма), но событие LEAKS будем записано в технологически журнал.

                Однако, если в качестве значения этой переменной установить саму форму, то переменная не будет уничтожена и останется в памяти все время работы процесса.


  1. pauls0
    02.10.2019 13:10

    у людей которые в 1с достаточно давно, но мозги еще не атрофировались окончательно статья вызывает «противоречивые» чувства — они во многом согласны с автором, но кое в чем против или уточняют

    у «святых воинов СКД» какой-то батхерт. добро бы еще по делу. спорить по вкусу устриц надо с теми кто их ел


  1. Ast95NG
    02.10.2019 13:25

    У меня к платформе немного по-другому сформулированные претензии.
    1. Абсолютное отсутствие структуры метаданных. Под 2000 общих модулей, дерево подсистем, на ветках которого пусто, код серверной части в том же модуле, где код клиентской части + костыли препроцессора. Ни малейшей связи между понятиями «подсистема» и «расширение». Структура «исторически сложилась» и, похоже, теперь все уже.
    2. Ебенейший объем костыльного кода для типовых действий. Реализация типовой бизнес-логики через код на 99%. Хорошо работать может только красивый код. Увы.
    3. Постоянное улучшение типовых конфигураций путем переименования объектов, перехода на новые версии БСП, изменения порядка следования параметров общих процедур.
    4. Искусственные и ручные ограничения в разделении контекстов сервера и клиента. Реализация таблицы значений через массив структур, например. Попробуйте на клиенте заполнить excel через COM по данным с сервера. Хотели, конечно, как лучше. В итоге руками «программист» фигачит обращения к серверу в цикле на клиенте. Взаимодействие серверного контекста и клиентского должно быть полностью автоматическим и прозрачным, как в 8.0. Сложно? Точно проще, чем потом в конфигурациях руками каждый раз одно и то же делать.
    5. Хорошие прикладные программисты вымирают. Сложность типовых конфигураций такая, что выживают только консалтеры и говнокодеры, способные сляпать внешнюю обработку за пару часов. Для сильных программистов просто нет должного объема ценных, но решаемых задач. Локально это, конечно, хорошо. На перспективу — плохо.
    6. Плоская структура модулей. Ну вот что не дает добавить функционал подмодулей? Тупо закладки с названием и текстом? Ну ведь логично же, и сильно жизнь бы облегчило. Нет, мы будем отбивками с комментариями структуру рисовать. Как пещерные люди.
    7. Выпуск принципиально разных платформ и конфигураций под одним названием. Но это уже про бизнес.

    Но в контексте заголовка все это мелочи. «Почему 1С?» — потому, что бизнесу важна эффективность затрат, и при выборе платформы 1С эта эффективность в разы выше, чем у альтернатив. Спорить со мной по этому вопросу не нужно, это просто многократно подтвержденный и очевидный факт. А решение о выборе платформы принимает бизнес, а не ИТ.


    1. mihailfilatov
      02.10.2019 13:37

      «В итоге руками «программист» фигачит обращения к серверу в цикле на клиенте.»


      Что мешает заполнить excel на сервере?


      1. Ast95NG
        02.10.2019 13:54

        Например, его там вообще нету. Или он интерактивный и эта интерактивность на клиенте происходит. Или он собирается из частей, в том числе с клиента, и его полный объем — под 300Мб. Как бы сначала тянуть картинки на сервер, а потом через базу на клиент — совсем плохой вариант.


        1. o4karek
          02.10.2019 14:16

          xls уже давно получается сохранением табличного документа без требования самого Excel. Если формируется прайс-лист с картинками, то картинки, наверняка, нужны еще для чего-то и живут там, где сервер до них может дотянуться. Рисуем обычный прайс в конфе и сохраняем в xls/xlsx/ods — это чем-то не устраивает?
          Если это не прайс — зачем нужен такой огромный XLS?


          1. Ast95NG
            02.10.2019 14:32

            В таком случае не понятно, чем не устраивает pdf. Чем это таким xls лучше, чем pdf? Может тем, что xls может содержать формулы, поля для ввода, скрипты? Что защищенный xls можно распарсить и обратно в 1С загрузить? Ну да. Поэтому-то и не получится сохранить табличный документ, а приходится заполнять через COM болванку на клиенте.


            1. o4karek
              02.10.2019 15:26

              Чем это таким xls лучше, чем pdf?

              Например тем, что XLS используется как входной формат для кого-то/чего-то другого.
              И это все равно не отвечает на вопрос — зачем такой огромный XLS и почему «формулы» нельзя в 1С сделать, а отдать только результат. Тут вопрос в том, что в данный момент мне не ясна задача, а в текущем понимании Excel не очень нужен. Если там есть какие-то реальные ограничения — ок. Но пока ограничения не видны.


              1. Ast95NG
                03.10.2019 01:50

                Да просто все, в данном конкретном случае на клиенте формируется защищенный прайс-заявка, с картинками, скриптами и формулами. Картинки тащатся с хранилки в домене, остатки и прочее с сервера. Клиент (в бизнес-смысле) его заполняет и отдает обратно, он загружается в 1С. Ну то есть часть логики зашита в xls в виде формул и VBS и выполняется изолировано, грузится обратно уже результат.


                1. o4karek
                  03.10.2019 09:11

                  Не для поспорить, а просто вопрос: а веб-доступ не пробовали таким клиентам давать?


                  1. Ast95NG
                    04.10.2019 12:26

                    Нельзя, не того уровня клиенты (базарные бабы), и больно много их. Веб-доступ в ЛК мы сделали для клиентов, у которых нормальные (в целом) клиенты, производственники.


                    1. o4karek
                      04.10.2019 12:30

                      Даже если очень ограниченный интерфейс (и визуально и по правам)?
                      Хм… Интересно…


    1. CrushBy
      02.10.2019 13:53

      «Почему 1С?» — потому, что бизнесу важна эффективность затрат, и при выборе платформы 1С эта эффективность в разы выше, чем у альтернатив. Спорить со мной по этому вопросу не нужно, это просто многократно подтвержденный и очевидный факт.

      Подтверждена чем или кем? А я считаю, что 1С — велосипед как на картинке. Спорить со мной по этому вопросу не нужно, это просто многократно подтвержденный и очевидный факт (и судя по плюсам в статье, не я один так думаю). То, что у каждого человека есть свое мнение, и он может его высказывать — это очень хорошо.


      1. Ast95NG
        02.10.2019 13:59

        Кто бы чего не думал, а деньги — величина измеримая, от думания зависит слабо. Финансовый успех заметных альтернатив на уровне средней паршивости регионального франча 1С — это даже не смешно, это грустно.


        1. CrushBy
          02.10.2019 14:02

          Причем здесь финансовый успех? Какой финансовый успех у PostgreSQL? Ораклисты тоже все время над ним издевались, что вот у нас тут сертификаты, реселлеры и прочие. И сколько людей сейчас пользуются PostgreSQL, а сколько Oracle?


          1. Ast95NG
            02.10.2019 14:09

            Ну можно еще сравнить количество рабочих мест. Будет то же самое, только в два раза хуже — за счет пиратских установок. Еще раз, вопрос в заголовке статьи «Почему 1С», а вот почему.

            А степень велосипедности величина субъективная и неизмеримая, и вторичная в этом разрезе.


            1. CrushBy
              02.10.2019 14:16

              Извините, но ничего не понял. Причем все-таки здесь финансовый успех? PostgreSQL — успешен как продукт? А он во многом вырос на недостатках Oracle, противопоставляя себя ему.


              1. Ast95NG
                02.10.2019 14:25

                Попробую объяснить. PostgreSQL — удачный продукт для IT. Поэтому, в частности, его использует фирма 1С (ИТшная контора в первую очередь) в своих продуктах.

                Но это вовсе не продукт для бизнеса. Это продукт для ИТ. А вот 1С и аналоги — это продукты для бизнеса, и бизнес голосует кошельком. Почему он это так делает и как сделать, чтобы голосовал за другое, у меня мнение наработалось. Но это мое мнение, во-первых, никого не интересует, а во-вторых стоит огромных денег 8о)


                1. CrushBy
                  02.10.2019 14:27

                  Так и lsFusion — это продукт не для бизнеса, а для ИТ. То есть любая компания может взять lsFusion и делать на нем прикладное решение (точно также как и PostgreSQL), а затем его продавать. И это может быть как ИТ-компания (типа 1С), так и собственный ИТ-отдел не ИТ-компании.


                  1. Ast95NG
                    02.10.2019 14:38
                    -1

                    Если «может», то почему не «берет»? Хотелось бы мне живьем увидеть ИТ-директора завода по производству, скажем, детских горшков, который приходит к собственнику и говорит, «yes, мы можем!», нахер 1С, давайте делать свою систему на IsFusion, или на FoxPro, или на C++, или на Ruby. Ну то есть я таких видел, но давно уже и мельком. Впрочем, я искренне жду появления заметного конкурента платформе 1С, потому что мне не очень нравится, как и куда развивается эта платформа.


                    1. CrushBy
                      02.10.2019 14:54

                      Если «может», то почему не «берет»?

                      Потому что не знает про lsFusion и ее преимущества. Для этого и пишем статьи.


                      1. Ast95NG
                        02.10.2019 14:57

                        Удачи!


                    1. Veidt Автор
                      02.10.2019 15:14

                      Да никто не говорит делать с нуля. Берем базовые модули отсюда github.com/lsfusion-solutions/erp (а тут функционала куда больше чем том же odoo) и вперед дорабатывать.


          1. skrimafonolog
            02.10.2019 14:46

            Причем здесь финансовый успех? Какой финансовый успех у PostgreSQL? Ораклисты тоже все время над ним издевались, что вот у нас тут сертификаты, реселлеры и прочие. И сколько людей сейчас пользуются PostgreSQL, а сколько Oracle?


            Аналогия не та.

            PostgreSQL — не конечного пользователя продукт.
            Там действуют другие правила.
            PostgreSQL выбор технарей изначально.

            Бизнесу все равно что там глубоко под капотам — MySQL, PostgreSQL, Tarantool (гы, какие глаза были у одного любящего технические детали заказчика, когда я ему рассказывал что буду использовать Tarantool — я тогда тащился от его производительности, всем и всякому рассказывал — но у заказчика было такое лицо, что будто бы я использую технически термины чтобы его надуть на больше денег)

            Имеют значения те вещи, что непосредственно взаимодействуют с теми, кто занимается бизнесом.
            Вы как раз такую вещь и пилите.

            Чисто технически отсылы помогли бы вам продвниуть вещи уровня PostgreSQL, nginx.

            Но вы работает уже в другой области, где решают не одни только технари.
            Так что отсылка к успеху PosgreSQL некорректна.


            1. CrushBy
              02.10.2019 14:57

              Бизнесу все равно что там глубоко под капотам — MySQL, PostgreSQL, Tarantool (гы, какие глаза были у одного любящего технические детали заказчика, когда я ему рассказывал что буду использовать Tarantool — я тогда тащился от его производительности, всем и всякому рассказывал — но у заказчика было такое лицо, что будто бы я использую технически термины чтобы его надуть на больше денег)


              Бизнесу все равно, что под капотом — 1С или lsFusion. Не вижу принципиальной разницы между выбором платформы и СУБД. И точно также есть проблема и по специалистам, которые будут поддерживать PostgreSQL и Oracle. И заблуждения про производительность и все прочее.


              1. skrimafonolog
                02.10.2019 15:06

                Бизнесу все равно, что под капотом — 1С или lsFusion.


                Э… Вот как раз нет.
                Тут вы ошибаетсь.

                Когда руководитель предприятия сам привык работать в 1С, когда он знает как легко найти программиста на 1С, а про вас и не слышал, когда владелец химчистки/кафешки/заправки/авторемонта может сразу купить готовое решение под свою специализацию бизнеса (даже если это решение и придется потом подточить под себя) — это принципиально влияет на принимаемое руководством предприятия решение.

                Не вижу принципиальной разницы между выбором платформы и СУБД

                Вы подходите с чисто технической точки зрения.
                Но у бизнеса подход основан на чисто прагматических соображениях.

                Ваш подход сработал бы, будь недостатки 1С действительно существенными.
                А они незначительны, таковы, что технические недостатки нивелируются другими вещами — распространенность специалистов (и пользователей со знанием 1С и ИТ-шников), наличием готовых решений.

                Такого чтобы «1С дико тормозит давай уходить на lsFusion» не ожидайте. Скорее просто пригласят квалифицированного специалиста по 1С, чтобы он отпрофилировал 1С, выяснил где именно узкие места и пофисил это. Ну или просто сменят прикладное решение на более свежую его версию, от 1С же. Или просто новый сервер купят. Или обрежут базу данных, оставят только информацию за последние полгода.


                1. CrushBy
                  02.10.2019 15:08

                  Мне вот интересно. А как по Вашему живет остальный мир без 1С? Страдает наверное сильно…


                  1. skrimafonolog
                    02.10.2019 15:34

                    Мне вот интересно. А как по Вашему живет остальный мир без 1С? Страдает наверное сильно…


                    Рынок одним только техническим совершенством не взять — вы же это видите по своему продукту. Утверждаете что он совершеннее 1С, но массового перехода не наблюдается на ваш продукт с 1С.

                    Вообще какой смысл говорить про весь мир в обсуждении локального продукта?

                    Впрочем, можно от обратного: на фоне 1С всяческие SAP/Dynamics в РФ котируются плохо. Свою нишу конечно и SAP в РФ имеет, но 1С написал хорошую систему, которую потеснить на рынке не просто.

                    Недостатки конечно есть у всех, как и у вашей системы — ибо не ошибается лишь тот, кто ничего не делает.


                    1. Neikist
                      02.10.2019 15:38

                      Хех, я так понял люди выпустили в свет свою систему пару месяцев как) Я бы, честно, очень удивился бы если бы на нее сразу, в первый день народ пошел писать. А те кто пошли — вряд ли раньше чем через пол года-год что то покажут (если покажут).
                      Как я понял система была внутренней разработкой, просто ее решили «в массы» пустить.


                      1. skrimafonolog
                        02.10.2019 15:43

                        Хех, я так понял люди выпустили в свет свою систему пару месяцев как) Я бы, честно, очень удивился бы если бы на нее сразу, в первый день народ пошел писать. А те кто пошли — вряд ли раньше чем через пол года-год что то покажут (если покажут).
                        Как я понял система была внутренней разработкой, просто ее решили «в массы» пустить.


                        Тогда вообще всё грустно.

                        Из опыта известно, что системы такого масштаба доводятся годами до состояния, когда ими можно уверенно-безопасно пользоваться.

                        Плюс внутренняя система, не сразу ориентированная на внешний рынок там тоже свои особенности типа «часть документации только в голове разработчика».


                        1. CrushBy
                          02.10.2019 15:45

                          Из опыта известно, что системы такого масштаба доводятся годами до состояния, когда ими можно уверенно-безопасно пользоваться.


                          Мы в продакшене используем ее уже 7 лет где-то. Просто пару месяцев назад лишь начали писать статьи и рассказывать о ней.


                          1. skrimafonolog
                            02.10.2019 15:49

                            Мы в продакшене используем ее уже 7 лет где-то. Просто пару месяцев назад лишь начали писать статьи и рассказывать о ней.


                            И че?
                            У меня вот есть мегакрутая интеграция веб-сайта с 1С. На рынке предложений, подобных по степени автоматизации — не имеется.

                            Тоже лет 8 как в экслуатации.

                            Но я отдаю себе отчет, что там все очень сильно завязано на бизнес требования конкретной фирмы.

                            И реализовать как отдельное универсальное решение будет крайне непросто. После отвязки от бизнеса — придется еще дебужить и дебужить заново. Хотя в нынешнем состоянии там давно уже все вылизано.

                            Хотя иногда подумываю над этим.


                            1. Neikist
                              02.10.2019 15:50

                              Ну, опять же исходя из комментариев что я тут видел, это внутреннее решение, но проекты на нем делались и делаются не для себя а под заказчиков разных.


                              1. skrimafonolog
                                02.10.2019 15:55

                                Ну, опять же исходя из комментариев что я тут видел, это внутреннее решение, но проекты на нем делались и делаются не для себя а под заказчиков разных.


                                Имею и подобный опыт перепродажи уже созданный решений одного заказчика другому заказчику.

                                Все же склонен считать, решение изначально изготавливаемое как отчуждаемое и решения для конкретного бизнеса — это разные вещи.

                                Делать как универсальное отчуждаемое хотя ты делаешь под конкретные проекты — дорого очень. Поэтому с этим не заморачиваются.

                                Имхо разница в себестоимости аж в 2-3 раза. Так что что «делали для себя, использовали сами на сторонних проектах — и сделали идеальное решение универсальное» — не верится.


      1. vasilyevii
        02.10.2019 14:08

        Простите, а во сколько с 1С работали?


        1. CrushBy
          02.10.2019 14:13

          Нисколько. А сколько автор работал с lsFusion? Я просто хотел показать, что утверждения без аргументации «просто многократно подтвержденный и очевидный факт» не несут никакого смысла.


    1. pauls0
      02.10.2019 14:08

      5. Хорошие прикладные программисты вымирают. Сложность типовых конфигураций такая, что выживают только консалтеры и говнокодеры, способные сляпать внешнюю обработку за пару часов. Для сильных программистов просто нет должного объема ценных, но решаемых задач. Локально это, конечно, хорошо. На перспективу — плохо.


      так это уже во всю идет… опытные уходят

      иначе 1с не затевала постоянно какие-то конкурсы и курсы то для ясельников, то для пенсионеров


      1. Ast95NG
        02.10.2019 14:12

        Ну да, франч всегда был «работой для начинающих», но чем дальше, тем грустнее. Экосистема выталкивает больших рыбин, выживают и плодятся шустрые кильки.


        1. pauls0
          02.10.2019 14:26

          экосистема 1с — это малые и средние предприятия

          малые скоро окончательно загонят пинками в облака и будут просто продавать SaaS за подписку (Battle Pass ИТС улыбается и машет)

          средние — их не так много чтобы «поглотить» всех кто 1с знает и владеет

          крупные — тут уже у самой 1с шансы не велики, чтобы там про «даешь всемирный внедреж» не трындели. ей выходить «туда» банально не с чем


          1. Ast95NG
            02.10.2019 14:55

            крупные — тут уже у самой 1с шансы не велики


            Ну не совсем так, та же ERP на 1000-2000 рм вполне теоретически (по функционалу и платформенным ограничениям) имеет право на жизнь. Только вот беда, с таким количеством рм это будет не совсем «1С:ERP», это будет очень сильно перепаханая конфа, а скорее 2-3 конфы, связанные шиной. И вот чтобы такое реализовать, нужны спецы по глубокой доработке ERP, а откуда бы им взяться в товарных количествах? Для больших конфигураций нужна модульность, структурность, устойчивость стандартных библиотек, предсказуемость развития, разделение регл. учета и опер. учета, масштабируемость (привет реализации RLS в ERP), другими словами кастомизируемость без потери управляемости. Чего вообще совсем нет. Почти каждая УПП, работающая сегодня, это жуткий кадавр, слепленный из разных релизов той же УПП, говнокода в виде затычек для «обходных маневров», нашлепок поверх (внутри, поперек, понизу) типового функционала, кучи разномастных интерфейсов к другим системам. Но то УПП, на ERP такое просто большинство команд не вывезет, она сложнее на порядок.


            1. pauls0
              02.10.2019 17:45

              самое «смишное» — что такой кадавр на УПП у меня вполне работает. потому что 1с бросила УПП и не занимается переписыванием ради переписывания


            1. pauls0
              02.10.2019 17:58

              Для больших конфигураций нужна модульность, структурность, устойчивость стандартных библиотек, предсказуемость развития, разделение регл. учета и опер. учета, масштабируемость (привет реализации RLS в ERP), другими словами кастомизируемость без потери управляемости.


              а как это сделать в условиях современной платформы и языка в 1С?

              рефлексии нет — куча кода мусорного в БСП занимается выяснением в какой конфигурации оно сейчас работает, если ли в ней такая-то подсистема, есть ли в подсистеме такой-то общий модуль и т.п.

              > устойчивость стандартных библиотек

              подразумевает под собой имхо интерфейсы для оперирования абстракциями и ооп в виде инкапсуляций и перегрузки методов

              и чтобы БСП не загромождало собой весь проект, а висело сбоку в виде присоединенной библиотеки

              RLS в текущем виде — это вообще ад и израиль какой-то

              но пипл схавает и так


              1. Ast95NG
                02.10.2019 20:15

                Все так. То, что показалось на горизонте — то-ли крышка гроба, то-ли очередное дно. Но пробовать пробивать это придется уже очень скоро, песчинки в часиках УПП уже посчитать можно.


  1. Diversus
    02.10.2019 13:37

    Конструктивная критика — это хорошо. Автор молодец и проделал отличную работу.
    Сам занимаюсь 1С-ом уже 12 лет и у многих наверное возникает законный вопрос: «При стольких недостатках, почему 1С лидирует на постсоветском рынке ПО?».
    Постараюсь дать ответ (а они же плюсы), не хочу никого защищать, просто аргументирую некоторые моменты и станет понятно почему так сделано:

    1. Вы забывайте о постоянно меняющихся законах в РФ. Кассы, маркировка, ЕГАИС, новые постановления и правила и т.д. 1С очень оперативно внедряет в свои типовые решения все изменения в законодательстве. Пример, звонит клиент и говорит: «У меня стоит программа „Фирма“ я торгую в розницу. Программа меня устраивает, но вот вводятся в обязаловку кассы, автор этой программы „Фирма“ пока не известно добавит это или нет, но мне то нужно работать сейчас. Слышал, что работа с кассами есть в 1С. Это правда?» и вот вам пример, когда человек с программы, которая его полностью устраивает переходит на 1С. Вот автор работает в lsfusion, они сделали классное решение, но реально ребят, вы сможете поддерживать оперативно ВСЕ изменения в законодательстве и сделать аналог 1С: Бухгалтерии, например? Какой у Вас будет штат при этом? А сколько вам за это надо будет платить? Вот тут и приходит понимание, зачем нужен ИТС. Деньги от него идут как раз на актуализацию и развитие уже существующих решений.

    2. Так же 1С выбирают потому, что есть большое количество специалистов 1С по всей стране. Если у вас что-то сломалось всегда найдете человека, который может починить/посмотреть/доработать. Специалистов по SAP и тем более lsfusion гораздо меньше (возможно пока), а если они есть, то стоят других денег.

    3. Деньги на покупку решений, сервера 1С и клиентских лицензий. Если посчитать, то общая стоимость владения будет меньше чем у того же SAP. А для мелких фирмочек, где достаточно одного пользователя как раз и не нужно ничего серверного. Купил лицензию на решение и работай. ИТС да — это нужно, но и без ИТС торговля будет работать, но обновления использовать не сможете.

    4. Скорость работы. Да это проблема, надо включать технологический журнал, делать замеры, использовать профилировщик (скажите где этого не нужно делать?), но все не так критично, когда к этому привыкаешь. Есть проблема с массовым изменением или удалением данных, в 1С этого нет. Все обрабатывается поштучно. В запросах нет UPDATE, DELETE, есть только SELECT. К тому, что нет ООП привыкаешь быстро. Но здесь есть другая сторона — скорость разработки. Связь с СУБД на уровне ORM появляется сразу. Не нужно думать, как работать с подключениями к СУБД на самом низком уровне, с балансировкой нагрузки, распределением памяти, очисткой памяти, кэшированием данных и т.д. За тебя подумает платформа. Создал объект, записал, прочитал и т.д. Добавил новую сущность и она сразу работает, оформи красиво формы ручками и вуаля — готовая форма для пользователей и можно приступать к работе. Скорость разработки приложений очень высокая и это огромный плюс.

    Хочу подчеркнуть — я никак и никого не выгораживаю, просто попытка дать ответ на некоторые вопросы по ту сторону. Хотя свежий и не замыленный взгляд со стороны нужен обязательно и работать действительно есть над чем.


    1. CrushBy
      02.10.2019 13:55

      Спасибо за развернутое мнение. Но вы опять сравниваете конфигурации и платформу.

      Это все не отменяет тех недостатков, которые описаны в статье. На PHP тоже пишут миллионы, но это не делает PHP автоматически лучшей платформой для разработки на свете.


      1. skrimafonolog
        02.10.2019 14:59

        Спасибо за развернутое мнение. Но вы опять сравниваете конфигурации и платформу.


        Для выбора бизнеса — а такие вещи как инструмент для сердца бизнеса, учетная система — уже точно не пройдут мельком мимо глаз топ-менеджеров — именно типовые решения и важны.

        Платформа и ее технически возможности бизнесу постольку-поскольку. Главное, чтобы типовые решения были.

        Если бы 1С было полное говно, а ваше решение вкусная конфетка, то технические аспекты этих двух платформ бы сыграли важную роль.

        Но это не так. Платформа 1С вполне себе рабочее решение. Недостатки есть везде. И у вас тоже.

        Поэтому ваш оппонент и обращает внимание на то, что действительно важно для бизнеса — на конфигурации, на типовые прикладные решения.

        Голое же техническое совершенство платформы в данном случае не дает конкурентого преимущества для бизнеса — поэтому с точки зрения бизнеса ваше решение не очень целесообразно.


    1. pauls0
      02.10.2019 14:02

      Вы забывайте о постоянно меняющихся законах в РФ. Кассы, маркировка, ЕГАИС, новые постановления и правила и т.д. 1С очень оперативно внедряет в свои типовые решения все изменения в законодательстве.


      ломая то что сама делала в прошлой версии. меня реально за… ли бесконечные дурацкие изменения. в той же БСП. постоянные изменения имен и сигнатур функций, шаблонов RLS и прочего. мы вынуждены(!!!) вытаскивать всё потребное и изолировать вызовы стандартных функций чтобы при очередном апдейте всё это не сломалось. Понятно дело что починим, но накладные расходы на внесение правок в хранилище БП 3.0, создание апдейта и пролив его на прод-сервер крайне велик

      Да это проблема, надо включать технологический журнал, делать замеры, использовать профилировщик (скажите где этого не нужно делать?)


      в нормальных средах под это есть инструменты. и они вменяемые!

      а содержимое тех. журнала надо еще переводить(!!) с инопланетного на русский с помощью стороннего(!!!) сервиса. потому что 1с всем втюхивает совершенно бесполезный цуп


    1. EskakDolar
      02.10.2019 20:01

      Я бы уточнил. Просто сказать — «много специалистов 1с» не достаточно. Специалистов PHP тоже очень много, но программной системы на PHP подобной 1С никто не создал.
      ИМХО, главная причина популярности 1С в том что они навязали удачный паттерн структуры метаданных — Константы, Справочники, Документы, Регистры… Все программисты 1С даже на незнакомых конфигурациях имеют начальное представление о структуре системы, что сильно облегчает быстрый старт. Хотя бывают исключения. Мне пришлось разбираться с конфигурацией в которой почти не было «Документов» и все было сделано на «Бизнес процессах». Очень хотелось набить морду тому кто это сделал.
      А главный недостаок 1С в его языке программирования. Вместо современного и прогрессивного ЯП 1С подсунул какую то самодеятельность кружка «умелые руки». Именно свой ЯП тормозит развитие и расширение 1С за пределы РФ.
      Если бы 1С при переходе на 1С 8 внедрили в ней, например, язык Java то развитие платформы 1С не отставало бы от всего остального мирового ИТ так катастрофично.


      1. kryvichh
        02.10.2019 20:48

        Откройте конфигурацию любой реляционной БД, и там вы увидите её структуру с таблицами и зависимостями между ними. А дальше — всё равно надо читать код прикладного решения в IDE.


        1. EskakDolar
          02.10.2019 22:15

          В любой реляционной БД на фантазию разработчика при создании структуры БД нет никаких ограничений кроме его совести. В конфигураторе 1С конечно тоже можно извратится, но там это просто не принято.


      1. Ildarovich
        02.10.2019 23:53

        Мне пришлось разбираться с конфигурацией в которой почти не было «Документов» и все было сделано на «Бизнес процессах»
        — Интересная тема для меня. Это было тиражное решение (название не помните)? Какая предметная область? Проблемы только в том, что трудно въехать или еще что-то?
        Меня это интересует с той стороны, что все известные мне «убийцы 1С» эксплуатируют один и тот же набор «справочник-документ-регистр», не пытаясь выйти за его рамки. И я вот думаю: почему?


        1. EskakDolar
          03.10.2019 00:20

          Точно помню что разработка 1С Бит. Конфигурация вроде «Автоматизация транспортной логистики». Хотя возможно путаю. Уже больше 5 лет прошло. От них требовалось доработать конфу чтобы можно было проложить оптимальный маршрут по заданным точкам. В 1С Бит потратили на это целый год, но они так и не справились и вернули деньги. Когда понадобилось настроить обмен с торговой базой с ужасом обнаружил, что почти вся логика сделана на на бизнес процессах. Мне кажется это у них обфускация такая — чтобы никто не украл, но в результате сами не смогли разобраться что они там наконфигурировали.

          Меня это интересует с той стороны, что все известные мне «убийцы 1С» эксплуатируют один и тот же набор «справочник-документ-регистр», не пытаясь выйти за его рамки. И я вот думаю: почему?

          Мне кажется просто по тому, что довольно удачное решение. По крайней мере для логистики и бухгалтерии.


          1. Ildarovich
            03.10.2019 19:00

            Спасибо


    1. vicros
      03.10.2019 01:26

      Вы же понимаете что в пункте номер 1 вашего интересного тезиса и скрыта основная идея 1С — это система «подрядчик», это не для людей-разработчиков а для кого-то ещё, поэтому развитие этой платформы зависит на прямую от подряда, есть подряд будет работа — подряда нет работы не будет. Повторю свои тезисы до этого — всё прогресивное сообщесто 1С — тестирование, СБ, и прочие «сливки» этого не понимают, в итоге система есть система и не нужно имитировать свободное сообщесто тут — эта идея не для закрытой системы обреченной на вымирание из-за выше перечисленых особенностей.


  1. somurzakov
    02.10.2019 16:34

    кстати можете объяснить почему на западе используют много разных систем и затем интегрируют их, а в СНГ — пихают везде монстра 1С.
    Например на западе многие используют Workday для учета кадров, SAP/Oracle FI для ведения главной книги, прочие нишевые ERP для ведения операций в определенной сфере (учет ТМЦ, торговля и т.д.) — не легче ли использовать несколько независимых систем, которые делают свое дело лучше всех в одной узкой нише, а потом сшить их вместе, чем пытаться городить монстра на глиняных ногах на платформе 1С?


    1. DMGarikk
      02.10.2019 16:44

      на западе гораздо проще учёт
      если сделать 50 разных независимых систем, и вместе их сшить, то через пару обновлений методики учета НДС или налога на прибыль, которые потянут за собой переписывание половины этих независимых систем, потому что они необходимые данные не предоставляют… очень быстро придет понимание почему у нас именно так сделано и 1С популярна в монолитном виде.

      Я даже с 1С с таким сталкивался, потому что есть например 1СТорговля и 1С бухгалтерия, вроде как две независимые системы… сейчас появились всякие корректировочные счетафактуры и мне пришлось их вживлять в торговлю (7.7, которая не обновлялась больше 10 лет) тупо для того чтобы правильно работало формирование книги продаж в бухгалтерии. и это две части относительно совместимых систем одного вендора.
      А теперь представьте что их больше.


      1. skrimafonolog
        02.10.2019 16:56

        на западе гораздо проще учёт

        Бухгалтерский — да, проще.
        Но производственный или учет торговли — как минимум не проще.


        1. DMGarikk
          02.10.2019 17:22

          не проще, но он не зависит так плотно от налогового и бухгалтерского законодательства

          вот у нас взмахом руки приказали внедрить маркировку кучи видов товаров и сдачу отчетности по реализации. что по цепочке потащило за собой обновление учетных систем продажи и учетных систем бухгалтерии (из которых и сдается отчетность)
          У нас уже привыкли что государство махнет рукой, и какойнить X5 без вопросов шарахнет пару десятков миллионов рублей на внедрение новой строчки в в чеке или счете-фактуре, что влечет за собой переписывание кучи систем которые собирают данные для этой строчки.
          Интересно, а на западе также разве? решит налоговая США видеть сколько продается помидоров причем чтобы была видна цепочка от поля до кармана покупателя и wallmart побежит обновлять свои учетные системы?


          1. Veidt Автор
            02.10.2019 17:26

            Да ладно, не преувеличивайте. Много франшиз всяких Zara и других ритейлеров сидят в своих системах, общих для всего мира.

            Ну и если добавить строку в чек или послать пару запросов в какой-нибудь сервис это для 1С проблема, то сочувствую.


            1. DMGarikk
              02.10.2019 17:39

              Сидят, но вы знаете как они сдают отчётность? там зачастую есть нашлепка которая делает выгрузку в 1С из их системы, а также есть отдел который собирает данные чутьли не в ручную в экселе и тоже вбивает (вгружает) их в 1С для этих целей
              Я например видел фирму (забугорную по производству упаковки (один из конкурентов тетрапака)) у которой в екселе был написан монстроподобный скрипт на vba который подключался к какойто штуке по типу MS AX выгружал оттуда данные, потом гдето полчаса их обрабатывал и порождал xml весом под 400 мегабайт который вгружался в 1С и из неё уже они сдавали отчётность. тупо потому что это было проще и дешевле чем адаптировать их систему где тоже можно вести бухучет но делать это нереально

              Ну и если добавить строку в чек или послать пару запросов в какой-нибудь сервис это для 1С проблема, то сочувствую.

              проблема в том что сервис может не предоставлять эти данные в принципе, а не то как их оттуда получить.
              Вы же понимаете что по трудозатратам проапдейтить цепочку из 50 несвязанных сервисов гораздо дороже чем монолитную систему которую поддерживает один вендор, учитывая частоту и масштабность обновлений


              1. Veidt Автор
                02.10.2019 17:46

                Вы же понимаете что по трудозатратам проапдейтить цепочку из 50 несвязанных сервисов гораздо дороже чем монолитную систему которую поддерживает один вендор, учитывая частоту и масштабность обновлений

                Я вот не понимаю, у нас есть и ЭСЧФ и EDI и туча других сервисов. Это всего лишь одна из многих задач доработок, которых по 5 в день решается.

                Вы сейчас про бух и налоговую отчетность. Да все равно, где ее сдают. И нам, и Zara, и Макдональдс. Это проблемы бухгалтерии.


              1. somurzakov
                02.10.2019 18:40

                получается вся сила 1С только в том, что «отчетность» перед регулирующими органами у них работает из коробки. Если это так, то 1С стоит использовать только для этих же целей — выгружать аггрегированные данные в 1Ску и нажимать кнопку составить отчет и отправлять налоговым и прочим регуляторам.
                А нормальный учет по каждой области вести в специализированной системе


                1. skrimafonolog
                  02.10.2019 18:52

                  Если это так, то 1С стоит использовать только для этих же целей — выгружать аггрегированные данные в 1Ску и нажимать кнопку составить отчет и отправлять налоговым и прочим регуляторам.


                  Вы не поверите, но эта мысль пришла в голову очень многим людям за много лет до вас. Есть подобные практики.

                  Правда там отказ от 1С не обязателен.
                  Бывает что учет для себя ведут в одной системе 1С, выгружают в бухгалтерскую 1С для отчетности.


                  1. somurzakov
                    02.10.2019 19:41

                    мне интересно, где точка безубыточности — когда выгоднее пилить самописку на 1С как первичную систему и городить там огород против использование спец.системы, 1С использовать по минимуму как побочную систему для отчетности налоговоикам и прочим.


                1. kryvichh
                  02.10.2019 19:03

                  Как бы так и есть много где. Напр. в Беларуси есть Хьюман Систем с «1С: Бухгалтерия» — без управляемых форм, зато с оперативным внедрением хотелок государства по учёту. Его использует бухгалтерия. А весь остальной учёт можно вести в чём угодно, выгружая первичные документы в 1С.


  1. ardn
    02.10.2019 21:47

    Такое бурное обсуждение…
    Я — программист 1С. Стало любопытно, что же вы предлагаете, сравнивая свою программу именно с нашей платформой.
    Поставил среду разработки и клиент. Сделал первый пример из мануала (MODULE Order). В принципе по коду понятно, что к чему.
    Мне не понравился интерфейс — он ужасен. Правда, что открывать созданные документы можно только кнопкой Редактировать? Почему в списке документов не работает двойное нажатие левой кнопкой мыши. Почему не работает правая кнопка мыши? Почему на уровне платформы нет автонумерации документов и заполнения даты? (Как это есть у нас).
    Можно ли из строки документа перейти к форме элемента справочника, минуя общий список справочника?
    Возможно, программирование бизнес-логики будет удобно, но интерфейсом же нельзя пользоваться, особенно тем людям, которые привыкли к 1С.
    Fusion
    Простите, что пишу не по теме (не отвечаю на критику нашей программы), но очень интересно стало.


    1. Veidt Автор
      02.10.2019 21:57

      Правда, что открывать созданные документы можно только кнопкой Редактировать? Почему в списке документов не работает двойное нажатие левой кнопкой мыши.

      Это мы в версию 3 добавили (текущий мастер), и на demo.lsfusion.org установлена (именно после долгого общения с 1Сками). Там же и дизайн изменен. Выпустим через пару недель.
      Почему не работает правая кнопка мыши?

      А что вы там увидеть хотите. Там сейчас по умолчанию настройки политики безопасности и логирование, можете подключать свои действия.
      Почему на уровне платформы нет автонумерации документов и заполнения даты? (Как это есть у нас).

      А зачем ее прямо в платформу тянуть? Для этого есть готовые модули в пакете Utils, нажмите CTRL+SHIFT+N (или CTRL+N) и напишите Document, там есть готовые классы с готовыми событиями, в частности на заполнение даты. То есть можете сделать REQUIRE Document; и наследоваться от Document.

      А вообще это одной строкой делается:
      date(Order o) < — currentDate() WHEN SET(o IS Order); // установить текущую дату при добавлении заказа
      Можно ли из строки документа перейти к форме элемента справочника, минуя общий список справочника?

      Backspace, емнип. Не очень очевидно, может на control или dblclick повесим. Мы специально не плодили лишних кнопок на экране, чтобы людям привыкшим с тачскрином работать было бы привычнее.


    1. CrushBy
      02.10.2019 22:58

      Вот тут написано, как делать автонумерацию.

      Почему в списке документов не работает двойное нажатие левой кнопкой мыши

      На самом деле, это дело привычки. Все таки в вебе это не является базовым поведением (двойной щелчок как редактирование в списке). Когда мы переводили некоторых клиентов на новую версию платформы, то они умоляли отключить это поведение (так как для них это непривычно и часто случайно открывают редактирование).


      1. kryvichh
        03.10.2019 09:04

        Вот тут 1С вас уделывает. Пока на lsFusion программист будет прописывать и тестировать автонумератор, в 1С он создаст новый документ с номером, датой, пометками проведения и удаления (см. «Стандартные реквизиты»). Причём номер будет уникальным в пределах квартала, иметь длину ровно 10 знаков, и обладать префиксом подразделения компании в котором создан документ (к примеру).

        А если аналогичный автонумератор должен быть у группы документов, его можно будет использовать повторно, или нужно будет использовать древний программистский приём Ctrl-C Ctrl-V?


        1. CrushBy
          03.10.2019 10:19

          Нет. Не совсем так. Автонумерации нету в самой платформе, но она легко делается (и мы так делаем в ERP) через метапрограммирование. Это достаточно мощный механизм, которого нету в 1С. Можно посмотреть примеры вот в этой статье (там в начале) и про IDE(там есть GIF как это работает в IDE). Суть в том, что можно объявить метакод, который потом будет генерировать нужный код в зависимости от параметров. В частности, если подключить модуль Numerator (можно считать эти модули, что-то типа БСП в 1С), то нумерация добавляется одной строкой:
          @defineNumeratedDefault(order, 'Заказы', 'ЗК');

          Вообще метакоды мощная штука, которая позволяет строить модули, которые будут автоматически генерировать сложный функционал (хотя конечно его надо использовать с оглядкой, как и макросы в C++).


          1. kryvichh
            03.10.2019 12:27

            Шаблоны конечно не самая удачная концепция в программировании, и в С++ в частности. Но ладно, по крайней мере это реализуемо в lsFusion, и поддерживается IDE. Хорошо, а в ООП-стиле возможно такое сделать: создать документ со стандартными реквизитами (номером, датой, пометками проведения и удаления), и от него наследовать свои документы (Реализация, Поступление, Счёт и т.п.)?

            Ещё я не нашёл в документации, есть ли в lsFusion аналоги стандартных функций 1С и проч. языков для работы с числами, строками и датами? Ну там целочисленное деление, взять по модулю, сдвиги разрядов влево-вправо. Для строк — Trim, сконвертировать число в строку, дополнить нулями слева до указанного числа разрядов. Для дат — день недели, месяц, число дней в месяце, работа с периодами и т.п.


            1. CrushBy
              03.10.2019 14:59
              +1

              Да можно. Создаете абстрактный класс Document добавляете туда свойства DATA и наследуете класс, например, SaleInvoice. У всех наследуемых классов будут эти же свойства доступны. Второй вариант — когда свойства у Document тоже абстрактные (ABSTRACT), а у конкретных классов DATA свойства, которые в явную имплементятся через abstract += concrete. Вот тут примеры.
              Тут тот же нюанс, как и в классической разработке. Делать класс и интерфейс или абстрактный класс. lsFusion поддерживает оба варианта, но разработчик сам решает что использовать, так как у каждого варианта есть свои преимущества и недостатки.

              По второму абзацу: так как lsFusion использует PostgreSQL по сути как «виртуальную машину», то такие штуки просто транслируются на PostgreSQL через FORMULA. Суть в том, что вы можете написать в литерале любое выражение на PL/SQL (в том числе обратиться и к пользовательским функциям в базе данных), и оно транслируется в запрос. Именно таким образом мы решаем все описанные выше проблемы в решениях.


              1. kryvichh
                03.10.2019 23:23

                Больше выбора для разработчика это прекрасно.

                Что касается функций. Да, это круто, что при крайней необходимости можно обратиться к нижележащей БД или Java и реализовать необходимое. Но, должен заметить, что элементарные функции по работе с числами, строками и датами, их преобразования, всё же должны реализовываться на уровне платформы. Они есть во всех языках программирования, в 1С, да даже в Access, Excel. Т.е. в платформе уже должны быть готовые модули с библиотечными функциями. А иначе:

                • Мне как потенциальному разработчику на lsFusion придётся глубоко изучать SQL-диалекты MS SQL, PostgreSQL и др. СУБД, с которыми будет работать ваша платформа, чтобы реализовать и отладить эти функции на всех диалектах.
                • Кто-то тоже будет делать такие же функции, но немного с другими именами и параметрами. И если я, допустим, решу использовать чей-то модуль lsFusion в своём приложении, то он потянет все эти модули. С которыми тоже придётся разбираться

                А когда есть стандартная библиотека, в которой, например, для извлечения подстроки используется функция Mid с параметрами Строка, Начальный символ, Длина подстроки (так в Excel), и все разработчики будут её использовать, то мне не придётся постоянно вспоминать что это. И я буду уверен, что эта библиотечная функция точно отлажена, и точно работает на любой СУБД, которую поддерживает платформа.

                Ещё лучше, если вы реализуете такие функции как методы классов (или в вашей терминологии свойства классов) строковых, числовых и проч. Чтобы к ним можно было обращаться через точку (Str.ToInteger). Тогда будет работать автодополнение кода в IDE.

                Но это, конечно, элементарные вещи, и вы скорее всего это и так прекрасно понимаете. А так пока получается довольно пустой фреймворк, хотя и с большим потенциалом. Буду следить за развитием.


                1. Veidt Автор
                  04.10.2019 00:06

                  На самом деле, в платформе уже есть куча готовых функций по работе с примитивами:
                  github.com/lsfusion/platform/tree/master/server/src/main/lsfusion
                  Например тут:
                  github.com/lsfusion/platform/blob/master/server/src/main/lsfusion/system/Time.lsf
                  И тут:
                  github.com/lsfusion/platform/blob/master/server/src/main/lsfusion/system/Utils.lsf
                  Но если их не хватает, можно дописать еще. А еще лучше дописать и сделать сделать pull request.

                  Ну и преобразования типов поддерживаются:
                  f(INTEGER i) = STRING(i);


                  1. kryvichh
                    04.10.2019 02:09

                    Да, именно такое имел ввиду. Но искал в документации. Ок, спасибо, посмотрим...


  1. APPLIX
    03.10.2019 09:33

    Так!..
    А у isFusion есть недостатки? или они есть только у 1С?


    1. Veidt Автор
      03.10.2019 09:34

      Вот тут человек частично описывал.


    1. IamAlexy
      04.10.2019 10:47

      главный недостаток — по уровню развития isFusion лет на 10 отстает от 1С проталкиваят пассажи типа «асинхронность это плохо» и «никому не надо управлять серверными вызовами»


      1. kryvichh
        04.10.2019 11:23

        Как я понял концепцию, lsFusion — это 3-звенка. Есть 1) СУБД, в которой хранятся данные, и на уровне которой осуществляется контроль физической и в некоторой степени логической целостности информации (это уже огромный плюс). Дальше 2) Сервер приложений, где исполняется большая часть бизнес-кода. И есть 3) клиентские приложения на разных платформах (десктоп, тонкий клиент, смартфон и т.п.), на котором работает пользователь.

        Платформа позволяет в случае чего перенести часть бизнес-логики в клиент, подключить торговое оборудование и проч., даже написать часть клиентского приложения в Java. Но тогда теряется скорость разработки. Т.е. платформа всё же заточена на трёхзвенную работу, где каждое звено решает свои задачи.


        1. IamAlexy
          04.10.2019 11:25

          платформа 8.0 тоже была трехзвенкой :)


          1. NitroJunkie
            04.10.2019 11:59

            Нет. Она код на клиенте в основном выполняла, постоянно бегая за данными на сервер. lsFusion только информацию о действиях пользователя передает, назад забирает изменения state, и применяет их. Прикладной логики на клиенте никакой не выполняется, вообще. (ну кроме клиентских действий но это для стыков)


            1. IamAlexy
              04.10.2019 12:13

              Прикладной логики на клиенте никакой не выполняется, вообще. (ну кроме клиентских действий но это для стыков)


              это как раз плохо…
              понятно что рано или поздно в до этого дорастете как 1С доросла -но выдавать то что вы еще не используете ровно потому что немного не ваш уровень автоматизации за недостаток — не очень корректно


  1. IamAlexy
    04.10.2019 10:15

    Специально зарегистрировался что бы прокомментировать.

    Почитал статью, почитал комментарии на хабре, почитал уже 2 ветки обсуждения этой статьи на мисте.

    Вывод: lsFusion отстает примерно лет на 10 от современной платформы 1с8 и соответственно все ограничения, костыли и «это не нужно» обусловлено именно этим состоянием развития платформы lsFusion.

    — серверными вызовами управлять нельзя (чтобы бы не писали в статье авторы после долгой дискуссии они это признали и это весьма печально)
    — стремление писать не запросы а функции платформенные думая что «чем меньше кода тем лучше»
    — любовь к отображению отдельно дерева иерархии отдельно содержимого папки
    — даже электронные счета-фактуры преподносятся как что то революционное (они в Белоруссии только появились)
    — если чего то в платформе нет — это не нужно (контекстные обсуждения, видеоконференции, голосовые звонки и тд)

    + так называемая ERP не содержит ни управления персоналом ни бухучета — по сути она автоматизирует узкую задачу — FMCG, нет того же WMS…

    Причем УТ11 как бы не является специализированной конфигурацией для автоматизации FMCG, но авторы там где им удобно критикуют как УТ11 не очень подходит для FMCG, а там где им не удобно (синхронизация с битриксом, CRM, СКД и отчеты) переходят к сравнению платформ и пытаются преподнести то от чего 1С отказалась много лет назад методологически и эволюционно как преимущество lsFusion над 1С

    в общем — неубедительная статья… для тех кто действительно знаком с 1С платформой и современными решениями на 1С статья весьма смешна…


    1. Veidt Автор
      04.10.2019 10:31

      Это статья вообще не про lsFusion.

      Вывод: lsFusion отстает примерно лет на 10 от современной платформы 1с8 и соответственно все ограничения, костыли и «это не нужно» обусловлено именно этим состоянием развития платформы lsFusion.

      Еще раз. Смотрите, основной тезис статьи какой. У 1С была относительно быстрая и простая разработка, но не масштабируемая. Они сделали шаг назад, и теперь у них медленная и сложная разработка, но масштабируемая. А могли бы сделать быструю, простую и масштабируемую. То есть с точки зрения разработки сделали шаг назад (а точнее вниз). И при этом сделав шаг вниз грубо говоря в сторону .Net, при этом не взяли ничего хорошо, что как раз у .Net есть.
      + так называемая ERP не содержит ни управления персоналом ни бухучета — по сути она автоматизирует узкую задачу — FMCG, нет того же WMS…

      Причем УТ11 как бы не является специализированной конфигурацией для автоматизации FMCG, но авторы там где им удобно критикуют как УТ11 не очень подходит для FMCG, а там где им не удобно (синхронизация с битриксом, CRM, СКД и отчеты) переходят к сравнению платформ и пытаются преподнести то от чего 1С отказалась много лет назад методологически и эволюционно как преимущество lsFusion над 1С

      В статье про решения ни слова. Там речь идет, чисто о платформе. А код из УТ приводится чисто как практика использования платформы. И многое от чего они отказались с большой вероятностью является просто следствием ограничений платформы. И то что вы говорите очень похоже на «все беды от мяса» из двенадцати стульев.
      — серверными вызовами управлять нельзя (чтобы бы не писали в статье авторы после долгой дискуссии они это признали и это весьма печально)

      Ими не то что нельзя (клиентские действия тоже есть), ими просто не надо управлять. Тут постоянно повторяют, что 1С платформа для решения бизнес-задач, а не для технарей, которые хотят управлять всем. Про ЭСЧФ и остальное вы из контекста вырвали. Ну и вы с УТ 11 про «это не нужно» тот же прием используете, в УТ11 сделали не так потому что «так не нужно».
      в общем — неубедительная статья… для тех кто действительно знаком с 1С платформой и современными решениями на 1С статья весьма смешна…

      Повторюсь в стопятьдесятый раз. Почитайте самый заплюсованный комментарий. Это Хабр. С чем то не согласны в статье напишите по пунктам.


      1. IamAlexy
        04.10.2019 10:37

        «Отказ от единого потока выполнения: разделение логики на сервер и клиент»

        на мисте подробно с вашими коллегами прошлись по этой теме.

        В вашей концепции: разделение не нужно и платформа сама всем рулит.
        По факту оказывается что когда у меня сложная форма расчета, у вас на каждое событие в элементах формы делается серверный вызов с неуправляемым возвратом данных с сервера.

        Для систем уровня «выбрали товар, ввели цену и распечатали накладную» — это не критично.
        Но, это логика платформы 1С десятилетней давности — которую платформа 1С переросла давно как раз в связи с развитием мобильных облачных и прочих клиентсерверных технологий с тонкими и веб клиентами.

        Вы же пытаетесть то что 1С переросла давно преподнести как ваш плюс и недостаток 1С.

        Пример: форма с сотней-другой элементов. Пока я заполню нужные для рассчета данные мне серверные вызовы не нужны… особенно контекстные. Вы же этим не управляете потому что платформа не может. Явный минус своей платформы вы преподносите как плюс а явный плюс платформы 1С преподносите как минус…


        1. Veidt Автор
          04.10.2019 11:05

          По факту оказывается что когда у меня сложная форма расчета, у вас на каждое событие в элементах формы делается серверный вызов с неуправляемым возвратом данных с сервера.

          Уже ответили. И если элементы не от чего не зависят, то и вызовов не будет. Плюс асинхронный вызов с парой байт при выходе пользователя из поля с точки зрения масштабируемости это ничто.
          которую платформа 1С переросла давно как раз в связи с развитием мобильных облачных и прочих клиентсерверных технологий с тонкими и веб клиентами.

          Переделала, потому что не смогла нормально реализовать. И в статье про это есть.


          1. IamAlexy
            04.10.2019 11:20

            Уже ответили. И если элементы не от чего не зависят, то и вызовов не будет. Плюс асинхронный вызов с парой байт при выходе пользователя из поля с точки зрения масштабируемости это ничто.


            по факту с конкретное примером уже ответили что каждое изменение — будет вызов и обратка и я не могу этим управлять.

            пример еще раз:

            20 элементов на форме, я последовательно их заполняю.
            все 20 участвуют в расчете и результаты расчета должны отобразиться на форме и должны обновлять расчет при каждом изменении элемента.

            сколько у вас будет серверных вызовов?
            а если мне не надо делать расчет пока не будут ВСЕ элементы заполнены — серверные вызовы все равно пройдут… и вернутся…
            я не могу на клиенте не делать серверный вызов…

            Переделала, потому что не смогла нормально реализовать. И в статье про это есть.


            В статье не про это.
            Вы бизнес-кейс напишите для начала -а потом сравните с тем как это сделано в 1С и оцените «решена задача для пользователя или нет»


            1. Veidt Автор
              04.10.2019 11:42

              а если мне не надо делать расчет пока не будут ВСЕ элементы заполнены — серверные вызовы все равно пройдут… и вернутся…

              Сделайте действие и пусть пользователь жмет это действие.
              серверные вызовы все равно пройдут… и вернутся…

              Ну даже если пройдут и вернутся. Еще раз, вы представляете, что такое даже если 10000 пользователей будут слать по одному асинхронному хттп запросу при выходе из поля. Вы видели что в гугле, когда в поисковике набираете, постоянно шлются асинхронные хттп-запросы, чтобы подсветить вам результаты. На масштабируемость это никак не влияет (более того вы также предлагаете с вводом в список делать), а вы представляете сколько у них таких запросов.
              Вы бизнес-кейс напишите для начала

              А смысл? Вы все равно скажете, что это не нужно.


              1. lair
                04.10.2019 11:45

                Еще раз, вы представляете, что такое даже если 10000 пользователей будут слать по одному асинхронному хттп запросу при выходе из поля.

                Ну я вот представляю.


                На масштабируемость это никак не влияет

                Напомните, пожалуйста, lsFusion умеет конфигурации "один сервер БД — сто серверов приложений"?


                1. Veidt Автор
                  04.10.2019 11:49

                  Ну я вот представляю.

                  И как? По вашему какой сервак, нужен чтобы просто послать http запрос без body и сразу получить пустой ответ с нагрузкой, где-то 100 запросов в секунду?
                  Напомните, пожалуйста, lsFusion умеет конфигурации «один сервер БД — сто серверов приложений»?

                  Естественно.


                  1. lair
                    04.10.2019 11:53

                    По вашему какой сервак, нужен чтобы просто послать http запрос без body и сразу получить пустой ответ с нагрузкой, где-то 10 запросов в секунду?

                    Любой разумный. Я не удивлюсь, если t2.micro такое выдержит.


                    Естественно.

                    Если не секрет, как в этой ситуации работает реактивность вида "один пользователь изменил значение в форме, другой пользователь это немедленно увидел"?


                    1. Veidt Автор
                      04.10.2019 11:57

                      Любой разумный. Я не удивлюсь, если t2.micro такое выдержит.

                      Видите, а тут человек, активно доказывает, что это самая главная проблема масштабируемости и производительности.
                      Если не секрет, как в этой ситуации работает реактивность вида «один пользователь изменил значение в форме, другой пользователь это немедленно увидел»?

                      Через базу. Речь все-таки о бизнес-приложениях. Есть еще всякие уведомления, но они domain-specific. То есть игрушку написать сложно будет. :)


                      1. IamAlexy
                        04.10.2019 12:36

                        ну как я и писал: так как вы не сталкивались с задачей — вы отметаете инструменты разработанные другими для решения задач с которыми вы не сталкивались…

                        мало того — считаете что эти инструменты не нужны, хотя мировая практика показывает что как раз наоборот…


                      1. lair
                        04.10.2019 12:56

                        Видите, а тут человек, активно доказывает, что это самая главная проблема масштабируемости и производительности.

                        А я не понимаю, как одно другому противоречит. Вы спросили, сколько стоит получить запрос и послать пустой ответ, а не сколько стоит сделать полезную работу на сервере.


                        Через базу.

                        То есть у вас база умеет слать уведомления апп-серверу?


                        1. Veidt Автор
                          04.10.2019 13:55

                          То есть у вас база умеет слать уведомления апп-серверу?

                          Не начинайте :) Тут и так уже под тысячу комментариев. Я написал, что онлайн игру не напишите. Тут .Net выиграл.


                          1. lair
                            04.10.2019 13:56

                            Да онлайн-игры-то не при чем. У меня просто где-то в подсознании брезжит заявление одного из ваших коллег о том, что все формы в lsFusion — реактивные, и мне еще тогда было интересно, как это масштабируется. Но, похоже, я все-таки что-то не так понял.


                            1. Veidt Автор
                              04.10.2019 14:14

                              Они реактивные вот в каком плане (пример снизу чтобы лучше понять внутрянку):
                              codesandbox.io/s/1y0o894rx4

                              Вы шлете изменение (change x на 5), а сервер сам определяет, что надо поменять, присылает изменение state'а и дорендеривает это изменение. Такой React только и со стороны бэка.


                              1. lair
                                04.10.2019 14:20

                                Проблема маркетинговых терминов (в том числе и "реактивный") в том, что каждый понимает их по-своему. А потом спрашивает у оппонента: "а у вас все формы по умолчанию реактивные"? И тот такой "блин, из коробки нет, никогда не было надо, блабла", а потом выясняется, что первый под реактивностью понимает то, что для второго является само собой разумеющейся оптимизацией отрисовки.


                    1. IamAlexy
                      04.10.2019 12:46

                      В этом то и дело — недостатки платформы компенсируются дополнительными серваками и дополнительной нагрузкой на сервера…

                      1С позволяет при необходимости решать это средствами разработчика не нагружая сервер.

                      Причем работать по схеме «пофиг — сервер докупим» так же никто не запрещает…

                      но почему то возможность 1С управлять серверными вызовами — авторы статьи ставят в МИНУС платформе…


                      1. CrushBy
                        04.10.2019 12:49

                        В минус никто не ставит. В минус ставят то, что она не умеет это автоматически делать. Это тоже самое, что сейчас говорить, что файловые СУБД значительно лучше SQL серверов. Там же вручную можно по файликам бегать значительно эффективнее. А планировщик запросов ошибаться может. Так?


                        1. IamAlexy
                          04.10.2019 12:57

                          вы теплое с мягким путаете…
                          я могу рисуя форму 1С на все контролы вешать серверный вызов по умолчанию и у меня форма будет как у вас делать при каждом событии серверный вызов…

                          а могу в зависимости от логики прописать через концепции на сервере, на клиенте и тд — схему обмена данным клиента с сервером для оптимизации нагрузки и ускорения работы формы…

                          я как разработчик САМ решаю как мне делать исходя из бизнес-задачи.

                          вы же говорите что нет, то что у меня ЕСТЬ ВОЗМОЖНОСТЬ управлять этим — это плохо…


                      1. Veidt Автор
                        04.10.2019 12:51

                        Нет, просто lsFusion не экономит на спичках. А экономит, на том чем надо экономить — оптимизаторах запросов, посылке правильных диффграм, кэшировании и т.п. А параметры серверов тут уже где-то приводили.


                        1. IamAlexy
                          04.10.2019 12:58

                          я не увидел у вас ни одной сложной формы с сколь бы то ни было сложным расчетом.

                          у вас весь учет — автоматизация сети ларьков с соответствующими потребностями… где действительно все возможности 1С 8.3.16 не нужны и достаточно возможностей 1С 7.7

                          то есть ваши задачи — это задачи реализуемые на платформе 1С десятилетней давности…


                          1. Veidt Автор
                            04.10.2019 13:59

                            у вас весь учет — автоматизация сети ларьков с соответствующими потребностями…

                            Сети гипермаркетов и супермаркетов с 10к сотрудников и тысячами бизнес-процессов.
                            Тут и тут читать.


                            1. IamAlexy
                              04.10.2019 14:08

                              не увидел ни одной сложной формы… ни одного сложного расчета…
                              всякие бухгалтерские балансы и зарплатные расчеты/отчеты вы обошли в своей ЕРП, производства и каких либо расчетов у вас нет…


                            1. Ta_Da
                              04.10.2019 14:28

                              Пример плохой. У приведенного вами клиента 17 магазинов указно на сайте. Вы хотите сказать, что у него в каждом из 17 магазинов по 500+ пользователей вашей системы? И это при том что у указанного клиента есть еще 1С, BI, фронт и «интеграция с другими системами»?

                              Про «тысячи бизнес-процессов» тоже давайте определимся. Пример хотя бы одного бизнес-процесса подробно приведите, чтобы был понятен масштаб и сложность и не было недопонимания и передергиваний с обеих сторон.


                              1. Veidt Автор
                                04.10.2019 14:36

                                Этой сети, если вы не в курсе, другая сеть еще принадлежит. И я написал 10к сотрудников, а не одновременных пользователей. Одновременных пользователей у них в сумме около тысячи.

                                Вы по ссылкам пройдите. Там небольшая часть бизнес-процессов контурно описано.


                                1. Ta_Da
                                  04.10.2019 14:45

                                  И я написал 10к сотрудников, а не одновременных пользователей.

                                  А какая разница, сколько в сети сотрудников, если они в вашей программе не работают, а расчет зарплаты в 1С, не совсем понимаю?
                                  Показывает что это не «ларек»? Так под ларьком, не обязательно подразумевается буквально палатка с овощами. Это скорее вопрос сложности бизнеса/уровень автоматизации/сложность процессов.

                                  Вы по ссылкам пройдите. Там небольшая часть бизнес-процессов контурно описано.

                                  Проблема именно в том что «контурно». Т.е. сложно оценить и понять о чем конкретно речь.
                                  То что упомянуто (например, автоподпитка зала товарами с собственного склада по мере продажи и формирование ЭЦП) на «сложный бизнес-процесс» не тянет.


                                1. IamAlexy
                                  04.10.2019 14:47

                                  ну… у 1С по сумме рабочих мест больше миллиона :) :)


                            1. skrimafonolog
                              04.10.2019 17:13

                              Сети гипермаркетов и супермаркетов с 10к сотрудников и тысячами бизнес-процессов.

                              Сколько % из этих сотрудников не продавцы и не грузчики?
                              А менеджеры-товароведы и т.п.? Это те, кто собственно и дает нагрузку на подобные системы.


              1. IamAlexy
                04.10.2019 12:18

                Сделайте действие и пусть пользователь жмет это действие.


                ну то есть видите — вы начинаете придумывать костыли в виде кнопок там где они не нужны…
                а придумываете потому что по другому не можете сделать.

                но самое что вы критикуете платформу которая:
                1. может без вашего костыля решать подобные задачи.
                2. может так же как и у вас через кнопки решать подобные задачи.


            1. kryvichh
              04.10.2019 11:56

              Там же у них есть т.н. локальные свойства: объявляете свойство как DATA LOCAL, и работаете с ним локально, без пересылок на сервер.

              Disclaimer: я только начал смотреть lsFusion, могу ошибаться.


              1. IamAlexy
                04.10.2019 12:48

                интересен комментарий авторов статьи тогда в двойне… :)

                они тогда противоречат своей же платформе которая тоже умеет управлять серверными вызовами, хотя текущие персоналии автоматизирующие бизнес этой возможностью не пользуются и пишут статьи что это не нужно :) :) :)


      1. IamAlexy
        04.10.2019 10:39

        Еще раз. Смотрите, основной тезис статьи какой. У 1С была относительно быстрая и простая разработка, но не масштабируемая. Они сделали шаг назад, и теперь у них медленная и сложная разработка, но масштабируемая. А могли бы сделать быструю, простую и масштабируемую. То есть с точки зрения разработки сделали шаг назад (а точнее вниз). И при этом сделав шаг вниз грубо говоря в сторону .Net, при этом не взяли ничего хорошо, что как раз у .Net есть.


        вы тут просто заблуждаетесь: 1С как раз сделала шаг вперед и система от этого не перестала быть менее удобной для разработки и для быстрых решений.
        Вы сейчас повторяете то что 10 (десять) лет назад повторяли все те кто доказывал что платформа 8 не нужна и все можно делать на 7.7… особо горячие головы пытались на 7.7+1С++ ваять аналоги СКД и конструкторов запроса…

        это рассуждения уровня «автомобили — шаг назад по сравнению с гужевым транспортом… раньше как было, утром покормил коня сеном и поехал в город… дорога не нужна, бензин не нужен… конь проголодался- пощипал травку и дальше поехал» :)


        1. Veidt Автор
          04.10.2019 11:07

          это рассуждения уровня «автомобили — шаг назад по сравнению с гужевым транспортом… раньше как было, утром покормил коня сеном и поехал в город… дорога не нужна, бензин не нужен… конь проголодался- пощипал травку и дальше поехал» :)

          Вы реально не понимаете о чем речь. Платформа могла бы все описанные вещи делать сама. То что вы пишете, чистой воды луддизм. Конвеер это плохо — так как он не гибкий, давайте использовать ручной труд.


          1. IamAlexy
            04.10.2019 11:23

            еще раз аналогия которую приводил на мисте:

            есть айфон с автоматическим режимом съемки — и он идеален для…
            а есть профессиональный фотоаппарат зеркалка с ручным режимом…

            вы пытаетесь меня убедить что профессиональный фотоаппарат хуже айфона потому что… в мире селфи ручные настройки не нужны…

            я же вам объясняю что у меня есть и авто режим и ручные. и в зависимости от задачи я работаю с авто режимом а когда надо — руками настраиваю параметры съемки.


            1. Veidt Автор
              04.10.2019 11:36

              Нет, у вас есть камера уровня кнопочного телефона (ОФ и автоматические блокировки, которые под нагрузкой будут очень неэффективно работать) и профессионального аппарата.

              А идеальный вариант, это аппарат, который сможем максимальные настройки вытянуть одной кнопкой (ну и плюс базовые настройки). И такие аппараты это масс-маркет, а профессиональный аппарат, оставьте профессионалам (и тогда это не 1С, а скорее .Net с React будет).


              1. IamAlexy
                04.10.2019 12:53

                Если вы сравните просто возможности платформы 1С и платформы lsFusion — вы увидите что ваше сравнение мягко говоря некорректно… платформа lsFusion по функциональности лет на 10 отстает…

                Если вы сравните «коробочные решения» и будите сравнивать вашу ERP но даже не с 1С:ERP2 а с простой торговой конфигурацией УТ11 — вы даже тут увидите что по функциональным возможностям ваша конфигурация отстает на те же 10 лет… и даже близко ваша ERP не подошла к функциональностям УТ11…

                по этому аналогия «фотоаппаратов» — весьма корректна.
                у вас узкое решение для автоматизации продаж с лотка… сети лотков…
                и на мир вы смотрите со стороны торгового лотка не понимая потребности другх аспектов автоматизаций бизнеса…

                и соответственно статья написана с учетом этого и по этому столь наивна…


        1. pauls0
          04.10.2019 12:18

          Тем что вам не надо думать. А работать все равно будет очень быстро.


          8.X это не шаг вперед

          это шаг в сторону по сути

          решили сделать «по взрослому», но одновременно оставить базовый девиз «каждая кухарка должна залезть в конфигуратор». а так не бывает

          в итоге продолжаем уже 10 лет из кубиков «ж» «0» «п» «а» выкладывать слово «вечность»

          ОФ бросили, сделали УФ (но до ума до сих пор не довели — нагруженный gui в нем не сделать), присобачили клиент/сервер и асинхронность сбоку — жизнь заставляет, но нормальную реализацию мы делать не будем по тому что не хотим и не можем. в 7.7 человек занимался ананизмом в выборках, теперь во взаимодействиях между серверной и клиентской стороной формы. причем в бОльших количествах

          вещи триумфально выпиленные из gui типа «показать в списке» вернули на место когда поняли что в очередной раз обделались

          основные сущности которыми оперирует программист давно переросли понятие «одиночный справочник». сущность «Основное средство» или «Сотрудник» это по сути уже 2..3 справочника и целый ворох регистров сведений. Защиты логики по сути никакой нет, каждый отчет интепретирует состояние объекта по своему в дербях текста запроса из пары тысяч строк кода, концы с концами вообще никак не сходятся

          и еще ворох всего


          1. IamAlexy
            04.10.2019 12:54

            1С развивается…
            да… какие то вещи выпиливаются потому что с ходу в новые парадигмы не влезают… но постепенно возвращаются в другом исполнении но вписанные в новые парадигмы…

            простейший пример: управление видимостью элементов с серверным вызовом…
            как только развили платформу — сразу эту ересь отключили и теперь изменение видимости не делает серверный вызов…


            1. pauls0
              04.10.2019 14:09

              дада

              еще лет 15 и вернут назад просмотр состояния наложенных программных отборов на список… уберут эту порнографию из «фиксированные настройки», «пользовательские настройки». Пользователи перестанут биться башкой от стол от заклинаний типа «Невозможно применить фиксированные настройки. Пересекаются элементы отбора»…

              верю-верю


              1. gennayo
                04.10.2019 14:16

                Где-то читал, почему так получилось с настройками, но не помню, что и как. А вообще, изначально СКД, вроде как, придумал один человек, и чем он руководствовался, когда сделал такой дизайн — неизвестно :))


                1. pauls0
                  04.10.2019 14:26

                  ок.

                  а разработчики зупа что употребляют?

                  почему отчет о выявлении проблем между состоянием сотрудников и штатным расписанием после внесения изменений пишет «Требуется проверка...»

                  КАКАЯ?? ЧЕГО?? КАК ЕЕ ЗАПУСТИТЬ?? или она уже была запущена и ошибки остались?

                  оказывается надо зайти в настройки администрирования и либо изменить шедуллер по задаче которая этот отчет запускает (стоит 1 раз в день!) либо просто запустить руками

                  рукалицо просто…

                  вот как пользователь саппортер должен про это узнать?! КАК?!

                  ни надписи поясняющей, ни гиперссылки на переход в настройки, ничего…

                  ну я понимаю что 1с не аппле, но головой то надо хоть чуть-чуть думать?!

                  и вот так практически ВЕЗДЕ


                  1. gennayo
                    04.10.2019 14:31

                    А ЗУП вообще рептилоиды пишут, судя по всему, большинство 1С-ников предпочитают ЗУП издалека палочкой переворачивать :))


      1. IamAlexy
        04.10.2019 10:45

        Ими не то что нельзя (клиентские действия тоже есть), ими просто не надо управлять. Тут постоянно повторяют, что 1С платформа для решения бизнес-задач, а не для технарей, которые хотят управлять всем. Про ЭСЧФ и остальное вы из контекста вырвали. Ну и вы с УТ 11 про «это не нужно» тот же прием используете, в УТ11 сделали не так потому что «так не нужно».


        ниже есть пример.
        Поясню еще раз: бизнес -задачи не сводятся к заполнению товарной накладной или пробитию чека — с этим фронт справляется на ура…
        та же УТ11 она не для автоматизации FMCG предназначена — сравнивать ее с вашим решением как минимум не умно… разные весовые категории (не в пользу вашего решения) и разное назначение.

        по поводу бизнес-задач: когда задача бизнеса сводится не к продажи товара со склада а например к расчету изделия через специализированную форму и в этой форме более двух реквизитов, а предполагается работа в облаке, на тонких клиентах и вебе — то управление серверными вызовами весьма востребованно… и это платформа это обеспечивает — как раз эволюционно дойдя до этого посредством постепенного развития и приобщаясь к современным потребностям…

        по поводу «УТ11 сделали не так потому что «так не нужно».» — будьте последовательными и честным, речь шла про организацию подбора номенклатуры деревом с двойной компановкой формы — дерево слева содержимое справа. Вам, или вашим коллегам, показали скриншоты как это было ШТАТНОЙ формой в старых конфигурациях и объяснили почему от такой формы организации сознательно отказались в УТ11. причем не потому что «платформа не позволяет» а потому что методологически в концепции работы в тонких и прочие веб клиентах удобнее делать несколько по-другому…


        1. Veidt Автор
          04.10.2019 11:09

          Поясню еще раз: бизнес -задачи не сводятся к заполнению товарной накладной или пробитию чека — с этим фронт справляется на ура…

          Основные бизнес-задачи, это работа с данными, ограничениями, событиями и формами. Все эти «тонкие настройки» бизнесу нужны даже не во вторую очередь.
          работы в тонких и прочие веб клиентах удобнее делать

          Эта вещь которая разработчика должна волновать в последнюю очередь. Это проблемы платформы.


          1. IamAlexy
            04.10.2019 11:24

            Эта вещь которая разработчика должна волновать в последнюю очередь. Это проблемы платформы.


            ну если у разработчика не будет инструментария — как платформа догадается каким образом фильтровать справочник товаров и материалов?

            monosnap.com/file/ORhXPM24Lg4tmcFPob8Qs92cTY12XJ

            вы же наличие инструментария ставите как МИНУС платформы одновременно соглашаясь что подобный кейс реализовать не способны на своей платформе…


            1. Veidt Автор
              04.10.2019 11:44

              как платформа догадается каким образом фильтровать справочник товаров и материалов?

              Магия например (читайте CONSTRAINT CHECKED BY). Ну или можете форму любую задать, которую хотите:
              ON CHANGE
              DIALOG myForm OBJECTS myObject = stock(i) CHANGE;
              И в форме любой фильтр.


              1. IamAlexy
                04.10.2019 13:00

                я предоставил видеоролик как это я реализовал в 1С…
                можете подобный пример предоставить в lsFusion?

                ввод по строке, автоподбор по вхождению с фильтром на варианты автоподбора по заданным параметрам?


  1. infrastructure-engineer
    04.10.2019 10:15

    В пост призывается alexey-lustin


  1. IamAlexy
    04.10.2019 10:29

    isFusion не позволяет на уровне разработчика определять контекст вызова — клиентский, серверный, контекстный или неконтекстный.

    на мисте было долгое обсуждение с примерами и представители isFusion это признали

    кратко: при реализации логики чуть сложнее торговли в розницу штучным товаром, если у вас есть форма где много реквизитов, элементов и реализован некий расчет — например форма-калькулятор изделия, у вас платформа isFusion будет делать серверный вызов при каждом изменении каждого реквизита и автоматически решать что слать обратно на клиента — может 1 реквизит и тогда накладные расходы невелики а может и все реквизиты формы. Разработчик не управляет тем что просчитывается на клиенте а для чего нужен серверный вызов.

    ну и по мелочи — например нет события изменения части текста в поле ввода — простейшая задача контекстного подбора при вводе данных с фильтром результатов поиска — нереализуема и требует костылей в виде открытия форм с наложением фильтров на столбцы… и так куда не ткнись…

    Коллеги из lsFusion пишут про избыточность событий в платформе 1С, но эти «события» родились там не просто так — это востребованные события и под каждый есть свой кейс.

    Пример: событие автопобора в строке которое можно перехватить при изменении в форме элемента без окончания редактирования элемента.
    Коллеги из lsFusion объявили что этого нет и это не нужно.
    Но для бизнеса это нужно, если у вас бизнес чуть сложнее чем подбор из формы товаров для продажи.
    Пример:

    monosnap.com/file/ORhXPM24Lg4tmcFPob8Qs92cTY12XJ

    Ввод по строке — срабатывает во первых поиск по справочнику из 100500 элементов номенклатуры, а затем на него откладывается отбор по трем параметрам отображая только те материалы которые можно использовать в данном расчете и соответственно.

    Как данная задача решается в lsFusion?
    В текущих конфигурациях этой ERP такой задачи не стоит — потому что это не ERP а автоматизация торговых точек… но если бы такая задача стояла, коллеги предлагают открывать форму с оборами по маске…

    И таких мелочей, повторюсь — куда не ткни.

    И это не обсуждая такие платформенные сущности как взаимодействие — когда средствами платформы с нулем строчек кода у вас есть видеочат с конференцией на 9 человек, аудио звонки, текстовый КОНТЕКСТНЫЙ чат с привязкой к объектам системы и вложенными файлами.
    ps: коллеги из lsFusion ничего умнее не предложили чем вайбер или телеграмм…


    1. NitroJunkie
      04.10.2019 11:00

      обратно на клиента — может 1 реквизит и тогда накладные расходы невелики а может и все реквизиты формы

      Нет. Она будет слать ровно то что изменилось.
      Ввод по строке — срабатывает во первых поиск по справочнику из 100500 элементов номенклатуры, а затем на него откладывается отбор по трем параметрам отображая только те материалы которые можно использовать в данном расчете и соответственно.

      Ну в lsFusion для этого отдельная форма открывается, где можно например дополнительно фильтровать. И это часто эргономичнее выпадающего списка.

      Но вообще еще раз, статья не про lsFusion. Статья про 1С. Про lsFusion будет отдельная статья.


      1. IamAlexy
        04.10.2019 11:06

        Нет. Она будет слать ровно то что изменилось.

        а если мне НЕ НАДО изменять?
        грубо говоря: у меня есть 20 реквизитов на форме и я последовательно меняю кажды из них — сколько будет запросов на сервер а сколько обратно?

        Ну в lsFusion для этого отдельная форма открывается, где можно например дополнительно фильтровать. И это часто эргономичнее выпадающего списка.


        так и про то что вы пишете про избыточные события не понимая что они на бизнес-процессы завязаны и реализованы не просто так. разработчики платформы все эти, по вашему избыточные, события не просто так придумали от того что им делать не чего было — платформа более 10 лет развивается и с оглядкой на миллионы пользователей…

        простейший пример с формой выбора материала я вам привел.
        и это всяко эргономичнее, быстрее, проще и удобнее чем открывать форм с деревом номенклатуры и в ней через маски/отборы искать…
        так кстат было раньше в старых версиях платформы, в решения на 7.7 например.
        но время не стоит на месте и при работе в веб-браузере на планшете открывать лишние формы с деревьями — очень неудобно, долго и неэргономично…


        1. NitroJunkie
          04.10.2019 11:12

          а если мне НЕ НАДО изменять?
          грубо говоря: у меня есть 20 реквизитов на форме и я последовательно меняю кажды из них — сколько будет запросов на сервер а сколько обратно?

          Еще раз, если на форме есть реквизиты зависящие от изменяемого реквизита, то запрос в любом случае надо делать. Так как если вы остановите ввод на 15 реквизите и форма не обновится это будет воспринято как баг. И еще раз, в данном случае, это чистая экономия на спичках.
          но время не стоит на месте и при работе в веб-браузере на планшете открывать лишние формы с деревьями — очень неудобно, долго и неэргономично…

          И это говорят люди, у которых в списке нельзя редактировать, и они говорят что для изменений надо открывать форму (почитайте обсуждения в статье про подбор).


          1. IamAlexy
            04.10.2019 11:32

            Еще раз, если на форме есть реквизиты зависящие от изменяемого реквизита, то запрос в любом случае надо делать. Так как если вы остановите ввод на 15 реквизите и форма не обновится это будет воспринято как баг. И еще раз, в данном случае, это чистая экономия на спичках.


            признайте, вы ничего кроме торговли не автоматизировали?

            ну еще раз, вот пример расчета стоимости изделия:

            image

            зачем мне при изменении каждого параметра пересчитывать стоимость на сервере если я могу это посчитать во первых на клиенте, а во вторых могу определить когда надо считать а когда нет (из за того что остальные праметры не заполнены) и не делать серверный вызов до тех пор пока он действительно необходим?

            в вашей концепции при изменении каждого параметра — ширина, длина и тд (они же влияют на расчет) будет идти каждый раз серверный вызов…

            и где тут «преимущество»?

            причем заметьте — я могу так же не парясь все фигачить каждый раз с серверным вызовом как у вас (что я и делаю в простых ненагруженных формах и сценариях) — но в данном примере я явно управляю оными…


            1. Veidt Автор
              04.10.2019 11:46

              зачем мне при изменении каждого параметра пересчитывать стоимость на сервере если я могу это посчитать во первых на клиенте

              А почему не посчитать на сервере. А главное непонятно зачем. Вы бизнес-задачу решаете.
              в вашей концепции при изменении каждого параметра — ширина, длина и тд (они же влияют на расчет) будет идти каждый раз серверный вызов…
              и где тут «преимущество»?

              Тем что вам не надо думать. А работать все равно будет очень быстро.
              причем заметьте — я могу так же не парясь все фигачить каждый раз с серверным вызовом как у вас

              Нет у вас ВСЕГДА надо напрягаться и делить все на сервер и клиент. А в lsFusion не надо. Как и в SAP.


              1. pauls0
                04.10.2019 11:54

                Тем что вам не надо думать. А работать все равно будет очень быстро.


                вы модель не понимаете…

                1с сначала создает проблемув том, что отвратительно работает сериализация гоняющая данные между клиентом и сервером или общей масштабируемостью решений — когда общая кривая это не логарифм (как все мечтают), а экспонента — т.е. чтобы вы не делали всё встает колом

                а потом дает «инструмент»… «для решения». сами проблему создали, сами принесли миру избавление — не забыв сшибить за это денежку…

                и вновь продолжается бой! и люди контуженные скд на оба полушария с радостным воем устремляются вновь на баррикады


                1. IamAlexy
                  04.10.2019 13:03

                  логику включите:

                  рассмотрим не 1С а некую клиент-серверну систему в вакууме на тонком канале между клиентом и сервером:

                  1. вариант — каждое изменение формы из 100 реквизитов вызывает изменение и серверный вызов… пока заполнили 100 реквизитов сделали 100 серверных вызовов

                  2. вариант — изменения каждого из 100 реквизитов обрабатываются на клиенте и только по достижении минимально необходимого количества данных для расчета отправляются на сервер — делается 1 серверный вызов.

                  где нагрузка будет на канал и сервер выше?


                1. kryvichh
                  04.10.2019 13:14

                  Я думаю так, надо сделать эти 2 решения на 1С (с ручным управлением распределением задачи: что на клиенте делать, что на сервере), и на lsFusion (где будет решаться только бизнес-задача, а не ломать голову что и когда куда послать, чтобы ничего не поломалось). И тогда замерить объёмы передаваемых между уровнями системы данных, время затраченное на написание, объём написанного вручную кода — вот тогда можно будет судить кто лучше. Хотя даже тогда наверное стороны не придут к согласию, но по крайней мере нейтральной стороне можно будет сделать какой-то вывод…


                  1. IamAlexy
                    04.10.2019 13:18

                    я просил примеров сложных форм с сложными расчетами — их нет пока в lsFusion по этому все дискуссии сугубо теоретические…

                    а в теории в любом случае 1 серверный вызов лучше чем 100 серверных вызовов…


              1. IamAlexy
                04.10.2019 13:16

                А почему не посчитать на сервере. А главное непонятно зачем. Вы бизнес-задачу решаете.


                потому что 1 серверный вызов всегда проще легче чем 100 серверных вызовов…
                а когда у вас 100 клиентов сидит и считает то 100 вызовов всяко менее нагружают систему чем 10000 вызовов…


              1. skrimafonolog
                04.10.2019 17:30

                зачем мне при изменении каждого параметра пересчитывать стоимость на сервере если я могу это посчитать во первых на клиенте


                А почему не посчитать на сервере. А главное непонятно зачем. Вы бизнес-задачу решаете.


                Это и удобнее пользователям — быстрее отклик в удаленных системах.
                И ниже нагрузка на сервер в нагруженных системах — простым и естественным путем достигается.


  1. IamAlexy
    04.10.2019 10:31

    ну и последнее:

    разработчики lsFusion — будьте последовательными.
    Сравниваете платформы -сравнивайте платформы.
    Сравниваете отраслевые решения — сравнивайте отраслевые решения.

    Ваша статья реально выглядит весьма убогой и смешной, наивной даже — для любого разработчика 1С…


    1. NitroJunkie
      04.10.2019 11:01

      Ну так ответьте по пунктам, что не так. И тут в комментариях, если вы не заметили, много опытных разработчиков 1С отметилось, которые в целом согласились со всеми пунктами.


      1. IamAlexy
        04.10.2019 11:13

        неужели все эти опытные разработчики не в курсе что весь мир уходит от модальных вызовов?

        вы же отказ от модальности, асинхронность преподносите как НЕДОСТАТОК… серьезно??

        на минутку, 2014 год… 5 лет назад:

        blog.chromium.org/2014/07/disabling-showmodaldialog.html
        bugzilla.mozilla.org/show_bug.cgi?id=981796


        1. pauls0
          04.10.2019 11:48

          реализация асинхронности «от 1с» — это нечто выдающееся? рыыыыли?

          это настолько убогое изложение устаревшей модели APM из C#, помноженное на традиционное «доступно и всерьез» — а тут люди им как флагом размахивают…

          мдя


          1. IamAlexy
            04.10.2019 13:04

            вы статью топикстартера почитайте.
            там речь идет о том что АСИНХРОННОСТЬ ВООБЩЕ НЕНУЖНА И АСИНХРОННОСТЬ ЭТО ПЛОХО

            как ее реализует 1С это другой вопрос, речь про концепт статьи — типа 1С сделала плохо отказавшись от синхронности…

            налицо полное непонимание автором статьи трендов развития технологий… куда мир и прочие гугли катятся…


            1. Veidt Автор
              04.10.2019 14:03

              У вас все нормально с логикой? В статье нигде не говорится, что асинхронность плохо, а что синхронность тоже нужна. То есть чтобы был выбор и синхронно и асинхронно. 1С сейчас позволяет только асинхронно открыть (речь ессно про тонкий и веб клиенты).


              1. IamAlexy
                04.10.2019 14:10

                в статье под названием «почему не 1С» и вводной «мы щас поясним почему 1С плохая» — глава называется «отказ от синхронности».


                1. Veidt Автор
                  04.10.2019 14:17

                  И? Отказ от синхронности плохо != асинхронность — плохо. То есть нужно и то и то.


        1. Neikist
          04.10.2019 12:48

          Посмотрите на дарт или котлин и как там асинхронность реализуется. Подозреваю в других современных языках вроде похоже, просто эти два из тех про которые точно знаю, а не примерно.


          1. IamAlexy
            04.10.2019 13:05

            вопрос не в том КАК а вопрос в самом принципе наличия асинхронности…

            вы статью автора читали?
            он же загоняет как раз на то что «1с ушла от синхронности это плохо это минус а у нас синхроность и нет асинхронности это хорошо по этому мы лучше 1С»


            1. Neikist
              04.10.2019 13:13

              Даже перечитал, думаю вдруг неправильно запомнил, нет, в статье написано ровно то что я выше написал. Вместо того чтобы сделать по человечески как в разных современных платформах и языках — мучаться с асинхронностью заставили разработчика.

              Что же они сделали? Думаете, попытались сохранить состояние потока выполнения, передать выполнение новому потоку, а по его завершению автоматически восстановить старое состояние? Как бы не так, делать что-то автоматически это, похоже, не их стиль. В 1С опять-таки решили все переложить на разработчика.

              З.Ы. Как это сделано у них я честно говоря вообще не нашел (да и не искал, мы здесь все таки 1с обсуждаем, а не lsFusion)


              1. IamAlexy
                04.10.2019 13:23

                Автор прямо пишет в качестве минусов «почему не 1С» заголовок «отказ от синхронности»

                То есть автор солгал в статье?


                1. Neikist
                  04.10.2019 13:27

                  Нет, потому что 1с отказались от синхронности с т.з. программиста. В котлине и дарте с т.з. программиста асинхронный код может выглядеть точно так же как синхронный. В 1с же это, увы, не так.


                  1. pauls0
                    04.10.2019 13:37

                    в 1с не бояре. переживут без async/await


                    1. IamAlexy
                      04.10.2019 13:42

                      кто вам сказал что нет аналогов async/await?


                      1. pauls0
                        04.10.2019 13:45

                        ну порадуйте…

                        НачатьВызов(ОписаниеОповещения, Параметры) и т.п. это не полноценный аналог


                        1. IamAlexy
                          04.10.2019 13:50

                          какая практическая задача не решается средствами 1С а решается каноничными async/await?


                          1. Neikist
                            04.10.2019 13:53
                            +1

                            Удобство написания и чтения кода?


                            1. pauls0
                              04.10.2019 14:00

                              Удобство написания и чтения кода?


                              не боярам 1С этого не надо…

                              они жрут все что им валят в корыто


                            1. IamAlexy
                              04.10.2019 14:04

                              вопрос привычки…
                              для меня например JS неудобен и непонятен…


                              1. Neikist
                                04.10.2019 14:07

                                Для меня тоже, но по причине того что я его не изучал и из за динамической типизации. Даже с прототипным наследованием в принципе готов смириться.
                                Тем не менее если бы вам в 1с добавили. Результат = ОткрытьФорму(...).ЖдатьАсинхронно() — и это было бы асинхронно с т.з. пользователей и браузера вам бы тоже было неудобно?


                                1. IamAlexy
                                  04.10.2019 14:12

                                  у меня есть в 1С допустим есть конструкция

                                  &НаКлиенте
                                  Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
                                  


                                  и мне это кажется удобным…
                                  и я решаю все задачи но таким образом.

                                  и с точки зрения конечного заказчика — бизнеса — какая разница?


                                  1. Neikist
                                    04.10.2019 14:31

                                    Потому что я не бизнес, я программист. И мне нужно удобство. А какое это удобство когда куски бизнес логики отделены друг от друга не по причине разных уровней абстракции или разных задач, а по причине технических ограничений?


                          1. lair
                            04.10.2019 13:55

                            Это вот типичный пример подмены. Сначала говорите, что есть аналоги, а потом спрашиваете, какая задача не решается. Так вот, для решения задачи аналоги не нужны, задачу можно и так решить. Просто если бы они были, было бы намного проще.


                            Собственно, и C#-то без async/await жил долгое время, и все равно имел асинхронию, просто когда ты на эти самые async/await переходишь, становится понятно, насколько же неудобно было писать код до этого.


                            1. pauls0
                              04.10.2019 13:59

                              сие 1с-никам с отбитым мозгом увы не объяснить…


                            1. o4karek
                              04.10.2019 14:03

                              Собственно, вы правы. Асинхронность в текущем языке… так себе (мягко говоря).


                              1. pauls0
                                04.10.2019 14:13

                                так мало того… есть гибкая типизация и наличие отсутствия делегатов. п.э. что передается в качестве «указателя»? текстовое название функции куда должен вернуться результат события

                                а потом еще чпокаться с со словарями параметров и результатом — что там внутри, что туда положили…

                                тут зрители аплодируют, аплодируют… кончили аплодировать (с)


                                1. o4karek
                                  04.10.2019 15:17

                                  Вы что сказать-то этим хотели?


                                  1. kryvichh
                                    04.10.2019 15:22

                                    Я думаю то, что передача идентификаторов в виде строк не есть хорошо. И вообще исходный код в любом виде в виде строк (будь то SQL или др.), вшитый в код программы, это плохо. Он не проверяется компилятором, для него не работает автодополнение, нельзя подвести мышку и посмотреть определение (в Design time) или значение (в Run time), если идентификатор в коде в виде строки.


                                    1. o4karek
                                      04.10.2019 15:33

                                      А я разве это отрицаю? Изначально (двумя постами выше) я вполне осмысленно и осознанно написал, что асинхронность в 1с сделана не очень хорошо.
                                      Собственно все. Если 1с исправит положение вещей — все порадуются. Не исправит — будем пользовать то, что есть.


                            1. IamAlexy
                              04.10.2019 14:17

                              никакой подмены. не выдумывайте.

                              1С умеет то что умеет async/await и спрашиваю — может будет какой пример который я не могу решить своими методами? Может я просто не в курсе а сообщество труъкодеров мне раскроет глаза?

                              чисто спортивный интерес — понять что я не могу сделать в платформе 1С того что вы делаете async/await…


                              1. lair
                                04.10.2019 14:27

                                1С умеет то что умеет async/await

                                Умеет? Ну то есть можно написать вот так:


                                результат = магическое-слово асинхронная-задача(параметры)
                                обработать(результат)

                                И платформа отпустит этот поток до тех пор, пока работает асинхронная задача, а потом вернется, полностью восстановит контекст выполнения и пойдет дальше?


                                Ну и заодно:


                                результаты = магическое-слово выполнить-параллельно(список-десяти-задач)

                                А так?


                                1. IamAlexy
                                  04.10.2019 14:35

                                  конечно…
                                  другие магические слова но конечно 1С это может…

                                  + никто не мешает запустить процесс из одного контекста а результат получить в другой… или в третий и четвертый одновременно…

                                  собственно это и «ваялось» как инструменты для решения бизнес-задач…


                                  1. Neikist
                                    04.10.2019 14:37

                                    Сохраняя стек вызовов и контекст? Возвращаясь в ту же процедуру в точку вызова? Я конечно последний год не сильно за 1с слежу, но думаю такое изменение встроенного языка я бы не пропустил.


                                    1. IamAlexy
                                      04.10.2019 14:58

                                      как я как разработчик решу так и будет:

                                      можно вернутся в тот же контекст, а можно например в другую форму и в другой контекст результаты отправить.

                                      в общем то никто не запрещает.
                                      клиентская процедура получающая результат:

                                      &НаКлиенте
                                      Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
                                      


                                      возврат в ту же точку вызова?
                                      а в чем практический пример возврата в точку вызова если у вас дительный расчет?

                                      ну вот у вас идет код:

                                      результат = магическоесловокоторосчитаетцифру();
                                      результат2=результат+1;

                                      магическоесловокоторосчитаетцифру() возвращает допустим 3, как у вас сработает эта процедура?

                                      клиент нажал кнопочку… процедура дошла до первой строки и далее она ждет ответа?
                                      или она сразу переходит на вторую строку и что тогда пишет в результат2?

                                      а когда возвращается событие оно снова пишет в первую строку значение 3 а затем считает строку 2 и значение результат2?

                                      поясните практическую суть возврата «в ту же точку»


                                      1. lair
                                        04.10.2019 15:03

                                        как у вас сработает эта процедура?

                                        Я боюсь, что если вы этого не понимаете, вы не понимаете и как/зачем работает async/await. А, следовательно, вряд ли можете говорить, что 1С такое может.


                                        1. IamAlexy
                                          04.10.2019 15:11

                                          я же именно по этому просил практический пример…
                                          чтобы на практическом примере понять — может или нет.

                                          из того что у меня тут спросили и из того что я бегло почитал про async/await — я не вижу сценариев которые не может 1С…

                                          но и справедливо же обратное утверждение — вы почему то решили что раз в 1С нет напрямую async/await — то значит 1С не может покрыть функциональность этих самых async/await своими методами… но вы же не знаете методов 1С и ее возможностей, так же как авторы статьи — по этому мы тут и ведем диалог…

                                          был бы конкретный пример типа как я выше написал с расчетом — было бы понятнее и мне и вам.


                                          1. Neikist
                                            04.10.2019 15:15

                                            Я с 1с работал 4 года. Уже почти год работаю с котлином, и месяц игрался с дартом по вечерам. Прекрасно могу смотреть на это все с обоих сторон.


                                          1. lair
                                            04.10.2019 15:55

                                            я же именно по этому просил практический пример…
                                            чтобы на практическом примере понять — может или нет.

                                            Ну то есть вы сначала говорите, что может, а потом просите пример того, что, собственно, должно мочь?


                                            try
                                            {
                                              using(TraceSegment())
                                             {
                                                var files = await paths.ForEach(DownloadFileAsync)
                                                await SendMailAsync(to, files);
                                              }
                                            }
                                            catch(Exception e)
                                            {
                                              //some handling
                                            }

                                            Вот вам очень простой пример. На входе есть несколько путей, дальше по этим путям — асинхронно и в параллель — скачиваются файлы, когда все файлы успешно скачались, отправляется емейл. Обработка ошибок общая, контекст выполнения (из которого делается, например, трассировка) — общий.


                                            1. IamAlexy
                                              04.10.2019 15:59

                                              ээээ

                                              обычная вполне задача…
                                              я так к макетам картинки прикрепляю у себя.
                                              фоном файл скачивается, сжимается, делается превьюха, загружается в 1С (причем понимая где ему на сервер качать и на сервере конвертировать а где на клиенте конвертировать) и затем уже форма из которой пользователь это запустил оповещается что хоба — а у вас превью макета появилось, извольте полюбоваться…

                                              причем могу так несколько обработок в параллель пустить… одной кнопкой… а затем обработать все сразу или по очереди или по определенной нужной мне логике…


                                              1. lair
                                                04.10.2019 16:00

                                                обычная вполне задача…

                                                Прекрасно. Код покажите.


                                              1. lair
                                                04.10.2019 16:51

                                                Я так понимаю, кода не будет. Показательно.


                                                1. IamAlexy
                                                  04.10.2019 17:06
                                                  -1

                                                  ну вы же программист и понимаете что если у меня есть сборщик событий вида:

                                                  &НаКлиенте
                                                  Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
                                                  


                                                  то я в нем могу идентифицировать событие по имени, источнику и получить входящие параметры в которые фоновое задание может мне положить что угодно — от ссылки на прикрепленный файл до двоичных данных картинки файла…

                                                  и далее я в коде делают то что мне нужно по бизнеспроцессу…

                                                  в этом то и тонкость что для реализации подобных задач не нужно вообще ничего сверх типового функционала платформы 1С8…


                                                  1. lair
                                                    04.10.2019 17:10

                                                    ну вы же программист и понимаете

                                                    Я программист и понимаю, да. И именно поэтому я хочу увидеть весь код, который нужен для решения описанной выше задачи, а не "если у меня есть, то я могу сделать".


                                                    1. IamAlexy
                                                      04.10.2019 17:12
                                                      -1

                                                      код БСП по работе с вложенными файлами присылать?
                                                      все процедуры интересуют и все модули?


                                                      1. lair
                                                        04.10.2019 17:13

                                                        Нет, показать тот код, который функционально эквивалентен приведенному мной.


                                                        1. IamAlexy
                                                          04.10.2019 20:38

                                                          Если не пользовать стандартную БСП и ее длительные операции то параллельный запуск в фоновые задания в параллель любого количества вызовов — ну вот например так можно сделать:

                                                          &НаКлиенте
                                                          Процедура КачнутьНесколькоФайлов(Команда)
                                                          запуститьНаСервере();
                                                          	
                                                          ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина);	
                                                          	
                                                          	
                                                          КонецПроцедуры
                                                          
                                                          &НаСервере
                                                          Процедура ЗапуститьНаСервере()
                                                          		
                                                          	Для сч=1 по 4 Цикл //просто генерю для обработки -тут можно читатьс содержимое каталога, список ссылок и тд.. 
                                                          		имяф= "файл_нумер_"+сч;
                                                          		уид = "Загрузка_" + имяф;
                                                          		
                                                          		ПараметрыВызова = Новый Массив;
                                                          		ПараметрыВызова.Добавить(имяф);
                                                          		ЗаданиеВыгрузки = ФоновыеЗадания.Выполнить("МодулиФоновыхЗаданий.ПроизвестиДлительноеВычисление", ПараметрыВызова, Уид, "кач кач");
                                                          		массивУид.Добавить(ЗаданиеВыгрузки);
                                                          	КонеццИКла;
                                                          КонецПроцедуры
                                                          
                                                          &НаКлиенте
                                                          Функция ПроверитьЗадания() Экспорт
                                                          	Если ЗаданияЗавершены() Тогда
                                                          ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина);	
                                                          	иначе
                                                          		//отправим емейл
                                                          	КонецЕсли;
                                                          	
                                                          КонецФункции
                                                          
                                                          &НаСервере
                                                          Функция ЗаданияЗавершены()
                                                          	
                                                          	шлеммыл =истина;
                                                          	для каждого текУИД из массивУид цикл
                                                          	Зад=		ФоновыеЗадания.НайтиПоУникальномуИдентификатору(текУИД);
                                                          	если  Зад.Состояние = СостояниеФоновогоЗадания.Активно  тогда
                                                          		шлеммыл = ложь;
                                                          		прервать;
                                                          	КонецЕсли;
                                                          	 КонецЦикла;
                                                          	 
                                                          	 Возврат шлеммыл;
                                                          	 
                                                           КонецФункции
                                                          
                                                          


                                                          по сути код из обработки которая кнопкой отправляте в фон 4 процесса каждый из которых обрабатывает ссылку а по результатам выполняется функция в которой можно емейл отправить например.

                                                          не очень лаконично и красиво если визуально сравнивать с вашим кодом — но работает…

                                                          т.к. платформа ПРИКЛАДНАЯ — то для решения типовых для учетных систем задач есть более удобные инструменты — всякие начатьпомещениефайла или начатьпомещениефайлов и прочие асинхронные готовые конструкции…


                                                          1. Neikist
                                                            04.10.2019 20:51

                                                            Вы понимаете что что то не так «в датском королевстве» когда в прикладной выскоуровневой платформе для банальных задач нужно писать гору не самого удобного кода?
                                                            И нет, этот код не эквивалентен так как стек вызовов к сожалению теряется (зачем нужно его сохранение я уже даже не вижу смысла дергаться пояснять, у вас опять все сведется к тому что это не нужно и можно написать гору другого кода чтобы пользователь в итоге видел ровно то же).

                                                            UPD
                                                            Ах да, перечитал код — в нем еще больше проблем. Нет возврата результата выполнения фоновых заданий (успеха или ошибки, ссылок на файлы).
                                                            Ну и лучше под спойлер такой объем спрятать.


                                                            1. IamAlexy
                                                              04.10.2019 23:45

                                                              я просто не стал анализ ошибок результатов и прочее -выводить… платформа то может — я в примере не стал.

                                                              по поводу громодкости кода… ну в этом участке да — 1С просит написать кучу строк…

                                                              а давайте будем организовывать видео и аудио чат, контекстные чаты внутри системы, неконтекстные чаты, обмен файлами и видеоконференции на 9 человек?

                                                              в 1С платформе 0 (ноль) строчек кода:

                                                              wonderland.v8.1c.ru/blog/sistema-vzaimodeystviya

                                                              а сколько строчек кода вы у себя напишите для реализации всего этого и интеграции в свою ERP?


                                                              1. Neikist
                                                                04.10.2019 23:55
                                                                +1

                                                                Вы понимаете что мы говорим не о разработке конечной пользовательской функциональности а об удобстве разработчика? async/await можно использовать в тысячах случаев в рамках одной конфигурации для упрощения написания и чтения кода. И ни в какое сравнение с пользовательской функциональностью это не идет. Ну и да, вы немного пропустили — все равно у вас стек не сохраняется, что достаточно важно бывает для удобной разработки. Ну и глупо сравнивать возможности фреймворка и языка. Мы говорим именно о языке в данном случае. Вы снова скатываетесь в «это не нужно», «зато в 1с можно другое двумя кликами», вместо того чтобы признать что у языка есть проблема которую 1с могли бы решить но не решают.


                                                                1. IamAlexy
                                                                  05.10.2019 00:16

                                                                  удобство разработчика это же вкусовщина чистой воды…

                                                                  мне например удобно на русском языке программировать — ни один ваш «серьезный» язык в этом плане мне не предоставит того удобства которое предоставляет 1С…

                                                                  вообще никак… никакими костылями и внешними сервисами…

                                                                  но мы же эту сторону удобства разработчика не обсуждаем?

                                                                  ps: в 1С платформе полно проблем которые не решают или решают медленно… какие то вещи решают «по своему» или не до конца — как например асинхронные вызовы — вроде есть а можно было бы удобнее… а какие то не решают со всем…
                                                                  но платформа развивается — уже сейчас она может почти все в той сфере для которой ее создали… и она становится лучше с каждым разом… глядишь и сделают асинхронность в одну строку как во взрослых языках :)


                                                                  1. Neikist
                                                                    05.10.2019 00:29

                                                                    но мы же эту сторону удобства разработчика не обсуждаем?

                                                                    Очевидно потому что мы в этой статье и комментариях обсуждаем минусы а не плюсы 1с? Двуязычный синтаксис минусом можно назвать только с той точки зрения что это мешает экспансии за бугор, в остальном для СНГ скорее плюс. Ну вот «когда сделают — тогда и приходите». Но не сделают, я за все 4 года работы с 1с ни разу не помню чтобы развивали язык а не платформу или бсп.


                                                                    1. IamAlexy
                                                                      05.10.2019 00:31

                                                                      вода камень точит — постепенно что то меняют…
                                                                      но опять же — большинство, подавляющее большинство учетных задач решается 1Сом из коробки… как бы вы не сравнивали 1С с более универсальными системами/языками, но финтифлюшка в виде видеочата в платформе пользователям конечным много востребованнее чем возможность программисту написать что то не в 20 строк кода а в одну…


                                                                      1. Neikist
                                                                        05.10.2019 00:33

                                                                        Да пожалуйста. Я для себя выбор сделал, в темах затрагивающих 1с спорю больше по привычке и чтобы раскрыть глаза другим людям.


                                                                      1. lair
                                                                        05.10.2019 00:44

                                                                        финтифлюшка в виде видеочата в платформе пользователям конечным много востребованнее

                                                                        Или нет, если у них ERP прозрачно интегрирована с Office 365, в котором они уже пользуются видеочатами безо всякой ERP.


                                                                        1. IamAlexy
                                                                          05.10.2019 00:50

                                                                          или да если им нельзя по требованиям безопасности данные контекстных обсуждений и прочие аудио и видео переговоры отправлять на внешний сервер где офис 365 крутится…


                                                                          1. lair
                                                                            05.10.2019 00:53

                                                                            Всякое бывает, чего уж там. Но у таких пользователей обычно, опять же, часто есть своя внутренняя система.


                                                                            1. IamAlexy
                                                                              05.10.2019 00:56

                                                                              взаимодействия которые в платформе 1С — это как раз эта самая внутренняя система тесно интегрированная с объектами учета ERP — то есть это не внешний чатик а контекстная привязка — отдельная подсистема в любой учетной системе 1С… сравнивать ее с телеграммом, вайбером и прочими офисами 365 — не очень корректно…


                                                                              1. lair
                                                                                05.10.2019 00:59

                                                                                сравнивать ее с телеграммом, вайбером и прочими офисами 365 — не очень корректно…

                                                                                А надо, потому что это конкурирующая функциональность.


                                                                                1. IamAlexy
                                                                                  05.10.2019 01:03

                                                                                  ну… вы свой сервер для телеги не поставите дабы вопросы безопасности закрыть и контекстно не свяжите каналы телеграмма с объектами базы в интерфейсе своей ERP…


                                                                                  1. lair
                                                                                    05.10.2019 01:05

                                                                                    Для телеги — нет. А вот для некоторых других мессенджеров — и поставлю, и свяжу.


                                                                                    1. IamAlexy
                                                                                      05.10.2019 01:12

                                                                                      но вам придется программировать и писать строчки кода…
                                                                                      и все равно будут ограничения — мало на рынке есть свободных систем позволяющих прозрачно интегрировать чат с видеозвонками, обменом файлами, видео и аудиоконференциями и привязкой каналов к объетам ERP да еще и «забесплатно»…

                                                                                      ну или миллион строк кода и своя вундервафля…


                                                                                      1. lair
                                                                                        05.10.2019 01:15

                                                                                        но вам придется программировать и писать строчки кода

                                                                                        Ну да, это моя любимая работа — программировать и писать строчки кода. Точно так же, как, я надеюсь, у тех людей, которые написали эту функциональность в 1С.


                                                                                        1. IamAlexy
                                                                                          05.10.2019 01:24

                                                                                          ну… с одной стороны вы против лишних строчек кода для не очень востребованной в учетных системах async/await — и лишняя строчка кода прям плохоплохо…

                                                                                          а с другой стороны вы готовы писать миллион строк кода для реализации задач которые в той же 1С идут тупо из коробки…

                                                                                          :)


                                                                                          1. lair
                                                                                            05.10.2019 01:29

                                                                                            для не очень востребованной в учетных системах async/await

                                                                                            Это оно у вас не востребовано.


                                                                                            лишняя строчка кода прям плохоплохо…

                                                                                            Плохо не лишняя строчка кода. Плохо непонимание, что в этом коде не так.


                                                                                            а с другой стороны вы готовы писать миллион строк кода для реализации задач которые в той же 1С идут тупо из коробки

                                                                                            Ну, если есть клиент, который готов мне за это платить — то почему нет? Я не вижу смысла выбирать 1С только за то, что в ней есть не очень востребованная в учетной системе видеоконференцсвязь, когда у меня есть разумные альтернативы.


                                                                                            1. IamAlexy
                                                                                              05.10.2019 01:35

                                                                                              Это оно у вас не востребовано.


                                                                                              опять возвращаемся к задачам которые НЕЛЬЗЯ решить средствами 1С?

                                                                                              Плохо не лишняя строчка кода. Плохо непонимание, что в этом коде не так.


                                                                                              не очень понятная фраза — вы как разработчик не понимаете что в вашем коде не так?

                                                                                              Ну, если есть клиент, который готов мне за это платить — то почему нет? Я не вижу смысла выбирать 1С только за то, что в ней есть не очень востребованная в учетной системе видеоконференцсвязь, когда у меня есть разумные альтернативы


                                                                                              это пример того что в одном месте вы сэкономите 10, 20, 30 строчек кода на реализации асинхронности через async/await -а в другом месте того же самого проекта напишите на миллион строк кода больше т.к. вам надо с нуля писать существующие в 1С готовые инструменты…

                                                                                              а так да — если мне заказчик платит за асинхронность и ему пофиг на async/await — то какая разница то?


                                                                                              1. lair
                                                                                                05.10.2019 01:38

                                                                                                опять возвращаемся к задачам

                                                                                                Нет, опять возвращаемся к тому, что у систем вообще разные задачи бывают.


                                                                                                вы как разработчик не понимаете что в вашем коде не так?

                                                                                                Конечно, не всегда понимаю, иначе бы в коде не было ошибок, а они там есть. Но в данном случае — вы не понимаете, что не так в вашем коде по сравнению с моим.


                                                                                                а в другом месте того же самого проекта напишите на миллион строк кода больше т.к. вам надо с нуля писать существующие в 1С готовые инструменты…

                                                                                                Или не надо. Вы же не знаете, какие инструменты есть в прикладной платформе, которую я возьму для решения нужной задачи. Я ведь не зря написал про разумные альтернативы.


                                                                                                какая разница то?

                                                                                                Вам, видимо, никакой. А я предпочитаю элегантный код.


                                                                  1. lair
                                                                    05.10.2019 00:42

                                                                    удобство разработчика это же вкусовщина чистой воды

                                                                    Не совсем. Это, в итоге, влияет на скорость (и качество) разработки — а это уже важный для покупателя фактор.


                                                                    но мы же эту сторону удобства разработчика не обсуждаем?

                                                                    Почему, обсуждаем. Но у меня есть требование, что весь мой код должен свободно читаться англоязычными разработчками, поэтому мне от русскоязычности 1С ни горячо, ни холодно.


                                                                    А теперь давайте сравним долю систем с требованиями "на английском" и "на русском", и задумаемся.


                                                                    1. IamAlexy
                                                                      05.10.2019 00:52

                                                                      EDT от 1С (не конфигуратор а та, что ваяют внешнюю разработчики платформы, там где гит и прочие эклипсы ) — свободно переводит код — там плагин есть который тебе код переведет на английский или на китайский или на чем ты там кодишь…


                                                                      1. lair
                                                                        05.10.2019 00:55

                                                                        там плагин есть который тебе код переведет на английский или на китайский

                                                                        Верится с большим трудом. Ну то есть, как, "переведет", да. Но читаемость этого будет отвратительной.


                                                                        1. IamAlexy
                                                                          05.10.2019 00:58

                                                                          переведет не промтом… в языке все процедуры и функции имеют двойной синтаксис… я могу половину кода на русском писать половину на английском в одном и том же модуле…
                                                                          плагин соответственно гоняет туда/сюда способ отражение кода…


                                                                          1. lair
                                                                            05.10.2019 00:59

                                                                            Вы забыли про все названия, которые пишет сам программист. Их кто и как переведет?


                                                                            1. IamAlexy
                                                                              05.10.2019 01:05

                                                                              а это уже от программиста зависит и от того придерживается он стандартов или нет…

                                                                              вы с задачей определитесь… «кодить на английском чтобы делать портируемые интернациональны решения» — это одна задача… «перевести весь код самописки чисто поржать» — другая…

                                                                              например разработчики БСП 100% выпустят национальные англоязычные библиотеки — и будьте уверены процедур как в моих примерах «отправитьнамыло» у них не будет в названиях :)


                                                                              1. lair
                                                                                05.10.2019 01:06

                                                                                а это уже от программиста зависит и от того придерживается он стандартов или нет…

                                                                                Так переводить-то кто будет?


                                                                                «кодить на английском чтобы делать портируемые интернациональны решения» — это одна задача…

                                                                                И это именно та задача, которая передо мной стоит.


                                                                                1. IamAlexy
                                                                                  05.10.2019 01:14

                                                                                  Так переводить-то кто будет?


                                                                                  плагин к ЕДТ

                                                                                  И это именно та задача, которая передо мной стоит.


                                                                                  Вы это можете делать прямо сейчас без всяких плагинов — пишите на 1С полностью на английском… никто вам не мешает — и у вас будет вся та же функциональность что и у меня…


                                                                                  1. lair
                                                                                    05.10.2019 01:17

                                                                                    плагин к ЕДТ

                                                                                    И как же он это будет делать? Не компьютерным переводчиком?


                                                                                    пишите на 1С полностью на английском…

                                                                                    Я, однако, могу писать на английском и на других языках программирования. Я потому и говорю, что мне русскоязычность 1С побоку.


                                                                                    1. IamAlexy
                                                                                      05.10.2019 01:26

                                                                                      И как же он это будет делать? Не компьютерным переводчиком?


                                                                                      процедуры функции и всякие языковые конструкции — через замену т.к. в платформе мультиязычность есть как таковая… переменные пользователей — не знаю… мне не интересно было я не уточнял у разработчиков — посмотрел что анонсировали и болт забил… скорее всего предложат ручками переименовывать процедуры с названиями типа «пыщь» и «сделайбухгалтеруприятно»


                                                                                      1. lair
                                                                                        05.10.2019 01:30

                                                                                        корее всего предложат ручками переименовывать процедуры с названиями типа

                                                                                        Ну вот об этом и речь. Нету никакой двуязычной разработки, все равно выбирать надо.


                                                                                        Впрочем, повторюсь, мне не актуально, я изначально с интернациональным кодом работаю.


                                                                                        1. IamAlexy
                                                                                          05.10.2019 01:36

                                                                                          елки палки.

                                                                                          что в вашем понимание «двуязычность» — сразу именовать одну и туже процедуру на двух языках?

                                                                                          именуйте

                                                                                          Процедура СделатьХорошоMakeGood()

                                                                                          и переменные так же именуйте…

                                                                                          системные термины плагин переведет и будет у вас либо Функция либо Function


                                                                                          1. lair
                                                                                            05.10.2019 01:39

                                                                                            что в вашем понимание «двуязычность» — сразу именовать одну и туже процедуру на двух языках?

                                                                                            В моем понимании двуязычность — это когда один и тот же код может без потерь читать и (чисто) русскоязычный, и (чисто) англоязычный разработчики.


                                                                                            1. IamAlexy
                                                                                              05.10.2019 01:43

                                                                                              а можно пример такого кода?


                                                                                              1. lair
                                                                                                05.10.2019 01:46

                                                                                                Я такого кода никогда не видел.


                                                                                                1. IamAlexy
                                                                                                  05.10.2019 01:50

                                                                                                  ну так если считать двуязычностью ВОЗМОЖНОСТЬ на одной платформе ПИСАТЬ на двух разных языках, причем одновременно а так же иметь инструменты для перевода КОДА со одног языка на другой — то в 1С как раз и есть эта самая двуязычность…

                                                                                                  а уж если программист умеет читать на русском и умеет читать на английском то он одинаково прочтет код в 1С что на русском что на английском…


                                                                                                  1. lair
                                                                                                    05.10.2019 01:51

                                                                                                    то в 1С как раз и есть эта самая двуязычность

                                                                                                    Выше уже выяснили, что нет.


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 02:02

                                                                                                      стоп, вы же сами написали что двуязычность это когда можно прочитать на одном языке и можно прочитать на другом:

                                                                                                      и оно полностью ложится в концепцию 1С

                                                                                                      вы зная английский и русский можете легко читать модули 1С которые пишутся на английском и на русском — а системе без разницы на каком языке они написаны… причем для удобства и дополнительно появились инструменты для перевода кода…


                                                                                                      1. lair
                                                                                                        05.10.2019 02:07

                                                                                                        стоп, вы же сами написали что двуязычность это когда можно прочитать на одном языке и можно прочитать на другом:

                                                                                                        Ну вот давайте, чтобы далеко не ходить, возьмем ваш код.


                                                                                                        &НаКлиенте
                                                                                                        Процедура КачнутьНесколькоФайлов(Команда)
                                                                                                        запуститьНаСервере();
                                                                                                            ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина);

                                                                                                        Как его прочитать человеку, который не знает русского?


                                                                                                        1. IamAlexy
                                                                                                          05.10.2019 02:09

                                                                                                          Как его прочитать человеку, который не знает русского?


                                                                                                          переведите этот код для него на английский… пишите и программируйте на английском сразу или пользуйтесь переводчиком из ЕДТ…


                                                          1. lair
                                                            04.10.2019 21:04

                                                            ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина);

                                                            Вот прежде, чем что-либо другое обсуждать, я одну вещь спрошу: эта инструкция — она когда завершается? Когда обработчик подключен, или когда ожидание завершено? Иными словами, процедура КачнутьНесколькоФайлов завершится когда? Тогда же, когда и мой код, то есть после успешной отправки емейлов, или тогда, когда подразумевает название, после успешной закачки файлов, или когда-то еще?


                                                            1. Neikist
                                                              04.10.2019 21:09

                                                              Могу за автора комментария ответить КачнутьНесколькоФайлов, завершится сразу после запуска загрузки, задолго до ее завершения. ПодключитьОбработчикОжидания все что делает — говорит платформе запустить через 2 секунды ПроверитьЗадания однократно. Все.


                                                              1. lair
                                                                04.10.2019 21:12

                                                                Я, если честно, так и думал. Никоим образом не сомневаясь в ваших словах, подожду теперь, что ответит автор кода (ну, чтобы недопониманий не было).


                                                                1. IamAlexy
                                                                  04.10.2019 23:45

                                                                  выше все верно написали…


                                                                  1. lair
                                                                    05.10.2019 00:10

                                                                    Ну тогда давайте разбираться.


                                                                    Во-первых, ваше решение не сохраняет исходного поведения (где вызывающий код мог, на свой выбор, не получать управление обратно вплоть до успешного завершения процесса). И этого, в принципе, было бы уже достаточно, но.


                                                                    Во-вторых, у вас нет ни общей (а это важно) обработки ошибок, причем не платформенного уровня, а уровня "в этом методе написали используя данные из этого метода", ни того самого трассирующего сегмента, который откроется там, где написано, а закроется, когда код внутри него будет полностью выполнен (либо завершится аварийно), что позволяет, например, легко посчитать время выполнения каждой задачи (и привязать все их логи к одному контексту).


                                                                    В-третьих, посмотрим на сам код.


                                                                    ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина);

                                                                    Строковый параметр вместо явного обращения к объекту. 1С это валидирует?


                                                                    ФоновыеЗадания.Выполнить("МодулиФоновыхЗаданий.ПроизвестиДлительноеВычисление", ПараметрыВызова, Уид, "кач кач")

                                                                    Опять строковый параметр, и теперь еще и передача параметров в виде массива. Это 1С валидирует?


                                                                    массивУид.Добавить

                                                                    А как массивУид передается между ЗапуститьНаСервере и ЗаданияЗавершены?


                                                                    Если ЗаданияЗавершены() Тогда
                                                                    ПодключитьОбработчикОжидания("ПроверитьЗадания",2,Истина)

                                                                    Ну то есть обычный поллинг раз в две секунды. Вместо того, чтобы повеситься на IOCP и ждать, ничего не потребляя.


                                                                    для каждого текУИД из массивУид цикл
                                                                    Зад=ФоновыеЗадания.НайтиПоУникальномуИдентификатору(текУИД);

                                                                    … и раз в две секунды ходим по всем заданиям, проверяя их статус. То есть у вас не то что continuations, у вас даже APM/EAP нет.


                                                                    И да, у вас нет ни проверки состояний, ни возврата результатов.


                                                                    В-четвертых, да, неизбежно, сравните количество кода и порожденных объектов. Вам понадобилось четыре процедуры и массив там, где я обошелся одной — и вы все равно не предоставляете ту же функциональность.


                                                                    Так что нет, 1С не может async/await, даже близко. Фоновые задачи — умеет, только .net их умел с версии не позже 1.1, и даже тогда там уже были честные делегаты. Это 2003 год, если что.


                                                                    1. IamAlexy
                                                                      05.10.2019 00:21

                                                                      допустим вы правы, хотя есть обработки оповещений которые как раз слушают внешние события и можно извернутся и через них пускать какие то задачи — они как раз этот ваш await, но вопрос: задача то решена?
                                                                      4 файла в 4 параллельных потока загрузились и по итогу отправился емейл…

                                                                      вам как конечному пользователю какая разница 4 функции я написал или одну строчку кода?

                                                                      ведь когда мы будем другую задачу решать, ну например реализовывать контекстные чаты с привязкой к объектам системы ERP — я не напишу ни одной строчки кода я просто их включу — и мне платформа это автоматом зацепит к каждому объекту… а вам придется полгода разрабатывать механизм видеоконференций или прикручивать костыли внешних сервисов… платных скорее всего…


                                                                      1. lair
                                                                        05.10.2019 00:40

                                                                        вам как конечному пользователю какая разница 4 функции я написал или одну строчку кода?

                                                                        Я — не конечный пользователь, я разработчик. И мне есть разница, сколько кода написано.


                                                                        Да и конечному пользователю — тоже, потому что меньше кода при прочих равных обычно лучше.


                                                                        задача то решена?

                                                                        Нет.


                                                                        ведь когда мы будем другую задачу решать

                                                                        Когда будем другую задачу решать — о другой задаче поговорим. Пока что вы написали "1С умеет то что умеет async/await", и именно это меня заинтересовало. Как выяснилось, все-таки не умеет.


                                                                        А другие задачи — ну да, можно сравнивать прикладные платформы по решенным типовым задачам. Где-то 1С выиграет. Где-то проиграет. Но претензий к языку это все равно не отменит.


                                                                        1. IamAlexy
                                                                          05.10.2019 00:49

                                                                          Когда будем другую задачу решать — о другой задаче поговорим. Пока что вы написали «1С умеет то что умеет async/await», и именно это меня заинтересовало. Как выяснилось, все-таки не умеет.


                                                                          в чистом виде умеет для произвольного события через обходные пути:
                                                                          в подситему взаимодействия можно слать программно с сервера любые события, а обработчик сидит и слушает эти события и выполняет код…

                                                                          то есть можно через механизм платформы организовать «канал чата» с названием типа «события фоновых процессов» и слать туда результаты загрузки, и соответственно онлайн реагировать на появление оных чат-ботом…

                                                                          это все встроенные возможности платформы…
                                                                          изначально они конечно делались для как раз чат-бота встроенного :) но их можно пользовать именно для реализации этого вашего async/await в ситуациях когда опрос состояния события раз в секунду «недостаточно онлайн»


                                                                          1. lair
                                                                            05.10.2019 00:51

                                                                            Все, что вы описываете — это не async/await. Это обходные пути реализации какой-нибудь асинхронии, но не async/await.


                                                                            А вы, повторюсь, просто не понимаете, о какой функциональности вообще идет речь, но продолжаете утверждать, что она есть.


                                                                            1. IamAlexy
                                                                              05.10.2019 00:54

                                                                              если я в нужном мне месте кода вызываю нужное количество асинхронных потоков выполнения нужных мне задач а по результату сразу по получению продолжаю с момента запуска выполнять обработку данных и при этом у меня интерфейс не зависает а пользователь спокойно работает как в этом объекте так и в других — это не оно? какие признаки упустил?

                                                                              или наличие одной строчки кода — обязательное условие?


                                                                              1. lair
                                                                                05.10.2019 00:58

                                                                                какие признаки упустил?

                                                                                Полное сохранение контекста, обработку ошибок и передачу данных (как параметров, так и результатов), не отличающиеся от вызова синхронного кода.


                                                                                Проще говоря, правильный async/await — это когда было var file = ReadFile(path), его заменили на var file = await ReadFileAsync(path), больше ничего не меняли (при условии, что внешний метод уже был асинхронным), и все работает как и раньше, с той же логикой и поведением, кроме того, что там, где написано await, поток может быть отпущен на свободу.


                                                                                1. IamAlexy
                                                                                  05.10.2019 01:11

                                                                                  Полное сохранение контекста, обработку ошибок и передачу данных (как параметров, так и результатов), не отличающиеся от вызова синхронного кода.


                                                                                  из всего этого конечно «не отличающиеся от вызова синхронного кода» — совсем плохо… остальное да и можно и нетпроблем, но вот именно чтобы код не отличался — нет такого…

                                                                                  то есть в 1С все как всегда: есть ряд методов где асинхронность «из коробки» и код не отличается
                                                                                  это всевозможные диалоги выбора файлов, ввода текста, ответы на вопросы — то есть интерактивщина…

                                                                                  а вот если в целом поставить задачу «хочу произвольную процедуру пустить в асинхрон» — то тут либо всегда ВСЕ расчеты пускать через подсистему «длительныеоперации» и там в вызовах где надо ставить признак «в фоне» а где не надо не ставтиь — и тогда будет код одинаковый, либо жить в мире где вызов асинхрона отличается с точки зрения кода…

                                                                                  я вот подумал — в принципе я могу писать на 1С решения полностью всё пускающие через обертку длительных операций — и тогда у меня будет async/await — но мне это как разработчику неудобно будет… т.к. без обертки проще быстрее и понятнее…


                                                                                  1. lair
                                                                                    05.10.2019 01:13

                                                                                    остальное да и можно и нетпроблем

                                                                                    Ну, в вашем коде и остального перечисленного нет. Что, как бы, показывает, насколько "нет проблем".


                                                                                    но мне это как разработчику неудобно будет… т.к. без обертки проще быстрее и понятнее…

                                                                                    Это именно потому, что вам надо делать какие-то обертки, которые делают непонятнее. А в мире async/await таких оберток просто нет, вызов — он и есть вызов, ничего непонятного в нем нету.


                                                                                    1. IamAlexy
                                                                                      05.10.2019 01:22

                                                                                      Ну, в вашем коде и остального перечисленного нет. Что, как бы, показывает, насколько «нет проблем».


                                                                                      в том коде я просто не обращался и не проверял ни результаты ни читал ошибки — методы и функции позволяют и там для этого конечно же все есть — просто я поленился писать…

                                                                                      Это именно потому, что вам надо делать какие-то обертки, которые делают непонятнее. А в мире async/await таких оберток просто нет, вызов — он и есть вызов, ничего непонятного в нем нету.


                                                                                      ну, вы в своем мире async/await то же поменяли что то в тексте кода что бы система поняла что можно в свободное плавание…

                                                                                      а если бы я вам сразу все примеры 1С писал через обертку подсистемы длительных операций то у вас небыло бы вопроса «зачем вы по другому пишите для асинхрона» :)

                                                                                      в общем вы меня убедили и я признаю: в чистом виде async/await как его ожидают программисты других платформ в 1С нет.

                                                                                      НО

                                                                                      программно реализуется и если очень хочется то можно себе организовать мирок async/await и спокойненько в нем жить, но т.к. учетные задачи не требуют этого async/await никто не запарывается — мне кажется разработчики платформы еще очень не скоро снизойдут до реализации этой красоты в виде «одна строчка кода»… опять же — потому что подавляющее большинство учетных задач решается существующими механизмами… а разработчикам платформы прикольнее пилить плюшки типа автономных мобильных клиентов и прочие демонстрации удаленного рабочего стола средствами платформы через подсистему взаимодействия…


                                                                                      1. lair
                                                                                        05.10.2019 01:26

                                                                                        просто я поленился писать…

                                                                                        Вот об этом и речь. Когда что-то писать сложно, это писать не будут (обработка ошибок и логирование — хорошие примеры). А в правильной асинхронной модели обработка ошибок происходит автоматически (в том смысле, что если ты явно не сделал обратного, ошибку ты получишь).


                                                                                        программно реализуется и если очень хочется то можно себе организовать мирок async/await и спокойненько в нем жить

                                                                                        Ну, я посмотрю, сколько вам для этого кода понадобится.


                                                                                        учетные задачи не требуют этого async/await никто не запарывается

                                                                                        Возвращаемся к "просто нам это не надо".


                                                                                        1. IamAlexy
                                                                                          05.10.2019 01:27

                                                                                          Вот об этом и речь. Когда что-то писать сложно, это писать не будут (обработка ошибок и логирование — хорошие примеры). А в правильной асинхронной модели обработка ошибок происходит автоматически (в том смысле, что если ты явно не сделал обратного, ошибку ты получишь).


                                                                                          задачи такой не стояло… да и у вас я не увидел в коде обработку различных событий незагрузки, отсутствия доступа к файлам и тд…

                                                                                          Возвращаемся к «просто нам это не надо».


                                                                                          там где надо есть подсистема для управления длительными процессами и фоновыми заданиями.

                                                                                          но таки да -в учетных системах многие вещи «нам это не надо» — например прямой доступ в железо подключаемого оборудования — нам это тоже «не надо» — мы драйверами атола пользуемся…


                                                                                          1. Neikist
                                                                                            05.10.2019 01:32
                                                                                            +1

                                                                                            да и у вас я не увидел в коде обработку различных событий незагрузки, отсутствия доступа к файлам и тд…

                                                                                            Это не оно? Вся обработка заключается в паре строк. Причем при желании ее можно делать выше по стеку вызовов, а не непосредственно в месте вызова.
                                                                                            catch(Exception e)
                                                                                            {
                                                                                              //some handling
                                                                                            }


                                                                                            1. lair
                                                                                              05.10.2019 01:33

                                                                                              Именно.


                                                                                            1. IamAlexy
                                                                                              05.10.2019 01:41

                                                                                              у фоновых заданий есть состояния — там тоже все прозрачно отслеживается… в коде я просто признак завершенности проверял…
                                                                                              еще раз- просто мне лень было для форумного спора сидеть выводить код обработкой и анализом исключений
                                                                                              но там так же можно написать условие проверяющее что ошибка и далее обработку ошибки…


                                                                                              1. lair
                                                                                                05.10.2019 01:45

                                                                                                Об этом и речь: вам надо написать дополнительные условия, вам было лень, и вы их не написали. Я ниже спросил (поторопившись), тут спрошу еще раз: что случится в вашем коде (как он сейчас написан), если при скачивании отдельного файла произойдет ошибка?


                                                                                                Сколько строчек кода надо добавить (и где), чтобы тот код, который вызвал первую процедуру (точку входа), узнал, что процесс не был завершен успешно?


                                                                                                1. IamAlexy
                                                                                                  05.10.2019 01:51

                                                                                                  фоновое задание завершится с ошибкой и я смогу прочитать подробную информацию об этой ошибке и соответственно обработать ее…

                                                                                                  причем увижу как в модуле программными средствами так и интерактивно в журнале фоновых заданий…


                                                                                                  1. lair
                                                                                                    05.10.2019 01:52

                                                                                                    В вашем коде (как он сейчас написан) это есть?


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 02:03

                                                                                                      я же уже выше написал — нет.
                                                                                                      мне лень было прописывать обработку исключений.

                                                                                                      но это не косяк платформы или инструментов а просто моя лень…


                                                                                                      1. lair
                                                                                                        05.10.2019 02:08

                                                                                                        Тогда возвращаемся к предыдущим вопросам:


                                                                                                        • что случится в вашем коде (как он сейчас написан), если при скачивании отдельного файла произойдет ошибка?
                                                                                                        • Сколько строчек кода надо добавить (и где), чтобы тот код, который вызвал первую процедуру (точку входа), узнал, что процесс не был завершен успешно?


                                                                                                        1. IamAlexy
                                                                                                          05.10.2019 02:16

                                                                                                          что случится в вашем коде (как он сейчас написан), если при скачивании отдельного файла произойдет ошибка?


                                                                                                          отправится емейл т.к. там идет проверка на активность задание а не на то успешно оно завершилось или нет.

                                                                                                          Сколько строчек кода надо добавить (и где), чтобы тот код, который вызвал первую процедуру (точку входа), узнал, что процесс не был завершен успешно?


                                                                                                          прверять не активность задания а его завершение

                                                                                                          СостояниеФоновогоЗадания.завершено — признак успешного завершения задания (не аварийного и не отмененного)

                                                                                                          можно просто как у вас условие добавить

                                                                                                          если  Зад.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно тогда
                                                                                                          		
                                                                                                          //понеслась обработка ошибки загрузки файла
                                                                                                          
                                                                                                          	КонецЕсли;



                                                                                              1. Neikist
                                                                                                05.10.2019 01:48

                                                                                                у фоновых заданий есть состояния — там тоже все прозрачно отслеживается…

                                                                                                Для чего нужно сначала получить эти фоновые задания, проверить, а потом уже разбираться. А если нужно поймать ошибку выше по стеку — задача превращается в нереализуемую. Хватит уже. Мы здесь обсуждаем конкретный минус платформы и языка 1с, и вы сами признаете что это было бы плюсом для решения части задач. Вы не забыли с чего ветка началась? С того что попытались опровергнуть минус «отказ от модальности», который по сути отказ от модальности в пользу грустного механизма вместо нормальных корутин или async/await, если абзац почитать, а не только заголовок. А еще точнее, ветка разрослась с того что вы утверждали что точно так же можно делать в 1с. Выяснили уже, нет, не так же.


                                                                                                1. IamAlexy
                                                                                                  05.10.2019 02:00
                                                                                                  -1

                                                                                                  мы начали с того что авторы статьи утверждают отказ от модальности это плохо…
                                                                                                  в то время как это хорошо…

                                                                                                  а дальше вы уже углубились во вкусовщину придумывая невостребованные задачи и требуя их реализации в 1С да еще так чтобы количество строк кода было таким же как на других языках более низкого уровня…

                                                                                                  причем при предоставлении вам примеров их реализации вы начинаете придираться к ПРОЦЕССУ решения, тому что то строк кода много то ошибка выше по стеку (вы задачу ставили в параллель пускать процессы — я по каждому процессу отдельно поймаю ошибку и обработаю в контексте индивидуального разбора ошибки процесса или в контексте всей задачи с четырмя файлами — сам решу как разработчик)

                                                                                                  но на выходе -я задачу решил… ошибки могу легко поймать…

                                                                                                  в чем претензия? в том что поставленную задачу 1С решает не так как ожидаете вы, люди не работающие в 1С?

                                                                                                  ну так условный субару двигатил строит не так как это ожидает условный ауди… от этого субару хуже не становится… и от этого субару не теряет возможности доехать из точки А в точку Б… хоть у него и бензин вместо дизеля льется…

                                                                                                  а пока — ваши придирки это придирки на уровне «фу фу фу они пишут на русском» — какая разница если пользовательская задача решается…


                                                                                                  1. Neikist
                                                                                                    05.10.2019 02:09

                                                                                                    мы начали с того что авторы статьи утверждают отказ от модальности это плохо…
                                                                                                    в то время как это хорошо…

                                                                                                    Если вы читали статью целиком, а не только по оглавлению, вы могли прочитать что проблема именно в том способе которым 1с от этого отказалась. В том что она переложила это на плечи разработчиков. Хотя могли бы добавить async/await — и от разработчиков бы потребовалось только «волшебные слова» в нужные места добавить, код остался бы тем же.
                                                                                                    И повторюсь, если вы забыли, лично я 1с отдал 4 года и работал на достаточно крупных проектах, участвовал в написании коробки, так что претензии у меня не из разряда «фу-фу-фу они пишут на русском».


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 02:20

                                                                                                      так мы всю дорогу спорим что авторы статьи «21 проблема 1С высосанная из пальца и не имеющая отношения к жизни» пишут в заголовке одно, в тексте главы совершенно другое и это совершенно другое никак не влияет на качество платформы перед которой стоит весьма узкий круг задач с которыми она, кстати, справляется весьма и весьма хорошо, а всего лишь не так удобно как в языках более низкого уровня даже не смотря на то что поставленные прикладные задачи решаются.


                                                                                                      1. Neikist
                                                                                                        05.10.2019 02:25

                                                                                                        это совершенно другое никак не влияет на качество платформы

                                                                                                        Вот тут вы ошибаетесь, это напрямую влияет на удобство и сложность создания, развития и поддержки ИС.
                                                                                                        Кстати, я так и не понял, а с чего вы взяли что 1с язык более высокого уровня чем мейнстримные языки общего назначения (без негативных коннотаций, просто исходя из возможностей языка). Ведь как раз в 1с приходится часто больше кода писать, меньше кода выходи только на частных задачах, и не благодаря языку, а благодаря фреймворку.


                                                                                          1. lair
                                                                                            05.10.2019 01:33

                                                                                            задачи такой не стояло…

                                                                                            Стояло. У меня в коде это все было (я неплохо подумал, когда его писал).


                                                                                            да и у вас я не увидел в коде обработку различных событий незагрузки, отсутствия доступа к файлам и тд…

                                                                                            Потому что вы не понимаете, как работают ошибки в этом языке.


                                                                                            Все эти нюансы спрятаны в DownloadFileAsync, которая просто бросит exception, если ей не удастся успешно загрузить файл — и тем самым она остановит как минимум последующие действия, а при удачном стечении обстоятельств — и параллельные загрузки.


                                                                                            И при этом этот exception будет выше пойман блоком catch, который позволит его корректно обработать.


                                                                                          1. lair
                                                                                            05.10.2019 01:44

                                                                                            Давайте просто сравним, что ли.


                                                                                            Что случится в вашем коде, если внутри процедуры, отвечающей за скачивание отдельного файла, произойдет невосстановимая ошибка?


                                                                                            1. IamAlexy
                                                                                              05.10.2019 01:48

                                                                                              фоновый процесс вернет информацию об ошибке подробную


                                                                                              1. lair
                                                                                                05.10.2019 01:49

                                                                                                В каком конкретно месте вашего кода это произойдет? Что случится дальше?


                                                                                                1. IamAlexy
                                                                                                  05.10.2019 02:05

                                                                                                  в фоновом задание это случится мы же в параллель пустили 4 скачивания файла…
                                                                                                  фоновое задание завершится с ошибкой, я его получу по идентификатору когда мне это будет нужно см. пример выше — прочитаю подробную информацию об ошибке и обработаю ее…


                                                                                                  1. lair
                                                                                                    05.10.2019 02:08

                                                                                                    Уже выяснили, что ни в каком месте вашего кода это не случится, потому что вы этого не написали.


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 02:21

                                                                                                      я не учел того что вы не поверите в то что в 1С можно писать условия «если чтото тогда делаем так то»
                                                                                                      думал это очевидная возможность для платформы уровня 1С… вот и заленился писать очевидную ерунду…


                                                                                      1. Neikist
                                                                                        05.10.2019 01:29

                                                                                        программно реализуется и если очень хочется то можно себе организовать мирок async/await и спокойненько в нем жить

                                                                                        Да не async/await это, сколько можно повторять. Да, в 1с можно реализовать асинхронное выполнение какой то процедуры (но не всегда, UI из фонового задания не модифицируешь), но это не async/await, это просто асинхронщина.
                                                                                        И да, это полезно и удобно при решении любых задач, в т.ч. и учетных.


                                                                                        1. IamAlexy
                                                                                          05.10.2019 01:47
                                                                                          -1

                                                                                          ну то есть весь спор свелся к спору двух таксистов:

                                                                                          -вы на своем бмв не можете доехать из точки А вточку Б потому что у вас бмв а не ауди
                                                                                          — стоп но вот я сяду и доед
                                                                                          — нет вы не так приедете, смотрите вы больше времени потратите и бензин у вас больше
                                                                                          — но у меня бензин дешевле и по цене так же и время в целом такое же т.к. я поеду дольше но пробки объеду
                                                                                          — но подождите, у вас посадка за рулем другая… как вы можете говорить что вы так же как я на у ауди когда у вас не ауди и все по другому и до точки Б вы не доехали как на ауди если у вас вообще не ауди а бмв…

                                                                                          а пассажир стоит это слушает и охреневает думая… поеду ка я на киа… уже б приехал давно

                                                                                          ну ок, чо… :)


                                                                                  1. Neikist
                                                                                    05.10.2019 01:26

                                                                                    есть ряд методов где асинхронность «из коробки» и код не отличается
                                                                                    это всевозможные диалоги выбора файлов, ввода текста, ответы на вопросы — то есть интерактивщина…

                                                                                    Асинхронность из коробки, но не в виде async/await, а через обработчики оповещения.

                                                                                    я вот подумал — в принципе я могу писать на 1С решения полностью всё пускающие через обертку длительных операций — и тогда у меня будет async/await — но мне это как разработчику неудобно будет… т.к. без обертки проще быстрее и понятнее…

                                                                                    Вы так и не поняли что async/await это не просто запуск процедуры в фоне с последующим отслеживанием выполнения и продолжением в другой процедуре…


                                                                                    1. IamAlexy
                                                                                      05.10.2019 01:31

                                                                                      Вы так и не поняли что async/await это не просто запуск процедуры в фоне с последующим отслеживанием выполнения и продолжением в другой процедуре…


                                                                                      да понял я уже это…

                                                                                      но я все же свое мнение на эту тему имею:
                                                                                      программирование ради программирования — это не есть цель разработки учетной системы.

                                                                                      я поставленную задачу выполню с прерыванием фунции и продолжением задачи в другой функции — пользователю вообще фиолетово… задача решена… моих трудозатрат — никаких

                                                                                      то что у меня на 10 строк кода больше — ну так в другом участке у меня будет на миллион строк кода меньше…


                                                                                      1. Neikist
                                                                                        05.10.2019 01:35

                                                                                        То что у вас на банальной операции на 10 (на самом деле чаще на сотню минимум) строк больше — повышает вероятность ошибки, усложняет чтение и поддержку кода, склоняет к упрощению логики и заставляет изо дня в день писать однообразный код, когда можно было бы потратить время на решение новых задач и написание новой функциональности.


                                                                                        1. IamAlexy
                                                                                          05.10.2019 02:08

                                                                                          ну опять же бессмысленная придирка…
                                                                                          в этом месте у меня на 10 строк больше… а например при разработке отчетов у меня будет на 100 000 строк кода меньше…

                                                                                          где вероятнее ошибок больше схватить? в этих 10 или в тех 100 000?

                                                                                          а еще учтите частоту когда по ТЗ требуется чистый классический async/await и частоту когда нужно ваять хитрые отчеты…


                                                                                          1. lair
                                                                                            05.10.2019 02:09

                                                                                            например при разработке отчетов у меня будет на 100 000 строк кода меньше…

                                                                                            А вот это совершенно не факт.


                                                                                            1. IamAlexy
                                                                                              05.10.2019 02:22

                                                                                              ну по сравнению с платформой авторов статьи — факт.
                                                                                              они формы интерфейса кодом пишут… про богатство уровня СКД — еще даже мечтать не начинали…


                                                                                          1. Neikist
                                                                                            05.10.2019 02:12

                                                                                            Во первых не факт, да, во вторых это не прикладная функциональность и к тз не относится, в третьих мы не говорим про другую функциональность, мы говорим только об асинхронности, в четвертых мы говорим не о прикладной функциональности (которую можно самим написать, пусть это даже займет долгое время), а о фундаментальных возможностях языка которые не заменить простым повышением уровней абстракции через создание функций, общих модулей и т.п.


                                                                                            1. IamAlexy
                                                                                              05.10.2019 02:23

                                                                                              два простых вопроса:

                                                                                              1. фундаментально, асинхронность нужна?

                                                                                              2. фундаментально, в 1С асинхронность можно реализовать?

                                                                                              прошу отечать честно, кратко и без передергиваний…


                                                                                              1. Neikist
                                                                                                05.10.2019 02:29

                                                                                                1) Да.
                                                                                                2) На уровне пользователя. Асинхронный код по факту писать нельзя (то что есть — практически синхронный код реализующий асинхронность с т.з. пользователя). Хотя ее можно было бы реализовывать по человечески написанным кодом.


                                                                                                1. IamAlexy
                                                                                                  05.10.2019 02:34

                                                                                                  2) На уровне пользователя. Асинхронный код по факту писать нельзя (то что есть — практически синхронный код реализующий асинхронность с т.з. пользователя). Хотя ее можно было бы реализовывать по человечески написанным кодом.


                                                                                                  я вас не об этом спрашивал.

                                                                                                  еще раз спрошу, внимательно почитайте вопрос:

                                                                                                  2. фундаментально, в 1С асинхронность можно реализовать?


                                                                                                  1. Neikist
                                                                                                    05.10.2019 02:45

                                                                                                    Да. Но вопрос который поднимает автор статьи не в том что асинхронность не нужна, я уже цитировал что авторами имелась в виду именно убогость текущей реализации этого механизма, когда вместо того чтобы делать это прозрачно, кучу работы возложили на программиста.

                                                                                                    Вот я очень не люблю прибегать к этому аргументу и почти никогда этого не делаю, но в данном случае не вижу другого выхода.
                                                                                                    У вас не хватает опыта работы с другими системами, языками и платформами чтобы видеть недостатки 1с. Неудобства и костыли вы принимаете за норму и правильный подход, как и излишние ограничения. Вы просто не видите что в любой конфигурации тысячи и десятки тысяч мест где было бы удобно применить async/await паттерн, что способствовало бы заметному упрощению. Вы не видите что платформа выступает как фреймворк с кучей функций стандартной библиотеки, но по факту язык более низкоуровневый ибо требует для реализации того чего нет в стандартной библиотеке опускаться на более низкий уровень абстракции чем, например, C# или котлин. Сколько времени несколько человек вам толкует что после доработки языка 1с вы бы могли еще больше упростить и ускорить работу — но вы все время приводите монструозные блоки кода которые делают почти то же самое, просто заметно неудобнее и вы утверждаете что это не недостаток.


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 02:58

                                                                                                      но я не автор статьи и я вам задал простой вопрос.
                                                                                                      разве нет?

                                                                                                      +

                                                                                                      Я как раз не скрываю что у меня нет опыта в других языках и именно по этому я долго и упорно выяснял что именно вам не нравится в реализции асинхронности платформой 1С и почему оно async/await…

                                                                                                      и таки да — я согласен что в чистом виде async/await в 1С нет, в то время как ВСЕ задачи которые вы решаете чистой async/await в 1С решаются другими методами — с большим количеством строк кода но принципиально решаются.

                                                                                                      + смотрю на эту ситуацию с другой стороны: авторы статьи не работают в 1С и не решают задачи учета в 1С, они с ней конкурируют — по этому то что по сути не является проблемой — ими преподносится как проблема… например глава «отказ от синхронности» или претензия к визуальной разработке интерфейса — где авторы просто не знают про управляемые формы что это почему это и для чего и пишут откровенную ересь про веб приложения и тд и тп…


                                                                                                      1. Neikist
                                                                                                        05.10.2019 03:05

                                                                                                        по этому то что по сути не является проблемой — ими преподносится как проблема

                                                                                                        Я работал с 1с 4 года, участвовал в реализации крупных проектов и двух коробок (в которых в т.ч. и сами 1с были задействованы как консультанты и третейский судья). И то что авторами данной статьи преподносится как проблема — я тоже считаю проблемой.

                                                                                                        Впрочем такими темпами это уже на третий круг пойдет. Разойдемся при своих, друг друга мы не переубедим, а для стороннего наблюдателя аргументов с обоих сторон достаточно чтобы он принял для себя какое то решение или сделал выводы.


                                                                                                        1. IamAlexy
                                                                                                          05.10.2019 03:08

                                                                                                          вы под конец беседы просто на вопрос ответьте:

                                                                                                          Есть ли в 1С асинхронность, да или нет?

                                                                                                          :)


                                                                                                          1. Neikist
                                                                                                            05.10.2019 03:12

                                                                                                            https://habr.com/ru/company/lsfusion/blog/468415/#comment_20715257
                                                                                                            Дам еще раз ссылку на комментарий. Если что — первое слово в нем и было ответом. А далее шло пояснение что мы обсуждаем не наличие/отсутствие возможности реализовать асинхронность для пользователя или части кода (с этим с самого начала никто не спорил если что), а обсуждаем попытку опровержения пункта из статьи почему это сделано плохо.


                                                                                                            1. IamAlexy
                                                                                                              05.10.2019 03:14

                                                                                                              ох как вам не хочется просто и прямо ответить «Да, в 1С есть асинхронность»

                                                                                                              :)

                                                                                                              ок… мы уже пошли по четвертому кругу.


                                                                                                              1. Neikist
                                                                                                                05.10.2019 03:16

                                                                                                                Еще раз, я давно уже ответил. Просто вы сдвигаете диалог от изначального вопроса к другому (с которым я и не спорил). Это как классический пример из области манипуляции: «Вы уже перестали пить коньяк по утрам?» Ответы да и нет на этот вопрос просто не подходят поскольку с самого начала вопрос не имеет смысла.


                                                                                                                1. Veidt Автор
                                                                                                                  05.10.2019 13:50

                                                                                                                  А вы упорный. Даже с lair, который куда больше разбирается в вопросе, я так долго не продержался.


                                                                                                          1. Veidt Автор
                                                                                                            05.10.2019 13:40

                                                                                                            Есть. Но сделана криво. А вот синхронности нет и ее приходится эмулировать руками.


                                                                                                      1. kryvichh
                                                                                                        05.10.2019 11:15

                                                                                                        Ну да, все задачи, которые решаются современными языками и IDE, можно было бы решить на С++ конца 90-х гг. (год рождения языка 1С — 1996. Списан с Visual Basic 4.0 1995 г.в.). Однако уже 20+ лет прошло, и программистская отрасль на месте не сидела.


                                                                                                    1. IamAlexy
                                                                                                      05.10.2019 03:21

                                                                                                      Вы просто не видите что в любой конфигурации тысячи и десятки тысяч мест где было бы удобно применить async/await паттерн,


                                                                                                      а когда я у нескольких человек просил пример задачи где async/await реально востребован — мы выдали сомнительную задачу параллельно скачивать файлы — применение метода ради применения…


                                                                                                      1. kryvichh
                                                                                                        05.10.2019 11:24

                                                                                                        Ну вы даёте. Вы же сами писали, что использовали фоновые задания для асинхронной подкачки файлов. Ну так такие вещи и делаются через async/await, в одной процедуре, в одном контексте, с обработкой любого типа исключений, отмена пользователя, обрыв соединения, отображения процесса на экране. Никакого спагетти-кода, всё просто и понятно даже первокурснику.


                                                                                                        1. IamAlexy
                                                                                                          05.10.2019 11:32

                                                                                                          вопрос в практических сценариях — у меня именно за передачу файла отвечает платформенная реализованная именно для диалогов вопроса/ответа/предупреждения/работысфайлами нахлобучка которая в 3 строчки кода все делает… правда прерывая процедуру и ожидая внешнего события — удобно быстро и просто…

                                                                                                          я в целом концептуально спрашивал про примеры когда в учетной системе нужно параллелить произвольные функции/процедуры — в каких массовых сценариях например это востребовано?


                                                                                      1. lair
                                                                                        05.10.2019 01:35

                                                                                        пользователю вообще фиолетово…

                                                                                        Ну да, да. Правда, у него работает медленнее, чем могло бы, иногда отправляются не все файлы непонятно, почему, и на разработку ушло в три раза больше времени — а так да, фиолетово.


                                      1. Neikist
                                        04.10.2019 15:14

                                        Простите, а вы точно смотрели реализации в других языках? Хотя бы на дарт посмотрите, он чем то близок 1с (один основной поток + изоляты как фоновые задания + возможность коммуницировать через platform channels с потоками на других языках (и их инициировать), но без shared данных, чисто на событиях (асинхронных)). И посмотрите как и для чего там async/await/future используются. Уж простите — но одним каментом этого не объяснить.
                                        И да, если совсем коротко — в точке вызова вашей магическоесловокоторосчитаетцифру() процедура будет ждать ее завершения и только потом продолжится, но это никак не блокирует интерфейс или исполнение другого кода. А как это работает — повторюсь, объяснить в одном каменте не выйдет.


                                        1. IamAlexy
                                          04.10.2019 15:18

                                          И да, если совсем коротко — в точке вызова вашей магическоесловокоторосчитаетцифру() процедура будет ждать ее завершения и только потом продолжится, но это никак не блокирует интерфейс или исполнение другого кода.


                                          то есть я правильно понимаю что в моем примере в поле «Результат2» попытается записаться «неопределено+1» и будет выдана ошибка?

                                          и если результат2 зависит от результат1 то я должен значит не продолжать код далее а прервать код и использовать расчеты из результат1 только после того как явно получу их в контекст?


                                          1. Neikist
                                            04.10.2019 15:22

                                            Нет. Процедура будет ждать. Т.е. буквально. В момент вызова магическоесловокоторосчитаетцифру() замрет (не блокируя тем не менее интерфейс и другие вычисления), затем продолжится после завершения магическоесловокоторосчитаетцифру() ровно с того же места и положит в ваш результат2 3+1, ну и дальше спокойно побежит.


                                            1. IamAlexy
                                              04.10.2019 15:26

                                              Нет. Процедура будет ждать. Т.е. буквально. В момент вызова магическоесловокоторосчитаетцифру() замрет (не блокируя тем не менее интерфейс и другие вычисления), затем продолжится после завершения магическоесловокоторосчитаетцифру() ровно с того же места и положит в ваш результат2 3+1, ну и дальше спокойно побежит.


                                              весьма неплохое решение.

                                              1С просто чуть дальше пошла и сразу реализовала возможность получить результат в другое окно/контекст…

                                              то есть сохранив вашу функциональность посредством введения собственной логики работы с событиями — 1С реализовала возможность запускать события в одном контексте а обрабатывать в другом…

                                              а на выходе — 100% покрытие вашей функциональности + дополнительные возможности


                                              1. Neikist
                                                04.10.2019 15:28

                                                Понимаете в чем дело, в нормальных языках оно работает в обоих вариантах. Колбеки, замыкания и async/await — позволяют писать код по человечески. Хотите передать результат другому объекту — да пожалуйста, никто не мешает.


                                                1. IamAlexy
                                                  04.10.2019 15:36

                                                  так он и в 1С работает так же в обоих вариантах -чем 1С в этом плане не нормален?

                                                  тем что по другому синтаксис построен?
                                                  ну так опять же — вкусовщина и субъективизм, плюс рефлекторное непринятия 1Са со стороны сообщества…

                                                  а по факту то задачи те же решаются, возможности те же…


                                                  1. Neikist
                                                    04.10.2019 15:42

                                                    Да не так же, в том и беда. Вот есть у вас цепочка вопросов, часть вопросов в зависимости от ответов на предыдущие вопросы выкидывается, часть добавляется, иногда нужно выбрать значение из справочника или перечисления. А по результатам какое то действие совершить. Сколько дико костыльного кода на 1с вам потребуется написать для реализации такого сценария?


                                                    1. IamAlexy
                                                      04.10.2019 15:48

                                                      они все сразу открываются а потом должны закрываться по мере отсутствия необходимости или там просто идут проверки и постоение дерева вопросов исходя из результатов предыдущих ответов и все это последовательно открывается?

                                                      пока вы просто озвучили задачу простейшего помошника настройки когда из ответов на очередном этапе настройки следующий открывается с учетом данных предыдущих вариантов… типа «осно — настройки пбцу18 — настройки прямых затрат» и пошли ветки дерева вариантов настроек…

                                                      это же по сути тупокодинг под конкретную задачу и логику описанную в ТЗ

                                                      ни в одном языке программирования нет голосового ввода ТЗ и сразу интерпретации этих человеческих хотелок в готовое решение…


                                                      1. Neikist
                                                        04.10.2019 16:01

                                                        там просто идут проверки и постоение дерева вопросов исходя из результатов предыдущих ответов и все это последовательно открывается?

                                                        Каждый раз при вызове «ПоказатьВопрос» вам нужно будет прерываться, класть все нужные данные (которые на каждом шаге отличаются) в структуру, которую класть в этот обработчик которому задавать имя процедуру продолжения в которой все повторять. Есть вариант чуть лучше когда метод обработчик указывает сам себя как получатель и получаем конечный автомат почти — но это также гораздо менее удобно чем банальное
                                                        Результат = Вопрос("А", варианты,...).ЖдатьРезультата()
                                                        Если (Результат = а) тогда
                                                        // выбор из списка и завершение
                                                        ИначеЕсли (Результат = б) тогда
                                                        // завершение
                                                        ИначеЕсли (Результат = в) Тогда
                                                        // еще два вопроса и в зависимости от ответов либо на сервер идем за инфой и задаем новый вопрос либо завершение
                                                        Иначе
                                                        // Еще вопрос
                                                        КонецЕсли;
                                                        
                                                        Если (ЧтоТоПодсчитанноеРанее И Вопрос("Б"...).ЖдатьРезультата() = Да) Тогда
                                                        // Сохраняем изменения
                                                        Иначе
                                                        // Закрываем форму
                                                        КонецЕсли;
                                                        


                                                        1. IamAlexy
                                                          04.10.2019 16:07

                                                          Каждый раз при вызове «ПоказатьВопрос»


                                                          я и не собирался пользоваться «ПоказатьВопрос» — я форму сделаю с нормальными элементами на форме…

                                                          делать подобный опросник через «показатьвопрос» глупо, вы еще через ввод строки сделайте… пуляя в заголовок вопрос на который ответ надо ввести…

                                                          описанная вами задача вообще без фоновых событий решается…


                                                          1. Neikist
                                                            04.10.2019 16:13

                                                            Вы так и не поняли что это был лишь абстрактный пример лишь иллюстрирующий проблему… Или вам тут полноценную конфигурацию накидать нужно? Ну и да, проще задать пять вопросов в одной процедуре чем городить форму где в зависимости от проставленных флагов или выбранных значений нужно будет управлять видимостью и изменением значений других элементов.
                                                            Вопросы были лишь как демонстрация. Вместо них могут быть 5 разных форм подбора каждая со своей функциональностью (тоже будете склеивать в одну мегаформу или влезать в код каждой формы и прописывать новую логику в зависимости от переданных параметров при открытии?)

                                                            Я уже наверно скоро скачусь в банальный аргумент 1сников которые часто отметают претензии тем что оппонент не знает 1с…


                                                            1. IamAlexy
                                                              04.10.2019 16:19

                                                              ну вы у себя тоже будете писать вызов и анализ результата?
                                                              конечно будете

                                                              ну я положу проверку результата в обработку оповещения и так же напишу все нужные проверки и логики… и будет так же открываться этот показатьвопрос и так же будет обрабатываться…

                                                              искренне не понимаю выдуманной проблемы из обычной в общем то задачи которая зачастую еще и красивее решается не тупым «показатьвопрос» а созданием нормального визарда…


                                                              1. Neikist
                                                                04.10.2019 16:21

                                                                Засим закругляюсь. Вижу что вы не то чтобы не можете понять проблемы, вы ее не хотите понять.
                                                                И бессмысленно сваливаться в частности при обсуждении принципов. Принципы намеренно иллюстрируются упрощенными примерами.


                                                                1. IamAlexy
                                                                  04.10.2019 16:36

                                                                  ну так в этом то и проблема — все ваши проиллюстрированные принципе через упрощенные примеры легко и непринужденно решаются на платформе 1С…

                                                                  то есть е не нехочу понять проблему — я ее просто не вижу т.к. исходя из того что я почерпнул из нашей переписки- проблемы для 1С и разработки на 1С — нет.


                                                                  1. Neikist
                                                                    04.10.2019 16:53

                                                                    Да пожалуйста, ваше решение. Я в свое время эти проблемы увидел, что помогло принять решение с 1с уйти.


                                                                    1. IamAlexy
                                                                      04.10.2019 17:08

                                                                      ну помошник начального заполнения типовых же — например УНФ или ЗУП…
                                                                      дерево настроек зависимое от предыдущих ответов ведет пользователя с нуля до окончания настроек…

                                                                      это прям первое что приходит в голову…
                                                                      опять же — закрытие месяца в той же БП… да там куча подобных помошников — тривиальная же задача…


                                                                      1. Neikist
                                                                        04.10.2019 17:15

                                                                        Вы все таки не понимаете…


                                              1. Neikist
                                                04.10.2019 15:29

                                                Ну и да, это не 100% покрытие этой функциональности. Нет возможности сохранить стек вызовов. Ну никакой нет. Т.е. в цикле например не получится в таком виде работать (ну ладно, через костыли и сотни строк кода можно сделать чтобы результат для пользователя выглядел так же, но… Вы серьезно?)


                                              1. lair
                                                04.10.2019 15:58

                                                1С просто чуть дальше пошла и сразу реализовала возможность получить результат в другое окно/контекст…

                                                Это то "дальше", которое в .net было до TPL и async/await?


                                                Вопрос-то в том, как легко и просто попасть в тот же контекст, где вы были.


                                                1. IamAlexy
                                                  04.10.2019 16:05

                                                  Вопрос-то в том, как легко и просто попасть в тот же контекст, где вы были.


                                                  собственно ловить результаты в том контексте в котором вы были и далее продолжить его выполнение…

                                                  у вас там как выше коллеги писали обработка останавливается и ждет результат1 чтобы посчитать результат2, в 1С отпралвяется событие и затем по факту завершения запускается процедура с входящим параметром «результат1» в которой далее читается то что нужно- в нашем примере результат2

                                                  те же яйца только сбоку…


                                                  1. lair
                                                    04.10.2019 16:09

                                                    те же яйца только сбоку…

                                                    В том-то и дело, что нет. То, что вы описываете — это APM (ну либо EAP, что еще хуже). Он известен, понятен, и у него есть недостатки.


                                                    async/await — это другой паттерн, со своими достоинствами (и недостатками, я подозреваю). И скомпенсировать эти достоинства в APM просто нельзя.


                                                    Все это, впрочем, станет очевидно, когда вы приведете код.


                                          1. lair
                                            04.10.2019 15:56

                                            и если результат2 зависит от результат1 то я должен значит не продолжать код далее а прервать код и использовать расчеты из результат1 только после того как явно получу их в контекст?

                                            В том-то и дело, что не вы должны, а платформа за вас все делает. А вы пишете код так, как если бы все операции были синхронными.


                                            1. IamAlexy
                                              04.10.2019 16:12

                                              если мне надо закрыть форму результат1 поймать в другую форму?


                                              1. lair
                                                04.10.2019 16:14

                                                А это другая задача с другим решением.


                                  1. lair
                                    04.10.2019 14:39

                                    Пример кода покажите, пожалуйста.


                                    1. CrushBy
                                      04.10.2019 14:41

                                      Миллион раз у них это спрашивал. Отвечают, что они мышкой все программирует, и кода не нужно вообще.


                                    1. retran
                                      04.10.2019 15:05

                                      Не будет у них примера, в 1С сейчас нет stackless корутин ни в каком виде. Асинхронность есть, аналогичная APM (BeginInvoke/EndInvoke).


                              1. pauls0
                                04.10.2019 14:32

                                1С умеет то что умеет async/await


                                глубокая мысль…

                                ну всё же было сверху написано — что реализовано в 1с, а что является нормальной практикой сейчас в иных ЯП

                                но кто-то не понимая сути вопроса сначала лезет на абордаж, а потом съезжает «я же могу тоже самое»

                                и глаза на что раскрыть надо? вы не понимаете вообще что вам пишут


                              1. Neikist
                                04.10.2019 14:35

                                «Ассемблер умеет то что умеет 1с. Может будет какой пример который я не могу решить своими методами?»
                                Аналогия понятна?


                                1. IamAlexy
                                  04.10.2019 14:41

                                  а в контексте готовых платформ для автоматизации бизнеса и написания ERP?

                                  сроки, стоимость, трудозатраты и возможности?
                                  мы же общаемся не в целом «язык программирования 1С лучше/хуже чем сишарп» а в контексте решения бизнес-задач, стоимости этих решений, удобстве и скорости их реализации и сопровождении… разве нет?


                                  1. Neikist
                                    04.10.2019 14:44

                                    А про бизнес задачи я вам выше написал. Когда

                                    куски бизнес логики отделены друг от друга не по причине разных уровней абстракции или разных задач, а по причине технических ограничений
                                    бизнес задачи решать, внезапно, сложнее и медленнее.


                              1. retran
                                04.10.2019 15:01

                                1С умеет то что умеет async/await


                                Нет, не умеет, совсем. И это одна из реальных проблем, да.


                                1. IamAlexy
                                  04.10.2019 15:16

                                  я просто тупой 1Сник, вы не могли бы практический пример привести который нельзя реализовать?

                                  не терминами сыпать безапелляционными а простой пример который наглядно покажет что это нельзя сделать в 1С?

                                  потому что исходя из того что я бегло почитал — никаких невыполнимых функция я не увидел ни в async/await ни в
                                  stackless — а мне действительно хотелось бы понять что можно а что нельзя…

                                  спасибо.


                                  1. Neikist
                                    04.10.2019 15:25

                                    Проблема в удобстве. В 1с конечно можно через всякие обработчики оповещения накостылять, но выглядит и пишется это ужасно. Даже если отбросить многопоточку коей в 1с нет, и наверно правильно, зная квалификацию многих 1сников которые попутно еще и обязанности эникея выполняют а 1с занимаются 1 день в месяц. И то есть пример без многопоточки но нормально это реализующий, дарт.


                                    1. IamAlexy
                                      04.10.2019 15:28

                                      ну это же субъективизм и вкусовщина… особенно в контексте того что у обработчиков оповещения возможностей больше и они решают в том числе и другие задачи, такие как получение оповещений из других контекстов…


                                      1. Neikist
                                        04.10.2019 15:32

                                        Есть простая задача. Открыть в цикле N форм, результат возвращенный из каждой формы обработать ( с возможностью по условию прервать этот цикл если например значение вышло за рамки какие то), полученное сгруппировать и посчитать в исходной форме, и вернуть процедуре вызвавшей текущую процедуру. Ваше решение на 1с?


                                        1. IamAlexy
                                          04.10.2019 15:39

                                          все формы обрабатываются параллельно? то есть я открыл 10 форм в каждой что то внес и по факту общих расчетов в какой то момент понимаю что остальные формы не нужны и они закрываются и открывается 11ая форма с результатом?


                                          1. Neikist
                                            04.10.2019 15:44

                                            Чуть выше дал пример с цепочкой вопросов и форм.


                                  1. retran
                                    04.10.2019 15:26

                                    Предположим, что есть внешнее API отдающее поток событий через long polling. Реализовать обработку потока событий на 1С таким образом, чтобы минимизировать занятие потока фоновым заданием (потому что пока мы висим на long polling хотелось бы и другие задания повыполнять), без холостых оборотов процессора (потому что Thread.Sleep() у вас нет) и без пересоздания фоновых заданий(потому что в 1с создание фонового задания — это очень дорого и медленно).

                                    Это очень большой класс задач, если что, которые реально пытаются решать на 1С — от телеграм-ботов до торговых терминалов.


                                    1. IamAlexy
                                      04.10.2019 15:32

                                      http сервис например и далее реакция на входящее событие?

                                      или именно нужно получать событие а не ждать его от внешней системы пока мы чем то другим занимается?
                                      — тогда фоновый процесс… пусть сидит себе на сервере и чем угодно занимается оповещая нас о результатах…

                                      не очень понятно почему вы не хотите использовать инструментарий который для этого и разрабатывался…
                                      «нам надо забить гвоздь но мы будем его забивать клещами» — странная логи


                                      1. retran
                                        04.10.2019 15:41

                                        Ждать его от внешней системы удерживая http-соединение и параллельно занимаясь другими делами, не занимая фоновым заданием рабочий поток, который мог бы делать что-то полезное.

                                        не очень понятно почему вы не хотите использовать инструментарий который для этого и разрабатывался…


                                        Потому что существующий инструментарий разрабатывался не для этого и не решает проблему.


                                        1. IamAlexy
                                          04.10.2019 15:42

                                          http сервис не удерживает соединение — в него внешние источники долбятся… и он реагирует например на вебхуки облачных телефоний… и


                                          1. retran
                                            04.10.2019 15:45

                                            http сервис не удерживает соединение


                                            Я еще раз повторю — long polling.


                                            1. IamAlexy
                                              04.10.2019 15:56

                                              фоновые процессы тогда — запускаешь и он там что угодно делает независимо от тебя…

                                              не очень тогда понимаю сути проблемы- недостаточно быстро? ну так учетная система 1С делалась не для автоматизации космических кораблей — у нее свои утилитарные задачи… умеет? умеет — отлично… кто то может быстрее — молодцы… зато 1С в чем то другом много сильнее того кто long polling держит красивее чем 1С…


                                              1. lair
                                                04.10.2019 16:00

                                                фоновые процессы тогда — запускаешь и он там что угодно делает независимо от тебя…

                                                И занимает ресурсы. А этого хочется избежать.


                                                1. IamAlexy
                                                  04.10.2019 16:15

                                                  хм… а бывают системы где например что то работает и не занимает ресурсов вообще? вот прям вообще вообще?

                                                  или речь про оптимизацию — типа «в нашем языке программирования данная задача решается на 10% меньше используя ресурсов чем в 1С»?


                                                  1. lair
                                                    04.10.2019 16:17

                                                    Про оптимизацию, конечно.


                                                    1. IamAlexy
                                                      04.10.2019 16:40

                                                      тут спорить не буду… 1С заточенная под другое будет явно менее оптимальна чем спициально заточенные под это библиотеки и/или языки…

                                                      но тут есть подводный камень — автоматизация бизнеса в целом…
                                                      зачастую бывает так что не являясь оптимальной в чем то узком — 1С как платформа наиболее оптимальна для автоматизации всего бизнеса в целом и небольшую неоптимальность в не титульном процессе 1Су простить вполне можно… :)


                                                      1. lair
                                                        04.10.2019 16:42

                                                        спициально заточенные под это библиотеки и/или языки…

                                                        .NET — платформа общего назначения, а C# — язык общего назначения.


                                                        1С как платформа наиболее оптимальна для автоматизации всего бизнеса в целом

                                                        Это утверждение, скажем так, не доказано.


                                                        1. IamAlexy
                                                          04.10.2019 16:49

                                                          ну вы для примера привели:

                                                          .NET — платформа общего назначения, а C# — язык общего назначения.


                                                          1С по сравнению с ними — наиболее заточена для автоматизации бизнеса…


                                                          1. lair
                                                            04.10.2019 16:50

                                                            Это некорректное сравнение, потому что вы сравниваете платформу общего назначения с прикладной платформой.


                                                            Сравнивайте уж тогда с прикладными платформами, написанными на .NET.


                                                            1. IamAlexy
                                                              04.10.2019 17:11

                                                              это вы привели данные языки в контексте обсуждения неоптимальности решения на платформе 1С задач которые не являются целевыми для прикладной платформы…


                                                              1. lair
                                                                04.10.2019 17:13

                                                                задач которые не являются целевыми для прикладной платформы

                                                                Ну то есть "если 1С этого не умеет — это не целевая задача", да?


                                                                Понимаете ли, в чем дело, я много лет (последние два места работы) занимаюсь разработкой ERP-решений. И я очень хорошо понимаю, почему описанные задачи являются типовыми для современной ERP.


                                                                1. retran
                                                                  04.10.2019 17:38

                                                                  И я очень хорошо понимаю, почему описанные задачи являются типовыми для современной ERP.


                                                                  Оказывается, что я на прошлой работе полгода занимался нецелевой проблемой :(


                                                                  1. lair
                                                                    04.10.2019 17:40

                                                                    Всего полгода?..


                                                                    1. retran
                                                                      04.10.2019 17:44

                                                                      Занимался, а не полностью решил.


                                                                      1. lair
                                                                        04.10.2019 17:46

                                                                        Не, я в том смысле, что многим людям удается годами и даже при везении десятилетиями нецелевыми проблемами заниматься.


                                                              1. retran
                                                                04.10.2019 17:32

                                                                задач которые не являются целевыми для прикладной платформы


                                                                Они не являлись целевыми в 2002 году, надо понимать, что мир изменился, а платформа уже несколько устарела.


                                                        1. skrimafonolog
                                                          04.10.2019 20:18

                                                          1С как платформа наиболее оптимальна для автоматизации всего бизнеса в целом


                                                          Это утверждение, скажем так, не доказано.


                                                          Оптимально — это несколько перебор у вашего оппонента.

                                                          Но одна из лучших — это верно.
                                                          Рынок доказал же. Какие еще могут быть доказательства? Ну разработал я мегакрутую платформу лучше — если по ней специалистов нет, то для автоматизации бизнеса она будет не лучшим выбором.

                                                          В сегодняшней ситуации — это так, 1С хороший выбор для автоматизации бизнеса. Что в будущем будет, можно следать лучше — это другой вопрос.


                                                          1. lair
                                                            04.10.2019 21:01

                                                            Рынок доказал же.

                                                            Что доказал, как доказал, и что самое важное, какой рынок?


                                                            (я не издеваюсь, я очень серьезно спрашиваю)


                                                            Что в будущем будет, можно следать лучше — это другой вопрос.

                                                            Вы же понимаете да, что это очень плохо сочетается с аргументом "если специалистов нет"?


                                                            1. skrimafonolog
                                                              04.10.2019 21:21

                                                              Что в будущем будет, можно следать лучше — это другой вопрос.

                                                              Вы же понимаете да, что это очень плохо сочетается с аргументом «если специалистов нет»?


                                                              Почему?
                                                              Нет желания за свой счет тестировать.

                                                              А у разработчиков — мотивация есть, как вижу.
                                                              Пусть развивают, рекламируют, обучают…

                                                              Глядишь, пройдут тот критический барьер, когда сообщество само растет.


                                                              1. lair
                                                                04.10.2019 21:22

                                                                Почему?

                                                                Потому что неоткуда взяться специалистам.


                                                                (Занятно, впрочем, что вы не ответили на предыдущие вопросы)


                                                  1. Neikist
                                                    04.10.2019 16:19

                                                    Проблема в том что в 1с «работает» а не работает. Т.е. крутит в холостую цикл «Пока Истина Цикл… КонецЦикла;»
                                                    А бывает что не работает вообще никак, даже так.


                                                    1. IamAlexy
                                                      04.10.2019 16:38

                                                      без конкретной задачи — бессмысленный спор…
                                                      может это просто лично вы в бытность 1Сником ничего кроме цикла не знали и реализовывали все без фоновых процессов тупо в цикле в клиентских формах…


                                                      1. Neikist
                                                        04.10.2019 16:55

                                                        Я как раз имею в виду цикл в фоновом задании. Ну не умеет 1с держать открытое соединение. Народ городит отдельные потоки во внешних компонентах которые держат соединение открытым, сигналят 1с, а фоновое задание в бесконечном цикле проверяет результаты.


                                                        1. retran
                                                          04.10.2019 16:58

                                                          Я как раз имею в виду цикл в фоновом задании. Ну не умеет 1с держать открытое соединение. Народ городит отдельные потоки во внешних компонентах которые держат соединение открытым, сигналят 1с, а фоновое задание в бесконечном цикле проверяет результаты.


                                                          Именно так, при этом работает все плохо, потому что фоновые задания архитектурно не рассчитаны на то, чтобы жить долго и тем более крутить бесконечный цикл.


                                                          1. gennayo
                                                            04.10.2019 21:57

                                                            Поэтому, сейчас актуальная тема — интегрировать 1С с Кроликом :))


                                                        1. IamAlexy
                                                          04.10.2019 17:14

                                                          практическую задачу из сферы автоматизации бизнеса можно? ну для которой у вас фоновое задание ПОСТОЯННО должно крутиться?

                                                          ps: в 1С есть такая сущность как регламентное задание — и не надо никаких циклов крутить…


                                                          1. Neikist
                                                            04.10.2019 17:20

                                                            А каким боком регламентное задание позволит работать с постоянно открытым HTTP соединением?
                                                            А бизнес задача простая, оптимизация работы. Установка соединения, между прочим, довольно тяжелый процесс.


                                                            1. pauls0
                                                              04.10.2019 17:54

                                                              для киосков по торговле носками (обычное место обитание 1с за пределами бухгалтерии) это не тяжелый процесс. и «бизнес всегда доволен» — пусть месяц закрывается по 2-е суток. то не страшно

                                                              вы адептов еще спросите почему пустая база бухгалтерии столько весит и тормозит. причем тормозит «сама по себе» — основные счетчики в win «пустые»


                                                            1. skrimafonolog
                                                              04.10.2019 20:27

                                                              А каким боком регламентное задание позволит работать с постоянно открытым HTTP соединением?

                                                              long-polling в http сам по себе костыль.
                                                              websocket нужно использовать.
                                                              Например, как здесь:
                                                              wonderland.v8.1c.ru/blog/sistema-vzaimodeystviya

                                                              Поллинг сервиса биржевых котировок ровно раз в секунду, например. Регламентные задания без внешних костылей не справляются.


                                                              А конкретная задача про биржевые котировки, что тут приводилась, может быть решена и вообще иначе в 1С
                                                              infostart.ru/public/819178

                                                              Или вот можно с внешней компонентой решить ту же задачу infostart.ru/public/434771


                                                              1. retran
                                                                04.10.2019 21:12

                                                                wonderland.v8.1c.ru/blog/sistema-vzaimodeystviya


                                                                Во-первых, это не вебсокеты, а во-вторых, удачи в использовании api, которое не поддерживает вебсокеты, а таковых много.

                                                                UPD Точнее это не те вебсокеты, с помощью которых вы можете проинтегрироваться с внешними апи.

                                                                А конкретная задача про биржевые котировки, что тут приводилась, может быть решена и вообще иначе в 1С
                                                                infostart.ru/public/819178


                                                                Это джаваскрипт, а не 1с. На сервере тоже будете фейковую страничку открывать… где?

                                                                Или вот можно с внешней компонентой решить ту же задачу infostart.ru/public/434771


                                                                Это не эта задача. Ну и внешняя компонента — это не 1С и не переносимо.


                                                                1. skrimafonolog
                                                                  04.10.2019 21:57

                                                                  Ну и внешняя компонента — это не 1С

                                                                  Внешние компоненты должны реализовывать API 1С — иначе это не будет внешней компонентой. Так что это вполне полноценный компонент расширения 1С.
                                                                  Считает, что платформа должна реализовывать на все случаи жизни ситуации?
                                                                  Воспринимайте её как библиотеку, вы же в прочих языках не только стандартную библиотеку используете?


                                                                  1. retran
                                                                    04.10.2019 22:09

                                                                    То есть мы имеем вроде бы переносимую платформу, но я не могу решить проблему на компьютере с Windows, так чтобы решение из коробки заработало на компьютере с Linux или MacOS.

                                                                    Считает, что платформа должна реализовывать на все случаи жизни ситуации?


                                                                    Нет, но описанные выше сценарии — они не экзотические, они совершенно обычные и болит от у них у многих.


                                                            1. IamAlexy
                                                              04.10.2019 20:41

                                                              а зачем постоянно открытым держать HTTP соединение?

                                                              практический смысл из мира учетных задач можете привести?

                                                              ради чего нужна нагрузка, постоянный канал и это вот все?

                                                              мы же не забываем что 1С это не убийца С++ и не замена питону — это прикладная среда для решения определенного круга специфических задач…


                                                              1. Neikist
                                                                04.10.2019 20:47

                                                                Интеграции например.


                                                                1. IamAlexy
                                                                  04.10.2019 23:48

                                                                  а вам сказал что для интеграции постоянное открытое соединение — правильное решение?


                                                                  1. lair
                                                                    04.10.2019 23:52

                                                                    Поставщик с другой стороны.


                                                                    1. IamAlexy
                                                                      04.10.2019 23:59

                                                                      ну то есть вы заложник чужого архитектурного косяка?
                                                                      а поставщик с той стороны API предоставил какое то для подключения? описание протоколов, методов и прочее — что обычно предоставляют в таких случаях? есть пример где посмотреть подобные требования?


                                                                      1. lair
                                                                        05.10.2019 00:11

                                                                        ну то есть вы заложник чужого архитектурного косяка?

                                                                        Да. Типично для интеграции.


                                                                        а поставщик с той стороны API предоставил какое то для подключения?

                                                                        Да. HTTP.


                                                                        есть пример где посмотреть подобные требования?

                                                                        Я уже давал ссылку.


                                                                    1. IamAlexy
                                                                      05.10.2019 00:23

                                                                      если вы про salesforce.com — то они на своей стороне говорят про REST API…


                                                                      1. lair
                                                                        05.10.2019 00:46

                                                                        1. IamAlexy
                                                                          05.10.2019 01:02

                                                                          ну вроде нет особых проблем с вебсокетами в 1С
                                                                          внешние компоненты например
                                                                          infostart.ru/public/937068 — там и пример интеграции со слаком кстати…

                                                                          или тот же JS infostart.ru/public/819178


                                                                          1. lair
                                                                            05.10.2019 01:04

                                                                            Уже обсуждалось, повторяться не буду.


                                                                  1. Neikist
                                                                    04.10.2019 23:58

                                                                    Иногда бывает что нет выхода. Система какая нибудь проприетарная там. Но вообще конкретно это — довольно частный случай применения подобного подохода. Так то есть тысячи мест в коде которые почти каждой конфигурации где это пригодилось бы.


                                                                    1. IamAlexy
                                                                      05.10.2019 00:09

                                                                      ну тут дело то такое — мы же живем не в мире монополий, тот же сейлсфорс по идее заинтересован в максимальном охвате рынка — и как раз он имеет и соап и рест апи для интеграции… прямо из коробки несколько вариантов — на хабре на эту тему статьи даже есть…

                                                                      нет в 1С одной технологии с постоянным соединением — ну вот две другие… бери и синхронизируйся соапом…

                                                                      понятно что можно найти 100500 ситуаций которые не умеет 1С — типа работы с драйверами напрямую с железом и прочие низкоуровневые штуки… но 1С то не для этого делалась… она делалалсь чтобы учетные системы строить, чтобы контекстные чаты и видеоконференции, которые вы в других системах год писать будете — в 1С работали без строчки кода из коробки с привязкой к добавленным и измененным объектам…


                                                                      1. lair
                                                                        05.10.2019 00:12

                                                                        нет в 1С одной технологии с постоянным соединением — ну вот две другие… бери и синхронизируйся соапом…

                                                                        И не получите real-time.


                                                                        1. IamAlexy
                                                                          05.10.2019 00:25

                                                                          а в CRM точно нужен real-time или задержка в 3 секунды допустима на загрузку и обработку лида?


                                                                          1. lair
                                                                            05.10.2019 00:47

                                                                            а в CRM точно нужен real-time

                                                                            Иногда нужен.


                                                                            или задержка в 3 секунды допустима на загрузку и обработку лида?

                                                                            Это если вы можете в pull-модели обеспечить задержку в три секунды (спойлер: не всегда).


                                                                            1. IamAlexy
                                                                              05.10.2019 02:32

                                                                              сферическая CRM в вакууме где задержка на загрузку лида из ВНЕШНЕЙ системы в 3 секунды критична…

                                                                              мне кажется тут с постановкой задач и организацией бизнеспроцессов что то не очень в порядке…


                                                              1. lair
                                                                04.10.2019 21:05

                                                                практический смысл из мира учетных задач можете привести?

                                                                https://habr.com/ru/company/lsfusion/blog/468415#comment_20713649


                                                          1. retran
                                                            04.10.2019 17:29

                                                            Поллинг сервиса биржевых котировок ровно раз в секунду, например. Регламентные задания без внешних костылей не справляются.


                                                            1. lair
                                                              04.10.2019 17:31

                                                              … или вот интеграция с Salesforce (куда уж бизнесовее-то) по Streaming API.


                                                              1. skrimafonolog
                                                                04.10.2019 20:48

                                                                … или вот интеграция с Salesforce (куда уж бизнесовее-то) по Streaming API.


                                                                Где не хватает 1С — всегда можно написать небольшой адаптер-конвертер на другом языке.
                                                                Прицепить его к 1С легко. 1С имеет средства интеграции с внешним ПО кучей способов, среди них есть и с поддержкой асинхронности явной (внешние компоненты) или неявной (COM, http-сервисы)


                                                                1. lair
                                                                  04.10.2019 21:05

                                                                  Ну, задачей-то было показать, что 1С не хватает. То, что изворотливый программист это может решить — понятно.


                                                                  1. IamAlexy
                                                                    05.10.2019 00:13

                                                                    developer.salesforce.com/docs/api-explorer

                                                                    пишут про REST API — или я не там читаю?
                                                                    1С это умеет штатными средствами без каких либо проблем…


                                                                    1. lair
                                                                      05.10.2019 00:13

                                                                      Два раза ответил, отвечу и третий: по REST вы не получите уведомлений.


                                                                      1. IamAlexy
                                                                        05.10.2019 00:28

                                                                        я реально не догоняю: если есть внешний сервис выдающий мне список уведомлений которые я должен показать в своей системе и я каждые 10 секунд собираю эти уведомления и показываю в своей системе… то почему я не могу получать уведомления?

                                                                        или 10 секунд это много?
                                                                        точно мы про ERP говорим в которую загружаются обработанные данные из внешней CRM а не про управление промышленными роботами на сборке подводных лодок?


                                                                        1. lair
                                                                          05.10.2019 00:48

                                                                          я каждые 10 секунд собираю эти уведомления и показываю в своей системе… то почему я не могу получать уведомления?

                                                                          Потому что каждый десять секунд делать запрос на синхронизацию оказывается недешево, и в итоге запаздывание становится в часы.


                                                                          1. IamAlexy
                                                                            05.10.2019 02:35

                                                                            Потому что каждый десять секунд делать запрос на синхронизацию оказывается недешево, и в итоге запаздывание становится в часы.


                                                                            дешевле держать открытым канал постоянно?


                                                                1. retran
                                                                  04.10.2019 21:15

                                                                  небольшой адаптер-конвертер на другом языке


                                                                  Кроссплатформенно и переносимо?


                                                                  1. o4karek
                                                                    04.10.2019 21:40

                                                                    В общем да. Компоненты поддерживают работу на всех платформах, в вебе и на мобиле. В том смысле, что внешняя компонента может работать везде, где перечислил. Разработчик компоненты должен, естественно, про это помнить.


                                                                    1. retran
                                                                      04.10.2019 21:50

                                                                      … и должен собрать компоненту под каждую платформу и упаковать все собранное в бандл.

                                                                      Это очень далеко от «написал на встроенном языке один раз и заработало везде одинаково».


                                                                      1. o4karek
                                                                        04.10.2019 22:01

                                                                        «написал на встроенном языке один раз и заработало везде одинаково»

                                                                        А кто это анонсировал? Есть возможность написать компоненту, которая под одним интерфейсом «спрячет» работу с нативным API нужной ОС. При этом на тех осях, где компонента есть — будет работать одинаково, с точностью до реализации компоненты.
                                                                        Очевидно, что автору компоненты надо будет приложить некоторый набор усилий. Если полная кроссплатформенность не нужна — ситуация пропорционально упрощается.
                                                                        За чудеса кто-то обязательно должен заплатить, бесплатные чудеса — это фантастика :)


                                                                        1. retran
                                                                          04.10.2019 22:12

                                                                          Здесь нет работы с нативом, здесь в чистом виде костыль для компенсации архитектурного недостатка рантайма.

                                                                          Я в очередной раз напомню, что речь о очень банальной задаче.


                                                                          1. o4karek
                                                                            04.10.2019 22:22

                                                                            Т.е. если (например) .NET «из коробки»(!) не имеет объекта для плана видов характеристик (выражаясь 1с-ской терминологией) — то это будет архитектурный недостаток рантайма и реализация аналога на #-языке или любом другом — будет костыль, я правильно понял? А речь идет о банальной задаче (для 1с-ской платформы).


                                                                            1. retran
                                                                              04.10.2019 22:28

                                                                              Нет, неправильно. Для реализации любого из объектов конфигурации на .net мне не нужно писать внешний компонент и подключать его через com, хотя это и возможно.


                                                                          1. skrimafonolog
                                                                            04.10.2019 22:24

                                                                            Здесь нет работы с нативом, здесь в чистом виде костыль для компенсации архитектурного недостатка рантайма.

                                                                            Я в очередной раз напомню, что речь о очень банальной задаче.


                                                                            При чем тут native? Это же платформа а не голый язык.

                                                                            Вы сравниваете теплое с мягким.

                                                                            Это не язык универсального назначения, а узкозаточеная среда.

                                                                            Вас же не смущает отсутствие в тех языках встроенных СУБД, которая есть в 1С?


                                                                            1. retran
                                                                              04.10.2019 22:42

                                                                              Я перестал понимать чего вы от меня хотите.

                                                                              Моя позиция по поводу сравнения теплого с мягким есть вот тут — habr.com/en/company/lsfusion/blog/468415/#comment_20703735 и ниже по ветке.

                                                                              Если вы меня хотите убедить, что 1С — это хорошо, так я с этим не спорю, 1С все еще лучше большей части ERP-платформ с которыми я сталкивался.

                                                                              Но это не отменяет того, что в 2019 году хорошо бы уметь в некоторые вещи, важные именно для узкой предметноориентированной платформы для разработки бизнес-приложений.


                                                                      1. skrimafonolog
                                                                        04.10.2019 22:03

                                                                        В общем да. Компоненты поддерживают работу на всех платформах, в вебе и на мобиле. В том смысле, что внешняя компонента может работать везде, где перечислил. Разработчик компоненты должен, естественно, про это помнить


                                                                        … и должен собрать компоненту под каждую платформу и упаковать все собранное в бандл.

                                                                        Это очень далеко от «написал на встроенном языке один раз и заработало везде одинаково».


                                                                        Это задача автора внешней компоненты. Рассматривайте ее как библиотеку в других языках. И забота о переносимости библиотеки — это забота автора той библиотеки.

                                                                        На 1С-то код будет один и то же.

                                                                        P.S.:

                                                                        А что? В каком то другом языке это не так? Ну скажем, если вы пишете код на каком нибудь Flutter (кросс-платформенное решение для Android/iOS, использует язык Dart), то адаптеры для iOS и Android для вас кто то написал 2 раза. А уже сверху обертка под Flutter одинаковая, ага.


                                                                        1. retran
                                                                          04.10.2019 22:15

                                                                          Стоп, но ведь это я — автор внешней компоненты, потому что мне приходится ее писать для решения именно моей задачи.


                                                                          1. gennayo
                                                                            04.10.2019 22:17

                                                                            Это да, поэтому и имеем — YellowRabbit и PinkRabbit :)


                                                                        1. Neikist
                                                                          04.10.2019 22:18

                                                                          И в дарте есть нормальные async/await, которые мы и обсуждаем. А уж что в асинхронный код запихивать, работу с ОС, окружением, библиотекой, своим кодом — пофиг. Что угодно можно закинуть. А был бы подход как в 1с было бы все равно что для каждого вызова к API бека пришлось бы платформенные библиотеки писать для обеспечения асинхронности, вместо использования встроенного механизма.


                                                                      1. IamAlexy
                                                                        04.10.2019 23:53

                                                                        опять же — вопрос в практических задачах.
                                                                        вы на мобильном устройстве планируете в ERP поддерживать непрерывное соединение с биржей?

                                                                        вы точно ERP разрабатываете?


                                                                  1. IamAlexy
                                                                    04.10.2019 23:56

                                                                    а кроссплатформенность есть везде кроме 1С в современном мире?
                                                                    .net одинаково работает под мак, линус, виндос, андроид и нокию3310?

                                                                    прям вот кросплатформеннокросплатформенно?

                                                                    извините за вопрос, я просто 1Сник и мне интересно — если 1С есть под все платформы то наверное более серьезные языки тоже под все платформы есть? как мне js запустить на маке? я должен какие то костыли типа вебсерверов ставить или что?


                                                                    1. Neikist
                                                                      04.10.2019 23:59

                                                                      1с под мобилками работает ровно через одно место. Уж поверьте мне, человеку который мобильным приложением на 1с год занимался почти фуллтайм. Это не назвать кроссплатформой.
                                                                      З.Ы. для js достаточно node.js где угодно, ровно так же как и 1с ставить нужно, или java, если мы про «интерпретируемые языки». Веб сервера вообще ни при чем (js вообще изначально клиентский язык и с веб сервером дело имел только как клиент).


                                                                      1. IamAlexy
                                                                        05.10.2019 00:37

                                                                        ну так и я про то говорю — нет такого языка программирования который содержал бы в себе только лучшее из всех остальных языков программирования и мог бы решать все все все возможные практические и теоретические задачи :)

                                                                        на 1С я могу вот прямо сейчас к своему маку подключить айфончик и на него выгрузить простейшее приложение прямо из платформы а затем его же на андроид выгрузить и отправить с этим андроидом кладовщика инвентаризацию проводить на складе или выдать его водителю чтобы он доставку отмечал и фоткал получателя…

                                                                        понятно что я на 1С не напишу пубг… — но 1С то не для этого делалась…


                                                                        1. Neikist
                                                                          05.10.2019 01:05

                                                                          Мы здесь говорим про конкретную функциональность, а не про все возможности разных языков/платформ.


                                                                          1. IamAlexy
                                                                            05.10.2019 02:37

                                                                            ну так я у вас и спрашиваю:

                                                                            Можно ли в платформе 1С реализовать асинхронное выполнение задач?

                                                                            а вы увиливаете от ответа и начинаете рассказывать про количество строк кода, неудобство разработчика (словно мне как заказчику не насрать на удобство разработчика) и прочее прочее прочее…


                                                                            1. Neikist
                                                                              05.10.2019 02:46

                                                                              Выше ответил. И да, вы не заказчик, вы разработчик. Но даже заказчику не пофиг если вы можете ускорить свою работу и повысить ее качество благодаря более высокоуровневому языку.


                                                                              1. IamAlexy
                                                                                05.10.2019 02:59

                                                                                вы не отвечаете упорно на простой вопрос:

                                                                                Есть ли в платформе 1С асинхронность или нет?

                                                                                ну простой вопрос, имейте смелость на него ответить прямо без увиливания…


                                                                                1. Neikist
                                                                                  05.10.2019 03:01

                                                                                  https://habr.com/ru/company/lsfusion/blog/468415/#comment_20715257
                                                                                  Вы почему то постоянно пытаетесь уйти от изначально поднятого авторами статьи вопроса о кривой реализации этого механизма в 1с.


                                                                                  1. IamAlexy
                                                                                    05.10.2019 03:06

                                                                                    потому что во первых меня интересует ваш и лично ваш ответ на поставленный вопрос.

                                                                                    а во вторых (это мое субъективное мнение), авторы настолько некомпетентны и предвзяты что у них заголовок главы противоречит содержимому этой самой главы и в целом вся статья переполнена непониманием целей и задач платформы 1С или прямой ложью.


                                                              1. IamAlexy
                                                                04.10.2019 23:42
                                                                -1

                                                                интеграции с внешними CRM пишут те у кого нет своей собственной CRM :) :) :)


                                                                1. lair
                                                                  04.10.2019 23:51

                                                                  … или те, кто готов продать ERP тем, у кого уже есть поставленная CRM, вместо того, чтобы потерять сделку из-за неспособности синтегрироваться.


                                                              1. IamAlexy
                                                                05.10.2019 00:05

                                                                так у них же есть и REST API и SOAP API…

                                                                в чем проблема их использовать?
                                                                и на 1С наработки есть — садятся 1Сники и пишут обмен…


                                                                1. lair
                                                                  05.10.2019 00:13

                                                                  в чем проблема их использовать?

                                                                  В том, что это pull-модель, а заказчик хочет push.


                                                                  1. IamAlexy
                                                                    05.10.2019 00:29

                                                                    push уведомления у меня из коробки в типовой бухгалтерии 3.0 реализованы :)


                                                                    1. lair
                                                                      05.10.2019 00:48

                                                                      Из Salesforce?


                                                                      1. IamAlexy
                                                                        05.10.2019 02:40

                                                                        в принципе работа с пушами…

                                                                        Salesforce — если надо через вебсокеты подключу если вдруг реста или соапа будет не хватать.

                                                                        платформа позволяет.
                                                                        примеры выше были


                                                                        1. retran
                                                                          05.10.2019 14:41

                                                                          платформа позволяет.
                                                                          примеры выше были


                                                                          salesforce streaming api не поддерживает вебсокеты.


                                                            1. IamAlexy
                                                              04.10.2019 23:50

                                                              это точно задача из мира ERP?
                                                              может еще что-нибудь типа управления ядерным реактором на 1С повесим?

                                                              ps: почему вы считаете что регламентные задания не справляются без костылей?


                  1. IamAlexy
                    04.10.2019 13:38

                    я не очень понял вашу мысль.

                    есть отказ от модальных окон и переход на асинхронные вызовы в том же хромиуме…
                    1С эти все возможности ради сохранения совместимостей и универсальности поддерживает и реализует — то есть как платформа предоставляет методики и инструменты для реализации асинхронности…

                    авторы загоняют что «отказ от синхронности это плохо»

                    авторы не пишут что «нам не нравится программировать на бейсике переведенным промто и вообще можно было сделать проще и слишком сложно» — они пишут прямым текстом что одна из 21 причи почему не 1С — это ОТКАЗ ОТ СИНХРОННОСТИ

                    то есть тут авторы либо намеренно лгут либо пытаются за минус выдать то что минусом не может являться по определению…


                    1. Neikist
                      04.10.2019 13:50

                      Я там ниже писал, как я понял авторы пишут что отказ от синхронности с т.з. программиста — вот это плохо. Т.е. как раз вместо того чтобы ввести асинк/авейт, корутины или что то подобное что позволило бы писать в прежнем стиле асинхронный код как синхронный — 1с решили не заморачиваться и сделать уныло.


                      1. IamAlexy
                        04.10.2019 13:52

                        ну то есть вся претензия не в том что ОТКАЗ ОТ СИНХРОННОСТИ ЭТО ПЛОХО а в том что 1С как всегда пошла своим путем вместо копирования других языков?


                        1. Neikist
                          04.10.2019 13:54

                          В том что 1с это сделали через одно место и разработчику добавили проблем, вместо того чтобы их снять.


          1. pauls0
            04.10.2019 13:41

            Посмотрите на дарт или котлин и как там асинхронность реализуется.


            ага… вы их еще заставьте посмотреть реализацию работы с коллекциями через linq+лямбда

            это же можно на 1с просто в суд подавать — пусть компенсируют разработчикам бесцельно потраченные годы на работу с выборками


            1. IamAlexy
              04.10.2019 13:49

              ну то есть вы называете некий метод который для решения задачи которую в 1С решают другим методом и говорите что в 1С что то там плохо потому что нет именно вашего метода из другого языка другого уровня программирования?

              где логика?

              + а где то сравнение есть чтобы посмотрел и сказал что да, так и есть и 1С в отстое?

              а то вот авторы статьи пишут что 1С вообще плохая так как ОТКАЗАЛАСЬ ОТ СИНХРОННОСТИ… и у них вообще нет управления серверными вызовами… а вы мне тут про async/await и прочие лямбды заливаете…


  1. skrimafonolog
    04.10.2019 20:13

    Что им мешает дать возможность разработчику самому задавать имена таблиц и полей, я до сих пор не понимаю.

    Незачем усложнять, потому что вы можете решить штатными средствами эту проблему:

    без необходимости гадания, что же это за поля и таблицы — _Fld16719 и _Document5759

    Вы можете штатными средствами языка 1С узнать названия таблиц СУБД, в которых лежат эти объекты.

    Если уж вы собрались это все выгружать в OLAP, то скормить загрузчику таблицу со списком соответствий — это меньшая из проблем, что вас ожидают.