Как в печатной форме «Счета на оплату» заменить полное наименование номенклатуры на краткое в 1С:Бухгалтерия 3.0?

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

В типовой конфигурации 1С:Бухгалтерия 3.0 (БП 3.0) печатная форма документа «Счет на оплату покупателю» настроена таким образом, что в колонку «Наименование» выводится полное наименование номенклатуры из соответствующего поля карточки (поле НаименованиеПолное). Это часто неудобно для пользователей, чьи полные названия товаров перегружены техническими характеристиками, артикулами или юридическими терминами, в то время как в счете достаточно видеть краткое рабочее название.

В данной статье мы подробно разберем, как изменить этот механизм, проанализируем различные способы реализации задачи и выясним, почему расширение может «не срабатывать» сразу после подключения.

Способ 1. Реализация через расширение конфигурации (Программный метод)

Это самый современный и предпочтительный метод, так как он позволяет вносить изменения, не снимая основную конфигурацию с поддержки. Рассмотрим по шагам, где именно в коде происходит формирование данных для печати.

Логика формирования печатной формы «Счета» сосредоточена в Модуле менеджера документа СчетНаОплатуПокупателю. Основной метод, отвечающий за сбор данных — процедура ПечатьСчетаНаОплату. Именно здесь выполняется запрос к базе данных, который извлекает информацию о товарах и услугах.

Для замены наименования нам потребуется выполнить следующие действия:

  1. Создадим новое расширение и добавим в него документ СчетНаОплатуПокупателю.
  2. Перейдем в модуль менеджера документа внутри расширения и создадим перехват процедуры ПечатьСчетаНаОплату, используя аннотацию &Вместо или &ИзменениеИКонтроля.
  3. В тексте запроса заменим обращение к полю Номенклатура.НаименованиеПолное на Номенклатура.Наименование.

Проанализируем пример кода, который может использоваться в расширении для подмены текста запроса:


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

Важный нюанс: Как было отмечено в ходе обсуждения, часто требуется выводить краткое наименование только для товаров, оставляя для услуг полное описание (так как содержание услуги в счете часто является предметом договора). В этом случае в запросе необходимо использовать конструкцию ВЫБОР КОГДА, проверяя тип номенклатуры.

Почему расширение может не работать (Диагностика проблем)

Часто программисты сталкиваются с ситуацией: расширение успешно подключено, статус «Активно», но в печатной форме по-прежнему отображается полное наименование. Разберем основные причины:

  1. Безопасный режим: При подключении расширения через пользовательский интерфейс (Меню «Администрирование» — «Печатные формы, отчеты и обработки» — «Расширения») флажок «Безопасный режим» установлен по умолчанию. Некоторые механизмы работы с запросами и макетами могут блокироваться платформой в этом режиме. Попробуйте снять этот флажок и перезапустить сеанс.
  2. Актуальность версии: Убедитесь, что расширение не является «пустым». В конфигураторе проверьте раздел «Общие» расширения. Иногда модули или макеты ошибочно не включаются в состав расширения при его выгрузке/загрузке.
  3. Кэширование данных: Платформа 1С активно кэширует скомпилированные модули и макеты печатных форм. Для применения изменений часто требуется не просто закрыть и открыть документ, а полностью перезапустить клиентское приложение или даже очистить локальный кэш пользователя.
  4. Облачные версии (1С:Фреш): Если вы работаете в облаке, расширение должно пройти аудит. Без успешного аудита оно не будет применяться к базе данных, даже если загружено в список.

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

Если вы не хотите использовать механизм расширений, задачу можно решить через создание внешней печатной формы (файл .epf). Это более «классический» метод, который имеет свои преимущества.

Рассмотрим преимущества ВПФ:

Для реализации этого метода необходимо скопировать процедуру печати из модуля менеджера во внешний отчет, заменить в коде НаименованиеПолное на Наименование и зарегистрировать обработку в справочнике «Дополнительные отчеты и обработки».

Способ 3. Использование колонки «Содержание» (Без программирования)

Малоизвестная, но очень полезная функция 1С:Бухгалтерии — использование поля «Содержание». Проанализируем, как это работает:

  1. Откройте документ «Счет покупателю».
  2. Нажмите кнопку «Ещё» в шапке документа и выберите пункт «Изменить состав строк».
  3. Установите галочку напротив поля «Содержание».
  4. Теперь в табличной части документа появится новая колонка.

Результат: Если поле «Содержание» заполнено, система при печати счета будет брать текст именно из этого поля, игнорируя данные из карточки номенклатуры (как краткие, так и полные). Это позволяет бухгалтеру вручную или копированием быстро отредактировать название товара прямо в документе только для конкретной сделки.

Ограничения редактора макетов

Важно понимать разницу между Макет и Данные. Если зайти в «Администрирование» — «Макеты печатных форм» и отредактировать визуальный шаблон счета, вы сможете изменить шрифты, логотип или расположение колонок. Однако вы не сможете просто заменить параметр Товар на другой, если этот параметр не передается из кода. Макет — это пустая форма, которую программа заполняет результатами своего запроса. Поэтому без изменения программного кода (в расширении или ВПФ) добиться автоматического вывода краткого названия невозможно.

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

← На главную