Почему 1С падает с ошибкой при печати формы Т-11 из расширения и как это исправить?

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

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

В этой статье мы подробно разберем причины возникновения данной ошибки и рассмотрим практические способы ее решения.

Выясним причину аварийного завершения работы

Проанализируем ситуацию и определим ключевые факторы, приводящие к падению платформы:

  1. Ошибка механизма слияния макетов: По умолчанию для заимствованных макетов табличных документов платформа использует вариант расширения «Объединять». В некоторых версиях платформы 1С:Предприятие (в частности, ветки 8.3.9–8.3.18) внутренний алгоритм объединения сложных ячеек и графических элементов вызывает сбой в системных библиотеках (moxel.dll), что приводит к аварийному завершению процесса.
  2. Особенности обращения к макету обработки: Когда заимствованный макет находится внутри обработки в расширении, прямой вызов стандартных функций печати без переопределения логики может вызывать конфликт структуры метаданных в кэше приложения.

Способ 1. Создание нового макета и переопределение процедуры печати

Разберем по шагам проверенный способ решения, при котором исключается прямое заимствование оригинального макета в расширение.

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

Рассмотрим пример кода в модуле менеджера обработки в расширении:


&НаВместо("Печать")
Процедура Расш1_Печать(МассивОбъектов, ПараметрыПечати, КомплектыПечати, ОбъектыПечати, ПараметрыВывода)
    // Изменяем логику получения макета и формируем печатную форму из нового макета расширения
    Макет = ПолучитьМакет("Расш_ПФ_MXL_Т11");
    // Далее выполняется стандартное заполнение и вывод табличного документа
КонецПроцедуры

Способ 2. Изменение свойства «Способ расширения» макета на «Замещать»

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

  1. Заимствуем макет ПФ_MXL_Т11 в расширение.
  2. Открываем палитру свойств заимствованного макета.
  3. В поле Способ расширения конфигурации меняем значение с Объединять на Замещать.

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

Способ 3. Альтернативные варианты решения

Посмотрим на альтернативные варианты, которые позволяют внести изменения в печатную форму без сбоев платформы:

  1. Редактирование макета через БСП в режиме «1С:Предприятие»: В типовых конфигурациях (например, 1С:ЗУП 3.1) изменить макет печатной формы можно в пользовательском режиме. Перейдем в раздел Администрирование > Печатные формы, отчеты и обработки > Макеты печатных форм. Находим макет формы Т-11, нажимаем кнопку редактирования и вносим необходимые изменения. Отредактированный макет сохранится в информационной базе и будет автоматически использоваться системой.
  2. Использование внешней печатной формы (ВПФ): Создаем внешнюю обработку, добавляем в нее макет и подключаем через справочник ДополнительныеОтчетыИОбработки. Этот способ полностью независим от механизмов расширений.
  3. Обновление платформы: Если проблема вызвана платформенной ошибкой ранних версий, рекомендуется обновить платформу 1С:Предприятие до актуального релиза, где ошибки работы moxel.dll при заимствовании макетов были устранены.
← На главную