При оформлении отгрузок в программе 1С:Управление торговлей 11 (УТ 11) часто возникает необходимость кастомизации типовых документов. Одной из популярных задач является вывод информации о счете на оплату (его номера и даты) непосредственно в печатную форму накладной ТОРГ-12. Поскольку конфигурация УТ 11 является типовой и регулярно обновляется, критически важно выбрать правильный метод доработки, который не создаст проблем при последующих обновлениях системы.
В этой статье мы подробно разберем, почему штатное редактирование макета не всегда подходит, как найти связь между реализацией и счетом в коде, и какой инструмент лучше выбрать: Внешнюю печатную форму (ВПФ) или Расширение конфигурации.
Прежде чем приступать к кодингу, проанализируем структуру данных. В УТ 11 «Реализация товаров и услуг» крайне редко имеет прямую ссылку на «Счет на оплату». Обычно связь строится через посредника — документ Заказ клиента. Возможны следующие цепочки:
Следовательно, чтобы «достать» номер счета, нам придется написать алгоритм поиска связанных документов. Рассмотрим способы реализации этой задачи.
Этот метод считается классическим для 1С. Мы не меняем конфигурацию, а подключаем обработку через справочник «Дополнительные отчеты и обработки».
Рассмотрим подробнее шаги реализации:
РеализацияТоваровУслуг.СформироватьПечатнуюФорму.Главный плюс ВПФ — полная независимость от обновлений конфигурации. Однако есть и минус: если фирма 1С существенно изменит структуру формирования данных в новых релизах, внешнюю форму придется переписывать практически с нуля, так как она содержит в себе копию типового кода.
Для современных версий 1С (начиная с 8.3.6) использование расширений является более гибким и предпочтительным вариантом. Разберем по шагам, как это работает.
Вместо того чтобы копировать сотни строк кода типовой печати, мы можем использовать механизм перехвата методов. В менеджере документа РеализацияТоваровУслуг за формирование данных для печати обычно отвечает процедура, подготавливающая коллекцию печатных форм или структуру параметров.
Проанализируем пример использования аннотации &После для модификации данных:
&После("ЗаполнитьРеквизитыОбъектовПечати")
Процедура Расш_ЗаполнитьРеквизитыОбъектовПечати(КоллекцияОбъектовПечати, ПараметрыПечати)
Для Каждого СтрокаТаблицы Из КоллекцияОбъектовПечати Цикл
// Ищем связанные счета для каждой реализации
НомерСчета = ПолучитьНомерСчетаПоРеализации(СтрокаТаблицы.Ссылка);
Если ЗначениеЗаполнено(НомерСчета) Тогда
// Добавляем информацию в поле Основание или специальный параметр
СтрокаТаблицы.Основание = СтрокаТаблицы.Основание + ", по счету № " + НомерСчета;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
При таком подходе нам даже не нужно менять макет, если мы просто дописываем информацию в стандартное поле «Основание». Это максимально безопасно при обновлениях.
Как мы выяснили, номер счета нужно найти программно. Самый эффективный способ — использовать запрос к критерию отбора СвязанныеДокументы. Посмотрим на пример кода функции:
Функция ПолучитьНомерСчетаПоРеализации(СсылкаНаРеализацию)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СвязанныеДокументы.Ссылка КАК Счет
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&Ссылка) КАК СвязанныеДокументы
|ГДЕ
| СвязанныеДокументы.Ссылка ССЫЛКА Документ.СчетНаОплатуКлиенту";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаРеализацию);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат СокрЛП(Выборка.Счет.Номер) + " от " + Формат(Выборка.Счет.Дата, "ДЛФ=D");
КонецЕсли;
// Если напрямую не нашли, пробуем поискать через Заказ
Если ЗначениеЗаполнено(СсылкаНаРеализацию.ЗаказКлиента) Тогда
// Рекурсивно или отдельным запросом ищем счета, связанные с заказом
КонецЕсли;
Возврат "";
КонецФункции
Многие пользователи пробуют зайти в меню «Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм» и отредактировать ТОРГ-12 там. Выясним причину, по которой это не сработает для данной задачи:
[НомерСчета]).Поэтому без программирования (через ВПФ или Расширение) реализовать вывод номера счета невозможно.
Выбор метода зависит от ваших приоритетов:
БСП. Это позволит системе работать быстрее и упростит поддержку кода в долгосрочной перспективе.Важный нюанс: при реализации поиска счета всегда учитывайте ситуацию, когда одна реализация может быть связана с несколькими счетами. В коде стоит предусмотреть выбор либо самого первого счета, либо вывод списка всех номеров через запятую, чтобы не вводить в заблуждение кладовщиков и клиентов.
Проанализировав ситуацию, мы видим, что задача добавления номера счета в ТОРГ-12 — это отличный пример того, как небольшое визуальное изменение требует четкого понимания архитектуры связей документов в 1С:Управление торговлей 11.