| 
    
            
         
         | 
    
  | 
Запрос для работы с иерархическим справочником | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        tg30000    
     14.10.11 
            ✎
    09:46 
 | 
         
        Сделал запрос к иерархическому справочнику , например "Склады"
  
        Запрос работает, но получается что в справочнике есть и группы и элементы... Так вот : Группа=>Элемент все вроде нормально выводит ,но в последней группе например 3 элемента всего ,он их выводит, а элементы без груп помещает ниже и получается вузуально в последней группе не 3 и 3+количество элементов не входящих ни в одну группу.. подскажите как можно это оформить удобнее? Текст запроса ниже... &НаСервереБезКонтекста Процедура ПолучитьДанныеСправочника(ТабДок); ТабДок.Очистить(); Запрос =Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | Склады.Код, | Склады.Наименование, | Склады.ЭтоГруппа |ИЗ | Справочник.Склады КАК Склады | |УПОРЯДОЧИТЬ ПО |Склады.ЭтоГруппа ИЕРАРХИЯ, |Наименование"; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Макет = Отчеты.ПолучениеДанныхСправочников.ПолучитьМакет("Макет"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьГруппа = Макет.ПолучитьОбласть("Группа"); ОбластьЭлемент = Макет.ПолучитьОбласть("Элемент"); ТабДок.Вывести(ОбластьШапка); Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда Обл= ОбластьГруппа; Иначе Обл= ОбластьЭлемент; КонецЕсли; Обл.Параметры.Заполнить(Выборка); ТабДок.Вывести(Обл); КонецЦикла; КонецПроцедуры  | 
|||
| 
    1
    
        mikecool    
     14.10.11 
            ✎
    09:52 
 | 
         
        нафига было группы создавать? имхо - правильнее подчинение элементам     
         | 
|||
| 
    2
    
        tg30000    
     14.10.11 
            ✎
    09:54 
 | 
         
        (1) в смысле зачем пользователи создавали группы? Если об этом, то так было сделано давно, а сейчас нужно сделать отчет, вот и встал вопрос.
  
        Или я что неправильно в коде написал?  | 
|||
| 
    3
    
        catena    
     14.10.11 
            ✎
    10:00 
 | 
         
        (0)"как можно это оформить удобнее"
  
        Выводить с уровнями?  | 
|||
| 
    4
    
        tg30000    
     14.10.11 
            ✎
    10:02 
 | 
         
        (3) Ну как сделать что бы отдельно вывести те элементы справочника ,которые не входят ни в одну группу , а просто в корневом каталоге находятся. А то сейчас она выводятся прямо тиже элементов последней группы, и кажется что в этой последней группе много элементов, хотя по факту их там к примеру 3. Я об этом.     
         | 
|||
| 
    5
    
        tg30000    
     14.10.11 
            ✎
    10:05 
 | 
         
        Ну сейчас так:
  
        Группа№1 1 2 3 Группа№2 1 2 3 стол стул Где "стол,стул" элементы не входящие в группы, как их отделить ? например так: Группа№1 1 2 3 Группа№2 1 2 3 стол стул  | 
|||
| 
    6
    
        tg30000    
     14.10.11 
            ✎
    10:06 
 | 
         
        ну что бы пользователь визуально видел что они не относятся к группе №2 ?     
         | 
|||
| 
    7
    
        tg30000    
     14.10.11 
            ✎
    10:08 
 | 
         
        В скд можно сделать, но хочется понять, как без СКД сделать..     
         | 
|||
| 
    8
    
        Cube    
     14.10.11 
            ✎
    10:10 
 | 
         
        (7) Тебя научить отступ делать в макете что-ли?     
         | 
|||
| 
    9
    
        tg30000    
     14.10.11 
            ✎
    10:15 
 | 
         
        (8) чем отступ поможет, если выводятся элементы? Может я что не так понимаю конечно, но все же..     
         | 
|||
| 
    10
    
        tg30000    
     14.10.11 
            ✎
    10:18 
 | 
         
        (8)
  
        Шапка => Группа => код //наименование Элемент => код //наименование Гда там отступишь?  | 
|||
| 
    11
    
        Cube    
     14.10.11 
            ✎
    10:21 
 | 
||||
| 
    12
    
        tg30000    
     14.10.11 
            ✎
    10:23 
 | 
         
        (11)Нет так не получится, смысл то в том что отступятся и элементы в самой последней группе и опять будут сливаться....     
         | 
|||
| 
    13
    
        tg30000    
     14.10.11 
            ✎
    10:26 
 | 
         
        получается сейчас у меня так...
  
        Группа№1 1 2 3 ............... ПоследняяГруппа 1 2 3 Стол Стул Где "стол,стул" элементы не входящие в группы..!  | 
|||
| 
    14
    
        catena    
     14.10.11 
            ✎
    10:28 
 | 
         
        ТабДок.Вывести(Обл, Выборка.Уровень());
  
        + автогруппировка строк в 8.2 не работают?  | 
|||
| 
    15
    
        tg30000    
     14.10.11 
            ✎
    10:29 
 | 
         
        (14) Попробую,спасибо!     
         | 
|||
| 
    16
    
        tg30000    
     14.10.11 
            ✎
    10:37 
 | 
         
        (14)
  
        Что-то без зменений... ТабДок.Вывести(Обл, Выборка.Уровень());  | 
