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