Как могли бы выглядеть регистры в 1С при наличии ООП

  • Tutorial
image

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

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

Регистр — это набор записей, каждая из которых отражает некоторое изменение состояния для некоторого множества субъектов (или измерений).

В 1С различают 4 вида регистров:

  1. Регистр бухгалтерии
  2. Регистр расчета
  3. Регистр накоплений
  4. Регистр сведений

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

Регистры накоплений


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

Для этого объявим абстрактный класс SkuLedger:
CLASS ABSTRACT SkuLedger 'Регистр изменения остатка товара';

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

Зададим у него измерения как абстрактные свойства типов Sku (товар) и Stock (склад) соответственно. Их нужно будет реализовать при наследовании конкретных классов от класса регистра:
sku 'SKU' = ABSTRACT Sku (SkuLedger);
stock 'Склад' = ABSTRACT Stock (SkuLedger);

Добавим свойство, которое будет обозначать время изменения остатка:
dateTime 'Дата/время' = ABSTRACT DATETIME (SkuLedger);

И, наконец, добавим то, что называется в 1С ресурсом. А именно количество, на которое изменяется остаток данной записью регистра.
quantity 'Кол-во' = ABSTRACT NUMERIC[14,2] (SkuLedger);

Теперь посчитаем текущий остаток на основе записей в регистре:
balance (Stock st, Sku sk) 'Остаток' = GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk;

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

Существует возможность на построенный таким образом остаток добавить ограничение на то, что он должен быть всегда положительным:
CONSTRAINT balance(Stock st, Sku sk) < 0 
    MESSAGE 'Остаток по товару на складе должен быть положительным';

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

При необходимости быстро считать оборот по товару, например, за год можно построить следующее свойство:
balance (Stock st, Sku sk, INTEGER year) = 
    GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND extractYear(dateTime(l)) = year MATERIALIZED;

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

Аналогичным образом можно построить свойство, которое будет определять остаток на определенное время:
balance 'Остаток на время' (Stock st, Sku sk, DATETIME dt) = 
    GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND dateTime(l) <= dt;

Для расчета этого значения будет сделан запрос, в соответствии с которым регистр будет прочитан полностью от начала до заданной даты. Но на практике обычно обращение идет к наиболее поздним датам. Поэтому, если текущий остаток является хранимым (MATERIALIZED), то логично рассчитывать это свойство в обратную сторону от текущего остатка:
balance 'Остаток на время' (Stock st, Sku sk, DATETIME dt) =
   currentBalance(sk, st) (-) (GROUP SUM quantity(SkuLedger l) IF stock(l) = st AND sku(l) = sk AND dateTime(l) > dt);

Естественно, это будет эффективно выполняться, только если по свойству dateTime построен индекс:
INDEX dateTime(SkuLedger l);

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

Теперь покажем, как проводить по регистру документы. Предположим у нас объявлен документ поступления товаров на склад:
CLASS Receipt 'Поступление на склад';
dateTime 'Дата/время' = DATA DATETIME (Receipt);
stock 'Склад' = DATA Stock (Receipt);

CLASS ReceiptDetail 'Строка поступления на склад';
receipt 'Поступление' = DATA Receipt (ReceiptDetail) NONULL DELETE;

sku 'SKU' = DATA SKU (ReceiptDetail);

quantity 'Кол-во' = DATA NUMERIC[14,2] (ReceiptDetail);
price 'Цена' = DATA NUMERIC[14,2] (ReceiptDetail);

Необходимо сделать, чтобы он проводился по созданному нами регистру. Для этого мы возьмем строку поступления ReceiptDetail и унаследуем ее от абстрактного класса SkuLedger:
EXTEND CLASS ReceiptDetail : SkuLedger;

После этого нужно реализовать все абстрактные свойства регистра, указав конкретные свойства строки поступления, из которых будут браться значения:
dateTime(ReceiptDetail d) += dateTime(receipt(d));

stock(ReceiptDetail d) += stock(receipt(d));

sku(ReceiptDetail d) += sku(d);
quantity(ReceiptDetail d) += quantity(d);

Количество и товар мы подставляем непосредственно из строки, а время и склад из документа.

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

Перемещение со склада на склад
CLASS Transfer 'Перемещение со склада на склад';
posted 'Проведен' = DATA BOOLEAN (Transfer);
dateTime 'Дата/время' = DATA DATETIME (Transfer);

fromStock 'Склад (откуда)' = DATA Stock (Transfer);
toStock 'Склад (куда)' = DATA Stock (Transfer);

CLASS TransferDetail 'Строка отгрузки со склада';
transfer 'Поступление' = DATA Transfer (TransferDetail) NONULL DELETE;

sku 'SKU' = DATA SKU (TransferDetail);

quantity 'Кол-во' = DATA NUMERIC[14,2] (TransferDetail);
price 'Цена' = DATA NUMERIC[14,2] (TransferDetail);

Его также нужно провести по этому регистру, но уже дважды. Один раз он должен списать со склада (откуда) перемещенное количество по товару, а второй раз добавить его к складу назначения. Для того, чтобы списать товар будем использовать ту же логику наследования:
Проведение расхода
EXTEND CLASS TransferDetail : SkuLedger;

dateTime(TransferDetail d) += dateTime(transfer(d));

stock(TransferDetail d) += fromStock(transfer(d));

sku(TransferDetail d) += sku(d);
quantity(TransferDetail d) += -quantity(d);

Так как это расходная операция, то количество берем с минусом, а в качестве склада подставляем склад отправителя.

Так как мы не можем один класс наследовать от другого дважды, то для того, чтобы провести по регистру повторно, создадим агрегированный объект нового класса TransferSkuLedger, который затем наследуем от SkuLedger:
CLASS TransferSkuLedger 'Перемещение на склад (регистр)' : SkuLedger;
transferSkuLedger = AGGR TransferSkuLedger WHERE stockTo(transfer(TransferDetail transferDetail));

Конструкция AGGR указывает платформе, что для каждой строки перемещения, у которой задан склад назначения, нужно создавать новый объект класса TransferSkuLedger, у которого будет ссылка на исходную строку. При удалении такой строки будет также автоматически удаляться и агрегированный объект.
Остается только реализовать абстрактные свойства для нового класса:
dateTime(TransferSkuLedger d) += dateTime(transfer(transferDetail(d)));

stock(TransferSkuLedger d) += toStock(transfer(transferDetail(d)));

sku(TransferSkuLedger d) += sku(transferDetail(d));
quantity(TransferSkuLedger d) += quantity(transferDetail(d));

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

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

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

Регистр сведений


В отличие от регистра накоплений, регистр сведений рассчитывает не сумму показателя, а последнее значение действующее на определенное время.

Объявление такого регистра абсолютно идентично логике регистра накоплений. Построим для примера регистр изменения цены поступления:
Регистр изменения цены поступления
CLASS ABSTRACT PriceLedger 'Регистр изменения цены поступления';

dateTime 'Дата/время' = ABSTRACT DATETIME (PriceLedger);

sku 'SKU' = ABSTRACT SKU (PriceLedger);
stock 'Склад' = ABSTRACT Stock (PriceLedger);

price 'Цена' = ABSTRACT NUMERIC[14,2] (PriceLedger);

Для расчета последней цены поступления используем следующую конструкцию:
price 'Цена' (Stock st, Sku sk, DATETIME dt) = 
    GROUP LAST price(PriceLedger l)
          ORDER dateTime(l), l
          WHERE dateTime(l) <= dt
          BY stock(l), sku(l);

К сожалению, материализовать ее не получится, так как значение этого свойство определено для бесконечного количества точек во времени. Однако, если построить нужный индекс, то обращение будет происходить относительно быстро за логарифмическое время:
INDEX stock(PriceLedger l), sku(l), dateTime(l), l;

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

Проведение по регистру сведений идет также, как и в регистре накоплений:
EXTEND CLASS ReceiptDetail : PriceLedger;

dateTime(ReceiptDetail d) += dateTime(receipt(d));

stock(ReceiptDetail d) += stock(receipt(d));

sku(ReceiptDetail d) += sku(d);
price(ReceiptDetail d) += price(d);

Заключение


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

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

Похожие публикации

