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