Вход | Регистрация


1С:Предприятие ::

Метки: 

помощь по запросу

Я
   NordMad
 
10.08.18 - 13:17
Есть запрос который выдает такой вот результат деревом:
http://prntscr.com/kgznkw
мне нужно это дерево выгрузить на форму для интерактивной работы, но нужно убрать дублиривание в поле номенклатура. т.е. либо сделать так чтобы поле Item открывалось в нижнем уровне номенклатуры (ещё один уровень иерархии добавить) либо пронумеровать повторяющиеся item в группе и скрыть УсловнымОформлением.. второй вариант вроде бы кажется проще.. но ни тот ни тот не знаю как реализовать. Вариант обхода дерева после выгрузки на поле формы - крайний, если не получится запросом сделать.
 
  Рекламное место пустует
   NordMad
 
1 - 10.08.18 - 13:20
(0) добавлю скрин формы после загрузки дерева: http://prntscr.com/kgzqbu
   NordMad
 
2 - 10.08.18 - 13:21
(1) может тут понятнее будет что нужно получить в результате. то есть либо в таком виде как есть, но скрыть дублирующую номенклатуру и оставить item как он на скрине, либо убрать дубли, но item чтобы был под "+" скрыт как ещё один более нижний уровень от номенклатуры
   NordMad
 
3 - 10.08.18 - 13:32
(2) никто не знает, или непонятно че хочу?:)
   Ненавижу 1С
 
4 - 10.08.18 - 13:42
В СКД состав выводимых полей настраивается
   1Сергей
 
5 - 10.08.18 - 13:44
(2) добавь айтомы в итоги
   AnisaL
 
6 - 10.08.18 - 13:48
(3) нужно убрать группировки, добавить итоги
   AnisaL
 
7 - 10.08.18 - 14:01
(3) вы поняли как нужно сделать? нужно из запроса убрать секцию "Сгруппировать ПО", а добавить "Итоги ПО Номенклатура.Ссылка, ВложенныйЗапрос.item"
   spiller26
 
8 - 10.08.18 - 14:16
(0) Это УФ или обычные формы? Куда ты хочешь выгрузить на форму? В Дерево Значений?
   NordMad
 
9 - 10.08.18 - 14:20
(8) уф
   NordMad
 
10 - 10.08.18 - 14:21
(7) сейчас попробую
 
 
   NordMad
 
11 - 10.08.18 - 14:23
(7) http://prntscr.com/kh0jfx вот что получилось в итоге, то есть дублирование не пропало, но появилась ненужная вложенность элементов
   NordMad
 
12 - 10.08.18 - 14:24
(4) СКД подошло бы если бы нужно было бы только для отображения, там вопросов нету. всё просто, но нужно чтобы можно было бы менять данные, по этому использую форму, на ней ДеревоЗначений
   NordMad
 
13 - 10.08.18 - 14:25
(8) в (1)  привел скриншот формы в которую выгружаю результат запроса
   ColonelAp4u
 
14 - 10.08.18 - 14:27
(12) если хочешь дерево на форме, то итем помещай под номенклатурой а не в отдельной колонке
   spiller26
 