|||
| 
    17
    
        catena    
     14.10.11 
            ✎
    10:39 
 | 
         
        (16)     ТабДок.НачатьАвтогруппировкуСтрок();
  
        ТабДок.ЗакончитьАвтогруппировкуСтрок(); не забыл?  | 
|||
| 
    18
    
        catena    
     14.10.11 
            ✎
    10:40 
 | 
         
        первое совсем перед выводом, второе совсем после вывода всего табдока.     
         | 
|||
| 
    19
    
        tg30000    
     14.10.11 
            ✎
    10:40 
 | 
         
        (17) Попробую)     
         | 
|||
| 
    20
    
        Cube    
     14.10.11 
            ✎
    10:43 
 | 
         
        (16) Что, совсем не жуётся? Ну давай я пожую:
  
        Из синтаксис-помощника: ТабличныйДокумент (SpreadsheetDocument) Вывести (Put) Синтаксис: Вывести(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>) Параметры: <Таблица> (обязательный) Тип: ТабличныйДокумент; ПолеТабличногоДокумента. Выводимая таблица. <Уровень> (необязательный) Тип: Число. Уровень используется для автоматической группировки строк табличного документа. Соседние строки с одинаковым уровнем будут отнесены к одной группе. Строки с минимальным уровнем в группу не объединяются. <ИмяГруппы> (необязательный) Тип: Строка. Название группы, к которой относятся выводимые строки. Значение по умолчанию: Пустая строка <Открыта> (необязательный) Тип: Булево. Истина - выведенная группа будет открыта, Ложь - группа будет выведена в свернутом виде. Значение по умолчанию: Истина Возвращаемое значение: Тип: ОбластьЯчеекТабличногоДокумента. Область, в которую был осуществлен вывод. Описание: Выводит табличный документ в результирующий табличный документ, добавляя его со следующей строки вслед за самой нижней выведенной строкой, начиная с первой колонки. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: ТабДок = Новый ТабличныйДокумент; Секция = ТабДок.ПолучитьОбласть("R1"); Секция.Область("R1C1").Текст = "Численность сотрудников"; ТабДок.НачатьАвтогруппировкуСтрок(); ТабДок.Вывести(Секция,1,"Группа",Истина); Итого = 0; Для Н=1 По 3 Цикл Значение = Н; Итог = 0; Секция.Область("R1C1").Текст = "Отдел "+Н; Секция.Область("R1C2").Текст = ""; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Секция.Область("R1C1").Текст = "Группа"; Секция.Область("R1C2").Текст = "Численность"; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Для К=1 По 10 Цикл Секция.Область("R1C1").Текст = "А"+Н+К; Секция.Область("R1C2").Текст = Значение; ТабДок.Вывести(Секция,3,"Группа 2",Истина); Итог = Итог + Значение; Значение = Значение + 10; КонецЦикла; Секция.Область("R1C1").Текст = "Итого"+Н; Секция.Область("R1C2").Текст = Итог; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Секция.Область("R1C1:R1C2").Текст = ""; ТабДок.Вывести(Секция); Итого = Итого + Итог; КонецЦикла; Секция.Область("R1C1").Текст = "Всего:"; Секция.Область("R1C2").Текст = Итого; ТабДок.Вывести(Секция,1,"Группа",Истина); ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ИтогиСнизу = Истина; ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать("Пример использования верт. автогруппировки");  | 
|||
| 
    21
    
        tg30000    
     14.10.11 
            ✎
    10:46 
 | 
         
        (18)
  
        (20) Все сделал.Большое спасибо всем!) Всем хорошего дня!  | 
|||
| 
    22
    
        tg30000    
     14.10.11 
            ✎
    13:21 
 | 
         
        В общем если кому нужно то получилось так...
  
        &НаКлиенте Процедура Сформировать(Команда) ПолучитьДанныеСправочника(ТабДок); КонецПроцедуры //&НаСервереБезКонтекста Процедура ПолучитьДанныеСправочника(ТабДок); ТабДок.Очистить(); Макет = Отчеты.а01ПолучениеДанныхСправочников1.ПолучитьМакет("Макет"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьГруппа = Макет.ПолучитьОбласть("Группа"); ОбластьЭлемент = Макет.ПолучитьОбласть("Элемент"); ОбластьЭлементБГ = Макет.ПолучитьОбласть("ЭлементБГ"); ТабДок.Вывести(ОбластьШапка); Выборка = Справочники.Склады.ВыбратьИерархически(); ОбластьЭлемент=Макет.ПолучитьОбласть("Элемент"); ЭлементБГ = Макет.ПолучитьОбласть("ЭлементБГ"); ТабДок.НачатьАвтогруппировкуСтрок(); Пока Выборка.Следующий() Цикл Если Не Выборка.ЭтоГруппа и Выборка.Родитель.Пустая() Тогда ОбластьЭлементБГ.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьЭлементБГ, Выборка.УровеньВВыборке()); Иначе Если Выборка.ЭтоГруппа Тогда ОбластьГруппа.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьГруппа, Выборка.УровеньВВыборке()); Иначе ОбластьЭлемент.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьЭлемент, Выборка.УровеньВВыборке()); КонецЕсли; КонецЕсли; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); КонецПроцедуры  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |