Как правильно вывести состав набора в печатной форме документа 1С вместо строки через запятую?

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

В процессе разработки печатных форм часто возникает задача отображения комплектующих набора. Стандартный подход с конкатенацией строк через запятую выглядит непрофессионально и затрудняет чтение документа. Давайте разберем, как реализовать вывод состава набора в виде полноценной таблицы внутри печатного документа 1С.

Этап 1: Подготовка макета печатной формы

Первым делом нам необходимо изменить структуру Макет. Вместо одной области, которая выводит всё в строку, мы разделим вывод на логические части:

  1. Область «ЗаголовокНабора»: здесь мы будем выводить наименование самого набора.
  2. Область «СтрокаНабора»: здесь будут располагаться детальные записи: номенклатура, входящая в состав, и её количество в наборе.
  3. Область «Итоги»: для вывода общей суммы по документу.

Важно, чтобы параметры в макете для СтрокаНабора имели те же имена, что и в основной области таблицы товаров, если вы планируете унифицировать вывод.

Этап 2: Переработка запроса к данным

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

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

Этап 3: Реализация алгоритма вывода в модуле

Рассмотрим логику обхода результата запроса. Мы будем использовать метод Вывести() объекта ТабличныйДокумент для последовательного заполнения областей.


// Пример логики вывода данных
Пока Выборка.Следующий() Цикл
    Если Выборка.ЭтоНабор Тогда
        // Выводим заголовок набора
        ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокНабора");
        ОбластьЗаголовок.Параметры.НаименованиеНабора = Выборка.Номенклатура;
        ТабличныйДокумент.Вывести(ОбластьЗаголовок);
        
        // Выводим состав набора
        Для Каждого СтрокаСостава Из Выборка.СоставНабора Цикл
            ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаНабора");
            ОбластьСтрока.Параметры.Товар = СтрокаСостава.Номенклатура;
            ОбластьСтрока.Параметры.Количество = СтрокаСостава.Количество;
            ТабличныйДокумент.Вывести(ОбластьСтрока);
        КонецЦикла;
    Иначе
        // Обычная номенклатура
        ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
        ОбластьСтрока.Параметры.Товар = Выборка.Номенклатура;
        ТабличныйДокумент.Вывести(ОбластьСтрока);
    КонецЕсли;
КонецЦикла;

Этап 4: Интерактивность и группировка

Чтобы сделать документ более удобным для чтения, мы можем использовать встроенные механизмы группировки строк. Это позволит пользователю при просмотре ТабличныйДокумент сворачивать и разворачивать состав наборов.

Для этого используйте методы НачатьГруппуСтрок() и ЗакончитьГруппуСтрок():


// Пример группировки
ТабличныйДокумент.НачатьГруппуСтрок("Набор", Истина);
// ... код вывода строк состава ...
ТабличныйДокумент.ЗакончитьГруппуСтрок();

Важные замечания по архитектуре

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

Изучение типовых решений: Мы настоятельно рекомендуем открыть конфигуратор типовой конфигурации (например, Управление торговлей) и посмотреть печатную форму Реализация товаров и услуг. Разработчики 1С уже реализовали там механизм вывода наборов, используя области макета с параметрами детализации. Анализ готового кода — лучший способ перенять лучшие практики и избежать ошибок в расчетах.

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

← На главную