При разработке в современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), добавление новой печатной формы в документ — задача стандартная, но имеющая множество нюансов. Часто разработчики сталкиваются с ситуацией, когда кнопка на форме появляется, код вроде бы написан правильно, но при попытке вывода формы система выдает ошибку: «Не удается получить полный путь к макету». Особенно часто это проявляется в отраслевых решениях, таких как «Управление автотранспортом» (УАТ), при работе с документами типа уатДоверенность.
В этой статье мы подробно разберем, почему механизм печати «теряет» макет, проанализируем внутреннее устройство подсистемы печати и выясним, какие шаги необходимо предпринять для успешного вывода печатной формы.
Для начала проанализируем ситуацию: просто создать объект «Команда» в дереве метаданных документа недостаточно. В БСП печать работает через строго регламентированную цепочку вызовов. Если на каком-то этапе цепочка обрывается, система не может сопоставить идентификатор команды с физическим макетом в метаданных.
Рассмотрим основные этапы, которые проходит система при нажатии кнопки печати:
уатДоверенность).ДобавитьКомандыПечати, чтобы понять, какие формы вообще доступны.Печать, где формируется КоллекцияПечатныхФорм.Выясним причину ошибки: фраза «Не находит макет» означает, что в процедуре формирования коллекции данных путь к макету либо не был сформирован, либо был указан неверно.
Первое, что мы должны проверить — это корректность регистрации команды. Откроем модуль менеджера нашего документа и найдем процедуру ДобавитьКомандыПечати(КомандыПечати). В этой процедуре мы должны добавить строку, описывающую нашу новую форму.
Посмотрим на пример правильной регистрации:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "МояНоваяПечатнаяФорма";
КомандаПечати.Представление = НСтр("ru = 'Моя новая форма'");
КомандаПечати.ПроверкаПроведенности = Истина;
КомандаПечати.Порядок = 10;
КонецПроцедуры
Важный момент: Идентификатор команды должен в точности совпадать с тем, что вы будете проверять в процедуре Печать. Если здесь будет опечатка, БСП не поймет, какую именно форму нужно готовить.
Когда пользователь выбирает пункт меню, управление передается в процедуру Печать модуля менеджера. Рассмотрим подробнее, как должна выглядеть обработка нашей команды. Главная задача здесь — правильно заполнить таблицу КоллекцияПечатныхФорм.
Ошибка «Не удается получить полный путь к макету» часто возникает, если в процедуре Печать вы не добавили строку для вашего идентификатора или не заполнили поле ИмяМакета. Проанализируем типичный код:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "МояНоваяПечатнаяФорма") Тогда
// Важно: Имя макета должно соответствовать имени объекта Макет в дереве метаданных
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"МояНоваяПечатнаяФорма",
НСтр("ru = 'Моя новая форма'"),
СформироватьМоюФорму(МассивОбъектов, ОбъектыПечати)
);
КонецЕсли;
КонецПроцедуры
В этом блоке функция СформироватьМоюФорму должна возвращать ТабличныйДокумент. Если вы пытаетесь использовать стандартные функции БСП для получения макета внутри этой функции, убедитесь, что путь к макету указан полностью.
Функция УправлениеПечатью.МакетПечатнойФормы() ожидает строку определенного формата. Если вы передаете туда просто имя, например "Макет", система может его не найти. Выясним, как правильно указывать путь.
Правильный формат пути для документа:
Документ.уатДоверенность.Макет.ИмяВашегоМакета
Если макет является общим, путь будет другим:
ОбщийМакет.ИмяВашегоОбщегоМакета
Разберем по шагам, как проверить, что именно передается в функцию получения макета. Рекомендуется установить точку останова в общем модуле УправлениеПечатью в функции ПодготовитьКоллекциюПечатныхФорм. Посмотрите, какие значения принимает переменная, отвечающая за путь к макету. Если она пустая или содержит некорректный префикс, ошибка «Не удается получить полный путь» станет неизбежной.
Поскольку в вопросе фигурирует документ уатДоверенность, нужно учитывать специфику решений от компании «Рарус». В таких конфигурациях часто используются собственные подсистемы печати, работающие «поверх» БСП.
Проанализируем ситуацию: в УАТ может существовать специализированный модуль (например, уатПечать или подобные), который перехватывает управление. Если ваша команда добавлена стандартными средствами, но не прописана в специфических функциях подготовки данных УАТ, макет может игнорироваться. Проверьте, нет ли в модуле менеджера вызовов функций из общих модулей, начинающихся на уат....
Если код написан идеально, а ошибка сохраняется, рассмотрим технические причины вне программного кода:
F7.Печать помечена словом Экспорт. В противном случае менеджер печати просто не сможет её вызвать из другого контекста.Для устранения ошибки выполните следующие действия:
ДобавитьКомандыПечати идентификатор совпадает с фактическим использованием.Печать вызывается заполнение коллекции именно для вашей команды.Соблюдение этих правил позволит вам избежать большинства проблем с интеграцией новых печатных форм в типовые и отраслевые решения на платформе 1С:Предприятие 8.3.