Как настроить внешнюю печатную форму УПД в УТ 11.4 для печати без счета-фактуры?

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

При разработке или адаптации внешних печатных форм (ВПФ) в среде 1С:Управление торговлей 11.4 программисты часто сталкиваются с ситуацией, когда стандартный код, скопированный из типовой конфигурации, отказывается работать для специфических операций. Одной из самых распространенных проблем является формирование Универсального передаточного документа (УПД) для документов, где не предусмотрено создание счета-фактуры (например, при передаче товаров на комиссию или для организаций на упрощенной системе налогообложения). В таких случаях при попытке печати возникает критическая ошибка: Метод объекта не обнаружен (ПолучитьДанныеДляПечатнойФормыУПД).

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

Разбор причины возникновения ошибки

Проанализируем ситуацию: когда мы пытаемся напечатать УПД из документа Реализация товаров и услуг, система обращается к программному коду, который должен собрать данные для заполнения макета. В большинстве типовых или самописных внешних форм логика строится на вызове метода через менеджер объекта. Рассмотрим типичный фрагмент кода, вызывающий сбой:


Для Каждого СтруктураОбъектов Из СтруктураТиповНаПечать Цикл
    МенеджерОбъекта = Документы[СтруктураОбъектов.Ключ];
    // Ошибка происходит в следующей строке:
    ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыУПД(ПараметрыПечати, СтруктураОбъектов.Значение);
КонецЦикла;

Выясним причину ошибки. В УТ 11.4 метод ПолучитьДанныеДляПечатнойФормыУПД жестко прописан в модуле менеджера документа СчетФактураВыданный. Если в цепочке документов есть счет-фактура, переменная МенеджерОбъекта ссылается на него, и код выполняется успешно. Однако, если мы печатаем УПД напрямую из документа реализации (например, при статусе УПД "2" — только передаточный документ), МенеджерОбъекта становится менеджером документа РеализацияТоваровУслуг. А в модуле менеджера реализации этот метод попросту отсутствует.

Решение проблемы: перенаправление вызова метода

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

Вместо использования МенеджерОбъекта, мы должны напрямую обратиться к общему модулю РеализацияТоваровУслугЛокализация. Это позволит системе корректно собрать данные реализации, игнорируя отсутствие связанного счета-фактуры. Исправленный код в вашей внешней обработке должен выглядеть следующим образом:


// Вместо обращения к менеджеру документа используем модуль локализации
ДанныеДляПечати = РеализацияТоваровУслугЛокализация.ПолучитьДанныеДляПечатнойФормыУПД(ПараметрыПечати, СтруктураОбъектов.Значение);

Такой подход гарантирует, что процедура будет найдена, так как она определена в глобальном контексте общего модуля, предназначенного именно для обработки печатных форм первичных документов.

Настройка статуса УПД (Статус 1 и Статус 2)

Важно понимать разницу между типами УПД, которую ожидает система. Рассмотрим подробнее структуру ПараметрыПечати. При формировании УПД без счета-фактуры документ должен иметь Статус 2.

  1. Статус 1: Счет-фактура и передаточный документ (требуется наличие проведенного документа Счет-фактура выданный).
  2. Статус 2: Только передаточный документ (используется для операций, не облагаемых НДС, или при передаче на комиссию).

Если вы хотите, чтобы ваша внешняя форма принудительно работала в режиме передаточного документа, проанализируем заполнение параметров в коде Процедура Печать модуля объекта внешней обработки. Рекомендуется явно указать статус, если он не определен автоматически:


// В структуре ПараметрыПечати устанавливаем признак Статуса 2
Если Не ПараметрыПечати.Свойство("СтатусУПД") Тогда
    ПараметрыПечати.Вставить("СтатусУПД", 2);
КонецЕсли;

При установке этого параметра типовые механизмы перестанут искать данные счета-фактуры и не будут выводить в печатную форму номер и дату СФ, что критично для корректного заполнения формы при передаче на комиссию.

Особенности для документа "Передача на комиссию"

Посмотрим на ситуацию со стороны бизнес-процесса. Передача товаров комиссионеру не является реализацией (переходом права собственности), поэтому счет-фактура здесь не выписывается по определению. Если ваша задача — изменить макет именно для таких случаев, убедитесь, что в процедуре ЗаполнитьТабличныйДокументУПД (внутри вашей ВПФ) нет обращений к полям, которые заполняются только из счета-фактуры.

Проанализируем структуру ДанныеДляПечати. Когда мы вызываем метод из модуля локализации для "Передачи на комиссию", структура будет содержать данные только из табличной части реализации. Если ваш макет содержит пользовательские поля, добавленные вами вручную, обязательно добавьте проверку на их наличие в структуре, чтобы избежать ошибок типа "Поле объекта не обнаружено":


// Пример безопасного обращения к данным в макете
Если ДанныеДляПечати.Свойство("МоеПользовательскоеПоле") Тогда
    ОбластьМакета.Параметры.Поле = ДанныеДляПечати.МоеПользовательскоеПоле;
КонецЕсли;

Итоги и рекомендации

Подведем итог проделанной работы. Для успешной настройки внешней печатной формы УПД без счета-фактуры в УТ 11.4 необходимо выполнить три основных шага:

  1. Заменить метод вызова: Перейти от МенеджерОбъекта.ПолучитьДанные... к РеализацияТоваровУслугЛокализация.ПолучитьДанныеДляПечатнойФормыУПД.
  2. Проверить параметры: Убедиться, что в ПараметрыПечати корректно передается СтатусУПД = 2.
  3. Оптимизировать макет: Проверить, что алгоритм заполнения макета во внешней форме не требует обязательного наличия данных СФ.

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

← На главную