В процессе работы с конфигурацией 1С:Управление производственным предприятием (УПП) редакции 1.3 часто возникает необходимость изменить состав подписантов в Универсальном передаточном документе (УПД). Задача усложняется тем, что логика формирования УПД жестко зашита в общих модулях, а требования законодательства регулярно меняются — например, недавно вступил в силу УПД по постановлению №1096 с 01.10.2024 для УПП. Рассмотрим подробно, какими способами можно изменить данные в форме: от стандартных настроек системы до программной разработки внешней печатной формы.
Прежде чем приступать к программированию, проанализируем возможности системы "из коробки". В 1С:УПП 1.3 за подписи в документах отвечают специализированные регистры. Если нам нужно сменить руководителя или главного бухгалтера на постоянной основе или на определенный период, выполним следующие шаги:
Руководитель и ГлавныйБухгалтер.Во многих редакциях УПП в справочнике Организации на вкладке "Ответственные лица" можно указать не только сотрудников, но и документы-основания (приказы или доверенности). Однако стоит учитывать, что стандартный механизм может не выводить текст приказа именно в те поля УПД, которые требуются вашему руководству. В таком случае переходим к техническим методам.
Разберем наиболее надежный способ — создание внешней печатной формы. Чтобы не изобретать велосипед, за основу можно взять готовую внешнюю печатную форму УПД для УПП 1.3 по постановлению №1096. Проблема автора темы заключалась в том, что функция ПечатьУниверсальногоПередаточногоДокумента находится в общем модуле УчетНДС. Чтобы внести изменения без редактирования конфигурации, нам необходимо "вынести" эту логику во внешнюю обработку.
Рассмотрим алгоритм действий:
УПД (его можно скопировать из общих макетов или использовать УПД для УПП 1.3 с поддержкой форматов 534 и 1096).УчетНДС в модуль объекта нашей ВПФ.РаботаСДиалогами.ИмяФункции() или ОбщегоНазначения.ИмяФункции() должны быть заменены на полные обращения (если они доступны) или их локальные копии.В коде найдем фрагмент, отвечающий за заполнение параметров руководителя и бухгалтера. Как правило, это выглядит так:
ПараметрыМакета.ФИОРуководителя = ОтветственныеЛица.РуководительФИО;
ПараметрыМакета.ФИОГлавногоБухгалтера = ОтветственныеЛица.ГлавныйБухгалтерФИО;
Заменим этот код на установку своих значений, включая номер приказа:
ПараметрыМакета.ФИОРуководителя = "Иванов И.И. (Приказ №123 от 01.01.2023)";
ПараметрыМакета.ФИОГлавногоБухгалтера = "Петрова А.А. (Приказ №124 от 01.01.2023)";
Если мы не хотим копировать огромные пласты кода из общего модуля, воспользуемся методом перехвата уже готового документа. Мы вызываем типовую печать, получаем ТабличныйДокумент, а затем программно находим и заменяем нужные нам ячейки. Этот метод также удобен, если вам нужно внедрить дополнительные элементы, такие как УПД с QR кодом для оплаты через банковские приложения.
Посмотрим на пример реализации в модуле ВПФ:
// Получаем сформированный типовой документ
ТабДокумент = УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(МассивОбъектов);
// Ищем область с подписями. В УПД это обычно секция "Подвал"
// Если мы знаем точный текст, который выводится сейчас, можем использовать НайтиТекст
Область = ТабДокумент.НайтиТекст("Старая Фамилия Б.Б.");
Если Область <> Неопределено Тогда
Область.Текст = "Новая Фамилия Н.Н. (Основание: Приказ №5)";
КонецЕсли;
Важный нюанс: Как выяснилось в обсуждении на форуме (сообщения 10-22), типичная ошибка программиста — пытаться менять параметры в макете Макет.ПолучитьОбласть("Подвал") уже после того, как основная часть документа была выведена. Если вы используете метод Вывести(), то параметры нужно заполнять до вызова этого метода. Если же вы работаете с уже готовым ТабДокумент, то менять нужно свойство Текст конкретной области или ячейки, а не Параметры.
Проанализируем ситуацию, когда нам нужно заменить данные в конкретных координатах. В УПД за подписи отвечают строки 10, 13 и 18. Чтобы корректно изменить их, можно обратиться к областям по имени (если они сохранились в итоговом документе) или по координатам. При этом важно учитывать версию постановления, по которой строится форма, будь то редакция №534 или актуальный Счет-фактура / УПД по постановлению №1096.
Пример кода для замены через прямое обращение к области:
// Пример замены руководителя и бухгалтера по именам параметров в сформированном доке
// (Работает, если области не были очищены при выводе)
Для Каждого ТекущаяОбласть Из ТабДокумент.Области Цикл
Если Найти(ТекущаяОбласть.Текст, "Руководитель") > 0 Тогда
ТекущаяОбласть.Текст = "Новый Руководитель: Скипина К.А.";
КонецЕсли;
КонецЦикла;
Выясним причину, по которой обычное расширение конфигурации может не подойти. УПП 1.3 базируется на обычных формах. Хотя современные версии платформы 8.3 позволяют использовать расширения для модулей, работа с макетами и специфическими функциями "обычного" приложения через расширения часто приводит к ошибкам совместимости или требует перевода базы на режим совместимости не ниже 8.3.10. Поэтому вариант с Внешней печатной формой (ВПФ) остается наиболее стабильным и безопасным для целостности системы.
Подведем итог. Для качественного решения задачи рекомендуется:
НайтиТекст для быстрой постобработки, если структура макета типовая и не меняется.Соблюдение этих рекомендаций позволит вам гибко управлять печатными формами без изменения конфигурации и обеспечит корректность выводимых данных в соответствии с требованиями вашего руководства.