Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 17:31

Сгруппировать строки в ТД

Автор SkyNetYar, 31 авг 2015, 11:10

0 Пользователей и 1 гость просматривают эту тему.

SkyNetYar

Добрый день!
Документ пересчет товаров,выводит просто колонки артикул,наименование,кол-во
Как сделать вывод групп у наименований в которых они состоят?
Пытаюсь использовать НачатьАвтоГруппировкуСтрок();

ТабличныйДокумент.НачатьАвтоГруппировкуСтрок();   ////////////////////
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл

ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);

Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ[КолонкаКодов];
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;

ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ПолучитьПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.НоменклатураПредставление,
ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление,
,
ВыборкаПоСтрокамТЧ.СерияПредставление
);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);

ОбластьСтрокаТаблицыКолонкаЦена.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаЦена);


ОбластьСтрокаТаблицыУпаковки.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыУпаковки);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыПоУчету.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыПоУчету);
КонецЕсли;

ОбластьСтрокаТаблицыФакт.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыФакт);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыОтклонение.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыОтклонение);
КонецЕсли;

КонецЦикла;
ТабличныйДокумент.ЗакончитьАвтоГруппировкуСтрок();  //////////////////////////////////////////

vitasw

Цитата: SkyNetYar от 31 авг 2015, 11:10Как сделать вывод групп у наименований в которых они состоят?

А по-русски? это как?

SkyNetYar

Цитировать
А по-русски? это как?
Группа товара1
    товар
    товар
Группа товара2
    товар
    товар

т.е группа товара ,затем товар который находится в этой группе и.т.д..

Как настроить отчет на СКД я знаю,а вот программно в ТД что то запутался..


vitasw


SkyNetYar

Что то не получается и с помощью НачатьГруппуСтрок ,пробую с помощью ОбходРезультатаЗапроса.ПоГруппировкамСИерархией ,тоже не получается :fdbsdfbsd:
Полный вариант функции привел ниже,и нужно ли добавлять строку группа в печатную форму,даже не нашел образца нигде что бы подглядеть..


Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки();
ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов);

