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