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