Комментарии 241

    0
    В 1С регистр накопления:
    • Строка документа может порождать "много" записей в регистре остатков(оборотов) — например, списание по партиям при партионном учете
    • Есть промежуточные итоги, а не только актуальные.

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

    Статья маркетинговая фигня


    p.s. слава богу в 1С нет ООП. Незачем ООП тащить в DSL — чем проще, тем лучше.

      0
      Это не отменяет того факта, что ООП в 1С нету, и регистры там реализуются императивно.
        0
        price 'Цена' (Stock st, Sku sk, DATETIME dt) = 
            GROUP LAST price(PriceLedger l)
                  ORDER dateTime(l), l
                  WHERE dateTime(l) <= dt
                  BY stock(l), sku(l);

        А это что, тоже называется "Декларативно"?
        В 1С вообще -программист не реализовывает регистры… а как там реализовано по большому счету все равно.

          0
          Вы понимаете разницу между декларативностью и императивностью?

          В 1С вообще -программист не реализовывает регистры… а как там реализовано по большому счету все равно.

          Да, вот только проведение по регистрам и ограничения делаются как раз 1С-программистом вручную императивно.
            0

            Бизнес логика — она в любом случае есть, если не говорить про регистр типа "sku, count".
            Проведение по регистрам в 1С:


            Движения.ПартииТоваровНаСкладах.Записать();

            или так:


            Движения.ПартииТоваровНаСкладах.Записывать = Истина;
              0
              Ага, только вот пример кода из документации:
              image

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

                Формирование движений и запись в регистр — разные вещи…
                Если интересен пример формирования движений и проведения:
                Методика оперативного проведения и управляемые блокировки https://1c.chistov.pro/2013/07/blog-post_25.html

                  0
                  Это все круто. Но для человека со стороны это все выглядит как «Кто все эти люди ?». Откуда такая сложность в простой задаче? В современном программировании наоборот стараются все упрощать. Причем 1С-программисты делают вид и убеждают всех, что так и надо. Отсюда собственно и шутка про паралимпиаду по программированию.
                    0

                    "Сложность" понятие субъективное… мне например все понятно, и для чего и почему...


                    • очищаем старые движения — логично?
                    • проверяем что достаточно товара — логично?
                    • ставим блокировку (параллельное проведение) — что бы не списалось одно и тоже при параллельном проведении, логично?
                    • заполняем движения по партиям — после блокировки списываем партии, логично?

                    Чего делать не надо не в 1С?

                      0
                      В lsFusion ничего этого делать не надо. Это все делается автоматически платформой.
                        0

                        А можно увидеть пример списания партий, что бы это было вот как вы пишете прям в платформе!
                        Что бы можно было настроить FIFO, FEFO, LIFO — вот прям в интерфейсе?

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

                          Конкретно здесь идет сравнение ограничений по остаткам. И в 1С это сделано очень печально.
                            0

                            В платформе 1С нет контроля за остатками. Что сравниваем?


                            В lsFusion ничего этого делать не надо — что значит не надо? Не надо как для конфигурации или как для платформы?
                          0
                          Да нигде ничего делать не надо, все везде само, о чем речь
                            0
                            В статье написан полный код для поддержки регистра. Больше ничего писать не надо.
                            Для конструктивного обсуждения скиньте, пожалуйста, код на 1С.
                              0
                              Код создания регистра? В 1С его нет, он мышкой создается. Вы мне скажите вот что: Я одно время преподавал студентам 1С.

                              Мы брали учебную версию и за 1 лабораторную (2 акк. пары) создавали полноценную управленческую учетную систему «Купил-продал» с репортингом, UI и веб-клиентом. При этом мы написали не более 20 строк кода. Результатом 2 часов работы студентов можно вполне вести упр.учет мелкого магазинчика. Под «управленческим» я понимаю учет без расчета налогов, только для собственника: сколько у меня денег, сколько у меня товара, сколько я продал, какой фин. результат?

                              Ваша система может дать мне за 2 часа+20 строк кода веб-клиент, UI и управленческую отчетность с гибкими фильтрами-группировками? Если да, я охотно порекомендую ее коллегам-преподавателям.
                                0
                                Давайте не будем устраивать холивар на тему графическое vs текстовое программирование. Для мелких разработок начинающими программистами возможно графическое лучше. Но когда разработка делается командой и там куча функционала, то проблемы системы контроля версий и рефакторинга выходят на первый план, и там будет лучше код.

                                Код создания регистра? В 1С его нет, он мышкой создается. Вы мне скажите вот что: Я одно время преподавал студентам 1С.

                                Мышкой там делается wizard, который генерирует тот же код. Если его хоть немного менять, то назад мышкой редактировать вы уже не сможете. Опять же, не хочу устраивать холивар на тему визард vs архитектурное программирование.

                                Ваша система может дать мне за 2 часа+20 строк кода веб-клиент, UI и управленческую отчетность с гибкими фильтрами-группировками? Если да, я охотно порекомендую ее коллегам-преподавателям.

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

                                Кроме того, не забываем, что 1С — коммерческий продукт с очень жесткой системой лицензирования. А lsFusion по LGPLv3 лицензией, адаптированный под работу с PostgreSQL.
                                  0
                                  Я уже посмотрел ваш демо пример. У меня больше нет к вам вопросов. А подача материала и тон ответов окончательно закрывает вопрос о целесообразности изучения вашей системы.
                                    0
                                    Спасибо за ваше мнение. Мы за плюрализм, и считаем, что всегда у людей должен быть выбор, и каждый решает сам, что ему лучше.
                                      0
                                      Понимаете в чем дело… (дальше ИМХО)
                                      Вы решили рассказать о том, что 1С: Предприятие — это плохая система, а ваша система — хорошая. Вы в этом уверены и не допускаете, что может быть по-другому.
                                      Вести конструктивную дискуссию при таком подходе очень тяжело. Просто по-определению такого подхода.
                                      Вы не предполагаете, что у ваших оппонентов могут быть причины делать так, как они сделали. И таких причин может быть очень много. Причем как у тех, кто платформу делает, так и у тех, кто конфигурации делает.
                                      Но уже приняв решение (и не допуская другого), вы лозунги озвучиваете другие.
                                        0
                                        Вы решили рассказать о том, что 1С: Предприятие — это плохая система, а ваша система — хорошая

                                        Это не так. Тут не белое и черное. У каждого подхода и технологии есть свои преимущества и недостатки.

                                        Это конкретная статья про конкретный кейс. И тут очевидно, что преимущество не на стороне 1С. Удивительно, что 1С программисты не хотят этого признать. Со своей стороны, я вот совершенно согласен, что в 1С дизайн лучше. Есть еще вещи, которые реализованы в 1С лучше, чем в lsFusion. Что не отменяет того факта, что многое в lsFusion лучше чем в 1С.
                                          +1
                                          Простите, а вот это что (пост)?

                                          Вопрос в том, что 1С умудрился накосячить как раз во всем в чем мог. Если честно даже удивительно. Они взяли все самое худшее от существующих технологий, при этом выкинув самое лучшее.
                                          Да, это не персонально вы, но это «ваша» сторона дискуссии :)

                                          Это конкретная статья про конкретный кейс. И тут очевидно, что преимущество не на стороне 1С.

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

                                          ЗЗЫ: Что-то у меня цитаты весь текст порушили и поправить не получается, извините :(
                      0
                      Формирование движений и запись в регистр — разные вещи…

                      Для решения одной задачи.
                        0

                        формирование движений будет происходить в любой системе кодом. Если там что то сложнее от склад, товар, количество.


                        Запись в регистр, да возможно где то и автоматом… но по секрету, в 1С тоже можно автоматом — просто это медленнее.


                        "Запись движений при проведении" — "Записывать модифицированные" — можете погуглить

                          0
                          формирование движений будет происходить в любой системе кодом. Если там что то сложнее от склад, товар, количество.

                          Оно может происходить декларативно, а может императивно. А проблема императивного подхода, например, что при изменении документа оно требует провести обработку всего документа (то есть всех строк). В lsFusion если вы поменяли одну строку, обрабатываться будет только эта одна строка.
                          «Запись движений при проведении» — «Записывать модифицированные» — можете погуглить

                          Гуглил. Автоматом можно только в самых примитивных случаях. Появляется хоть один if или ссылка / join — вперед for'ы/запросы руками писать.
                            0

                            При стандартном подходе 1С — один документ много строк. Но никто не мешает сделать один документ на строку, и один документ-владелец.


                            Получится такой же эффект — просто никому это не надо...

                              0
                              Это уже реализовано в нескольких WMS-системах на 1С.
                                0

                                Да я и сам разрабатывал такие формы...

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

                                А когда надо ввести один документ на 100 строк, будете их по одной вводить. Издеваетесь?

                                Но вообще вы похоже, не поняли. В lsFusion вы вводите документ как обычно. Потом можете открыть его на редактирование, поменять только одну строку. И о чудо она обновит данные только для этой одной строки (со всеми регистрами, ограничениями и т.п.).

                                Вообще в lsFusion можно один документ параллельно разными пользователями вводить при необходимости (у нас были такие кейсы), и она отлично все разрулит сама.
                                  0
                                  Идею вы не поняли, так как платформу 1С не очень хорошо знаете. И вообще, вы сравниваете свою платформу с конфигурациями 1С, а не с платформой 1С. Надо отделять мух от котлет.
                                    0
                                    Как раз я последний месяц с ней разбирался, это с учетом того что у меня огромный опыт работы с различными платформами разработки (начиная от Foxpro и .Net/Java и заканчивая совсем экзотическими).

                                    И 1С идеологически подразумевает перепроведение всего документами. И разработчики УТ со мной походу согласны. Или думаете они тоже платформу 1С не очень хорошо знают?
                                      0
                                      Вы изучали не платформу, а типовые решения на этой платформе. Поэтому, сравнивая типовые решения 1С со своей платформой, вы показываете себя не в лучшем свете.
                                        0
                                        Еще раз я изучал платформу. Вот тут и тут:
                                        its.1c.ru/db/metod8dev
                                        its.1c.ru/db/v8315doc

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

                                        И сравниваются конкретные механизмы ПЛАТФОРМЫ регистры и ограничения на примере типовых решений. Или по вашему есть другие более простые и эффективные способы работы с ними, о которых даже разработчики УТ не знают?
                                          0
                                          Сравнивайте типовые решения на вашей платформе, и типовые на 1С, и вопросов к вам будет. Если как-то сделано в типовых, это не значит, что по-другому в платформе нельзя, это не значит, что это наиболее эффективный способ. Причины, почему именно так реализовано в типовых, лежат несколько в иной плоскости.
                                            0
                                            Если как-то сделано в типовых, это не значит, что по-другому в платформе нельзя

                                            Ок, тогда расскажите как по другому сделать проверку, что например сумма остатков должно быть больше 0, потому как я всю документацию облазил, форумы перечитал, типовые пересмотрел, и пришел к выводу (сюрприз !) что разработчики типовых сделали это единственным эффективным способом (с 400 строк кода вместо одной в lsFusion)
                                              0
                                              Что значит «сумма остатков больше 0»? Ну, и вы должны понимать, что в любом случае:
                                              1. Не зная постановки задачи судить об эффективности кода нельзя.
                                              2. Любое универсальное решение будет избыточнее и сложнее специализированного.
                                              Поэтому, сравнивать можно только реализацию конкретного, непротиворечивого, ТЗ на различных платформах. Всё остальное — профанация и умозрительные заключения.
                                                0
                                                Что значит «сумма остатков больше 0»?

                                                Что именно вам непонятно. Остаток по любому товару складу в текущий момент должен всегда быть >0. Что тут может быть не понятного?
                                                2. Любое универсальное решение будет избыточнее и сложнее специализированного.
                                                Поэтому, сравнивать можно только реализацию конкретного, непротиворечивого, ТЗ на различных платформах. Всё остальное — профанация и умозрительные заключения.

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


                                                    Ну там действительно, есть много технического текста, можно его пропускать. В любом случае, вот онлайн демо (оно же на lsfusion.org/try):
                                                    demo.lsfusion.org/mm
                                                    Ну и я точно помню, что у 1С был пример такого же простого склада когда-то, но я почему-то не могу его найти.
                                    0

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


                                    Просто это отклонения от общепринятых стандартнов

                                      0
                                      Речь о другом, при редактировании документа он перепроводится целиком. Потому как иначе придется отслеживать изменение каждого реквизита везде руками. А это ну очень трудоемко.
                                        0
                                        Нет, это не так. Изменяете одну строку — проводится один документ, который и является этой строкой. Контроль же всего документа в целом нужно будет будет реализовывать отдельно, это да. Но ведь и в вашей платформе так-же?
                                          0
                                          Нет, это не так. Изменяете одну строку — проводится один документ, который и является этой строкой.

                                          Я сейчас зашел в УТ. Изменил одну строку отгрузки. Дальше дебажу и вижу что во всех временных таблицах, расписывании по партиям обрабатываются ВСЕ строки этого документа, даже которые я не менял.
                                          Но ведь и в вашей платформе так-же?

                                          Нет, если изменяется одна строка, а весь документ на 10к строк, будет обрабатываться / читаться только одна строка / товар этой строки.
                                            0
                                            Ещё раз, это НЕ является ограничением платформы, это принятый РАЗРАБОТЧИКАМИ ТИПОВЫХ (и рекомендуемый вендором) способ работы. Платформа может и так, как описано мною выше.
                                            Про обработку документа в целом вы опять не до конца поняли. Например, нам нужно контролировать наличие товаров на складе, и максимальную/минимальную сумму заказа. Остатки мы контролируем на уровне измененной строки, а сумму заказа мы контролируем по документу в целом. Но в типовых это не так, да.
                                              0
                                              Ок, давайте остановимся на том, что разработчики типовых просто не умеют правильно использовать возможности платформы. А на самом деле можно все было делать гораздо проще и эффективнее.
                                                0

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

                                                  0
                                                  Забавно, что SQL-ки в статье про функциональную СУБД, говорили что зря вы продвигаете ее сравнивая с SQL, сравнивайте с 1С. .Net'овцы тоже говорили, что зря мы сравниваем с .Net, вот вы говорите, что зря сравниваем с 1С.

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

                                                  Но вообще, это естественно. Большинство людей не хочет изучать что-то новое и выходить из зоны комфорта. С другой стороны, вы же понимаете, что на первом этапе в любых инновациях расчет никогда не делается на большинство.
                                                    0
                                                    Большинство людей не хочет изучать что-то новое
                                                    — изучать что-то новое имеет смысл когда оно хотя бы потенциально несет какой-то профит. Ваша система особых преимуществ не имеет, кроме тех, которые вы сами себе придумали. Народ ополчился на, откровенно говоря, безграмотное сравнение себя с лидерами рынка.
                                                    Посравнивайте себя с той же Кубой (https://www.cuba-platform.ru/), вы где-то примерно в одной нише.
                                                      0
                                                      Ваша система особых преимуществ не имеет, кроме тех, которые вы сами себе придумали

                                                      Я тоже самое и про iPhone, и про Tesla, и про Mongodb слышал. Конечно далеко не все ими становятся, но абсолютно все новые вещи на рынке изначально получают такую реакцию. Была даже такая шутка про обсуждение в баре первого автомобиля (не помню дословно):
                                                      — Да я за эти деньги две лошади и овса им на всю жизнь куплю.
                                                        0
                                                        Что-то я не помню чтобы в кейноутах Apple хоть раз упоминались конкуренты в негативном ключе.
                                                          0
                                                          А как они touchscreen по вашему представляли? Что кнопочные телефоны неудобны. Равно как и электромобили — что бензиновые автомобили загрязняют окружающую среду, а mongodb — что SQL базы не масштабируются.

                                                          Собственно все нормальные продукты идут от проблем существующих продуктов, а не от возможностей. И так и должно быть, иначе в чем смысл этих продуктов.
                                                            0
                                                            Вы смешиваете критику подхода (вообще кнопочный телефон) и критику конкретной модели (например, Nokia 3210).
                                                            Ну а то, что электромобили не загрязняют окружающую среду — это вообще, любимый пример передергивания, зашкаливающего за понятие «вранье».
                                                              0
                                                              Вы смешиваете критику подхода (вообще кнопочный телефон) и критику конкретной модели (например, Nokia 3210).

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

                                                              Но идея была не в этом. А в самом факте сравнения с конкурентами.
                                                                0
                                                                Еще раз: когда я говорю «кнопочный телефон» — я не упоминаю конкурента. Когда я говорю «нативное приложение» или «веб приложение» — я не упоминаю создателя приложения. Не важно, что в конкретном контексте уши конкурента светятся как фонарь :)
                                                                Но как только я сказал «приложение Microsoft» — я стал на очень скользкую дорожку. Вначале все может быть красиво и прилично, а потом бац — и просто ложь в сравнении :)
                                                      0
                                                      Ну раз вы ответили :))
                                                      Я ничего не имею против вашей платформы, я вижу, что некоторые ваши решения лучше, чем у 1С, идея подбора в отдельной вкладке, например, вполне здравая :)). Но когда вы критикуете 1С как платформу, приводя при этом в пример типовые конфигурации, и не замечая, что платформа 1С «умеет» и по-другому, это реально огорчает. Кстати, продвигать свой продукт сравнением с 1С пытались как минимум Ultima, CUBA и Ананас. В конечном итоге, все они стали продвигать только свои достоинства, не упоминая 1С. Задумайтесь об этом…
                                            0
                                            Что значит в вашем понимании «перепроводится целиком»?
                                            В понимании платформы «проведение» — это лишь некий статус при сохранении объекта. Ну и вызов некоторой цепочки методов-обработчиков. Исторически сложилось, что при этом формируются движения по регистрам. Но вся логика этого формирования целиком на совести разработчика.
                                              0
                                              Исторически сложилось, что при этом формируются движения по регистрам. Но вся логика этого формирования целиком на совести разработчика.

                                              Это не исторически так сложилось, это 1С так предполагает. И как по другому делать даже разработчики типовых не знают. Не от хорошей жизни же они так и делают, да и я не могу придумать как по другому. Поэтому:
                                              Я сейчас зашел в УТ. Изменил одну строку отгрузки. Дальше дебажу и вижу что во всех временных таблицах, расписывании по партиям обрабатываются ВСЕ строки этого документа, даже которые я не менял.
                                                0
                                                это 1С так предполагает
                                                — в данном случае под «1С» вы имеете ввиду платформу или разработчиков фирмы 1С?
                                                  0
                                                  Ну как бы и то и другое. Или вы думаете разработчики 1С плохо знают платформу и неэффективно ее используют?
                                                  0
                                                  Методология именно такая. К производительности многих механизмов типовых решений есть вопросы, особенно по работе с БД (скорость очень страдает от преобразований с языка запросов 1с на T-SQL и отсутствие возможности использовать DML). Но пока это не стало критическим в работе, данный принцип никому не мешает. Очень редко создается документ с >1000 строк. А если потребуется, не составит проблемы в 1с работать напрямую с регистрами или сделать механизм, чтобы работать со списком документов как с одним документом для построчной модификации регистра.
                      0
                      Строка документа может порождать «много» записей в регистре остатков(оборотов) — например, списание по партиям при партионном учете

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

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

                        Вы описали только периодический регистр сведений.


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

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


                        Это цитата из их документации.

                        Ну вот пришли… считайте это недосмотром 1С, все совсем по другому… желательно было дать почитать любому программисту 1С

                          0
                          Хорошо, изменил немного статью, чтобы соответствовать терминологии 1С.

                          Ну вот пришли… считайте это недосмотром 1С, все совсем по другому… желательно было дать почитать любому программисту 1С

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

                            0
                            но в других технологиях принято доверять официальной документации

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

                            нет в официальной документации. В взяли рекламную информацию и решили, что это документация.
                              0
                              http://v8.1c.ru/overview/Term_000000176.htm
                              То есть вот это рекламные материалы? Странная реклама какая-то…

                              И как я понимаю, Вы утверждаете, что их рекламная информация не соответствует реальному положению дел? В чем еще они врут у себя на официальном сайте?
                              И что за официальная документация? Дайте на нее ссылку, пожалуйста…
                                0
                                Я утверждаю, что рекламная и техническая информация — это не одно и тоже.
                                То, что они врут — это вы придумали (как в том анекдоте: это вам со страху показалось).
                                Ссылка на официальную документацию вот: its.1c.ru/db/v83doc Для использования нужна подписка на ИТС.
                                  0
                                  В 1С платная документация? Видимо, чтобы случайно начинающие разработчики не поняли, в какой треш они попадут. А дальше уже как South Park: «ты не сможешь выбросить то, за что уже заплачены деньги».
                                    0
                                    Раньше еще хуже было, сейчас хоть какую то документацию местами бесплатно открыли, ну, по крайней мере еще недавно часть документации точно открыта была, прямо сейчас не в курсе.
                                      0
                                      Никогда электронная документация не была в открытом доступе. Только по подписке на ИТС. Недавно открыли другие полезные материалы, но не доку.
                                        0
                                        На английском же есть :))
                                        1c-dn.com/library/1c_enterprise_documentation
                                          0
                                          К сожалению, в англоязычном сегменте она никому не нужна, так как сама платформа никакой ценности без бухгалтерии и налогового учета (читай конфигурации) особо не несет. А этого добра там и своего хватает. Поэтому и документация открыта.

                                          Мне всегда было интересно отношение 1С апологетов к Apple. Ведь Apple поступает же абсолютно также — у них все закрытое, проприетарное и платное. При этом фанаты Apple всем доказывают, что так и надо, а все остальное — говно. Как я понимаю все 1Совцы ходят с iPhone'ами?
                                            0
                                            в англоязычном сегменте она никому не нужна, так как сама платформа никакой ценности без бухгалтерии и налогового учета (читай конфигурации) особо не несет.

                                            Это вы сами придумали? Или данные имеете какие-то? Тут рядом ваш коллега утверждал, что никакой предвзятости в сторону 1С у вас нет :)
                                            Как я понимаю все 1Совцы ходят с iPhone'ами?

                                            У каждого минимум по два. И если они не самые свежие — штраф огромный. Иначе нельзя.
                                              0
                                              Это вы сами придумали? Или данные имеете какие-то? Тут рядом ваш коллега утверждал, что никакой предвзятости в сторону 1С у вас нет :)

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


                                              И это не говоря про явную типизацию, ООП, замыкания и огромное community.
                                                0
                                                Т.е. данных у вас нет и вы решили просто поиграть в телевизионного «эксперта». Хм…
                                                Если рассматривать Платформу как универсальное средство разработки — таких достоинств нет. Если рассматривать как инструмент, для которых этот инструмент создавался — ситуация сильно меняется и вопросов к .NET ну много возникнет. Потому, что и платформа и .NET и Go и прочие языки и фреймворки существуют не просто для удовлетворения мечтаний об ООП и т.д., а для решения конкретных задач. И перед Платформой ставится задача автоматизации экономической деятельности.
                                                И платформа именно эту задачу вполне себе решает. Например тем, что дает готовые механизмы реализации очень большого количества вещей, которые нужны для решения задачи автоматизации бизнеса.
                                                Как говорит один широко известный товарищ, давайте не путать «можно сделать» и «сделано». На .NET можно сделать и систему управления распределенными базами данных и регистры накопления, ПВХ, механизмы разделения и все-все-все.
                                                НО. Сколько это времени и денег на этой уйдет? Кто будет этот продукт поддерживать, когда автору надоест дальше этот продукт развивать?
                                                Т.е. ключевое преимущество Предприятия в данный момент — это заточенность для решения конкретных задач. А комьюнити — Россия и весь exUSSR, Польша, Вьетнам, Румыния, Турция, Китай (это из того, что сходу вспоминается). Внедрения решений на платформе — там десятки стран. Да, оно не такое обширное, как у .NET, но оно есть и растет.
                                                  0
                                                  Т.е. данных у вас нет и вы решили просто поиграть в телевизионного «эксперта». Хм…

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

                                                  Какие механизмы? Как в примере что я написал? Запросы прямо в строке? Так уже лет 10 никто не пишет. Это привет 90е.
                                                  систему управления распределенными базами данных

                                                  Кому она нужна в 21 веке то?
                                                  регистры накопления

                                                  MATERIALIZED INDEXED VIEW даже в MS SQL умеет куда больше
                                                  ПВХ, механизмы разделения и все-все-все.

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

                                                  .Net цев как грязи. Где вы столько 1Сцев найдете?
                                                  Польша, Вьетнам, Румыния, Турция, Китай (это из того, что сходу вспоминается)

                                                  Это кто вам такой бред сказал. Посмотрите количество вакансий 1С в Польше, Китае и Турции.
                                                  Внедрения решений на платформе — там десятки стран. Да, оно не такое обширное, как у .NET, но оно есть и растет.

                                                  По пять штук? Ну ну. И что там внедряют УТ? Где половину российского функционала, вроде ЕГАИС и интеграции с российской же бухгалтерией, которая в китае нафиг не нужна?
                                                    0
                                                    Понимаете в чем дело… По данному обсуждению я вижу следующие факты: 1. не вы, не ваши рекламщики Платформу не знаете (вы даже в рекламном сравнении врете) 2. вы считаете, что мир монохромный, а это не так. 3. у меня есть некоторые сомнения в том, что лично вы знаете как работает рынок автоматизации, на что там обращают внимание и за что платят.
                                                    Когда вам говорят про те места, где вы неправы — вы надеваете каску и начинаете говорить про неполноценность свои оппонентов.
                                                    Давайте вы или будете все-таки корректно общаться или стоит завершить разговор.
                                                    И да, почти все мои высказывания можно подтвердить разными ссылками…
                                                      0
                                                      не вы, не ваши рекламщики Платформу не знаете (вы даже в рекламном сравнении врете)

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

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

                                                      На личности кстати вы переходите, равно как и на аргументацию в стиле:
                                                      И да, почти все мои высказывания можно подтвердить разными ссылками…

                                                      Ну так подтвердите раз можно.
                                                        0
                                                        Ну вы тоже lsFusion не знаете.

                                                        Так вы же про других врете :) Как вы про lsFusion вретеговорите — я не знаю :)
                                                        На личности кстати вы переходите

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

                                                        Человек, который в этом бизнесе 21 год — он, обычно, говорит ну совсем другие слова. По крайней мере такой человек значительно менее монохромен :) Он знает, мир сложен и многообразен
                                                        Ну так подтвердите раз можно.

                                                        Зачем? Вам же этого не надо. Вы уже знаете, что 1с гавно.
                                                          0
                                                          Так вы же про других врете :) Как вы про lsFusion вретеговорите — я не знаю :)

                                                          Ничего не понял.
                                                          Человек, который в этом бизнесе 21 год — он, обычно, говорит ну совсем другие слова. По крайней мере такой человек значительно менее монохромен :) Он знает, мир сложен и многообразен

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

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

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

                                                          Плюс сейчас мы готовим более объемную статью про 1С в стиле этой, и нам на самом деле важно получить ответы на интересующие нас вопросы. Например как в динамическом списке добавить редактируемое поле (смотри комменты к предыдущей статье), или как сделать ограничение в 1С.
                                                            0
                                                            Ничего не понял.

                                                            Что вы не поняли?
                                                            Хорошо, скажу по-другому: ваше сравнение lsFusion с другими продуктами содержит ложь про другие продукты. Указывать где эта ложь я вам не буду (зачем жизнь облегчать?).
                                                            чтобы разобраться как именно у них все работает.

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

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

                                                              Так и в этой позитива много. Посмотрите на плюс 21 в статье и всего один минус.
                                                                0
                                                                Наше дело предложить — ваше дело отказаться :)
                                                                0
                                                                Хорошо, скажу по-другому: ваше сравнение lsFusion с другими продуктами содержит ложь про другие продукты. Указывать где эта ложь я вам не буду (зачем жизнь облегчать?).

                                                                Ага, знаю, но вам не скажу. Плавали, знаем.

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

                                                                Там знак вопроса в конце стоит?

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

                                                                Посмотрим. Почему не SQL? отлично зашла, лучшее за все время в нескольких хабах (ну или на первой странице).

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

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

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

                                                                  Да пусть пишут. Хайпанут лишний раз, почешут своё ЧСВ. Потом поймут, как и остальные, кто таким путем пошел, что только время зря потратили.

                                                0
                                                Оно а) не на русском и б) не очень последнее, так скажем.
                                                  0

                                                  Это скорее шутка была, чем серьезный аргумент :)

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

                                  ВЫ просто её(цитату) неверно поняли. Строка документа и строка регистра — это разные вещи.
                                  По регистр сведений не очень понял, чем это противоречит тому, что написано в статье. Можете привести конкретную цитату?

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

                                  И? Так и агрегаций можно много создавать порождая «много записей в регистре»
                                  Есть промежуточные итоги, а не только актуальные.

                                  И? Никто не мешает и промежуточные итоги создавать. Скажем:
                                      balance(Stock st, SkuGroup sk) = GROUP SUM balance(st, Sku sku) IF skuGroup(sku) = sk MATERIALIZED;
                                  

                                  Расскажите как кстати такие промежуточные итоги в 1С делать (чтобы они еще хранились)
                                  В 1С регистр сведений:

                                  То есть в 1С регистры сведений просто таблица с несколькими ключами. И? Какое отношение это к наследованию и полиморфизму имеет.

                                  Комментарий — маркетинговая фигня.

                                  p.s. слава богу в 1С нет ООП. Незачем ООП тащить в DSL — чем проще, тем лучше.

                                  Ага, а потом открываешь УТ и кровь из глаз идет, от огромного количества if'ов в стиле:
                                  ЕстьИзмененияВТаблице(ДанныеТаблиц,«ДвиженияТоварыКОтгрузкеИзменениеСводно»)
                                  СтруктураДействий.Свойство(«ПересчитатьКоличествоУпаковокПоФакту»)
                                    0

                                    Разговор немого с глухими…
                                    Я описал недочёты(ошибки) в статье, которые кардинальным образом влияют на функционал.


                                    Давайте напишем какая 1С говно — и на этом фоне прорекламируем себя?
                                    Подавляющие большинство программистов будет кивать гривами(бородой), соглашаться и ставить плюсы.

                                      0
                                      Давайте напишем какая 1С говно — и на этом фоне прорекламируем себя?
                                      Подавляющие большинство программистов будет кивать гривами(бородой), соглашаться и ставить плюсы.

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

                                          Ведь по сути 1С одновременно отказались от ORM, всех стандартов SQL после 92 года (аналитических функций, рекурсивных CTE, представлений), автоматических блокировок (CI в ACID), автоматического control flow, автоматического обеспечения синхронности. При этом не добавив ни типизации, ни наследования, ни замыканий, ни аналога LINQ. То есть выкинули все лучшее что может быть в платформах высокого уровня, не взяв ничего лучшего из языков общего назначения. Да с ними кто угодно сравнится. Даже .Net, не говоря уже о lsFusion.
                                            0
                                            Это с точки зрения языка… А с точки зрения возможностей?
                                            Часто Вы видели реально живую трехзвенку? Причем которая работает на нескольких типах SQL серверов? Ну и под разными платформами?
                                            Которая имеет как толстого, так и веб клиента, которые работают без переписывания исходного кода?
                                            Часто ли вы видели чтобы один и тот же код можно было запустить как на толстом клиенте, так и в мобильной аппликухе, даже если учесть ограничения?
                                            Что-то мне подсказывает, что ее недостатки это следствие ее достоинств…
                                            Это с технической точки зрения…
                                            А с практической — где можно заработать денег больше и проще (мы же ведь работаем, а не развлекаемся) и быстрее удовлетворить заказчика? Не считая обучения персонала, который будет работать с этим…
                                            Попробуйте повторить ту же УТ на Net… Не вопрос, что может УТ было бы проще даписать на Net, но ее нет под Net… И думаю что и не будет.
                                              0
                                              Это с точки зрения языка… А с точки зрения возможностей?
                                              Часто Вы видели реально живую трехзвенку? Причем которая работает на нескольких типах SQL серверов? Ну и под разными платформами?
                                              Которая имеет как толстого, так и веб клиента, которые работают без переписывания исходного кода?
                                              Часто ли вы видели чтобы один и тот же код можно было запустить как на толстом клиенте, так и в мобильной аппликухе, даже если учесть ограничения?

                                              Видел. Я более того скажу, что lsFusion умеет это все и даже больше. И работает на таких объемах, где конкурентов на 1с нет и не предвидится (только в распределенных базах)
                                              Что-то мне подсказывает, что ее недостатки это следствие ее достоинств…

                                              Нет, все это можно было реализовать без отказа от всех тех прелестей жизни, что я описал. Но они решили что разработчики и так съедят. И были правы. Съели и не заметили.
                                              А с практической — где можно заработать денег больше и проще (мы же ведь работаем, а не развлекаемся) и быстрее удовлетворить заказчика? Не считая обучения персонала, который будет работать с этим…
                                              Попробуйте повторить ту же УТ на Net… Не вопрос, что может УТ было бы проще даписать на Net, но ее нет под Net… И думаю что и не будет.

                                              Мы повторили. Не 1-в-1 конечно, у нас есть много вещей которых у них нет, ну и наоборот. Но тут важнее другое, мы можем кастомизировать под заказчика, так что у него будет только 60% из общего функционала (причем можно не брать ненужный общий функционал, чего в УТ к примеру нельзя сделать) и 40% своего. Как что-то дописывать / изменять в УТ для меня загадка? Там реально страшно что-то трогать, потому как непонятно что при этом сломается. Никаких проверок типов, в частности нет, ну и всю жутко императивно сделано.

                                              Хотя уверен что УТ можно и на .Net повторить. Вы же в курсе что 1С это чисто российская фишка, то есть <1% мирового рынка. Остальной мир живет же как-то.
                                                0
                                                Видел. Я более того скажу, что lsFusion умеет это все и даже больше. И работает на таких объемах, где конкурентов на 1с нет и не предвидится (только в распределенных базах)

                                                Это сколько? В документах/терабайтах?
                                                Съели и не заметили.

                                                Заметили. И что? Если задача поставить именно 1С?
                                                Мы повторили.

                                                Невопрос. И сколько клиентов и каких размеров у вас есть?
                                                Там реально страшно что-то трогать, потому как непонятно что при этом сломается. Никаких проверок типов, в частности нет, ну и всю жутко императивно сделано.

                                                Ну тут без вопросов… Хотя такое легко и на ООП ломается…
                                                Вы же в курсе что 1С это чисто российская фишка, то есть <1% мирового рынка. Остальной мир живет же как-то.

                                                Кож спорит… Процессинги на КОБОЛе и подобном работают до сих пор… ИБМ не просто так же до сих пор майнфреймы выпускает…
                                                А реальные примеры? Со сравнением? Типовые конфигурации?
                                                На сайт lsFusion я зашел… Не нашел мобильных приложений, не нашел толстого клиента… Вообще не понял какой язык используется…
                                                  0
                                                  Это сколько? В документах/терабайтах?


                                                  3,5 млн инвойсов, 35 млн строк инвойсов. И это я не самого большого клиента взял. Чеков на самом деле уже давно больше млрда, это статистика для внутреннего оптимизатора (ее нет смысла обновлять).
                                                  Заметили. И что? Если задача поставить именно 1С?

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

                                                  Даже тут уже отвечали несколько раз вроде. Около 40, но достаточно крупных от 50 одновременных пользователей. Около десятка 400-1000 одновременных пользователей.
                                                  Ну тут без вопросов… Хотя такое легко и на ООП ломается…

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

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

                                                  Толстый клиент (справа снизу):

                                                  Справа снизу. Для мобильных react обычно используем, тут немного подробнее.

                                                    0
                                                    Еще вопрос — почему сравнение идет с 1С 8.2 а не 8.3? 8.2 давно устарела…
                                                    Ну и второй вопрос — насколько большой рынок труда для програмиста на этой системе? Это как бы тоже немаловажный параметр, потому что изучить какую-то систему — это не взять какуюто крутую дополнительную библиотеку к известному языку…
                                                    Т.к. при использовании библиотеки — ты остаешься специалистом по этому языку, и знания можно применить и в других направлениях/фирмах.
                                                    Поэтому у вас есть шанс так и остаться узкоспециализированным решением. А 1С со своими недостатками будет продолжать жить и развиваться…
                                                      0
                                                      Еще вопрос — почему сравнение идет с 1С 8.2 а не 8.3? 8.2 давно устарела…

                                                      Я сравниваю как раз с 8.3. Потому как именно там они от модальности отказались. Все жду, что они в 8.4 от if'ов еще откажутся и перейдут на goto. И назовут управляемыми переходами. И самое смешное, что разработчики и это съедят, рынок же.
                                                      Ну и второй вопрос — насколько большой рынок труда для програмиста на этой системе? Это как бы тоже немаловажный параметр, потому что изучить какую-то систему — это не взять какуюто крутую дополнительную библиотеку к известному языку…
                                                      Т.к. при использовании библиотеки — ты остаешься специалистом по этому языку, и знания можно применить и в других направлениях/фирмах.
                                                      Поэтому у вас есть шанс так и остаться узкоспециализированным решением. А 1С со своими недостатками будет продолжать жить и развиваться…

                                                      Ну в Беларуси не пропадете уже. В России вопрос времени. 1С тоже в свое время был узкоспециализированным решением.

                                                      Но шанс есть всегда, мы то в любом случае его будем развивать, мы на этом сейчас деньги зарабатываем, и пока проблем с этим даже в очень долгосрочной перспективе не предвидится (у нас уже достаточно большой диверсифицированный пул крупных клиентов на самом устойчивом к кризисам рынке)
                                                        0
                                                        Я имею в виду по ссылке в коментарии тут. Там именно 8.2
                                                        1С года с момента появления 7.7 перестала быть узкоспециализированной… А это было ну очччень давно…
                                                          0
                                                          Там >=8.2. Не очень давно 1С воспринимали именно как решение для бухгалтерии (да и сейчас многие так делают). Лет 15 назад только это начало меняться.
                                                            0
                                                            Ну
                                                            Там >=8.2.
                                                            означает что вы не делаете отличий между 8.2 и 8.3, а они реальные и большие в возможностях.
                                                            Лет 15 назад

                                                            Время летит быстро ;) 15 лет назад это 2004 год — в этом году уже массово были конфигурации под разные учетные нужды…
                                                            1С как была так и есть программа для учетных, управленческих и околобухгалтерских дел. Как была так и осталась… В них она и хороша.
                                                              +1
                                                              означает что вы не делаете отличий между 8.2 и 8.3, а они реальные и большие в возможностях.

                                                              Так ирония в том, что как раз в фундаментальных вещах 1с по сути деградирует:
                                                              Отказались от ORM, Отказались от автоматических блокировок, Отказались от обычного приложения, Отказались от обычных форм, Отказались от синхронности / модальности. Все на протяжении от 8.1-8.3. Причем по факту они не решили проблемы, а просто переложили их на разработчика. Просто заменив слово ручные на управляемые.

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

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

                                                                Это где они отказались? Легко можно создать обычную форму… Только вот в вебе и на мобилке она работать не будет. На винде — пожалуйста
                                                                  0
                                                                  Ну можно включить. Но под большой нагрузкой будут проблемы. Вы же не расстраиваетесь. когда надо на постгрессе самому начать транзакцию, заблокировать нужные записи и закомитить?

                                                                  Так в этом и фокус. Что можно было сделать нормально как в lsFusion (я приводил уже объемы) и никаких проблем не было бы.
                                                                  PS: На постгерс как раз не надо блокировать нужные записи, на update conflict'ы как правило полагаются.
                                                                  та по сути 1с и есть она большая орм… Раздражает язык запросов… это да… Но все равно это вопрос привычки.

                                                                  Так в том то и дело, что сейчас решения на 1с это pure sql, причем года так 92. Непонятно зачем тут вообще 1с, в таком стиле и на php писать можно.
                                                                  Это где они отказались? Легко можно создать обычную форму… Только вот в вебе и на мобилке она работать не будет. На винде — пожалуйста

                                                                  Я сейчас на 8.3 в учебной версии ОткрытьФормуМодально сделал, и она уже ошибку выдала (нужно вручную переключать режим). Вы же понимаете что выпиливание обычных форм и других режимов вопрос времени, причем не очень далекого (судя по их риторике).
                                                                    0
                                                                    Что можно было сделать нормально как в lsFusion (я приводил уже объемы) и никаких проблем не было бы.

                                                                    Посмотрим на вас лет через 15 развития системы… Если она будет иметь кучу инсталляций и будетраспростронена, как 1С… что у вас там будет…
                                                                    1с это pure sql,

                                                                    Ну когда она была 7.7 это было еще хуже… А что — лучше ОРМ или прямой скл — это большой вопрос…
                                                                    Я сейчас на 8.3 в учебной версии ОткрытьФормуМодально сделал, и она уже ошибку выдала (нужно вручную переключать режим)

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

                                                                    Та кто его знает… Кроме того я не сказал бы, что под новые формы писать тяжелее… Я бы сказал — что легче… Правда мышление надо несколько переделывать, это да… Но это такое…
                                                  0
                                                  Вот модульность да, это слабое место 1С, особенно в типовых. Концентрируйтесь на своих реальных преимуществах для бизнеса, а не для разработчиков.
                                                    0
                                                    Мы пока прощупываем рынок, до кого проще достучаться. Хотя учитывая, что основной рынок IT в мире — англоговорящий, может это и пустая трата времени. Там вроде все по другому работает.
                                                      0
                                                      Конечно пустая. Потеснить 1С можно, но затраты на это будут намного выше, чем полученный профит…
                                                        0
                                                        Тут то как раз фокус, что рынок высокомаржинальный, пяток относительно крупных проектов отбивают и все премиум акаунты, и пиар во всех сми, и контент менеджеров, и людей которые в каждой ветке будут дискуссии устраивать. Под пустой тратой времени я имел ввиду, что если рынок более восприимчив к инновациям, нет смысла доказывать что-то тем, кто изначально негативно настроен.

                                                        В этом смысле вот что весьма забавно. У нас есть небольшие проекты с американцами, и по опыту они очень легки на подъем: давайте это попробуем, и это попробуем. Их надо наоборот убеждать, зачем вам это надо.

                                                        А на постсовке все с точностью до наоборот. У нас с одним заказчиком переговоры 2 (!) года шли, хотя у него практически никаких других вариантов не было.
                                                          0
                                                          Если рассматривать вариант — внедрение с нуля, то да. А вот если рассматривать переход с уже существующей системы — всё становится уже не так радужно. Ну и я всё равно никак не могу понять, кто ваш клиент в России, который будет выбирать между коробками 1С и заказной разработкой на вашей платформе.
                                                            0
                                                            Еще раз. Вы всерьез полагаете, что мы с нуля все проекты разрабатываем? Нет у нас за 12 лет, есть набор из сейчас наверное 1300 кубиков (модулей, количество которых постоянно растет) из которых мы как из лего собираем сначала базовое решение, а потом донастраиваем под конкретного заказчика (хотя у 30% клиентов что по меньше идет как есть).

                                                            Вопрос, в том можно ли считать на текущий момент ERP продуктом? На мой взгляд можно (особенно ближе познакомившись с УТ), но не я принимаю решения в этом плане.

                                                            Хотя в целом я за продвижение ERP именно как полуфабрикат / конструктор. Вы из кубиков (подключая нужный подграф модулей как 30 так и 800) собираете ровно то что вам надо, плюс по мелочам кастомизируете под конкретные требования. То есть такой серийный custom made получается. И не ешьте что дают, но и по срокам стоимости достаточно быстро / дешево. Собственно это мы сейчас и продаем и пока вроде достаточно успешно.
                                                              0
                                                              Вы про внедрение в целом, я же про рынок 1С, от которого вы хотите откусить малую толику. Для этого рынка даже описанное вами — это заказная разработка.
                                                                0
                                                                Так вы же понимаете, что этот процесс можем не только мы выполнять. Даже у нас сейчас компания занимающаяся платформой, и компания занимающаяся
                                                                решениями (их даже несколько уже по сути) это разные люди. И компания с решениями работает и конкурирует с компаниями продающими 1С. Но последние по сути коробки продают (которые сейчас по сути уже не нужны, они на растущем рынке в основном продаются, так как сейчас у всех все уже автоматизировано), а мы на lsFusion custom made продаем по адекватной цене даже по сравнению с коробками.
                                                                  0
                                                                  Это хорошо. Но, всё-таки, можете описать абстрактно, какие бизнесы в России как-то автоматизированные на текущий момент, ваши потенциальные клиенты?
                                                                    0
                                                                    Ну сейчас конкретно, это рынки, который мы знаем и понимаем: FMCG сети — там где сейчас Супермаг, Gestori, самописки, Астор и т.п. И заказные разработки, где сейчас excel, всякие нестандартные CRM / billing / project management и т.п.
                                                                      0
                                                                      Не думаю, что сети, до сих пор работающие на Джестори, могут позволить себе смену программы автоматизации. Они скорее всего с околонулевой рентабельностью работают. Знаю вокруг в городе милионнике 3 примерно такие сетки, сдохшие за 2 последних года.
                                                                        0

                                                                        2 экономических и один фискальный кризис научили меня тому, что у продовольствственной розницы деньги есть всегда. И чем их меньше тем лучше, тогда они с меньшей вероятностью принимают глупые финансовые решения вроде найма своего IT отдела или покупки sap, платных СУБД или коробочных решений. При этом они ещё больше заботятся об эффективности своей работы, а в fmcg рознице это возможно только за счёт it и поэтому серийный дешёвый custom made им заходит на ура. Проверено опытом. У нас лучшие продажи были во времена кризисов.

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

                                                                            0

                                                                            А вы давно на этом рынке?

                                                                              0

                                                                              На самом деле у первых 10 сетей всего 30 процентов рынка. У нас у одной 20. И рост на 3 процента в год. То есть даже 50 процентов лет через 5 только сети достигнут. Так что место больше чем достаточно. Но поживем увидим.

                                                                                0
                                                                                Откуда у вас такие данные? Можете подтвердить какой-нибудь ссылкой?
                                                                                    0
                                                                                    Из приведенной ссылки кстати:
                                                                                    Начиная с 2008 г., на российском рынке сетевой продовольственной розницы доминировали федеральные операторы, обеспечивающие около 47-48% оборота торговых сетей. Однако в 2018 г., по предварительной оценке M.A. Research, федеральные сети сформировали 45% рынка сетевого FMCG-ритейла в РФ, в то время как доля региональных операторов выросла до 46%.


                                                                                    Региональные FMCG-сети наиболее многочисленны и разнообразны по объему выручки и количеству магазинов. Среди них есть крупные сети, входящие в топ-10 и топ-15 торговых сетей, но большая часть сетей насчитывает порядка 5-20 магазинов небольшого формата.


                                                                                    Что-то не похоже, что крупные сети под себя все подминают.
                                                                                      0
                                                                                      Не видя полного исследования сложно что-то сказать. Возможно, в некоторых регионах одна крупная местная сеть успешно противостоит федералам. У нас, в Нижегородской области таковой является сеть Спар компании Сладкая Жизнь (кстати, работают на 1С, если что) Кроме них и федералов больше сетей крупнее 4-5 магазинов не наблюдается.
                                                                                        0
                                                                                        Ок, Гугл:
                                                                                        Первое, что нашел.

                                                                                        Еще искать?
                                                                                          0
                                                                                          О, это прекрасный пример. Эта сеть сдала в 2016 году 90% своих магазинов X5, а в этом году были закрыты оставшиеся 6 магазинов…
                                                                                          0
                                                                                          Не видя полного исследования сложно что-то сказать

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

                                                                                          Есть еще много исследований на эту тему с теми же выводами. Ну и наш внутренний market research их подтверждает. Хотя возможно у вас в нижегородской области все по другому. Но это типичный «эффект окружения».
                                                                                          кстати, работают на 1С, если что

                                                                                          Кстати интересно на чем? Астор? Далион? Магазька? Или УТ + Розница в РИБ?
                                                                                            0
                                                                                            В ситуации «одна региональная сеть противостоит федералам» вам всё равно ничего не светит. Если эта сеть выжила — значит с автоматизацией там всё в порядке.
                                                                                            В Спарах что на фронте не знаю, в бэке самописка на 1С, и WMS на 1С. WMS, кстати, обрабатывает примерно 250 тыс. строк заказов на отгрузку в сутки, и не тормозит :))
                                                                                              0
                                                                                              Если эта сеть выжила — значит с автоматизацией там всё в порядке.

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

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

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

                                                                                                  У нас 5 таких крупных проектов за последние несколько лет было. Да, не просто, но мы научились это делать с минимальными рисками / затратами.
                                                                                        0
                                                                                        Не нашёл там 30%. 47-48 вроде…
                                                                                          0
                                                                                          Ничего страшного. Хватит и половины российского рынка. Вы скорее динамику посмотрите. Или они 10 лет концы с концами сводят, но никак не сведут?
                                                                                            0

                                                                                            Там прямо в заголовке 17. 47-48 это федеральные но это и по 20 магазинов сети, просто у которых в нескольких регионах магазины. Если чуть глубже копнуть видно что, экспоненциально выручка в топе убывает.


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

                                                0
                                                слава богу в 1С нет ООП. Незачем ООП тащить в DSL — чем проще, тем лучше.

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

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

                                                      0
                                                      Действительно, зачем «умные» люди придумали ООП? Есть же Copy/Paste.
                                                      Мне почему-то вспоминается Шариков: «А то пишут, пишут… конгресс, немцы какие-то… Голова пухнет. Взять всё, да и поделить...»
                                                        0
                                                        Вот и я про тоже. Ради одного нового свойства (реквизита) или изменения типа текущего, в 1С копируется весь объект метаданных
                                                          0
                                                          Ради одного нового свойства (реквизита) или изменения типа текущего, в 1С копируется весь объект метаданных


                                                          Это кто вам сказал такую глупость? Вы хоть типовые посмотрели бы, например у документов бывают десятки свойств отображаемые пользователю и заполняемые ситуативно. Следуя вашей логике например в Бухгалтерии бюджетного учреждения должно быть документов тьма просто, тот же ПКО вместо одного должно с десяток быть. И с каждым обновлением еще с 1000 новых добавляться каждый месяц))

                                                          Есть составные типы, есть возможность прикрутить характеристики с произвольным набором свойств…

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

                                                          Платформа позволит вообще все засунуть в один объект метаданных, но это ведь не значит что решение будет хорошим? как и в любом ООП…

                                                          И точно такое же утверждение можно сказать про любой ООП язык, что для добавления нового метода/свойства нужно создать новый класс наследованный от некоторого базового… И данное утверждение будет и верным и не верным в зависимости от решаемой задачи.
                                                        0
                                                        Ну как при чем? Наследование и полиморфизм позволяют уменьшить дублирование кода. А в ООП есть наследование и полиморфизм.
                                                          0

                                                          LeshaLS
                                                          DAleby
                                                          Да никто не спорит с этим… только в 1С нет "фигур для которых надо считать площадь". Можно пример бизнес задачи — где такое может потребоваться?

                                                            0
                                                            Так именно об этом статья. Что можно применять ООП, например, для реализации регистров.
                                                              0
                                                              Так как мы не можем один класс наследовать от другого дважды, то для того, чтобы провести по регистру повторно, создадим агрегированный объект нового класса TransferSkuLedger, который затем наследуем от SkuLedger

                                                              Что то не убедили в целесообразности...

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

                                                                  Можно бизнес-пример, а не перламутровые пуговицы?
                                                                  Обычно документы связаны логически, если одинаковые добавляют "Вид операции"...

                                                                    0
                                                                    добавляют «Вид операции»

                                                                    И со временем обычно появляются реквизиты специфичные для одного вида операции а для другого не нужные, знаем, плавали.
                                                                      0

                                                                      Neikist
                                                                      Что удобней? Получить 20 разных документов — или несколько лишних реквизитов?

                                                                        0
                                                                        По ситуации. Может там вообще композиция нужна. Но лишние поля — ооочень нежелательны как по мне.
                                                                          0

                                                                          Ну так в 1С и есть композиция...


                                                                          Neikist puyol_dev2 вот вы реально думаете что станет лучше и легче? Вот эта та кнопка которая все сделает?


                                                                          Ок… будет 100 похожих документов, что будет с их хранением? В разных таблицах или одной? Что будет с производительностью join-ов? Что с нормализацией базы? Как будут происходить миграции? Вы думали как раздуются запросы?

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

                                                                              Ну а где по вашему хранятся дополнительные реквизиты?


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

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

                                                                                  Вы в своей практике делали маппинг в базу объектов( с наследованием) или вы только мечтаете о таком?


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

                                                                                    0
                                                                                    Пока масштаб проектов не тот, но вообще Room под андроид вполне неплохие средства работы с БД предоставляет.
                                                                                      0
                                                                                      Я бы на месте 1с ников про маппинг между объектами метаданных 1с и таблицами в субд вообще молчал. Если посмотреть какой запрос делает платформа в субд — можно ужаснуться количеству join ов даже для одного «документа» 1с
                                                                                        0

                                                                                        предложите варианты решения… что делать когда сотни связанных данных?


                                                                                        Я вижу всего 2 варианта работы в реляционной БД: либо жесткая денормализация, либо join-ы.


                                                                                        Как вариант выкинуть реляционные и использовать графовые БД, но они не так давно то и появились(хорошего уровня) — и у них свои проблемы...

                                                                                          0
                                                                                          Стоит вначале посмотреть на оригинальный запрос. Может столько джойнов — это результат бездумного обращения «через точку» у автора оригинального запроса?
                                                                                    0
                                                                                    пусть задачи и другие.

                                                                                    Может в этом дело? ;)
                                                                                      0
                                                                                      Ну так я периодически вспоминаю 1сный опыт и прикидываю как какие то элементы из текущей работы было бы удобно там использовать.
                                                                          0
                                                                          А потом кто-то меняет базовый класс и внезапно все ломается во всех унаследованных документах. Особенно если это на внедрении (а там сильный стресс), особенно, если у внедренца квалификации не хватает.
                                                                          А если на N-ый год развития системы выясняется, что существующая иерархия классов перестает устраивать с точки зрения развития системы? А там же совместимость надо поддержать, ведь уже много чего унаследовано.
                                                                          Это я к тому, что нет серебряной пули (@evilBearer — это я не про вас ;)). Каждый способ имеет свои плюсы и минусы. И уж точно — это не ключевой момент в автоматизации экономики.
                                                                      +1
                                                                      Мне много раз было грустно от того что некоторые паттерны вроде наблюдателя или шаблонного метода какого невозможно адекватно реализовать, только кучей кривоватого кода, а они вполне себе нередко к месту что в бизнес логике были, что в работе с формами.
                                                              0
                                                              Придирки по мелочам:
                                                              Платформа будет автоматически контролировать то, что при записи в регистр, остаток останется больше нуля. Если условие будет нарушено, то изменения не запишутся в базу данных, а пользователю будет выдано соответствующее сообщение. Кстати, желающие могут сравнить, как это ограничение реализовано в 1С УТ, чтобы оценить истинную боль, испытываемую 1С программистами.

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

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

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

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

                                                              Кстати, было бы интересно провести эксперимент: взять какую-то более-менее рабочую(в том смысле, что не высосанную из пальца) бизнес-схему и попробовать реализовать на разных фреймворках, а потом сравнить по производительности, количеству используемой памяти, времени на разработку и т.д.
                                                              P.S. В целом: статья — это интересный взгляд ещё с одной стороны на эту сферу разработки.
                                                                +1
                                                                Оцените боль программистов, у которых ограничение на отрицательные остатки зашиты в платформу.


                                                                Они не зашиты в платформу. Вы как раз можете ими управлять очень гибко. Например:
                                                                godMode = DATA BOOLEAN (User);

                                                                CONSTRAINT balance(Stock st, Sku sk) < 0 AND NOT godMode(currentUser())
                                                                    MESSAGE 'Остаток по товару на складе должен быть положительным';

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

                                                                  0
                                                                  Не для юзера. Для набора условий. Причем набор условий(остатки, склад, условия договора, задолженность, приоритет контрагента и т.д.) может меняться без участия программиста самим пользователем. То есть нужно не хардкодить условия, а создавать инструмент, при помощи которого пользователь будет управлять условиями. Это и будет «гибко». И если всё это реализовать, то получится в общем-то тоже самое, что и в 1С УТ(которая приводится, как образец боли программиста).
                                                                  P.S. Давать godMode пользователю — это то же самое, что и давать пациенту возможность выписывать самому себе лекарства. Это оочень плохая идея, поверьте.
                                                                    +1
                                                                    godMode я привел для примера и хорошо осознаю последствия. Справедливости ради набор условий, который не привязан к складу, а к конкретным операциям также дает кучу возможностей для манипуляции, так как завязывается на последовательность операций. То есть можно будет взять всех «приоритетные» документы, распровести их, провести неприоритетные, а затем обратно приоритетные. И получится, что ограничение обошли.

                                                                    Но в целом, это также легко и декларативно реализуется. Вот например:
                                                                    checkNegative = DATA BOOLEAN (Stock);
                                                                    allowNegative = DATA BOOLEAN (Customer);

                                                                    CONSTRAINT CHANGED(quantity(SkuLedger l)) AND balance(stock(l), sku(l)) < 0 
                                                                               AND checkNegative(stock(l)) AND NOT allowNegative(customer(l))
                                                                        MESSAGE 'Остаток по товару на складе должен быть положительным';
                                                                        
                                                                        

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

                                                                    Да, конечно. Только это делается 1С-программистом, а не самой платформой, которая слабо ему в этом помогает.
                                                                      0
                                                                      heckNegative = DATA BOOLEAN (Stock);
                                                                      allowNegative = DATA BOOLEAN (Customer);
                                                                      
                                                                      CONSTRAINT CHANGED(quantity(SkuLedger l)) AND balance(stock(l), sku(l)) < 0 
                                                                                 AND checkNegative(stock(l)) AND NOT allowNegative(customer(l))
                                                                          MESSAGE 'Остаток по товару на складе должен быть положительным';

                                                                      А этот код кто будет писать, не программист ли часом? Какие преимущества описания ограничений в платформе, по сравнению с описанием ограничений в конкретной конфигурации?

                                                                        0
                                                                        Напишите сначала про какое описание ограничений в конкретной конфигурации идет речь? Это часом не 1С-программист делает?
                                                                          0

                                                                          Остатков, и аналогично делает программист...

                                                                            0
                                                                            Да, только в моем примере это делается красиво декларативно, а в 1С — смотрите код ниже.
                                                                              0

                                                                              Красиво можете "1+1=2" написать, давайте не сравнивать платформу и конфигурацию.
                                                                              Все сводится к одному: в платформе 1С нет встроенного контроля отрицательных остатков. Все!
                                                                              А вот вопрос его целесообразности — это уже вкусовщина

                                                                                0
                                                                                Мы сравниваем именно 2 платформы. На одной один функционал реализуется несколькими строками, а в другой — тонной странного кода.
                                                                                Все сводится к одному: в платформе 1С нет встроенного контроля отрицательных остатков. Все!

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


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


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


                                                                          И потом еще код по проверке ограничения. Они больные? В lsFusion это одной строкой кода делается. И это примитивное ограничение. Представляю как бы CONSTRAINT приведенный выше в 1С выглядел.
                                                                            0
                                                                            Есть такая штука, называется «скорость работы». Есть у меня подозрение, что приведенный код работает на порядок(а с учетом параллельной работы в базе пары тысяч пользователей, так и на несколько порядков) быстрее, чем то, что в IsFusion делается одной строкой. И приведенный отрывок — это не проверка, а получение данных, необходимых для записи с учетом всех нужных проверок. Хотя запрос — да, кривоватый.
                                                                              0
                                                                              Есть такая штука, называется «скорость работы». Есть у меня подозрение, что приведенный код работает на порядок(а с учетом параллельной работы в базе пары тысяч пользователей, так и на несколько порядков) быстрее, чем то, что в IsFusion делается одной строкой.

                                                                              Есть. И решения уровня ERP на lsFusion работают в FMCG-сетях с терабайтными базами и сотнями (а иногда и тысячами) одновременных пользователей на оборудовании стоимостью 10-20к. И там именно вот такие декларативные ограничения в одну строку. Вот кстати репозитарий общего набора модулей:
                                                                              github.com/lsfusion-solutions/erp/tree/master/erp-logics/src/main/lsfusion
                                                                              И приведенный отрывок — это не проверка, а получение данных, необходимых для записи с учетом всех нужных проверок.

                                                                              Хоть убей не понял что вы написали. Я делал CTRL+SHIFT+F ДвиженияТоварыКОтгрузкеИзменениеСводно, ДвиженияТоварыКОтгрузкеПередЗаписью. И они используются чисто для проверки ограничений.
                                                                              Хотя запрос — да, кривоватый.

                                                                              То есть люди, которые писали второе самое распространенное решение на 1С, написали его криво. Может проблема в консерватории?
                                                                                0
                                                                                И решения уровня ERP на lsFusion работают в FMCG-сетях с терабайтными базами и сотнями (а иногда и тысячами) одновременных пользователей на оборудовании стоимостью 10-20к.

                                                                                Без сравнения функционала не получится оценить производительности.
                                                                                Хоть убей не понял что вы написали. Я делал CTRL+SHIFT+F ДвиженияТоварыКОтгрузкеИзменениеСводно, ДвиженияТоварыКОтгрузкеПередЗаписью. И они используются чисто для проверки ограничений.

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

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

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

                                                                                  Нет, ДвиженияТоварыКОтгрузкеПередЗаписью, ДвиженияТоварыКОтгрузкеИзменениеСводно используются только в этих 3 кусках кода. Можете сами проверить. То есть это чисто проверка ограничения.
                                                                                  Это всего лишь моя оценка запроса, я просто не знаю всей информации по данному процессу, может быть у людей написавших это и были свои резоны.

                                                                                  Так там таких проверок в этой процедуре 2400 строк. И все по одной / похожей схеме сделаны. А вы же говорили, что с УТ периодически работаете.
                                                                                    0
                                                                                    Нет, ДвиженияТоварыКОтгрузкеПередЗаписью, ДвиженияТоварыКОтгрузкеИзменениеСводно используются только в этих 3 кусках кода. Можете сами проверить. То есть это чисто проверка ограничения.

                                                                                    Ещё раз внимательно прочитайте тексты приведенных Вами же примеров. Кроме проверки на остаток там много ещё чего.
                                                                                    Так там таких проверок в этой процедуре 2400 строк. И все по одной / похожей схеме сделаны. А вы же говорили, что с УТ периодически работаете.

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