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