//ВыводитьГрадацииКачества    = ПараметрыПечати.ВыводитьГрадацииКачества;
ВыводитьГрадацииКачества    = Ложь;
//ВыводитьРезультатыПересчета = ПараметрыПечати.ВыводитьРезультатыПересчета;
ВыводитьРезультатыПересчета = Ложь;

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПересчетТоваров_ЗаданиеНаПересчетТоваров";
ТекстЗапроса =
"ВЫБРАТЬ
| ПересчетТоваров.Ссылка КАК Ссылка,
| ПересчетТоваров.Представление КАК ПредставлениеДокумента,
| ПересчетТоваров.Дата КАК Дата,
| ПересчетТоваров.Номер КАК Номер,
| ПересчетТоваров.Склад КАК Склад,
| ПересчетТоваров.Помещение КАК Помещение,
| ПересчетТоваров.ЯчейкаКонсолидацииИзлишковТоваров КАК ЯчейкаИзлишков,
| ПересчетТоваров.ЯчейкаКонсолидацииИспорченныхТоваров КАК ЯчейкаИспорченных,
| ПРЕДСТАВЛЕНИЕ(ПересчетТоваров.Склад) КАК СкладПредставление,
| ПРЕДСТАВЛЕНИЕ(ПересчетТоваров.Помещение) КАК ПомещениеПредставление,
| ПересчетТоваров.Исполнитель.ФизическоеЛицо КАК Исполнитель,
| ПересчетТоваров.ПечататьКоличествоПоУчету КАК ПечататьКоличествоПоУчету,
| ПересчетТоваров.Статус КАК Статус
|ИЗ
| Документ.ПересчетТоваров КАК ПересчетТоваров
|ГДЕ
| ПересчетТоваров.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПересчетТоваров.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПересчетТоваровТовары.НомерСтроки КАК НомерСтроки,
| ПересчетТоваровТовары.Количество КАК Количество,
| ПересчетТоваровТовары.КоличествоУпаковок КАК КоличествоУпаковок,";
Если ВыводитьРезультатыПересчета Тогда
ТекстЗапроса = ТекстЗапроса + "
| ПересчетТоваровТовары.КоличествоФакт КАК КоличествоФакт,
| ПересчетТоваровТовары.КоличествоУпаковокФакт КАК КоличествоУпаковокФакт,";
Иначе
ТекстЗапроса = ТекстЗапроса + "
| 0                                    КАК КоличествоФакт,
| 0                                            КАК КоличествоУпаковокФакт,";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ПересчетТоваровТовары.Номенклатура.Наименование     КАК НоменклатураПредставление,
| ПересчетТоваровТовары.Характеристика.НаименованиеПолное КАК ХарактеристикаПредставление,
| ВЫБОР КОГДА ЕСТЬNULL(ПересчетТоваровТовары.Упаковка.Коэффициент, 1) = 1
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ПересчетТоваровТовары.Упаковка.Наименование
| КОНЕЦ КАК УпаковкаПредставление,
| ПересчетТоваровТовары.Серия.Наименование                КАК СерияПредставление,
| ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмеренияПредставлениеНоменклатура,
| ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Упаковка.ЕдиницаИзмерения) КАК ЕдиницаИзмеренияПредставлениеУпаковка,
| ПРЕДСТАВЛЕНИЕ(ПересчетТоваровТовары.Ячейка) КАК ЯчейкаПредставление,
| ПересчетТоваровТовары.Номенклатура.Код КАК Код,
| ПересчетТоваровТовары.Номенклатура.Артикул КАК Артикул,
| ПересчетТоваровТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.ПересчетТоваров.Товары КАК ПересчетТоваровТовары
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &НужныйТипЦен) КАК ЦеныНоменклатурыСрезПоследних
| ПО ПересчетТоваровТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ПересчетТоваровТовары.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
    |
|ГДЕ
| ПересчетТоваровТовары.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|ИТОГИ ПО
| Ссылка";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
//установка типа показываемых цен
//Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
// Для каждого КлючИЗначение Из ДополнительныеПараметры Цикл
// ВывестиЗначение(Таб, ОбластьРеквизитШапки, КлючИЗначение.Ключ, КлючИЗначение.Значение);
// КонецЦикла;
//КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда
НужнЦена = Справочники.ВидыЦен.НайтиПоНаименованию(ДополнительныеПараметры.НаименованиеЦены);
Если   (НужнЦена = Неопределено) ИЛИ (НужнЦена = Справочники.ВидыЦен.ПустаяСсылка()) Тогда
НужнЦена = Справочники.ВидыЦен.НайтиПоНаименованию("Цена продажи");
КонецЕсли;
ВыводитьГрадацииКачества = ДополнительныеПараметры.ВыводитьГрадацииКачества;
        ВыводитьРезультатыПересчета = ДополнительныеПараметры.ВыводитьРезультатыПересчета;
       
Иначе
НужнЦена = Справочники.ВидыЦен.НайтиПоНаименованию("Цена продажи");
КонецЕсли;
    Если   (НужнЦена = Неопределено) ИЛИ (НужнЦена = Справочники.ВидыЦен.ПустаяСсылка()) Тогда
НужнЦена = Справочники.ВидыЦен.НайтиПоНаименованию("Цена продажи");
КонецЕсли;


    Запрос.УстановитьПараметр("НужныйТипЦен", НужнЦена);

Результаты = Запрос.ВыполнитьПакет();
ТабличныйДокумент.НачатьАвтогруппировкуСтрок(); ////////////////////////
ВыборкаПоДокументам = Результаты[0].Выбрать();
ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией,Запрос.НоменклатураПредставление);

ПервыйДокумент = Истина;


