При работе с антикварными версиями конфигураций, такими как 1С:Управление торговлей 10.3.13.2, программисты часто сталкиваются с проблемой отсутствия современных форм первичных документов. Одной из самых востребованных форм является Универсальный передаточный документ (УПД). Основная сложность заключается в том, что в старых релизах отсутствуют механизмы и общие модули, на которых базируется логика заполнения УПД в современных версиях программ 1С.
В этой статье мы разберем, как адаптировать внешнюю печатную форму (ВПФ) УПД для работы на «древнем» ядре системы, проанализируем технические препятствия и рассмотрим пути их решения.
Попытка просто подключить ВПФ УПД от релиза 10.3.21 или выше к релизу 10.3.13 неизбежно приведет к ошибкам времени выполнения. Разберем основные причины:
УчетНДС, РаботаСДиалогами, ОбщегоНазначения. Современная форма УПД обращается к ним для расчета налогов, форматирования адресов и получения сведений о подписантах.Наиболее жизнеспособный вариант без обновления всей конфигурации — это создание автономной внешней печатной формы. Суть метода заключается в том, чтобы скопировать весь недостающий код из модулей свежего релиза (например, 10.3.70+) непосредственно в модуль обработки ВПФ.
Проанализируем шаги реализации этого метода:
УчетНДС.СформироватьЗапросПоТабличнойЧасти(), мы создаем аналогичную локальную функцию в ВПФ.Пример структуры модуля автономной ВПФ:
// В модуле обработки создаем локальные копии функций общих модулей
Функция Локальный_СформироватьЗапросПоШапке(ПараметрыПечати)
// Копируем сюда текст запроса из актуального релиза
// Адаптируем имена полей под версию 10.3.13
ТекстЗапроса = "ВЫБРАТЬ ... ИЗ Документ.РеализацияТоваровУслуг КАК Реализация";
// ...
КонецФункции
Функция Печать() Экспорт
// Основная логика печати, вызывающая локальные функции вместо общих модулей
ДанныеДляПечати = Локальный_СформироватьЗапросПоШапке(Параметры);
// ...
КонецФункции
Существуют так называемые «независимые» или «универсальные» печатные формы УПД, созданные сообществом разработчиков специально для старых платформ 8.2 и ранних релизов 8.3. Рассмотрим их особенности:
Такие формы не используют вызовы к ОбщегоНазначения.СкопироватьРекурсивно() или сложным механизмам формирования адресов через КЛАДР/ФИАС, которые в версии 10.3.13 работают иначе. Вместо этого они содержат упрощенные алгоритмы сбора данных.
Важный момент по прослеживаемости и маркировке: Если ваша организация работает с маркированным товаром («Честный ЗНАК») или прослеживаемыми товарами (РНПТ), обычная ВПФ не поможет. В базе 10.3.13 просто нет полей для хранения этих данных. В этом случае придется:
Посмотрим, как правильно зарегистрировать форму в системе. В старых релизах это делается через справочник ВнешниеОбработки.
.epf.Печать() объявлена с ключевым словом Экспорт. В версии 10.3.13 она обычно не принимает параметров, либо принимает только массив объектов.Пример заголовка функции для старой УТ:
Функция Печать() Экспорт
// Для версии 10.3.13 часто используется доступ через СсылкаНаОбъект
ДокументСсылка = СсылкаНаОбъект;
ТабДокумент = Новый ТабличныйДокумент;
// Логика заполнения макета
// ...
Возврат ТабДокумент;
КонецФункции
Выясним причину возможных расхождений в суммах НДС. В старых релизах алгоритмы округления могли отличаться. При переносе кода из новых версий важно убедиться, что СуммаНДС в печатной форме совпадает с данными, записанными в табличной части документа реализации. Рекомендуем использовать прямое чтение из ТЧ документа:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Количество,
| РеализацияТоваровУслугТовары.Сумма,
| РеализацияТоваровУслугТовары.СуммаНДС,
| РеализацияТоваровУслугТовары.СтавкаНДС
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Подведем итог: Реализация УПД для УТ 10.3.13 — задача трудоемкая, но выполнимая. Оптимальный путь — создание максимально автономной внешней обработки, в которую перенесены все необходимые алгоритмы из современных релизов. Это позволит избежать правки конфигурации и сохранит возможность печати юридически значимых документов даже на сильно устаревшей базе данных.