Как вывести сведения о платежно-расчетном документе в ВПФ УПД для 1С:Управление торговлей 10.3

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

При разработке внешних печатных форм (ВПФ) для конфигурации «Управление торговлей 10.3», особенно для таких сложных документов, как Универсальный передаточный документ (УПД), разработчики часто сталкиваются с тем, что стандартные механизмы получения данных из общих модулей не отрабатывают в контексте внешней обработки так же, как в типовом коде. Одной из наиболее распространенных проблем является отсутствие данных в строке «К платежно-расчетному документу» (строка 5 счета-фактуры или строка 7 в контексте УПД). Рассмотрим подробно, почему это происходит и как правильно подготовить данные для печати.

Анализ проблемы: почему данные не выводятся автоматически

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


Если ДанныеДляПечати.Свойство("ТаблицаДатОплат") Тогда
    Для каждого ПараметрыДокументаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
        // Проверка заполнения и формирование строки...
        СтрокаПоДокументу = СтрокаПоДокументу
            + ?(ПустаяСтрока(СтрокаПоДокументу), ?(ЭтоПечатьУПД, "", "К платежно-расчетному документу № "),", ")
            + ПараметрыДокументаОплаты.НомерПлатежноРасчетногоДокумента 
            + " от " + Формат(ПараметрыДокументаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy") + " г.";
    КонецЦикла; 
КонецЕсли;

Проблема заключается в том, что когда мы вызываем печать из внешней обработки, свойство ТаблицаДатОплат в структуре ДанныеДляПечати часто оказывается не заполненным или вовсе отсутствует. Это происходит потому, что во внешних печатных формах мы часто передаем ссылку на основной документ (например, РеализацияТоваровУслуг), в то время как данные о платежах хранятся в подчиненном документе СчетФактураВыданный. Система не может автоматически «догадаться», откуда взять эти сведения, если мы не подготовили их заранее.

Шаг 1: Настройка удобной отладки ВПФ

Прежде чем приступать к исправлению кода, разберем, как эффективно отлаживать внешнюю печатную форму в УТ 10.3, так как обычная установка точек останова в модуле объекта обработки при запуске из интерфейса «Дополнительные внешние печатные формы» часто не срабатывает. Выполним следующие действия:

  1. Откроем нашу внешнюю обработку в конфигураторе.
  2. Создадим у обработки основную форму.
  3. Добавим на форму реквизит СсылкаНаДокумент с типом ДокументСсылка.РеализацияТоваровУслуг (или другой документ-основание).
  4. Добавим кнопку «Печать», в обработчике которой напишем вызов функции печати.

Пример кода для кнопки на форме отладки:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Устанавливаем ссылку, как это делает механизм ВПФ
    ЭтотОбъект.СсылкаНаОбъект = СсылкаНаДокумент;
    
    // Вызываем экспортную функцию Печать
    ТабДок = Печать();
    
    // Показываем результат
    Если ТабДок <> Неопределено Тогда
        ТабДок.Показать("Отладка УПД");
    КонецЕсли;
КонецПроцедуры

Теперь мы можем просто открывать обработку через меню «Файл — Открыть», выбирать документ и нажимать кнопку. Точки останова в модуле объекта будут работать стабильно.

Шаг 2: Получение данных из связанного счета-фактуры

Выясним, как получить доступ к таблице оплат. В УТ 10.3 сведения о платежах содержатся в табличной части ДокументыОплаты документа СчетФактураВыданный. Если наша ВПФ привязана к реализации, нам сначала нужно найти этот счет-фактуру. Проанализируем ситуацию и напишем запрос:


// СсылкаНаОбъект - это наша РеализацияТоваровУслуг
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	СчетФактураВыданный.Ссылка КАК СФ
    |ИЗ
    |	Документ.СчетФактураВыданный КАК СчетФактураВыданный
    |ГДЕ
    |	СчетФактураВыданный.ДокументОснование = &ДокументОснование
    |	И СчетФактураВыданный.Проведен
    |	И НЕ СчетФактураВыданный.ПометкаУдаления";

Запрос.УстановитьПараметр("ДокументОснование", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    СчетФактураСсылка = Выборка.СФ;
Иначе
    СчетФактураСсылка = Неопределено;
КонецЕсли;

Шаг 3: Формирование таблицы дат оплат

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


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

Шаг 4: Проверка статуса УПД

Важным моментом при печати УПД является его «Статус». Если в ДанныеДляПечати установлен СтатусУПД = 2, то согласно правилам заполнения, в строке платежных документов должны стоять прочерки, даже если оплаты были. Проанализируем этот участок кода в общем модуле:

Важно: Если вы хотите, чтобы данные выводились, убедитесь, что в вашей структуре СтатусУПД равен 1 (Счет-фактура и передаточный документ). Если же вы печатаете только передаточный документ (статус 2), прочерки в строке 7 — это корректное поведение по закону.


Если ЭтоПечатьУПД И ДанныеДляПечати.СтатусУПД = 2 Тогда
    // В УПД в статусе 2 ставятся прочерки в показатели для счета-фактуры
    СтрокаПоДокументу = "--";
КонецЕсли;

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

Рассмотрим краткий чеклист для исправления проблемы в вашей ВПФ:

Следуя этим шагам, вы сможете корректно настроить вывод платежно-расчетных документов в любой внешней печатной форме для 1С:Управление торговлей 10.3, обеспечив соответствие печатной формы требованиям законодательства.

← На главную