15 - 10.08.18 - 14:28
(9) Вот мой код.
    Если ТаблицаОборот.Количество() > 0 Тогда
        
        ТаблицаОборотСвертка = ТаблицаОборот.Скопировать();
        ТаблицаОборотСвертка.Свернуть("Номенклатура, КоличествоОстаток, СуммаОстаток", "");
        
        ОписаниеТиповДоков = Новый ОписаниеТипов;
        ОписаниеТиповДоков.Типы().Добавить("ДокументСсылка.ВводНачальныхОстатков");
        ОписаниеТиповДоков.Типы().Добавить("ДокументСсылка.ПоступлениеТоваровУслуг");

        ДеревоОстатковНоменклатуры = Новый ДеревоЗначений;
        ДеревоОстатковНоменклатуры.Колонки.Добавить("Номенклатура",      Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
        ДеревоОстатковНоменклатуры.Колонки.Добавить("КоличествоОстаток", Новый ОписаниеТипов("Число"));
        ДеревоОстатковНоменклатуры.Колонки.Добавить("СуммаОстаток",      Новый ОписаниеТипов("Число"));
        //

        ДеревоОстатковНоменклатуры.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
        ДеревоОстатковНоменклатуры.Колонки.Добавить("Уровень",       Новый ОписаниеТипов("Число"));//для отображения картинок и гуппировка

        //

        ДеревоОстатковНоменклатуры.Колонки.Добавить("СуммаРеализации",      Новый ОписаниеТипов("Число"));
        
        Для Каждого СтрОборотСвертка Из ТаблицаОборотСвертка Цикл
            СтрокаВерхнегоУровня = ДеревоОстатковНоменклатуры.Строки.Добавить();
            //

            СтрокаВерхнегоУровня.Уровень = 2;
            СтрокаВерхнегоУровня.Представление = Строка(СтрОборотСвертка.Номенклатура);
            СтрокаВерхнегоУровня.Номенклатура = СтрОборотСвертка.Номенклатура;
            СтрокаВерхнегоУровня.КоличествоОстаток = СтрОборотСвертка.КоличествоОстаток;
            СтрокаВерхнегоУровня.СуммаОстаток = СтрОборотСвертка.СуммаОстаток;
            
            ПараметрыОтбора = Новый Структура();
            ПараметрыОтбора.Вставить("Номенклатура", СтрОборотСвертка.Номенклатура);
            //

            ТаблицаОборотДетали = ТаблицаОборот.Скопировать(ПараметрыОтбора);
            ТаблицаОборотДетали.Сортировать("Период Возр");
            Для Каждого СтрОборотДетали Из ТаблицаОборотДетали Цикл
                СтрокаДереваДетали = СтрокаВерхнегоУровня.Строки.Добавить();
                //

                СтрокаДереваДетали.Уровень = 4;
                СтрокаДереваДетали.Представление = "";
                СтрокаДереваДетали.Номенклатура = СтрОборотДетали.Номенклатура;
                СтрокаДереваДетали.СуммаПриход = СтрОборотДетали.СуммаПриход;
            КонецЦикла;
        КонецЦикла;    
        ЗначениеВРеквизитФормы(ДеревоОстатковНоменклатуры, "ДеревоОстатков");
    КонецЕсли;
   NordMad
 
16 - 10.08.18 - 14:29
(14) верно, но так как дублирование не исключено в итоге получим вместо одной номенклатуры + 3 айтема - 3 номенклатуры с 1м айтемом в каждой:) могу скрин показать что будет если не менять запрос, а поменять очередность колонок в элементе на форме
   NordMad
 
17 - 10.08.18 - 14:32
(15) с обходом дерева понятно всё:) я как раз про это и говорил в (0). просто в вашем же коде видно что много буков, а если был бы вариант сделать это всё запросом, было бы и быстрее и не громоздко. вот по этому и спросил, или я не понимаю как это сделать, или такую аферу не провернуть в данной ситуации (кстати вместо вложенных циклов можно использовать рекурсию, меньше текста.. но не оч рекомендуемо)
   spiller26
 
18 - 10.08.18 - 14:35
(17) Вот такое выходит примерно
https://prnt.sc/kh0nuz

Вообще можно и в запросе, по группировкам просто выводи.
У меня усложнено тем, что мне нужно было выводить обороты по убыванию.
   NordMad
 
19 - 10.08.18 - 14:36
(18) верю. примерно такой метод и использую если не получится скомпоновать запросом.
   spiller26
 
20 - 10.08.18 - 14:40
(18) вот скрин моей реализации на форме
https://prnt.sc/kh0r9l
   NordMad
 
21 - 10.08.18 - 14:41
http://prntscr.com/kh0rqx подскажите а так вот можно сделать? тогда можно было бы легко убрать лишнее УсловнымОформлением
   spiller26
 
22 - 10.08.18 - 14:46
(21) При выводе счетчик ставь.

