Почему изменения макета печатной формы в конфигураторе не отображаются при печати?

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

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

1. Обновление конфигурации базы данных и перезапуск сеанса

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

Когда мы редактируем табличный документ макета и нажимаем стандартное сохранение файла (комбинация клавиш Ctrl + S), изменения сохраняются только в разрабатываемой конфигурации. Для того чтобы они вступили в силу для пользователей, выполним следующий порядок действий:

  1. Нажмем клавишу F7 или выберем в верхнем меню пункт Конфигурация — Обновить конфигурацию базы данных.
  2. Если режим «1С:Предприятие» уже был запущен до обновления, закроем его и запустим сеанс заново либо выполним отладку клавишей F5 прямо из конфигуратора. Без перезапуска запущенный клиент продолжит работать со старыми данными метаданных из оперативной памяти.

2. Проверка подключения внешней печатной формы

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

Если кнопка печати в документе перехвачена внешней печатной формой, система полностью игнорирует встроенный макет объекта. Выясним причину через интерфейс программы:

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

3. Поиск дублирующих и общих макетов

Рассмотрим структуру метаданных конфигурации подробнее. Нередко процедура формирования печатной формы обращается не к подчиненному макету конкретного документа, а к объекту из общей ветки метаданных.

  1. Развернем в дереве конфигурации ветку Общие — Общие макеты и проверим наличие макета с похожим или идентичным названием.
  2. Откроем модуль менеджера или модуль формы документа и найдем процедуру формирования печатной формы (обычно функция Печать или процедура формирования табличного документа).
  3. Посмотрим, какая именно строка кода получает макет. Если в коде используется конструкция ПолучитьОбщийМакет("ИмяМакета"), то редактировать нужно именно общий макет, а не вложенный макет документа ЭтотОбъект.ПолучитьМакет("ИмяМакета").

4. Пользовательские макеты в Библиотеке стандартных подсистем (БСП)

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

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

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм.
  2. Найдем в списке нужный документ и печатную форму. Отредактированные макеты помечаются особым значком изменения или статусом Переопределен.
  3. Выделим строку макета и нажмем кнопку Использовать стандартный, чтобы отменить пользовательские правки и принудительно заставить 1С считывать макет из метаданных конфигуратора.

5. Переопределение логики в расширениях конфигурации

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

  1. В конфигураторе откроем меню Конфигурация — Расширения конфигурации.
  2. Проверим подключенные расширения: если в одном из них заимствован данный документ и добавлен собственный макет либо аннотирована процедура печати через директиву &Вместо, то платформа будет выводить макет из расширения, игнорируя изменения в основной конфигурации.

6. Очистка локального кэша и перезапуск сервера

Если все предыдущие проверки не дали результата, имеет место зависание клиентского кэша, что регулярно случается после динамического обновления конфигурации базы данных.

  1. Закроем сеансы программы 1С на рабочей станции.
  2. Запустим программу с параметром очистки кэша: добавим в окне запуска в поле дополнительных параметров строки запуска ключ /ClearCache.
  3. В случае клиент-серверного варианта работы при динамическом обновлении старая версия макета может удерживаться рабочими процессами сервера. В этой ситуации помогает перезапуск службы 1C:Enterprise Server Agent.

7. Программная перезапись ячеек в коде

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

Посмотрим на пример в коде процедуры печати:


ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Организация = ШапкаДокумента.Организация;
// Явное переопределение текста ячейки в обход макета:
ОбластьШапка.Области.НазваниеДокумента.Текст = "Гарантийный талон (старый формат)";
ТабДокумент.Вывести(ОбластьШапка);

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

← На главную