|
Иерархическая нумерация строк при выводе данных | ☑ | ||
---|---|---|---|---|
0
Alex70
10.08.18
✎
10:28
|
Добрый день! Есть задание вывести иерархическую нумерацию строк при формировании строк, в строке "ОбластьСтрокаОсновное.Параметры.Номер" и должен выводиться номерстроки с увеличением. Думаю, что в запросе можно что-то "подкрутить", возможно ошибаюсь. Подтолкните пожалуйста в нужную сторону))
Иерархическая структура должна быть типа: 1 1.1 1.1.1 1.1.1.1 1.1.1.2 1.1.2 1.2 1.2.1 2 2.1. ну и т.п. _________________________________ // Определяем спецификацию поумолчанию Если Спецификация = Неопределено Тогда СпецификацияОбхода = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(ТекущаяНоменклатура,,ТекущаяДата()); Иначе СпецификацияОбхода = Спецификация; КонецЕсли; Если Не ЗначениеЗаполнено(СпецификацияОбхода) Тогда Возврат; КонецЕсли; ЗапросПодборКомплектующих = Новый Запрос; ЗапросПодборКомплектующих.Текст = "ВЫБРАТЬ | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Номенклатура, | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.Артикул, | СпецификацииНоменклатурыИсходныеКомплектующие.Количество, | СпецификацииНоменклатурыИсходныеКомплектующие.НомерСтроки КАК НомерСтроки |ИЗ | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие |ГДЕ | СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = &Спецификация"; ЗапросПодборКомплектующих.УстановитьПараметр("Спецификация", СпецификацияОбхода); ВыборкаПодборКомплектующих = ЗапросПодборКомплектующих.Выполнить().Выбрать(); Пока ВыборкаПодборКомплектующих.Следующий() Цикл Строка = ЭлементыФормы.Товары.ТекущаяСтрока; Если Уровень = 0 Тогда ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|ОсновноеСтрока"); ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка|КолонкаСтрока"); Если Строка.ВидСтроки = Перечисления.тлкВидыСтрокиГС.ЭтоПокрытие Тогда ЦветОранжевый = Новый Цвет(240, 150, 40); ОбластьСтрокаОсновное.Область(1,1,1,7).ЦветФона = ЦветОранжевый; КонецЕсли; ИначеЕсли Уровень > 6 Тогда ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка7|ОсновноеСтрока7"); ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка7|КолонкаСтрока7"); Если Строка.ВидСтроки = Перечисления.тлкВидыСтрокиГС.ЭтоПокрытие Тогда ЦветОранжевый = Новый Цвет(240, 150, 40); ОбластьСтрокаОсновное.Область(1,1,1,14).ЦветФона = ЦветОранжевый; КонецЕсли; Иначе ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка"+Уровень+"|ОсновноеСтрока"+Уровень); ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка"+Уровень+"|КолонкаСтрока"+Уровень); Если Строка.ВидСтроки = Перечисления.тлкВидыСтрокиГС.ЭтоПокрытие Тогда ЦветОранжевый = Новый Цвет(240, 150, 40); ОбластьСтрокаОсновное.Область(1,1,1,7+Уровень).ЦветФона = ЦветОранжевый; КонецЕсли; КонецЕсли; Артикул = СОКРЛП(ВыборкаПодборКомплектующих.Номенклатура.Артикул); ПутьКФайлуКартинки = "\\pdm-sql\Pictures\Image\"+Артикул+".png"; Файл = Новый Файл (ПутьКФайлуКартинки); Если НЕ Файл.Существует() Тогда ПозицияДефис = Найти(Артикул,"-"); Если ПозицияДефис > 0 Тогда Артикул = СОКРЛП(Лев(Артикул,ПозицияДефис-1)); КонецЕсли; ПутьКФайлуКартинки = "\\pdm-sql\Pictures\Image\"+Артикул+".png"; Файл = Новый Файл (ПутьКФайлуКартинки); КонецЕсли; Если Файл.Существует() Тогда ОбластьСтрокаОсновное.ТекущаяОбласть.ВысотаСтроки = 80; Рис = ОбластьСтрокаОсновное.Рисунки[0]; Рис.Высота = 27; Рис.РазмерКартинки = РазмерКартинки.АвтоРазмер; Рис.Картинка = Новый Картинка(ПутьКФайлуКартинки); Иначе ОбластьСтрокаОсновное.ТекущаяОбласть.АвтоВысотаСтроки = Истина; ОбластьСтрокаОсновное.ТекущаяОбласть.ВысотаСтроки = 0; Рис = ОбластьСтрокаОсновное.Рисунки[0]; Рис.Высота = 2; Рис.Картинка = Новый Картинка; КонецЕсли; ОбластьСтрокаОсновное.Параметры.Номер = ВыборкаПодборКомплектующих.НомерСтроки; //ПолучитьНомерСтроки.КодСтроки; ОбластьСтрокаОсновное.Параметры.Наименование = ВыборкаПодборКомплектующих.Номенклатура; ОбластьСтрокаОсновное.Параметры.Артикул = ВыборкаПодборКомплектующих.Номенклатура.Артикул; ТабличныйДокумент.Вывести(ОбластьСтрокаОсновное); ОбластьСтрокаКолонка.Параметры.Количество = ВыборкаПодборКомплектующих.Количество; ТабличныйДокумент.Присоединить(ОбластьСтрокаКолонка); ТабличныйДокумент.Показать(); ТабличныйДокумент.НачатьГруппуСтрок(); ОбходДереваСпецификаций(Макет, ТабличныйДокумент, Уровень + 1, , ВыборкаПодборКомплектующих.Номенклатура); ТабличныйДокумент.ЗакончитьГруппуСтрок(); КонецЦикла; КонецПроцедуры |
|||
1
leonidk
10.08.18
✎
10:37
|
В СКД, в настройках, в "выбранные поля", в "СистемныеПоля", есть НомерПоПорядкуВГруппировке.
|
|||
2
Alex70
10.08.18
✎
10:41
|
(1) Я не через СКД делаю
|
|||
3
leonidk
10.08.18
✎
10:48
|
||||
4
Deon
10.08.18
✎
10:51
|
Тут, похоже, рекурсия. И запрос строится по каждой группе иерархии
|
|||
5
mistеr
10.08.18
✎
11:49
|
(2) тогда не парь мозг и нумеруй при выводе.
Понадобится стек номеров уровней, можно реализовать массивом. |
|||
6
Alex70
10.08.18
✎
12:15
|
(5) Можно пример?
|
|||
7
mistеr
10.08.18
✎
13:46
|
(6)
Номера = Новый Массив; // При выборке следующего уровня группировки: Номера.Добавить(0); // При получении очередной строки из выборки; Номера[Номера.ВГраница()] = Номера[Номера.ВГраница()] + 1; // При завершении выборки и возврате на предыдущий уровень: Номера.Удалить(Номера.ВГраница()); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |