Как заменить наименование товара перед выводом на печать ТОРГ-12 и счета-фактуры в 1С

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

В оптовой торговле нередко возникает ситуация, когда покупатели требуют указывать в отгрузочных документах (ТОРГ-12, счет-фактура, УПД) специфические наименования товаров из своих собственных учетных систем или тендерных спецификаций. При этом в базе поставщика номенклатура заведена по внутренним стандартам и синхронизирована с сайтом или каталогами.

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

Архитектурные ограничения и типовой функционал

Прежде чем приступать к написанию программного кода, проанализируем существующую структуру данных и ограничения системы:

  1. Ограничения платформы версий 8.3.9–8.3.10. На старых версиях платформы механизм расширений поддерживает переопределение только логики (модули, формы), но не позволяет добавлять собственные реквизиты или табличные части в существующие объекты метаданных конфигурации. Поэтому добавление реквизита в табличную часть документов конфигурации автоматически снимает типовой объект с полной поддержки.
  2. Типовой механизм сопоставления номенклатуры. В конфигурации 1С:Управление торговлей 11 уже предусмотрен штатный механизм сопоставления номенклатуры партнеров (справочник НоменклатураКонтрагентов или НоменклатураПоставщиков). Использование типового справочника позволяет обойтись без модификации структуры табличных частей документов реализации и заказа клиента.
  3. Разделение печати ТОРГ-12 и счета-фактуры. Формирование ТОРГ-12 инициируется в модуле менеджера документа РеализацияТоваровУслуг, а печать счета-фактуры выполняется через модуль менеджера документа СчетФактураВыданный или общие модули подсистемы учета НДС. Перехват печати одного лишь документа реализации не изменит данные в счете-фактуре.

Способ 1. Постобработка готового табличного документа в расширении

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

Посмотрим на пример перехвата функции формирования печатной формы в модуле менеджера документа:


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

КонецФункции

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

Способ 2. Модификация текста запроса выборки данных для печати

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

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


ВЫБОР
    КОГДА РеализацияТоваровУслугТовары.НоменклатураКлиента <> "" 
        ТОГДА РеализацияТоваровУслугТовары.НоменклатураКлиента
    КОГДА РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное <> ""
        ТОГДА РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное
    ИНАЧЕ РеализацияТоваровУслугТовары.Номенклатура.Наименование
КОНЕЦ КАК ПредставлениеНоменклатуры,

Если вместо добавления реквизита в табличную часть используется типовой регистр сведений или справочник соответствий номенклатуры покупателей, запрос связывается левым соединением по партнеру/контрагенту и ссылке на номенклатуру:


ВЫБОР
    КОГДА НоменклатураКонтрагентов.Наименование <> "" 
        ТОГДА НоменклатураКонтрагентов.Наименование
    ИНАЧЕ РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное
КОНЕЦ КАК ПредставлениеНоменклатуры

Способ 3. Использование внешней печатной формы (ВПЧ)

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

В модуле объекта внешней обработки реализуется стандартная структура:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("ДокументСсылка.РеализацияТоваровУслуг");
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'ТОРГ-12 (с наименованием клиента)'");
    Команда.Идентификатор = "ТОРГ12_Клиент";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.МодификаторТабличногоДокумента = "";
    
    Возврат ПараметрыРегистрации;

КонецФункции

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

Влияние на электронный документооборот (ЭДО) и счет-фактуру

Особое внимание обратим на сопутствующие учетные процессы:

  1. Электронные документы (1С:ЭДО). Если покупатель принимает документы через оператора ЭДО, подмена текста в печатной форме ТОРГ-12 не повлияет на сформированный XML-файл титула продавца. ЭДО берет данные из табличных частей документа и механизмов сопоставления номенклатуры сервиса 1С:ЭДО. Поэтому для корректной передачи данных через ЭДО необходимо настраивать сопоставление номенклатуры в справочнике НоменклатураКонтрагентов, а не только перехватывать табличный документ.
  2. Счет-фактура и НДС. Согласно ст. 169 НК РФ и Постановлению Правительства РФ № 1137, ошибки в наименовании товаров не являются основанием для отказа в вычете НДС, если они позволяют налоговым органам идентифицировать продавца, покупателя, наименование товаров и их стоимость. Однако произвольное изменение наименований для подакцизных, прослеживаемых или маркированных товаров недопустимо, так как нарушает автоматический учет кодов ТН ВЭД и кодов маркировки.
← На главную