|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
mihco
14.07.11
✎
11:25
|
Как бы выбрать элементы справочника и их родителя верхнего уровня? Что-то не соображу...
|
|||
1
butterbean
14.07.11
✎
11:26
|
забудь
|
|||
2
mihco
14.07.11
✎
11:26
|
хотелось бы, но не могу...
|
|||
3
qeos
14.07.11
✎
11:32
|
через "выбрать" для всех уровней..
|
|||
4
mihco
14.07.11
✎
11:34
|
(3) Такие конструкции Родитель.Родитель.Родитель?
|
|||
5
OldFornit
14.07.11
✎
11:35
|
если отчет на СКД, то выбирать не надо. Достаточно для группировки по этому справочнику указать вид иерархии
|
|||
6
mihco
14.07.11
✎
11:38
|
(5) На СКД. Но не понял про что Вы.
|
|||
7
Fram
14.07.11
✎
11:40
|
(6) если кол-во уровней у справочника определенное кол-во, то условие на каждый уровень, иначе подготовь сначала ТЗ и закинь его в СКД
|
|||
8
unregistered
14.07.11
✎
11:43
|
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример: ТекущийЭлементНоменклатуры = ЭлементНоменклатура; Запрос = Новый Запрос("ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура | |ГДЕ | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры"; Пока Истина Цикл Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Прервать; КонецЕсли; Выборка = Результат.Выбрать(); Выборка.Следующий(); Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; Иначе Сообщить(ТекущийЭлементНоменклатуры); КонецЕсли; КонецЦикла; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; КонецЕсли; КонецЦикла; В данном примере в окно служебных сообщений выводятся все родители для ссылки, записанной в переменную ЭлементНоменклатура. В цикле выбирается по 5 родителей ссылки. Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла. |
|||
9
OldFornit
14.07.11
✎
11:44
|
(6) Вкладка "настройки". В этой вкладке настраиваются отображаемые поля и группировки отчета. Создаешь группировку по необходимому справочнику, два раза щелкаешь по ней и смотришь "тип иерархии".
|
|||
10
Fram
14.07.11
✎
11:46
|
(9) прочитал бы ты (0) внимательнее
|
|||
11
mihco
14.07.11
✎
11:46
|
(9) Так не получится, нужны только группы первого уровня, а не вся иерархия.
Видимо действительно придется готовить ТЗ и ее передавать... |
|||
12
unregistered
14.07.11
✎
11:54
|
ИМХО, проще тогда использовать ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ в запросе и получить первый элемент выборки по группировке с типом ИтогПоИерархии. Это и будет родитель самого верхнего уровня. Если тип первого элемента будет ДетальнаяЗапись, значит этот элемент лежит на самом верхнем уровне иерархии и не имеет родителей (родитель - пустая ссылка).
А вот мутить ради этого СКД, которая стопудово использует теже механизмы, что и ИТОГИ в обычном запросе, как-то излишне. ИМХО. |
|||
13
OldFornit
14.07.11
✎
11:56
|
(10) действительно, ступил. Редко встречался с задачей выборки иерархии именно первого уровня.
Но и тут можно сделать примерно так: [code] выбрать ссылка из справочник как сп1 где ЭтоГруппа = истина и ссылка.родитель = Значение(Справочники.Справочник.ПустаяСсылка()) левое соединение .... [/code] |
|||
14
OldFornit
14.07.11
✎
12:04
|
(13) не, гоню. Точно гоню
|
|||
15
Sarmen
14.07.11
✎
12:08
|
(8) подскажи, пожалуйста, как ты так код в спойлер выделил?
|
|||
16
le_
14.07.11
✎
12:12
|
(13), (15) Тут включен только один тег: 1С.
https://1cers.ru/about.php#newtopic Большие листинги сворачиваются в спойлер автоматически. |
|||
17
Sarmen
14.07.11
✎
12:25
|
Пробую использовать тэг:
|
|||
18
Sarmen
14.07.11
✎
12:26
|
А это с тегом code:
[code] &НаКлиенте Процедура Команда1(Команда) // Вставить содержимое обработчика. Структура = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение ); Записать(Структура); КонецПроцедуры [/code] |
|||
19
Sarmen
14.07.11
✎
12:27
|
тег 1C - работает, тег code - нет
|
|||
20
OldFornit
14.07.11
✎
13:11
|
(0) Всерьез озадачился, как же такое сделать на СКД и все-таки нашел. В книге Хрусталевой "Разработка сложных отчетов" смотри глава 4, пример 7.
|
|||
21
OldFornit
14.07.11
✎
14:13
|
||||
22
Sereja
14.07.11
✎
14:18
|
тема на мисте регулярно появляется.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |