Почему не работают внешние печатные формы после обновления ЗУП до версии 3.1.18?

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

При обновлении конфигурации 1С:ЗУП до версии 3.1.18 и выше многие разработчики столкнулись с внезапным прекращением работы внешних печатных форм. В процессе печати система выдает ошибку, ссылаясь на модуль УправлениеПечатьюМультиязычность и функцию ЯзыкиМакета. Давайте разберемся, почему это происходит и как вернуть работоспособность вашим обработкам.

Анализ причин ошибки

Выясним причину сбоя. В новых версиях Библиотеки стандартных подсистем (БСП) разработчики ужесточили правила проверки путей к макетам. Когда вы вызываете процедуру ВывестиТабличныйДокументВКоллекцию, система теперь более требовательна к параметрам. Если в аргументе ПолныйПутьКМакету передается путь, похожий на путь к объекту метаданных (например, Справочник.Сотрудники), БСП пытается найти этот макет в основной конфигурации. Так как внешняя печатная форма является отдельным файлом, а не частью конфигурации, система не находит нужный макет в метаданных и вызывает исключение.

Решение проблемы: очистка параметров

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

Рассмотрим пример кода, который часто встречается в старых реализациях:


// Некорректный вызов в новой версии БСП
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм,
    "ПФ_MXL_Макет",
    "Синоним макета",
    ТабличныйДокумент,
    ,
    "Справочник.Сотрудники", // Избыточный параметр, вызывающий ошибку
    "ПФ_MXL_Макет"
);

Чтобы исправить ситуацию, очистим аргумент ПолныйПутьКМакету. Это позволит функции БСП корректно обработать макет, находящийся внутри самой внешней обработки.

Пошаговое исправление кода

  1. Откройте код вашей внешней печатной формы в режиме конфигуратора.
  2. Найдите процедуру Печать, которая экспортируется для вызова из БСП.
  3. Перейдите к вызову процедуры УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.
  4. Удалите или установите в значение Неопределено аргументы, которые указывают на ПолныйПутьКМакету, если они не требуются для работы текущей логики.

Пример исправленного корректного вызова:


// Исправленный вызов
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм,
    "ПФ_MXL_Макет",
    "Синоним макета",
    ТабличныйДокумент
);

Почему это происходит?

Проанализируем работу системы изнутри. В процедуре ЯзыкиМакета происходит проверка количества точек в пути макета:


ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина);
Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда
    ВызватьИсключение ТекстОшибки;
КонецЕсли;

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

Рекомендации по разработке

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

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

← На главную