Имя: Пароль:
1C
1С v8
Печатная форма с иерархией номенклатуры
0 Max57
 
25.09.23
12:21
Здравствуйте, уважаемые формучане. Подскажите, пожалуйста, как мне модифицировать данную процедуры печати внешней печатной формы, чтобы выводилась иерархия номенклатуры?

Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектПечати, ПараметрыПечати)
    ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Склад");
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    МакетОбработки = ПолучитьМакет("МакетРаспоряжениеНаОтгрузку");
    ОбластьЗаголовка = МакетОбработки.ПолучитьОбласть("Заголовок");
    ОбластьПоставщик = МакетОбработки.ПолучитьОбласть("Поставщик");
    ОбластьПокупатель = МакетОбработки.ПолучитьОбласть("Покупатель");
    ОбластьШапкиТаблицы = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьСтроки = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы");
    ОбластьОтветственный= МакетОбработки.ПолучитьОбласть("Ответственный");    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗаказКлиентаТовары.Ссылка КАК Ссылка,
    |    ЗаказКлиентаТовары.Количество КАК Количество,
    |    ЗаказКлиентаТовары.НомерСтроки КАК НомерСтроки,
    |    ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
    |    ЗаказКлиентаТовары.Количество * ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель КАК КоличествоШт,
    |    ЗаказКлиентаТовары.Ссылка.Партнер КАК Партнер,
    |    ЗаказКлиентаТовары.Ссылка.Организация КАК Организация
    |ПОМЕСТИТЬ ВТ_ТЧ_Товары
    |ИЗ
    |    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
    |ГДЕ
    |    ЗаказКлиентаТовары.Ссылка В(&МассивОбъектов)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
    |    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
    |ПОМЕСТИТЬ ВТ_Номенклатура_ДопРек
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |ГДЕ
    |    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_ТЧ_Товары.Ссылка КАК Ссылка,
    |    ВТ_ТЧ_Товары.Количество КАК Количество,
    |    ВТ_ТЧ_Товары.НомерСтроки КАК НомерСтроки,
    |    ВТ_ТЧ_Товары.Номенклатура КАК Номенклатура,
    |    ВТ_ТЧ_Товары.КоличествоШт КАК КоличествоШт,
    |    ВТ_ТЧ_Товары.Партнер КАК Партнер,
    |    ВТ_ТЧ_Товары.Организация КАК Организация,
    |    ВТ_Номенклатура_ДопРек.Значение КАК Склад
    |ИЗ
    |    ВТ_ТЧ_Товары КАК ВТ_ТЧ_Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура_ДопРек КАК ВТ_Номенклатура_ДопРек
    |        ПО ВТ_ТЧ_Товары.Номенклатура = ВТ_Номенклатура_ДопРек.Ссылка";
    
    Запрос.УстановитьПараметр("Свойство",ДопРеквизит);
    Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Для каждого Ссылка Из МассивОбъектов Цикл
        ОбластьПоставщик.Параметры.Поставщик = Ссылка.Организация;
        ОбластьПокупатель.Параметры.Покупатель = Ссылка.Партнер;
        ТабличныйДокумент.Вывести(ОбластьЗаголовка);
        ТабличныйДокумент.Вывести(ОбластьПоставщик);
        ТабличныйДокумент.Вывести(ОбластьПокупатель);
        
        ТабличныйДокумент.Вывести(ОбластьШапкиТаблицы);
                Отбор = Новый Структура;
        Отбор.Вставить("Ссылка",Ссылка);
        Выборка = РезультатЗапроса.НайтиСтроки(Отбор);
        
        Для  каждого СтрокаТЧ Из Выборка Цикл
            ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, СтрокаТЧ);
            ТабличныйДокумент.Вывести(ОбластьСтроки);            
        КонецЦикла;
        ТабличныйДокумент.Вывести(ОбластьОтветственный);
    КонецЦикла;
     ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
    
КонецФункции // СформироватьПечатнуюФорму ()
1 Max57
 
25.09.23
12:22
Функцию*
2 Kigo_Kigo
 
25.09.23
12:26
|ВЫБРАТЬ
    |    НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
    |    НоменклатураДополнительныеРеквизиты.Родитель КАК Родитель,
    |    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
    |ПОМЕСТИТЬ ВТ_Номенклатура_ДопРек
    |ИЗ
    |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |ГДЕ
    |    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
    |;
не?
3 Kigo_Kigo
 
25.09.23
12:29
вот такое извращение есть в типовых
"ВЫБРАТЬ
    |    р.ВНА КАК ВНА,
    |    0 КАК Приоритет,
    |    р.ВНА КАК Родитель
    |ПОМЕСТИТЬ втРодителиВНА
    |ИЗ
    |    втДляРодителей КАК р
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    1,
    |    р.ВНА.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    2,
    |    р.ВНА.Родитель.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель.Родитель ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    3,
    |    р.ВНА.Родитель.Родитель.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель.Родитель.Родитель ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    4,
    |    р.ВНА.Родитель.Родитель.Родитель.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    5,
    |    р.ВНА.Родитель.Родитель.Родитель.Родитель.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    р.ВНА,
    |    6,
    |    р.ВНА.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
    |ИЗ
    |    втДляРодителей КАК р
    |ГДЕ
    |    НЕ р.ВНА.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Родитель";
4 Max57
 
25.09.23
13:01
(3)  Я сделал такой запрос. Скажите, пожалуйста, он имеет смысл? Как на печатной форме добавить возможность, чтобы можно было разворачивать строки как в консоли запросов?
ВЫБРАТЬ
    ЗаказКлиентаТовары.Ссылка КАК Ссылка,
    ЗаказКлиентаТовары.Количество КАК Количество,
    ЗаказКлиентаТовары.НомерСтроки КАК НомерСтроки,
    ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
    ЗаказКлиентаТовары.Количество * ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель КАК КоличествоШт,
    ЗаказКлиентаТовары.Ссылка.Партнер КАК Партнер,
    ЗаказКлиентаТовары.Ссылка.Организация КАК Организация,
    ЗаказКлиентаТовары.Номенклатура.Родитель КАК НоменклатураРодитель,
    ЗаказКлиентаТовары.Номенклатура.Родитель.Родитель КАК НоменклатураРодительРодитель,
    ЗаказКлиентаТовары.Номенклатура.Родитель.Родитель.Родитель КАК НоменклатураРодительРодительРодитель,
    ЗаказКлиентаТовары.Номенклатура.Родитель.Родитель.Родитель.Родитель КАК НоменклатураРодительРодительРодительРодитель
ПОМЕСТИТЬ ВТ_ТЧ_Товары
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
    ЗаказКлиентаТовары.Ссылка В(&МассивОбъектов)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Номенклатура_ДопРек
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ТЧ_Товары.НоменклатураРодительРодительРодительРодитель КАК ВидПродукции,
    ВТ_ТЧ_Товары.НоменклатураРодительРодительРодитель КАК ТипПокрытия,
    ВТ_ТЧ_Товары.НоменклатураРодительРодитель КАК Диаметр,
    ВТ_ТЧ_Товары.НоменклатураРодитель КАК Ячейка,
    ВТ_ТЧ_Товары.Ссылка КАК Ссылка,
    ВТ_ТЧ_Товары.Количество КАК Количество,
    ВТ_ТЧ_Товары.НомерСтроки КАК НомерСтроки,
    ВТ_ТЧ_Товары.Номенклатура КАК Номенклатура,
    ВТ_ТЧ_Товары.КоличествоШт КАК КоличествоШт,
    ВТ_ТЧ_Товары.Партнер КАК Партнер,
    ВТ_ТЧ_Товары.Организация КАК Организация,
    ВТ_Номенклатура_ДопРек.Значение КАК Склад
ИЗ
    ВТ_ТЧ_Товары КАК ВТ_ТЧ_Товары
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Номенклатура_ДопРек КАК ВТ_Номенклатура_ДопРек
        ПО (ВТ_ТЧ_Товары.Номенклатура = ВТ_Номенклатура_ДопРек.Ссылка)
ИТОГИ ПО
    ВидПродукции,
    ТипПокрытия,
    Диаметр,
    Ячейка
5 АгентБезопасной Нацио
 
25.09.23
13:24
>чтобы можно было разворачивать строки как в консоли запросов

прочитать про НачатьГруппировкуСтрок
6 АгентБезопасной Нацио
 
25.09.23
13:27
(3) Действительно, извращение. лучше уж тогда методом ildarovich'а ("транзитивное замыкание" на инфостарте)
7 lodger
 
25.09.23
13:37
на СКД перепиши, она сама иерархию нарисует более оптимальным образом.
8 lEvGl
 
25.09.23
15:08
итоги по иерархии или что то такое
9 Max57
 
26.09.23
10:21
(3) (6) (7) (8) Спасибо за советы.