Как реализовать печать УПД в устаревших версиях 1С:Управление торговлей 10.3?

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

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

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

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

Попытка просто подключить ВПФ УПД от релиза 10.3.21 или выше к релизу 10.3.13 неизбежно приведет к ошибкам времени выполнения. Разберем основные причины:

  1. Отсутствие процедур в общих модулях: В версии 10.3.13 нет многих функций в модулях УчетНДС, РаботаСДиалогами, ОбщегоНазначения. Современная форма УПД обращается к ним для расчета налогов, форматирования адресов и получения сведений о подписантах.
  2. Изменение законодательства: Форма УПД базируется на счете-фактуре (Постановление №1137). С момента появления УПД законодательство менялось в 2017, 2021 и 2024 годах (добавлялись колонки ТН ВЭД, прослеживаемость РНПТ, идентификаторы госконтракта). Форма от релиза 10.3.21 будет юридически неактуальна.
  3. Различия в структуре данных: Механизмы хранения контактной информации и работы с ГТД в старых релизах могут существенно отличаться от тех, что используются в современных запросах печатных форм.

Метод 1: Перенос необходимых процедур в модуль ВПФ («Автономная форма»)

Наиболее жизнеспособный вариант без обновления всей конфигурации — это создание автономной внешней печатной формы. Суть метода заключается в том, чтобы скопировать весь недостающий код из модулей свежего релиза (например, 10.3.70+) непосредственно в модуль обработки ВПФ.

Проанализируем шаги реализации этого метода:

  1. Поиск источника: Возьмем актуальную внешнюю печатную форму УПД для УТ 10.3 (обычные формы).
  2. Локализация вызовов: При запуске печати система начнет выдавать ошибки типа «Процедура или функция с указанным именем не определена». Нам необходимо найти эти процедуры в актуальном релизе УТ или УПП.
  3. Инкапсуляция кода: Скопируем найденные процедуры в модуль объекта внешней печатной формы. Например, если форма вызывает УчетНДС.СформироватьЗапросПоТабличнойЧасти(), мы создаем аналогичную локальную функцию в ВПФ.

Пример структуры модуля автономной ВПФ:


// В модуле обработки создаем локальные копии функций общих модулей
Функция Локальный_СформироватьЗапросПоШапке(ПараметрыПечати)
    // Копируем сюда текст запроса из актуального релиза
    // Адаптируем имена полей под версию 10.3.13
    ТекстЗапроса = "ВЫБРАТЬ ... ИЗ Документ.РеализацияТоваровУслуг КАК Реализация";
    // ...
КонецФункции

Функция Печать() Экспорт
    // Основная логика печати, вызывающая локальные функции вместо общих модулей
    ДанныеДляПечати = Локальный_СформироватьЗапросПоШапке(Параметры);
    // ...
КонецФункции

Метод 2: Использование универсальной независимой формы

Существуют так называемые «независимые» или «универсальные» печатные формы УПД, созданные сообществом разработчиков специально для старых платформ 8.2 и ранних релизов 8.3. Рассмотрим их особенности:

Такие формы не используют вызовы к ОбщегоНазначения.СкопироватьРекурсивно() или сложным механизмам формирования адресов через КЛАДР/ФИАС, которые в версии 10.3.13 работают иначе. Вместо этого они содержат упрощенные алгоритмы сбора данных.

Важный момент по прослеживаемости и маркировке: Если ваша организация работает с маркированным товаром («Честный ЗНАК») или прослеживаемыми товарами (РНПТ), обычная ВПФ не поможет. В базе 10.3.13 просто нет полей для хранения этих данных. В этом случае придется:

Технические нюансы подключения в УТ 10.3.13

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

  1. Откройте меню Сервис — Дополнительные отчеты и обработки — Дополнительные внешние печатные формы.
  2. Создайте новый элемент и выберите файл вашей обработки .epf.
  3. Убедитесь, что в модуле обработки функция Печать() объявлена с ключевым словом Экспорт. В версии 10.3.13 она обычно не принимает параметров, либо принимает только массив объектов.

Пример заголовка функции для старой УТ:


Функция Печать() Экспорт
    // Для версии 10.3.13 часто используется доступ через СсылкаНаОбъект
    ДокументСсылка = СсылкаНаОбъект;
    
    ТабДокумент = Новый ТабличныйДокумент;
    // Логика заполнения макета
    // ...
    Возврат ТабДокумент;
КонецФункции

Рекомендации по заполнению данных

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


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

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

← На главную