При обновлении типовых конфигураций на платформе 1С:Предприятие 8.3, использующих Библиотеку стандартных подсистем (БСП), разработчики часто сталкиваются с тем, что ранее работавшие внешние печатные формы перестают функционировать. Одной из самых распространенных ошибок является сообщение: {ОбщийМодуль.УправлениеПечатьюМультиязычность.Модуль(52)}: Макет \"ПФ_MXL_Т1а\" не существует. Операция прервана.. Давайте разберемся, почему это происходит и как исправить ситуацию, чтобы вернуть работоспособность вашим формам.
Основная причина возникновения данной ошибки кроется в эволюции БСП. В новых версиях библиотеки (например, начиная с версии 3.1.4.252) разработчики 1С вносят изменения в сигнатуры (список параметров) стандартных функций печати. В частности, это касается метода УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.
Когда вы обновляете конфигурацию, вызываемая процедура в вашем коде остается «старой» (с прежним количеством аргументов), а вызываемый модуль системы уже ожидает дополнительные параметры. В результате происходит «смещение» аргументов: система пытается считать имя макета из параметра, в который передалось что-то иное, или не находит нужный путь из-за неполной сигнатуры вызова. Проще говоря, процедура просто «теряет» макет, который физически присутствует в вашей обработке.
Чтобы устранить ошибку, нам необходимо привести вызов функции печати в соответствие с требованиями актуальной версии БСП. Выполним следующие действия:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.Суть исправления заключается в добавлении недостающего параметра в вызов процедуры. В большинстве случаев это параметр ПолныйПутьКМакету, который теперь стал обязательным для идентификации объектов во внешней обработке. Если логика вашей формы не предполагает использования каких-то специфических путей, достаточно передать Неопределено или пустую строку в качестве этого аргумента.
Посмотрим на пример того, как это выглядит в коде. Представим, что до обновления вызов выглядел примерно так:
// Старый вариант вызова (вызывает ошибку)
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ИмяМакета,
ТабличныйДокумент,
ПараметрыВывода);
Нам необходимо добавить одну «запятую» (дополнительный аргумент) в вызов процедуры, чтобы сдвинуть параметры на свои места и удовлетворить требованиям сигнатуры. Исправленный код будет выглядеть так:
// Новый вариант вызова с добавленным параметром
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ИмяМакета,
ТабличныйДокумент,
ПараметрыВывода,
""); // Добавили пустую строку для параметра ПолныйПутьКМакету
После внесения правок в код модуля обязательно выполните следующие действия:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию. Запустите печать из 1С. В режиме отладки проверьте значения всех аргументов перед входом в метод. Если вы видите, что один из аргументов (например, ИмяМакета) пришел пустым или содержит неверное значение, значит, смещение еще не устранено.Дополнительные отчеты и обработки. Иногда старая версия обработки может оставаться в кэше.Важно помнить, что если после добавления «запятой» ошибка сохраняется, стоит проверить экспортную процедуру в модуле объекта обработки, которая заполняет структуру ПараметрыКоманды. В современных версиях ЗУП 3.1 критически важно, чтобы структура ПараметрыВывода была инициализирована корректно, иначе система может не найти макет даже при верной сигнатуре вызова.
Таким образом, для большинства типовых внешних печатных форм достаточно простого обновления сигнатуры вызова. Если же ваша печатная форма использует сложную логику (например, УправлениеПечатьюМультиязычность), убедитесь, что все общие модули, к которым вы обращаетесь, также обновлены в вашей конфигурации, так как иногда проблема лежит глубже — в несовместимости методов самих общих модулей с основной логикой БСП.