(19) Вот тебе из запроса, только
    ОписаниеТиповИдентификатора = Новый ОписаниеТипов;
    ОписаниеТиповИдентификатора.Типы().Добавить("Строка");
    ОписаниеТиповИдентификатора.Типы().Добавить("СправочникСсылка.Номенклатура");

    ДеревоРС = Новый ДеревоЗначений;
    ДеревоРС.Колонки.Добавить("НомерСтроки",         Новый ОписаниеТипов("Число"));
    ДеревоРС.Колонки.Добавить("НоменклатураЗапрос",  ОписаниеТиповИдентификатора);
    ДеревоРС.Колонки.Добавить("Номенклатура",        Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    ДеревоРС.Колонки.Добавить("РегистраторДата",     Новый ОписаниеТипов("Дата"));
    ДеревоРС.Колонки.Добавить("РегистраторНомер",    Новый ОписаниеТипов("Строка"));
    ДеревоРС.Колонки.Добавить("СтрокаИД",            Новый ОписаниеТипов("УникальныйИдентификатор"));
    ДеревоРС.Колонки.Добавить("СтрокаИДКвоты",       Новый ОписаниеТипов("УникальныйИдентификатор"));
    //

    ДеревоРС.Колонки.Добавить("Представление",       Новый ОписаниеТипов("Строка"));
    ДеревоРС.Колонки.Добавить("Уровень",             Новый ОписаниеТипов("Число"));
    ДеревоРС.Колонки.Добавить("КоличествоЗапрос",    Новый ОписаниеТипов("Число"));
    ДеревоРС.Колонки.Добавить("КоличествоПредложено",Новый ОписаниеТипов("Число"));

//

//тут запрос
//

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

        СтрокаВерхнегоУровня.Уровень = 0;
        СтрокаВерхнегоУровня.Представление = "№ " + Строка(ВыборкаРегистратор.РегистраторНомер)  + " от "+ Строка(ВыборкаРегистратор.РегистраторДата);
        
        ВыборкаНоменклатураЗапрос = ВыборкаРегистратор.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока ВыборкаНоменклатураЗапрос.Следующий() Цикл
            СтрокаДереваЗапрос = СтрокаВерхнегоУровня.Строки.Добавить();
            СтрокаДереваЗапрос.НомерСтроки         = ВыборкаНоменклатураЗапрос.НомерСтроки;
            СтрокаДереваЗапрос.НоменклатураЗапрос  = ВыборкаНоменклатураЗапрос.НоменклатураЗапрос;
            СтрокаДереваЗапрос.СтрокаИД            = ВыборкаНоменклатураЗапрос.СтрокаИД;
            //

            СтрокаДереваЗапрос.Уровень = 1;
            СтрокаДереваЗапрос.Представление = Строка(ВыборкаНоменклатураЗапрос.НоменклатураЗапрос);
            СтрокаДереваЗапрос.КоличествоЗапрос = ВыборкаНоменклатураЗапрос.КоличествоЗапрос;
            СтрокаДереваЗапрос.КоличествоПредложено = ВыборкаНоменклатураЗапрос.КоличествоПредложено;
            
            ВыборкаДетальныеЗаписи = ВыборкаНоменклатураЗапрос.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Номенклатура) Тогда
                    СтрокаДерева = СтрокаДереваЗапрос.Строки.Добавить();
                    СтрокаДерева.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
                    //

                    СтрокаДерева.Уровень = 2;
                    СтрокаДерева.Представление = Строка(ВыборкаДетальныеЗаписи.Номенклатура);
                    СтрокаДерева.КоличествоПредложено = ВыборкаДетальныеЗаписи.КоличествоПредложено;
                    СтрокаДерева.СтрокаИД = ВыборкаДетальныеЗаписи.СтрокаИД;
                    СтрокаДерева.СтрокаИДКвоты = ВыборкаДетальныеЗаписи.СтрокаИДКвоты;
                КонецЕсли;    
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
    ЗначениеВРеквизитФормы(ДеревоРС, "СписокПредложений");
   NordMad
 
23 - 10.08.18 - 14:48
(22) при выводе в смысле при обходе дерева?:) а в запросе нельзя такое поле вычисляемое прикрутить?
   spiller26
 
24 - 10.08.18 - 14:55
(23) нет
   spiller26
 
25 - 10.08.18 - 15:00
(23) Ну если хочешь заморочиться, то вот ссылка Книга знаний: Нумерация строк в запросе

Честно не целесообразно, т.к. долго будет запрос обрабатывать.
Ну ещё можно заморочиться через СКД попробовать всё провернуть, а затем выводить в дерево.
   NordMad
 
26 - 10.08.18 - 16:07
(25) читал статейку. не то:) там сквозная нумерация, а интересно было бы нумерация сначала для каждого нижнего уровня (на уровне элементов) чтобы настроитть потом видимость.
а как через СКД? там совсем мрачно? визуально понятно как накидать, а программно нужную группировку настроить наверное не менее геморно чем обход дерева сделать и почикать лишнее



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует