Разработка и отладка внешних печатных форм (ВПФ) в среде 1С на управляемых формах — задача, с которой регулярно сталкивается каждый программист и администратор систем 1С. Однако очень часто возникает крайне неприятная ситуация: вы внесли изменения в макет или код обработки, сохранили файл, протестировали его через меню Файл -> Открыть — все работает идеально. Но стоит вам подключить эту обработку в справочник Дополнительные отчеты и обработки и попытаться распечатать ее из документа (например, «Реализация товаров и услуг»), как программа упорно выводит старый, неизмененный вариант.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы работы платформы 1С и Библиотеки стандартных подсистем (БСП), а также предоставим пошаговые инструкции по устранению данной ошибки.
Это самая распространенная ошибка разработчиков, особенно начинающих. При создании внешней печатной формы за основу обычно берется код из модуля менеджера типового документа. Давайте проанализируем, как в типовом решении получается макет печатной формы.
В модуле менеджера конфигурации код получения макета выглядит следующим образом:
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.РеализацияТоваровУслуг.ПФ_MXL_УниверсальныйПередаточныйДокумент");
Если вы скопировали этот код во внешнюю печатную форму без изменений, то при ее выполнении система будет обращаться не к макету, который лежит у вас внутри файла .epf, а к стандартному макету, встроенному в саму конфигурацию 1С. При этом через Файл -> Открыть форма может запускаться корректно, если в коде прописана разная логика для интерактивной работы и для работы в режиме авторегистрации БСП.
Решение проблемы:
Необходимо отредактировать код модуля объекта вашей внешней печатной формы. Замените вызов общего модуля на получение макета непосредственно из самой внешней обработки. Вместо обращения к метаданным конфигурации используйте метод ПолучитьМакет:
// НЕПРАВИЛЬНО:
// Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.РеализацияТоваровУслуг.ПФ_MXL_УниверсальныйПередаточныйДокумент");
// ПРАВИЛЬНО:
Макет = ПолучитьМакет("ПФ_MXL_УниверсальныйПередаточныйДокумент");
Убедитесь, что имя макета в вашей внешней обработке строго совпадает со строковым параметром, который вы передаете в метод ПолучитьМакет. Чтобы избежать конфликтов имен, рекомендуется переименовать макет в вашей ВПФ (например, назвать его ВПФ_УПД_Измененный) и вызывать его по новому имени. Для правильного переноса типового кода и структуры объектов можно использовать руководство по созданию внешних печатных форм на основе типовых алгоритмов.
Платформа «1С:Предприятие» и БСП активно используют механизмы кэширования для ускорения работы системы и снижения нагрузки на сеть. Когда пользователь нажимает кнопку «Печать» в документе, система выполняет следующие действия:
Иногда при обновлении обработки в справочнике старый временный файл на локальном компьютере пользователя не перезаписывается новым. В результате программа продолжает обращаться к старой версии кода и макета.
Решение проблемы:
Для принудительного обновления кэша выполните следующие шаги:
1Cv8, расположенные по путям:
%localappdata%\1C\%appdata%\1C\СведенияОВнешнейОбработке(). Найдите строку, отвечающую за версию, и увеличьте ее значение (например, с "1.0" на "1.1").
ПараметрыРегистрации.Версия = "1.1"; // Измените версию для сброса кэша БСП
При загрузке новой версии БСП поймет, что файл обновился, и принудительно перезапишет временные файлы у всех пользователей.
Часто разработчики забывают важный нюанс архитектуры 1С: когда вы регистрируете внешнюю печатную форму в справочнике, платформа копирует её файл внутрь базы данных (в СУБД).
Если вы открыли локальный файл .epf со своего рабочего стола через Файл -> Открыть, внесли изменения в конфигураторе и сохранили их — изменения применятся только к локальному файлу на вашем жестком диске. База данных 1С ничего об этих изменениях не знает и при печати из документа продолжает использовать ту версию, которая была загружена в справочник ранее.
Решение проблемы:
После каждого сохранения изменений в конфигураторе обязательно выполняйте обновление файла в режиме Предприятия:
.epf с диска.В современных конфигурациях 1С существует встроенный механизм пользовательского редактирования макетов без использования конфигуратора. Он находится в разделе Администрирование -> Макеты печатных форм.
Если ранее кто-то из пользователей или администраторов отредактировал стандартный макет документа (например, макет УПД) через этот интерфейс, система может принудительно подменять любые макеты (в том числе вызываемые из внешних печатных форм) на этот сохраненный пользовательский макет.
Решение проблемы:
В БП 3.0 и других современных конфигурациях реализована функция «Печать комплектов» и индивидуальная настройка печати для каждого пользователя, параметры которых сохраняются в системном хранилище настроек.
Если пользователь ранее настраивал печать этого документа под себя, система могла запомнить старые опции вывода формы. Для устранения этого фактора выполните сброс настроек печати.
Решение проблемы:
Применяя данные методы последовательно, мы гарантированно сможем определить, на каком этапе происходит сбой, и заставим систему выводить актуальную версию вашей внешней печатной формы. Чтобы избежать проблем с дублированием типовых макетов и кода, для доработки документов можно использовать инструмент постобработки печатных форм БСП с помощью расширения и внешней обработки.