Почему система компоновки данных (СКД) удаляет поля из моего запроса?

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

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

Понимание механизма автозаполнения

Функция Автозаполнение в СКД предназначена для упрощения жизни разработчика: система сама анализирует текст запроса, находит все поля и формирует список доступных для пользователя элементов. Однако у этой функции есть обратная сторона — «интеллектуальная оптимизация».

Система СКД постоянно анализирует настройки вашего отчета. Если в тексте запроса указано поле, которое не используется в Выбранных полях, Группировках, Условиях или Ресурсах, СКД делает вывод, что это поле лишнее. В целях оптимизации производительности платформа «вырезает» его из текста запроса, отправляемого к СУБД. Таким образом, вы видите запрос в консоли СКД, но реальный запрос к базе данных оказывается короче, чем вы ожидаете.

Способ 1: Использование свойства «Обязательное поле»

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

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

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

Способ 2: Явное указание в настройках отчета

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

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

Таким образом, для системы поле становится «используемым», и она прекращает попытки его удалить, а для пользователя оно остается скрытым.

Способ 3: Отключение автозаполнения (Радикальный метод)

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

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

Для реализации этого метода:

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

Важные рекомендации: Проверка кэша

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

Если проблема сохраняется после всех правок, попробуйте следующие шаги:

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

← На главную