Если ВыводитьРезультатыПересчета Тогда
СинонимДокумента = НСтр("ru='Результаты пересчета товаров'");
Иначе
СинонимДокумента = НСтр("ru='Задание на пересчет товаров'");
КонецЕсли;

Пока ВыборкаПоДокументам.Следующий() Цикл
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
Заголовок = СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);

Если ВыводитьРезультатыПересчета
И Не ВыборкаПоДокументам.Статус = Перечисления.СтатусыПересчетовТоваров.Выполнено Тогда

ТекстСообщения = НСтр("ru = 'Документ ""%ПредставлениеДокумента%"" находится в статусе ""%Статус%"". Печать результатов пересчета возможна только в статусе ""Выполнено""'");

РеквизитыДокумента.Вставить("Представление",ВыборкаПоДокументам.ПредставлениеДокумента);
ПредставлениеДокумента = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);

ТекстСообщения = СтрЗаменить(ТекстСообщения,"%ПредставлениеДокумента%",ПредставлениеДокумента);
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Статус%",ВыборкаПоДокументам.Статус);

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;

КонецЕсли;


ВыводитьПоУчету = ВыборкаПоДокументам.ПечататьКоличествоПоУчету Или ВыводитьРезультатыПересчета;
ПоАдресномуСкладу = СкладыСервер.ИспользоватьАдресноеХранение(ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение);
Макет = ПолучитьМакет("ПФ_MXL_ЗаданиеПересчетТоваров");
//Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПересчетТоваров.ПФ_MXL_ЗаданиеПересчетТоваров");

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьСкладИсполнитель = Макет.ПолучитьОбласть("СкладИсполнитель");
ОбластьЯчейкаИзлишков = Макет.ПолучитьОбласть("ОбластьЯчейкаИзлишков");
ОбластьЯчейкаИспорченных = Макет.ПолучитьОбласть("ОбластьЯчейкаИспорченных");

Если ПоАдресномуСкладу Тогда

Если ВыводитьКоды Тогда
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|НачалоСтроки");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|НачалоСтроки");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|НачалоСтроки");
ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|КолонкаКодов");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|КолонкаКодов");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|КолонкаКодов");
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейкаКодУчет|КолонкаТоваровКодЯчейка");
Иначе
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейка|НачалоСтроки");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейка|НачалоСтроки");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейка|НачалоСтроки");
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицыЯчейка|КолонкаТоваровБезКодовЯчейки");
КонецЕсли;
Иначе
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицы|Номер");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицы|Номер");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицы|Номер");

Если ВыводитьКоды Тогда

ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаЯчейкаКод");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаЯчейкаКод");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаЯчейкаКод");
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаТоваровБезКодовЯчейки");
Иначе
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
КонецЕсли;
КонецЕсли;

ОбластьШапкаТаблицыУпаковки = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаУпаковок");
ОбластьСтрокаТаблицыУпаковки = Макет.ПолучитьОбласть(?(ПоАдресномуСкладу, "СтрокаТаблицыЯчейка|КолонкаУпаковок", "СтрокаТаблицы|КолонкаУпаковок"));
ОбластьПодвалТаблицыУпаковки = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаУпаковок");

Если ВыводитьКоды Тогда

ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;

КонецЕсли;

Если Не ВыводитьПоУчету Тогда
Если ВыводитьГрадацииКачества Тогда
ОбластьШапкаТаблицыФакт = Макет.ПолучитьОбласть("ШапкаТаблицыГрадацииКачества|ГрадацииКачества");
ОбластьСтрокаТаблицыФакт = Макет.ПолучитьОбласть("СтрокаТаблицыГрадацииКачества|ГрадацииКачества");
ОбластьПодвалТаблицыФакт = Макет.ПолучитьОбласть("ПодвалТаблицыГрадацииКачества|ГрадацииКачества");
Иначе
ОбластьШапкаТаблицыФакт = Макет.ПолучитьОбласть("ШапкаТаблицы|ФактБезКоличестваПоУчету");
ОбластьСтрокаТаблицыФакт = Макет.ПолучитьОбласть("СтрокаТаблицы|ФактБезКоличестваПоУчету");
ОбластьПодвалТаблицыФакт = Макет.ПолучитьОбласть("ПодвалТаблицы|ФактБезКоличестваПоУчету");
КонецЕсли;
Иначе

