Разработка отчетов на базе Системы компоновки данных (СКД) — одна из самых частых задач программиста 1С. Однако иногда мы сталкиваемся с необъяснимым поведением платформы: вы добавили новое поле в запрос, определили его в ресурсах и настройках схемы, но после запуска программы в режиме «1С:Предприятие» этого поля нет ни в выбранных, ни даже в доступных полях. При этом, если сохранить этот же отчет как внешний (через файл .erf), всё работает корректно. Рассмотрим подробнее причины этой проблемы и разберем по шагам все способы её решения.
Проблема кроется в механизмах оптимизации платформы «1С:Предприятие 8». Когда мы запускаем встроенный отчет, система пытается ускорить работу, используя кэшированные данные. Эти данные могут храниться в нескольких местах:
Ситуация, когда внешняя копия отчета работает, а встроенная — нет, однозначно указывает на то, что платформа «привязала» старую структуру схемы к идентификатору встроенного объекта и отказывается её обновлять, считая, что ничего не изменилось. Проанализируем основные методы борьбы с этим «упрямством» системы.
Как показывает практика и обсуждение в сообществе, это самый быстрый и эффективный «танец с бубном». Суть метода заключается в том, чтобы заставить платформу считать отчет абсолютно новым объектом.
ПродажиПоСкладам -> ПродажиПоСкладам1).Если переименование объекта кажется слишком радикальным, проанализируем ситуацию с точки зрения настроек пользователя. Платформа сохраняет состояние окна отчета: состав колонок, отборы и порядок. Даже если вы нажали кнопку «Установить стандартные настройки», система иногда пытается объединить старые сохраненные настройки с новой схемой, и новые поля могут просто «потеряться» в процессе этого слияния.
Попробуем выполнить программную очистку настроек. Для этого можно воспользоваться специальными обработками по очистке кэша или выполнить короткий код в консоли кода:
ИмяНужногоОтчета = "Отчет.ИмяВашегоОтчета";
ХранилищеОбщихНастроек.Удалить("Общее/НастройкиОтчета/" + ИмяНужногоОтчета, "", "");
ХранилищеВариантовОтчетов.Удалить(ИмяНужногоОтчета, "", "");
Этот код очистит записи в системных таблицах, которые мешают корректному отображению новой структуры СКД.
Если ваша конфигурация использует БСП (например, 1С:ERP, 1С:УТ 11, 1С:Бухгалтерия 3.0), то информация о настройках отчетов дублируется в справочнике Варианты отчетов. Платформа берет структуру доступных полей именно оттуда.
Разберем алгоритм действий:
Бывают случаи, когда дело вовсе не в кэше. Если поле есть в запросе, но его нет в «Доступных полях», нужно проверить настройки самого поля внутри СКД.
Проанализируем вкладку «Наборы данных» в схеме компоновки:
RLS. Если у пользователя нет прав на чтение объекта, на который ссылается новое поле, СКД может исключить его из списка доступных.Иногда внутренний идентификатор схемы (UUID) в конфигураторе «залипает». В этом случае помогает полная перезаливка структуры схемы компоновки данных.
Рассмотрим шаги выполнения:
.xml..xml.Этот метод гарантирует, что все внутренние связи объекта будут пересозданы с нуля, что часто решает самые труднообъяснимые проблемы с отображением полей.
Мы рассмотрели целый арсенал средств для борьбы с «исчезающими» полями в СКД. Подведем итог: чаще всего проблема решается переименованием отчета или очисткой справочника вариантов отчетов. Если же вы работаете в сложной конфигурации с жестким контролем прав, обязательно проверьте влияние функциональных опций. Понимание этих механизмов позволит вам экономить время и избегать лишней нервотрепки при разработке отчетов.