Почему появляется значок суммы у полей динамического списка в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Что означает пиктограмма суммы в динамическом списке?

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

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

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


ВЫБРАТЬ
    _Реестр.Накладная КАК Накладная,
    МАКСИМУМ(_Реестр.Груз) КАК Груз,
    СУММА(_Реестр.ВесФактический) КАК ВесФактический,
    СУММА(_Реестр.ВесРасчетный) КАК ВесРасчетный,
    СУММА(_Реестр.ВесПоПрейскуранту) КАК ВесПоПрейскуранту,
    МАКСИМУМ(_Реестр.СтавкаГруженогоРейса) КАК СтавкаГруженогоРейса,
    СУММА(_Реестр.НДС) КАК НДС,
    МАКСИМУМ(_Реестр.ПереченьЕЛС) КАК ПереченьЕЛС,
    МАКСИМУМ(_Реестр.ДобавленВручную) КАК ДобавленВручную
ИЗ
    РегистрСведений._Реестр КАК _Реестр
ГДЕ
    _Реестр.КлючЗаполнения В(&КлючиЗаполнения)
СГРУППИРОВАТЬ ПО
    _Реестр.Накладная

В этом коде мы четко видим использование функций СУММА и МАКСИМУМ. Все поля, обернутые в эти функции, система справедливо распознает как итоги и отметит значком Σ.

Почему значок суммы появляется у ссылочного поля?

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

Разберем подробнее, почему так происходит. В механизмах СКД ссылочные (и даже строковые) поля также могут выступать в роли ресурсов. Это случается, когда для поля задано агрегатное выражение для подсчета количества. Обычно для этого используются функции КОЛИЧЕСТВО() или КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ...).

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

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

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

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

Архитектурные ошибки: группировки внутри запроса динамического списка

Проанализируем код запроса, приведенный выше. Разработчик использовал конструкцию СГРУППИРОВАТЬ ПО прямо в тексте произвольного запроса динамического списка. С точки зрения архитектуры 1С и оптимизации производительности, это считается не самой удачной практикой.

Рассмотрим, к каким проблемам это может привести:

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

Как делать правильно? Рекомендуемый подход

Чтобы избежать проблем с производительностью и корректно использовать возможности платформы, придерживайтесь следующих правил при работе с динамическими списками:

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

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

← На главную