ОбластьШапкаТаблицыПоУчету = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаПоУчету");
ОбластьСтрокаТаблицыПоУчету = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаПоУчету");
ОбластьПодвалТаблицыПоУчету = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаПоУчету");
ОбластьШапкаТаблицыОтклонение = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаОтклонение");
ОбластьСтрокаТаблицыОтклонение = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаОтклонение");
ОбластьПодвалТаблицыОтклонение = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаОтклонение");
Если ВыводитьГрадацииКачества Тогда
ОбластьШапкаТаблицыФакт = Макет.ПолучитьОбласть("ШапкаТаблицыГрадацииКачества|ГрадацииКачества");
ОбластьСтрокаТаблицыФакт = Макет.ПолучитьОбласть("СтрокаТаблицыГрадацииКачества|ГрадацииКачества");
ОбластьПодвалТаблицыФакт = Макет.ПолучитьОбласть("ПодвалТаблицыГрадацииКачества|ГрадацииКачества");
Иначе
ОбластьШапкаТаблицыФакт = Макет.ПолучитьОбласть("ШапкаТаблицыКодУчет|КолонкаФакт");
ОбластьСтрокаТаблицыФакт = Макет.ПолучитьОбласть("СтрокаТаблицыКодУчет|КолонкаФакт");
ОбластьПодвалТаблицыФакт = Макет.ПолучитьОбласть("ПодвалТаблицыКодУчет|КолонкаФакт");
КонецЕсли;
КонецЕсли;

ОбластьСтрокаТаблицыКолонкаЦена = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаЦена");
        ОбластьШапкаТаблицыКолонкаЦена = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаЦена");
ОбластьПодвалТаблицыКолонкаЦена = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаЦена");

Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;

ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ОбластьЗаголовок.Параметры.ТекстЗаголовка = Заголовок; 

ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
ТабличныйДокумент.Вывести(ОбластьЗаголовок);

ОбластьСкладИсполнитель.Параметры.ИсполнительПредставление = ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Исполнитель);
ОбластьСкладИсполнитель.Параметры.СкладПредставление = СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоДокументам.СкладПредставление,ВыборкаПоДокументам.ПомещениеПредставление);

ТабличныйДокумент.Вывести(ОбластьСкладИсполнитель);

Если ЗначениеЗаполнено(ВыборкаПоДокументам.ЯчейкаИзлишков) Тогда
ЗаполнитьЗначенияСвойств(ОбластьЯчейкаИзлишков.Параметры, ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьЯчейкаИзлишков);
КонецЕсли;

Если ЗначениеЗаполнено(ВыборкаПоДокументам.ЯчейкаИспорченных) Тогда
ЗаполнитьЗначенияСвойств(ОбластьЯчейкаИспорченных.Параметры, ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьЯчейкаИспорченных);
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);

Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаЦена);
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыУпаковки);

Если ВыводитьПоУчету Тогда
ТабличныйДокумент.ПолеСправа = 5;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыПоУчету);
КонецЕсли;

ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыФакт);
Если ВыводитьПоУчету Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыОтклонение);
КонецЕсли;

    Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл

ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);

Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ[КолонкаКодов];
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;

ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ПолучитьПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.НоменклатураПредставление,
ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление,
,
ВыборкаПоСтрокамТЧ.СерияПредставление
);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);

ОбластьСтрокаТаблицыКолонкаЦена.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаЦена);


ОбластьСтрокаТаблицыУпаковки.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыУпаковки);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыПоУчету.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыПоУчету);
КонецЕсли;

ОбластьСтрокаТаблицыФакт.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыФакт);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыОтклонение.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыОтклонение);
КонецЕсли;

КонецЦикла;

ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
КонецЕсли;

ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаЦена);
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыУпаковки);
Если ВыводитьПоУчету Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыПоУчету);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыФакт);

Если ВыводитьПоУчету Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыОтклонение);
КонецЕсли;

УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;

ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.НижнийКолонтитул.Выводить=Истина;
ТабличныйДокумент.НижнийКолонтитул.ТекстСправа="Стр.[&НомерСтраницы] из [&СтраницВсего]";
ТабличныйДокумент.НижнийКолонтитул.ТекстСлева="[&Дата]";
ТабличныйДокумент.ПолеСлева=3;
ТабличныйДокумент.ПолеСправа=3;
ТабличныйДокумент.ПолеСверху=3;
ТабличныйДокумент.ПолеСнизу=8;

Если ПривилегированныйРежим() Тогда
        УстановитьПривилегированныйРежим(Ложь);
    КонецЕсли;
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок(); ///////////////////////////////////
Возврат ТабличныйДокумент;

КонецФункции

vitasw

Жесть!
1.ОбходРезультатаЗапроса.ПоГруппировкам используется только при наличии секции "Итоги". В противном случаее - не имеет смысла.
2. Зачем вам пакет запросов? Проще будет, если реквизиты шапок документов извлекать из ссылок. (да, неоптимально. Но лучше иметь приавильно и неоптимально, чем НЕправильно, зато как оптимально!)
3. Я вам советовал "НачатьГруппуСтрок" - в приведенном коде этого нет.
4. Даже не берусь представить, что будет в сочетании сгруппированных строк и ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц()- думаю, что ничего хорошего.
5. Если вы хотите группировать номенклатуру, то зачем вам  ТабличныйДокумент.НачатьАвтогруппировкуСтрок(); до вывода первой области, т.е. на пустом листе?!?!
6.НачатьГруппуСтрок используется после вывода "группы". Т.е. сначала вы выводите группу->НачатьГруппуСтрок -> вывод детальных записей в цикле->ЗакончитьГруппуСтрок.
и т.д.

SkyNetYar

Спасибо за разжеванный ответ! буду дерзать..
Вы не удивляйтесь,я учусь,и с этим столкнулся в первые! :dfbsdfbsdf:
Добавлено: 02 сен 2015, 19:27


Делаю так

ТабличныйДокумент.НачатьГруппуСтрок(); ////////////////////////////////

    Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл

ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);

Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ[КолонкаКодов];
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;

ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ПолучитьПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.НоменклатураПредставление,
ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление,
,
ВыборкаПоСтрокамТЧ.СерияПредставление
);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);

ОбластьСтрокаТаблицыКолонкаЦена.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаЦена);


ОбластьСтрокаТаблицыУпаковки.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыУпаковки);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыПоУчету.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыПоУчету);
КонецЕсли;

ОбластьСтрокаТаблицыФакт.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыФакт);

Если ВыводитьПоУчету Тогда
ОбластьСтрокаТаблицыОтклонение.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыОтклонение);
КонецЕсли;

КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок(); //////////////////////////////////
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);

Выводит весь список номенклатуры как одна группа..
Только не злитесь :mellow:

vitasw

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

Это только пример, который нужно еще дорабатывать.

SkyNetYar

Блин жесть,нужно как то на СКД сделать тогда что ле..
Это внешняя печатная форма выдрана из УТ 11.1 документа пересчет товаров как она там есть...добавлены только колонки цены на товары и комсетика в виде номеров страниц и полей..

vitasw

Цитата: SkyNetYar от 03 сен 2015, 14:33то на СКД сделать тогда что ле..
Я смотрю, вы не ищите легких путей. ну-ну...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск