Рассмотрим распространенную ситуацию при доработке типовых печатных форм в конфигурациях 1С, таких как «Зарплата и Управление Персоналом» (ЗУП) или ERP. Предположим, нам необходимо добавить в приказ о кадровом переводе (форма Т-5) информацию о графике работы сотрудника. Мы добавляем соответствующее поле в вычисляемые поля Схемы Компоновки Данных (СКД), помещаем его в выбранные поля и выводим параметр в макет печатной формы в конфигураторе. Однако при попытке сформировать документ мы видим, что параметр просто не устанавливается, а колонка с нашим полем отсутствует в коллекции РезультатКомпоновки.ДанныеОтчета.
Проанализируем эту ситуацию и выясним причину, по которой наши изменения в конфигураторе игнорируются системой при выводе на печать, а также разберем по шагам, как правильно решить эту задачу.
Основная причина кроется в механизме кэширования Библиотеки Стандартных Подсистем (БСП). В современных типовых конфигурациях для ускорения формирования сложных кадровых приказов и отчетов используется кэширование готовых макетов компоновки.
Когда мы формируем печатную форму, система сначала обращается к служебному регистру сведений. Если она находит там ранее сохраненный скомпонованный макет, она использует его, полностью игнорируя те изменения, которые разработчик только что внес в СКД в конфигураторе. Процессор компоновки берет закэшированные настройки выбранных полей, где нашего нового вычисляемого параметра еще не существует, поэтому он и не попадает в итоговые данные.
Разберем способы, которые помогут заставить систему «увидеть» наши доработки в СКД.
Способ 1: Штатная очистка через пользовательский режим (рекомендуемый)
Удалять записи из служебных регистров напрямую не рекомендуется, так как это может нарушить целостность данных. Правильный и безопасный путь обновления макета выглядит следующим образом:
Это действие заставит систему безопасно перечитать схему напрямую из метаданных конфигурации при следующем формировании печатной формы, и наши новые колонки появятся в данных отчета.
Способ 2: Очистка регистра сведений (технический вариант)
Как было отмечено в обсуждении, скомпонованные макеты хранятся в регистре сведений МакетыКомпоновкиДанных. Если первый способ по какой-то причине недоступен, можно очистить запись для конкретного макета в этом регистре. При следующем обращении к печатной форме система не найдет закэшированных данных и создаст запись заново, уже с учетом новых добавленных полей.
Дополнительно: Если данные всё ещё не обновляются, иногда проблема может скрываться в сеансовых данных сервера 1С. В таком случае помогает простой перезапуск сеанса пользователя или принудительная очистка серверного/клиентского кэша.
Посмотрим на другие архитектурные подходы к добавлению данных в печатные формы, которые позволяют избежать изменения типовой СКД и снятия конфигурации с поддержки.
[РаботаГрафикРаботы]. Затем в свойствах ячейки достаточно установить тип заполнения «Параметр» или «Шаблон».&Перед или &После) и программно добавить нужные значения в структуру перед самим выводом на экран или принтер.Важное замечание: При добавлении сложных функций в вычисляемые поля СКД (например, обращение к экспортным функциям общих модулей для каждого сотрудника в цикле) следует быть очень осторожными. Это может критически замедлить формирование документа, особенно если приказ Т-5 или аналогичный документ печатается списком на большое количество сотрудников одновременно.