|
v7: глюк или не глюк? | ☑ | ||
---|---|---|---|---|
0
gimbat
27.12.11
✎
15:00
|
Всем привет, с наступающим Новым...
Версия 1с v7.7 (7.70.027) Торговля + склад редакция 9.2 оптово-розничная конфигурация (7.70.944) Проблема такая. Выполняю запрос: обрабатывать непомеченныенаудаление; Тек = Справочник.номенклатура.текущийэлемент; Номенклатура = Справочник.номенклатура.наименование; Код = Справочник.номенклатура.код; группа = Справочник.номенклатура.родитель; группировка тек; В результате колонка запроса группа остается не заполненной (пустая) для тех записей справочника, которые являются группами и имеют родителем группу более верхнего уровня, а для записей справочника, которые не являются группами, колонка группа заполняется корректно. 1. Хотелось бы знать это проблема в кривизне моих рук или это присущий данной версии 1с глюк. 2. Если руки у меня кривые: подскажите какой запрос более правильный, чтобы я далее из результата запроса мог получить иерархию групп. Заранее благодарен. |
|||
1
Ёпрст
27.12.11
✎
15:01
|
(0) это твоё незнание
|
|||
2
andrewks
27.12.11
✎
15:02
|
боян
|
|||
3
Ёпрст
27.12.11
✎
15:03
|
запрос по справочнику обрабатывает ТОЛЬКО элементы справочника и достраивает группы на выходе.
Поэтому реквизиты групп ты не видишь. |
|||
4
Ёпрст
27.12.11
✎
15:04
|
группировка тек без групп;
вот так выполни - увидишь ровно столько, сколько запрос перебрал записей. Всю остальную иерархию он достраивает потом. |
|||
5
gimbat
27.12.11
✎
15:12
|
Я правильно понял, вот нижеприведенным способом (которым я пытался увидеть) я группы не увижу, а поможет мне только запрос.группировка?
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗ,1,0); //ТЗ таблица на форме, где я вижу "результат" запроса |
|||
6
Ёпрст
27.12.11
✎
15:16
|
(5) выкини вот это:
группа = Справочник.номенклатура.родитель; и увидишь свои группы (правда не все, если есть пустые группы - без элементов которые,их не увидишь), но, без атрибутов . |
|||
7
gimbat
27.12.11
✎
15:19
|
(6)
ну это наверное не то что мне надо, я ведь не смогу отличить группу от простой номенклатуры |
|||
8
Ёпрст
27.12.11
✎
15:19
|
(7) метод запроса ЭтоГруппа поможет тебе в этом.
|
|||
9
gimbat
27.12.11
✎
15:21
|
(8)
и ... этот метод я смогу использовать при обходе выборки запроса, правильно? |
|||
10
gimbat
27.12.11
✎
15:23
|
(8)
и смириться с тем, что для получения иерархии групп, мне надо выкачать всю номенклатуру, правильно? |
|||
11
Ёпрст
27.12.11
✎
15:23
|
(9) ага
|
|||
12
Ёпрст
27.12.11
✎
15:23
|
(10) в смысле ? А тебе не это надо ?
|
|||
13
gimbat
27.12.11
✎
15:26
|
мне это надо, но желательно было бы, без лишних операций...
т.е. еси справочник 100000 записей, а групп в общей сложности всего 40, мне надо создать выборку 100000 (ну или там чуток меньше), и в ней искать свои 40. Правильно я понял? |
|||
14
gimbat
27.12.11
✎
15:29
|
можно сказать по другому, для моей цели (иерархия групп), не нужно делать запрос, а сразу перебрать справочник?
|
|||
15
Ёпрст
27.12.11
✎
15:32
|
тебе нужно получить только группы из запроса, или что ?
|
|||
16
gimbat
27.12.11
✎
15:39
|
сформулирую так: мне нужно получить список групп с учетом иерархии, для дальнейшей обработки.
Ищу самый быстрый способ (количество строк в справочнике более 70000) |
|||
17
gimbat
27.12.11
✎
15:41
|
имхо, считал что запросом это будет выполняться быстрее.
|
|||
18
Ёпрст
27.12.11
✎
15:43
|
select id as [Спр $Справочник.Номенклатура] from $Справочник.Номенклатура where isfolder = 1
вот тебе, быстрее некуда - поимеешь список всех групп вообще. |
|||
19
gimbat
27.12.11
✎
15:47
|
(18)
Запрос[1] : Ожидается '=' перед 'id' |
|||
20
Ёпрст
27.12.11
✎
15:47
|
||||
21
gimbat
27.12.11
✎
15:52
|
Вывод: средствами языка запросов 1с это не раелизуется?
|
|||
22
gimbat
27.12.11
✎
15:54
|
Вывод: средствами языка запросов 1с, это (16) не реализуется?
|
|||
23
Ёпрст
27.12.11
✎
15:55
|
(22) реализуется. Только запросом ты не получишь никогда все группы.
Только те, в которых есть элементы. |
|||
24
Ёпрст
27.12.11
✎
15:56
|
но, штатно, в разы быстрее получить рекурсивной функцией.
|
|||
25
gimbat
27.12.11
✎
18:36
|
спасибо за ответ.
небольшую часть пустот в моем мозгу заполнили)) еси бы намекнули за счет чего в данном контексте рекурсивная функция получает многоразовое преимущестов, был премного благодарен. |
|||
26
Ёпрст
27.12.11
✎
18:47
|
(25)выборка +использовать ИспользоватьРодителя+ ВключатьПодчиненные(0) или ПолучитьЭлемент(0), если группа - вызвать рекурсивно , если элемент - прервать выборку.
|
|||
27
gimbat
27.12.11
✎
19:08
|
примерно так?
ТЗ.очистить(); ТЗ.Новаяколонка("Код"); ТЗ.Новаяколонка("Группа"); ТЗ.Новаяколонка("ВУ"); Спр = СоздатьОбъект("Справочник.номенклатура"); Спр.выбратьэлементы(1); Пока Спр.получитьэлемент() =1 Цикл Если спр.этогруппа() =1 Тогда ТЗ.новаястрока(); ТЗ.код = спр.код; ТЗ.группа = спр.наименование; ТЗ.ВУ = спр.родитель; КонецЕсли; КонецЦикла; |
|||
28
Ёпрст
27.12.11
✎
19:37
|
(27) нет
|
|||
29
Ёпрст
27.12.11
✎
19:42
|
Процедура ПоиметьГруппу(ВыбГруппа)
Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.ИспользоватьРодителя(ВыбГруппа); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент(0) = 1 Цикл Если Спр.ЭтоГруппа() = 0 Тогда Возврат; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Группа = Спр.ТекущийЭлемент(); ПоиметьГруппу(ТЗ.Группа) КонецЦикла; КонецПроцедуры |
|||
30
G-Re
27.12.11
✎
21:06
|
(29) Рекурсия это в самом деле сила!
(0) Просто к сведению: глюк(Gluck) с немецкого - счастье. Счастье, что есть этот форум, где своевременно и профессионально ответят на любой вопрос! |
|||
31
gimbat
27.12.11
✎
22:22
|
Сделал, как было предложено (29)
Процедура ПоиметьГруппу(ВыбГруппа) Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.ИспользоватьРодителя(ВыбГруппа); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент(0) = 1 Цикл Если Спр.ЭтоГруппа() = 0 Тогда Возврат; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Группа = Спр.ТекущийЭлемент(); ТЗ.код = Спр.Код; ТЗ.ВУ = Спр.родитель; ПоиметьГруппу(ТЗ.Группа) КонецЦикла; КонецПроцедуры Процедура Сформировать() ТЗ.очистить(); ТЗ.Новаяколонка("Код"); ТЗ.Новаяколонка("Группа"); ТЗ.Новаяколонка("ВУ"); ПоиметьГруппу(""); КонецПроцедуры Хочу доложить работает практически мгновенно. Большое спасибо, что находите время, делиться опытом. Снимаю шляпу! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |