понедельник, 15 мая 2017 г.

Вывод справочников в соответствии с иерархией групп



Функция ИнитТбУзла()  
тбУзла = СоздатьОбъект("ТаблицаЗначений");
тбУзла.НоваяКолонка("родитель", "справочник.Товар");
тбУзла.НоваяКолонка("Группа","справочник.Товар");
тбУзла.НоваяКолонка("Уровень", "Число");
тбУзла.НоваяКолонка("тбДети");
Возврат тбУзла;
КонецФункции


//============================
Процедура ПечатьГрупп(тбТекущийУровень, тбПечать)
тбТекущийУровень.ВыбратьСтроки();
Пока тбТекущийУровень.ПолучитьСтроку()>0 Цикл
тбПечать.НоваяСтрока();
тбПечать.Группа = тбТекущийУровень.Группа;
тбСледУровень =  тбТекущийУровень.тбДети;
Если ПустоеЗначение(тбСледУровень) = 0 Тогда
ПечатьГрупп(тбСледУровень, тбПечать);  
КонецЕсли;
КонецЦикла;
КонецПроцедуры  


//=================================================================
Процедура ОбрТекУровень(знач текУровень, тбИсходная, тбБуферВходящий, тбБуферИсходящий, текСтрока, тбУзлаПустая);
колСтрок = тбИсходная.КоличествоСтрок();
                   
тбБуфер = СоздатьОбъект("ТаблицаЗначений");
тбУзлаПустая.Выгрузить(тбБуфер);

    колСтрокБуфВход = тбБуферВходящий.КоличествоСтрок();

Пока текСтрока <= колСтрок Цикл
тбИсходная.ПолучитьСтрокуПоНомеру(текСтрока);

Если тбИсходная.Уровень <> текУровень Тогда Прервать КонецЕсли;
текГруппа = тбИсходная.Группа;
тбБуфер.НоваяСтрока();
тбБуфер.родитель = тбИсходная.Родитель;
тбБуфер.Группа = текГруппа;
тбБуфер.Уровень  = тбИсходная.Уровень;
тбБуфер.тбДети = СоздатьОбъект("ТаблицаЗначений") ;
тбУзлаПустая.Выгрузить(тбБуфер.тбДети);
тбДетиБуфера = тбБуфер.тбДети;  

счБуферВходящий = 0;
Если тбБуферВходящий.НайтиЗначение(текГруппа, счБуферВходящий, "Родитель") > 0 Тогда
тбБуферВходящий.ПолучитьСтрокуПоНомеру(счБуферВходящий);
Пока счБуферВходящий <= колСтрокБуфВход Цикл
Если тбБуферВходящий.Родитель <> текГруппа Тогда Прервать КонецЕсли;
    тбДетиБуфера.НоваяСтрока();
тбДетиБуфера.родитель = текГруппа;
тбДетиБуфера.Группа   = тбБуферВходящий.Группа;
тбДетиБуфера.Уровень  = тбБуферВходящий.Уровень;
тбДетиБуфера.тбДети   = тбБуферВходящий.тбДети;
тбБуферВходящий.УдалитьСтроку();
колСтрокБуфВход = колСтрокБуфВход - 1;
КонецЦикла;
тбДетиБуфера.Сортировать("Группа");
КонецЕсли;
текСтрока = текСтрока + 1;
КонецЦикла;
тбБуфер.Сортировать("родитель");

тбБуферИсходящий = тбБуфер;

КонецПроцедуры


//*******************************************
Процедура Сформировать()                            

RecordSet = СоздатьОбъект("ODBCRecordset");
текстСКЛ =  "
|WITH Parts(ParentID, ID, goodsLevel) as
|(
|    SELECT mainGoods.ParentID, mainGoods.ID, 0 goodsLevel
|    FROM SC14 mainGoods
|    WHERE mainGoods.ISFolder = 1 AND mainGoods.ParentID = $ПустойИД
|    UNION ALL
|    SELECT childGoods.ParentID, childGoods.ID, goodsLevel + 1
|    FROM SC14 childGoods
|        INNER JOIN Parts p
|        ON childGoods.ParentID = p.ID AND childGoods.ISFolder = 1
| )
|SELECT ParentID [родитель $справочник.Товар], ID [Группа $справочник.Товар], goodsLevel Уровень
|FROM Parts
|ORDER BY goodsLevel DESC";


тбРодителиИДети= RecordSet.ВыполнитьИнструкцию(текстСКЛ);
тбРодителиИДети.НоваяКолонка("тбДети");
           
тбРодителиИДети.ПолучитьСтрокуПоНомеру(1);
МаксУровень  =  тбРодителиИДети.Уровень;

тбУзлаПустая = ИнитТбУзла();


тбБуферВходящий = СоздатьОбъект("ТаблицаЗначений");
тбУзлаПустая.Выгрузить(тбБуферВходящий);

тбБуферИсходящий = СоздатьОбъект("ТаблицаЗначений");
тбУзлаПустая.Выгрузить(тбБуферИсходящий);

текСтрока = 1;
сч = МаксУровень;
Пока сч > -1 Цикл                                                            

ОбрТекУровень(сч, тбРодителиИДети, тбБуферВходящий, тбБуферИсходящий, текСтрока, тбУзлаПустая);  
тбБуферВходящий = тбБуферИсходящий;
сч = сч - 1;

КонецЦикла;

тбПечать = СоздатьОбъект("ТаблицаЗначений");
тбПечать.НоваяКолонка("Группа");
         
тбБуферИсходящий.Сортировать("Группа");

ПечатьГрупп(тбБуферИсходящий,тбПечать);

//тбПечать.ВыбратьСтроку();



КонецПроцедуры

1 комментарий:

  1. Вот контактные данные г-на Бенджамина, адрес электронной почты, lfdsloans@outlook.com. / Или WhatsApp 1 989-394-3740, который помог мне с займом в 90 000,00 евро, чтобы начать свой бизнес, и я очень благодарен, мне было очень тяжело, пытаясь найти способ, как мать-одиночка, вещи не были легкими со мной, но с помощью мистера Бенджамина улыбнулся мне в лицо, когда я смотрю, как растет и развивается мой бизнес. Я знаю, вы можете удивиться, почему я ставлю такие вещи здесь, но я действительно должен выразить свою благодарность, чтобы любой, кто ищет финансовая помощь или преодоление трудностей с этим бизнесом или желание запустить бизнес-проект могут позаботиться об этом и надеяться на выход из затруднений. Спасибо.

    ОтветитьУдалить