|
Выборка всех родителей номенклатуры | ☑ | ||
---|---|---|---|---|
0
Falex
19.04.14
✎
22:45
|
Здравствуйте. Можно ли написать одним запросом решение следующей задачи.
Есть регистр сведений, где хранится соответствие склада к группе номенклатуре. На входе задачи имеется список номенклатуры. Можно ли в запросе выбрать сопоставление номенклатура (из входных данных) - склад из регистра. (если будет несколько, то максимум) Проблема заключается в том, что родитель в регистре для данной номенклатуры может быть указан любой из иерархии. |
|||
1
neo_matrix_123
19.04.14
✎
22:53
|
в смысле в регистре не родитель самой номенклатуры, а любой уровень иерархии?
|
|||
2
zulu_mix
19.04.14
✎
22:55
|
решение практически любой задачи можно написать одним запросом
|
|||
3
zulu_mix
19.04.14
✎
22:59
|
вопрос только в том, сколько экранов будет занимать текст. 5 строк, 3 экрана или 42 экрана
|
|||
4
Falex
19.04.14
✎
23:40
|
да.любой уровень. подскажите как оптимальнее запрос написать?
|
|||
5
neo_matrix_123
20.04.14
✎
00:47
|
можно попробовать склеить таблицу номенклатуры, точнее только владельцев в иерархии (этогруппа = истина) с таблицей записей регистра
|
|||
6
PCcomCat
20.04.14
✎
01:35
|
Не знаю, поможет ли, но я когда-то прайс делала с выборкой родителей. Текст:
Запрос = Новый Запрос("ВЫБРАТЬ |{ВЫБРАТЬ | СправочникНоменклатура.Ссылка КАК Товар, | ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен, | ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, | Остатки.КоличествоОстаток КАК Остаток} | | СправочникНоменклатура.Ссылка, | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ЦеныНоменклатурыСрезПоследних.Валюта, | ЦеныНоменклатурыСрезПоследних.Цена, | Остатки.КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СправочникНоменклатура | {ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата,Счет в иерархии (&Счет),,Субконто2 = &Склад) КАК Остатки | ПО Остатки.Субконто1 = СправочникНоменклатура.Ссылка} | {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,ТипЦен В (&ТипЦен)) КАК ЦеныНоменклатурыСрезПоследних | ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СправочникНоменклатура.Ссылка} | | {ГДЕ | СправочникНоменклатура.Ссылка КАК Товар, | СправочникНоменклатура.Ссылка В ИЕРАРХИИ(&Номенклатура) | И Остатки.Организация = &Организация} |ГДЕ | СправочникНоменклатура.Ссылка В ИЕРАРХИИ(&Номенклатура)" ); Если ПоОстаткам тогда Запрос.Текст = Запрос.Текст + (" | И (Остатки.КоличествоОстаток>0 или СправочникНоменклатура.Ссылка.ЭтоГруппа=Истина)" ); КонецЕсли; Запрос.Текст = Запрос.Текст + (" | |АВТОУПОРЯДОЧИВАНИЕ" ); |
|||
7
romix
20.04.14
✎
01:39
|
(0) Родитель.Родитель.Родитель... по-моему можно вызывать сколько угодно раз, система даст пустые значения, если иерархия не глубока.
Также можно задать на вход запроса элемент и всех родителей. |
|||
8
PCcomCat
20.04.14
✎
01:43
|
(7) Главное угадать, сколько раз про Родителя вспоминать!
|
|||
9
Ерепень
20.04.14
✎
07:18
|
связать по в иерархии ещё не было?
|
|||
10
Falex
20.04.14
✎
16:55
|
Что вы под этим подразумеваете?
|
|||
11
Wobland
20.04.14
✎
17:00
|
(10) фигню, я уже проверил ;)
|
|||
12
shuhard
20.04.14
✎
17:18
|
(10) буквально то, что написано в (9)
|
|||
13
Falex
21.04.14
✎
09:53
|
Т.е. ответ никак в запрос? )
Только потом результат обрабатывать? |
|||
14
vovus
21.04.14
✎
10:02
|
В типовой выборку родителей видел через запрос
.Родитель .Родитель.Родитель И так далее по этому принципу выбирается 5 уровней, если последнее поле не пустое, запрос выполняется еще раз (через цикл) |
|||
15
Tarlich
21.04.14
✎
10:06
|
Отбор Номенклатура принадлежит группе &гРуппа
Склад = &Скелад если пустая выборка .... не то? |
|||
16
azt-yur
21.04.14
✎
10:09
|
Посылай в запрос массив из самой номенклатуры и всех вышестоящих родителей. И в запросе условие:
Номенклатура В (&МассивНоменклатуры) В типовых так реализовано для счетов учета номенклатуры |
|||
17
Tarlich
21.04.14
✎
10:13
|
номенклатура В ИЕРАРХИИ ...
|
|||
18
sdfqwe
21.04.14
✎
10:27
|
Пример из типовой:
Функция ПолучитьСписокВышеСтоящихГрупп(ЭлементСправочника) Экспорт Результат = Новый Массив; Если НЕ ЗначениеЗаполнено(ЭлементСправочника) Тогда Возврат Результат; КонецЕсли; МетаданныеСправочника = ЭлементСправочника.Метаданные(); Если НЕ МетаданныеСправочника.Иерархический Тогда Возврат Результат; КонецЕсли; ИмяСправочника = МетаданныеСправочника.Имя; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Справочник1.Родитель КАК Родитель1, | Справочник2.Родитель КАК Родитель2, | Справочник3.Родитель КАК Родитель3, | Справочник4.Родитель КАК Родитель4, | Справочник5.Родитель КАК Родитель5 |ИЗ | Справочник." + ИмяСправочника + " КАК Справочник1 | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК Справочник2 | ПО (Справочник2.Ссылка = Справочник1.Родитель) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК Справочник3 | ПО (Справочник3.Ссылка = Справочник2.Родитель) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК Справочник4 | ПО (Справочник4.Ссылка = Справочник3.Родитель) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК Справочник5 | ПО (Справочник5.Ссылка = Справочник4.Родитель) |ГДЕ | Справочник1.Ссылка = &Ссылка"; ТекущийЭлемент = ЭлементСправочника; Пока ЗначениеЗаполнено(ТекущийЭлемент) Цикл Запрос.УстановитьПараметр("Ссылка", ТекущийЭлемент); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Для Индекс = 1 по 5 Цикл ТекущийЭлемент = Выборка["Родитель" + Индекс]; Если ЗначениеЗаполнено(ТекущийЭлемент) Тогда Результат.Добавить(ТекущийЭлемент); Иначе Прервать; КонецЕсли; КонецЦикла; Иначе ТекущийЭлемент = Неопределено; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции |
|||
19
vovus
21.04.14
✎
10:30
|
(18) да-да, как раз вот это я вспомнил из типовой
|
|||
20
azt-yur
21.04.14
✎
10:46
|
(18) потом этот список и передается в запрос по регистру сведений с условием как в (16)
|
|||
21
azt-yur
21.04.14
✎
10:49
|
и по-моему как то слишком замудрили в типовых эту функцию.
так проще и надежнее: Результат = Новый Массив; ТекущийЭлемент = ЭлементСправочника; Пока ЗначениеЗаполнено(ТекущийЭлемент) Цикл Результат.Добавить(ТекущийЭлемент); ТекущийЭлемент = ТекущийЭлемент.Родитель; КонецЦикла; Возврат Результат; |
|||
22
sdfqwe
21.04.14
✎
10:53
|
(21) без запроса все просто, но народу надо именно с ним. Вдруг СКД или есче что.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |