Нестандартное использование СКД

14.04.21

Разработка - СКД

Программист 1С в компании «БКС-технологии» Алексей Шиянов в ходе Infostart Meetup Novosibirsk продемонстрировал необычный способ использования СКД и сравнил результаты заполнения движений документа через СКД с классическим подходом к заполнению движений через запросы и циклы.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Нестандартное использование СКД: файл - пример конфигурации
.cf 120,71Kb
81
81 Скачать бесплатно

 

 

О докладчике

 

 

Меня зовут Алексей Шиянов, я программист в компании «БКС-технологии».

  • По образованию я физик – в 2009 году закончил факультет физики Южного федерального университета. Тогда же я начал изучать программирование на C++. Немного программировал на Delphi и даже написал примитивный калькулятор.

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

  • В 2011 году начал работать программистом 1С.

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

  • В 2018 году я переехал из Ростова-на-Дону в Новосибирск, в более прохладный климат.

  • А в 2020 году решил впервые поучаствовать в конференции Инфостарта.

Я работаю в компании БКС. Наша компания на рынке 25 лет, мы – брокер № 1 в России. У нас 5 тысяч сотрудников, из них 90 человек – сотрудники 1С. Мы сопровождаем и разрабатываем множество конфигураций 1С.

В докладе:

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

  • Выясним, с какими подводными камнями можно столкнуться на нашем пути.

  • Расширим кругозор, а некоторые, может быть, расширят и свое сознание.

 

На чем будем экспериментировать

 

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

Конфигурация очень проста: кроме примеров из моего доклада там будет еще несколько примеров аналогичного типа по использованию СКД.

Файл конфигурации вы можете скачать в приложении к статье.

 

СКД – не только для отчетов

 

Большинство программистов привыкли считать, что СКД предназначена исключительно для отчетов. Это могут быть отчеты, которые просто выводят список значений реквизитов по какому-то элементу справочника в табличный документ. Либо отчеты очень сложные – со множеством группировок, деревьев, диаграмм, кросс-таблиц.

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

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

 

Схема СКД

 

 

Как работает система компоновки данных:

  • В качестве входных параметров используются:

    • схема компоновки данных – это, фактически, декларативное описание источников данных, которые могут быть представлены как запросы, объекты или объединения;

    • настройки – список полей, которые мы будем выводить, с отборами, сортировками, условным оформлением и так далее.

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

  • Результат компоновки – некий полуфабрикат, который может быть выведен:

    • либо в коллекцию значений;

    • либо в табличный документ.

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

 

 

Посмотрим, как это можно сделать программно.

  • Мы получаем схему компоновки данных – будем считать, что она зашита в объект метаданных.

  • Получаем из нее настройки по умолчанию.

  • Создаем объект «КомпоновщикМакетаКомпоновкиДанных».

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

  • Создаем объекты «ПроцессорКомпоновкиДанных» и «ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений».

  • Создаем таблицу значений, которая будет результирующей таблицей, в которой мы увидим наши данные.

  • Установим таблицу в процессор вывода и выведем в нее данные.

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

 

Практика нестандартного применения СКД

 

 

Итак, поехали.

 

 

Допустим, у нас есть документ «Реализация товаров и услуг».

 

 

Документ делает движения по трем регистрам накоплений:

  • РасчетыПоДоговорам,

  • ТоварыКОтгрузке,

  • ТоварыНаСкладах.

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

 

Наборы данных и их соединение

 

Чтобы сформировать движения с помощью схемы компоновки данных, мы создадим в нашей схеме компоновки данных два набора данных.

 

 

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

  • Некоторые данные, идущие до «НомерСтроки», представляют собой реквизиты табличной части.

  • «ПредварительныйЗаказ» и все, что ниже – реквизиты шапки документа.

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

На этом набор данных-объект мы сформировали.

 

 

Второй набор данных – запрос, он представляет собой запрос к таблице остатков регистра накопления «ТоварыНаСкладах».

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

Обратите внимание, что я здесь не указал дату среза, это поле я заполню позже. Это – маленькая военная хитрость, я к этому параметру вернусь позже.

 

 

Состыкуем два наших набора данных: это «Товары» – набор данных-объект и «ТоварыНаСкладах» – набор данных-запрос.

Их мы стыкуем по полям «Номенклатура» и «Склад».

Эти связи являются параметрическими – параметры я сделал одноименными для простоты.

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

 

 

Вот как это выглядит – в исходной таблице «Товары» три строки, из них два варианта номенклатуры и два варианта склада.

Соответственно, в запрос второго набора данных будет передан следующий список параметров «Номенклатура» и «Склад».

 

 

По остаткам мониторов LG и Samsung на розничном и оптовом складах мы получим следующий результат запроса.

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

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

 

Вычисляемые поля

 

 

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

Мы добавим поле «Сумма», которое будет тождественно равно полю «СуммаСНДС» исходного набора данных «Товары».

Еще одно поле – «ОписаниеОшибки», это триггерное текстовое поле, оно будет заполняться только в том случае, когда по какой-то номенклатуре количество в документе превысит количество остатка. Здесь приведена формула, по которой это поле будет заполняться – в случае выполнения условия это сообщение в дальнейшем будет выводиться пользователю.

 

Ресурсы и параметры

 

 

Поля «Количество» и «Сумма» добавим в ресурсы с применением агрегирующей функции Сумма().

 

 

Перейдем на закладку «Параметры»:

  • Добавим параметр «МоментВремени».

  • Остальные три параметра: «Период», «Номенклатура» и «Склад» у нас уже есть, но мы отключим для них использование и заполнение извне (поставим флажок «Ограничение доступности»).

Для параметра «МоментаВремени» не будем указывать тип, но оставим для него использование «Всегда» и уберем флажок «Ограничение доступности».

 

 

Раскрою военную хитрость, о которой уже упомянул. Мы заходим в исходный набор данных-запрос и добавляем параметр &МоментВремени.

Почему нельзя было делать это сразу? Дело в том, что схема компоновки данных умеет работать с нестандартными значениями типа Момент времени, Граница и так далее.

Но если мы сразу укажем здесь параметр «&Граница» или «&МоментВремени», они автоматически типизируются в дату, что приведет к неправильной работе алгоритма и багам.

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

 

Настройки

 

 

Дальше переходим на вкладку «Настройки», включаем использование параметра «Момент времени» и дальше будем думать, как нам группировать дерево значений.

 

 

У нас будет три группировки для регистров, так как у нас документ «Реализация» делает движения по трем регистрам накопления. Каждая группировка для регистра накопления будет названа точно так же, как этот регистр.

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

 

 

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

 

 

В выбранные поля я включил авто-поле и поле ресурса «Количество».

Если у наших регистров накопления есть еще и реквизиты, то мы их тоже должны сюда включить, перед этим добавив на вкладку «Ресурсы» схемы компоновки данных с результирующей функцией МАКСИМУМ().

 

 

У нас будет три группировки для регистров – они будут идти под номерами 1,2,3.

А группировка с номером 0 будет называться «Ошибки». В нее мы добавим отбор по заполненному полю «ОписаниеОшибки» – если у нас в поле «ОписаниеОшибки» что-то вылезет, мы обязательно выведем это писание в первую группировку. Это поможет в дальнейшем при работе нашего алгоритма отловить эту ситуацию и не допустить проведения документа.

Краткое описание построения схемы компоновки данных завершено. Переходим к процедуре проведения.

 

Процедура проведения

 

 

Процедура проведения достаточно проста:

  • сначала мы очищаем все наши движения;

  • потом из макета получаем схему компоновки данных;

  • из схемы вытаскиваем настройки по умолчанию;

  • и передаем в настройки значение момента времени документа;

  • дальше создаем объект «КомпоновщикМакетаКомпоновкиДанных»;

  • получаем макет компоновки.

  • создаем процессор компоновки, инициализируем его.

 

 

И дальше делаем таблицу «Товары» – клон табличной части «Товары». Мы ее просто выгружаем и дальше дозаполняем колонками, соответствующими реквизитам в шапке документа:

  • «ПредварительныйЗаказ»;

  • «Контрагент»;

  • «Валюта»;

  • «Договор»;

  • «Период».

 

 

Дальше:

  • инициализируем процессор компоновки, передав ему в качестве параметра внешние наборы данных – под внешними наборами данных я подразумеваю структуру, в которую мы вложили таблицу значений;

  • создаем дерево значений;

  • создаем процессор вывода;

  • устанавливаем дерево значений в качестве результата процессора вывода;

  • и выводим.

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

 

 

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

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

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

Вот так это происходит.

 

Сравниваем «классику» и СКД

 

 

Все, конечно, красиво, но сразу возникает вопрос: если все так круто с СКД, почему еще используют «классику»?

 

 

У «классики» есть свои плюсы.

  • В ряде случаев она проще в сопровождении и разработке. Если проведение совершенно примитивное (добавляются только строки в регистр сведений напрямую из табличной части) в СКД вообще нет никакой потребности.

  • Есть случаи, которые СКД не может реализовать при всем желании, а в классике такие случаи можно реализовать.

Но у «классики» есть проблемы:

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

  • В «классике» нет возможности использовать агрегатные функции СКД, такие как СоединитьСтроки(), Массив(), ТаблицаЗначений() – функция, которая выбирает из запроса коллекции. В ряде случаев использовать агрегатные функции удобно, хотя таких случаев не так много.

 

 

У СКД много других плюсов:

  • Встроенные функции СоединитьСтроки(), Представление(), Формат(). С помощью функции Формат() можно преобразовать дату или число к нужному формату в самой схеме и получить их на выходе без последующей обработки в цикле. Функция Представление() в СКД позволяет создать свое представление, которое отличается от встроенного представления в запросе, которое используется для общесистемных целей. Это классно, потому что в ряде документов нужно заполнять комментарий, который с помощью Представления() в СКД может быть получен достаточно легко, без необходимости написания сложных условий.

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

  • СКД легко масштабируется без вмешательства разработчика. Оно будет быстро работать как для 15 строк, так и для 15 тысяч строк, если там нет диких конструкций типа обращения к внешней функции, которая работает в цикле.

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

У СКД только два недостатка.

  • В СКД нельзя реализовать все, что можно реализовать в «классике».

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

 

Итог поединка

 

 

Итоги нашего поединка: СКД, по моему субъективному мнению, побеждает с перевесом в 1 балл.

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

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

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

 

Вопросы:

 

Зачем такие танцы с бубнами? Как и почему пришли к такой реализации? И в чем вообще преимущество реализации на СКД?

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

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

На малых объемах (100-150 строк в документе) примерно то же самое получается. Но если будет 15 тысяч строк, то СКД начинает уже выигрывать. СКД лучше масштабируется.

Как производить отладку и поиск ошибок в таких алгоритмах?

В самом СКД, как правило, ошибки не так сильно разнообразны, как в классике. Получать информацию о том, какая ошибка, можно глядя на сообщение, которое выводит отладчик при формировании схемы компоновки данных. Например, на моменте вывода выдается сообщение об ошибке «Не найдено поле для замены», которая означает, что мы забыли добавить поле во внешний набор данных. В общем, в силу опыта, я уже знаю, как интерпретировать ошибки, которые платформа показывает. Гораздо труднее, конечно, получать ошибки, которые не выводятся как ошибки, а просто приводят к какому-то искажению данных. Тут уже необходимо перехватывать запрос, который СКД создает. Это можно сделать на этапе отладку, поставив точку останова в том месте, где «КомпоновщикМакета.Выполнить()». Получается у нас новый макет компоновки. В макете компоновки находятся все наши запросы, которые СКД интерпретировала в соответствии с нашим заданием. Эти запросы можно вытащить в консоль запросов и дальше смотреть уже, как они отрабатывают. Ситуаций, когда искажения были не из-за запросов, у меня не возникали – здесь достаточно иметь опыт именно работы с данными. Грубо говоря, если у нас на входе таблица значений, а на входе нужно получить дерево значений, то научиться правильно строить дерево не сложно. Дальше уже ошибок никаких не будет.

Какую самую интересную задачу с точки зрения разработки и бизнеса ты решал на СКД?

Была история, когда нужно было переписать веб-сервис, который раньше был сделан на «классике». В коде веб-сервиса нужно было получать уникальный идентификатор объекта. Естественно, это делалось с помощью классики – сначала делался запрос, потом для результирующей таблицы значений добавлялось поле «Уникальный идентификатор», потом эта таблица сканировалась, и для каждого ссылочного поля этот уникальный идентификатор заполнялся. Фактически, получался запрос в цикле, из-за этого код веб-сервиса отрабатывал очень медленно. Мы переписали его на СКД, потому что там для СКД в вычисляемых полях можно использовать встроенную функцию XMLСтрока(Ссылка), которая, фактически, получает строковое значение идентификатора. И эта функция работает быстрее, чем Ссылка.УникальныйИдентификатор(). Производительность веб-сервиса возросла на 60%, никакие вторичные циклы больше не используются – мы на вход подали схему, а на выходе получили таблицу.

Приходилось ли когда-нибудь сделать откат в классику?

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

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на INFOSTART MEETUP Новосибирск.

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159416    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6995    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

11.12.2023    10804    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    8016    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SlavaKron 14.04.21 11:32 Сейчас в теме
сначала делался запрос, потом для результирующей таблицы значений добавлялось поле «Уникальный идентификатор», потом эта таблица сканировалась, и для каждого ссылочного поля этот уникальный идентификатор заполнялся. Фактически, получался запрос в цикле

1. Почему вы считаете, что получение уникального идентификатора делает запрос к ИБ?
2. Почему нельзя было использовать XMLСтрока(Ссылка) в "классике"?
SeiOkami; Shmell; triviumfan; Muxomop; BomjBandit; +5 1 Ответить
9. SeiOkami 3515 09.05.21 09:17 Сейчас в теме
(1) кстати, по поводу этого примера. Действительно, необходимость перебирать таблицу для заполнения идентификатора в подобных задачах очень бесит.

Поэтому этот "ишуиз" к платформе самый "залайканый" )

https://github.com/SeiOkami/OneS/issues/5
2. user1466751 18 14.04.21 12:22 Сейчас в теме
Скринчик бы с замером производительности проведения классического и СКДшного, особенно % времени формирования макета.
cleaner_it; +1 Ответить
3. PrutskihKA 2 15.04.21 07:44 Сейчас в теме
Алексей, спасибо за статью и видео. Идея использование СКД инетересная. Если использовать в типовых решениях с использованием RLS и не возникала ошибок потерю полей при таком ограничении на СКД?
4. mixsture 15.04.21 10:58 Сейчас в теме
Кажется, просто минусов в СКД маловато вспомнили.
1) способность заменять левые соединения на внутренние при наличии отборов на поля соединяемой таблицы. И переспорить СКД невозможно в этом - только спускать соединение в код запроса.
2) когда в запросах есть группировки, а скд их вырезает с целью оптимизации. И за этим нужно следить.
3) в скд почти отсутствует отладка. Т.е. отладка сводится к: возьми запрос, который она сгенерила и отлаживай запрос. Т.е. средства отладки только для запроса нормальные.
4) каким образом у вас получилось исполнение на скд проведения быстрее запроса? Когда в основе скд все равно он же и будет выполнен. По-моему вы сравниваете кошмарно написанный запрос с скд.
Yashazz; wolfsoft; SeiOkami; cleaner_it; dabu-dabu; zaic; triviumfan; +7 Ответить
10. SeiOkami 3515 09.05.21 09:38 Сейчас в теме
(4)
+

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

Если же нужно "донастраивать" запрос в зависимости от разных условий, то в большинстве случаев хватает Построителя Запроса, который имеет достаточно широкие возможности. И нагрузка его использования заключается лишь в динамическом формировании текста запроса.

В статье как-то упущена куча минусов, но приведены какие-то сомнительные плюсы типа возможности использовать Формат() и т.д. Так часто это нужно в проведении документа? И так уж сильно это выигрывает "классическую" постобработку? Скорее это опять же исключения из правил.

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

К минусам можно ещё много чего перечислить. Например, сравнение\объединение СКД в конфигураторе - это вообще жуткая боль. А если большая часть логики (и проверки и движения) заложена в СКД, то доработка такого комбайна превращается в ад. Можно использовать ЕДТ или сравнение гит или ещё какие-то сторонние средства, но зачем эта боль нужна вообще?)

Я за использование СКД в тех местах, где их не ожидают встретить. Но лишь тогда, когда это даёт реальное преимущество. И не приводит к боли и страданию. Привыкнуть можно ко всему, но если это действительно на пользу.
5. bulpi 217 15.04.21 14:06 Сейчас в теме
Не дай Бог когда-нибудь попасть на поддержку конфигурации, написанной таким умельцем. Я таких называю "горе от ума".
Rafaraf; user1583894; Andreeei; Yashazz; Deslime; wolfsoft; SeiOkami; cleaner_it; ubnkfl; dabu-dabu; zaic; le_; Vitaly1C8; triviumfan; +14 Ответить
6. user925427 126 15.04.21 22:11 Сейчас в теме
(5) Грубовато, но согласен, что подобные оригинальные решения увеличивают стоимость поддержки. В рамках коллектива, где это родилось, используется на "ура", а в серию, вряд ли, пойдёт. Как с процессорами - наш Эльбрус, может, и оригинален, но мир заполнили Intel и AMD.
daho; SeiOkami; ubnkfl; Vitaly1C8; triviumfan; Ali1976; +6 Ответить
7. Zhek 20.04.21 08:46 Сейчас в теме
В типовой конфигурации Бухгалтерия государственного учреждения 2.0 во всех документах используется СКД для формирования движений по регистру бухгалтерии. Удобно тем, что в пользовательском режиме можно настраивать проводки, добавлять свои и т.д.
С точки зрения производительности - спорное решение использовать СКД в транзакции проведения. Большую часть времени проведения любого документа (в среднем 80%) занимает формирование выполнение СКД. Даже для простого документа с парой строк в табличной части без контроля остатков.
Время проведения самых простых документов в районе 1 секунды. Для сравнения проведение самописных документов с обычным формированием движений без СКД занимает 0.1 - 0.2 с.
Так же следует помнить, что соединение наборов данных в СКД происходит перебором (аналог вложенных циклов SQL). Для наборов данных с большим количеством строк это проблема. Был пример, когда типовой отчет "зависал" на несколько часов из-за того, что использовалось соединение наборов данных. В очередном релизе от наборов данных отказались, сделав соединение в запроса средствами SQL. После этого отчет стал работать быстро.
Прикрепленные файлы:
rozer; RustIG; daho; cleaner_it; mondordom; +5 Ответить
8. SeiOkami 3515 09.05.21 09:09 Сейчас в теме
У СКД есть очень много "нестандартных" применений.
Однако, представленный является одним из самых "плохих" и скорее отталкивает)
11. daho 8 13.05.21 08:21 Сейчас в теме
+
1С-ка на данный момент представляет собой не просто обычную учетную систему а зачастую очень сложный механизм который работает в связке с WS, другими учетными системами (типу OBS и т.д.) и прочими "нестандартными" поставщиками исходных данных. Именно ввиду этого данный фреймворк весьма полезен и интересен. Спасибо автору! Идея шикарная!

Использовать этот механизм в примитивных узконаправленных конфах естественно смысла особого нет. Хотя, на как на мой вкус, иногда удобно.)
12. RustIG 1747 15.11.22 11:35 Сейчас в теме
Статья + комментарий №7 = Суть СКД = вывод внутренних настроек во вне - в интерфейс пользователя.
13. Logarifm_Andre 15 12.02.23 19:45 Сейчас в теме
Добрый день.
А у Вас есть статья "сложного отчета на СКД", который писали в 2013г?
Когда-то находил ее на просторах, очень была интересная, я сейчас найти не могу...
Оставьте свое сообщение