|
Запрос регистра сведений | ☑ | ||
---|---|---|---|---|
0
Deahianaianyrto
22.08.14
✎
10:57
|
Есть непериодический регистр сведений Измерение: ГруппаНоменклатуры, ресурс: ВидЦен
Есть Товар. Необходимо определить ВидЦен для соответствующей группы номенклатуры (в иерархии) Как задать запрос? |
|||
1
User_Agronom
22.08.14
✎
11:00
|
Запрос = новый Запрос;
Запрос.Текст = "тут пишешь текст запроса"; Запрос.УстановитьПараметр("ГруппаНоменклатуры", ЯХЗКакУТебяЭтоБудетОпределятся); Выборка = Запрос.Выполнить().Выбрать(); |
|||
2
Deahianaianyrto
22.08.14
✎
11:02
|
Да нет, параметр - товар, а в регистре сведений ГруппыНоменклатуры и ВидыЦен.
Надо подобрать из какой группы товар и получить соответствующий ВидЦены |
|||
3
ale-sarin
22.08.14
✎
11:04
|
(2) Родитель. Только помните, что у родителя тоже родитель может быть.
|
|||
4
Deahianaianyrto
22.08.14
✎
11:10
|
В том то и дело много родителей
Как условие поставить на товар в группе? |
|||
5
User_Agronom
22.08.14
✎
11:10
|
(2) Ну так измени:
Запрос = новый Запрос; Запрос.Текст = "тут пишешь текст запроса"; Запрос.УстановитьПараметр("Товар", ЯХЗКакУТебяЭтоБудетОпределятся); Выборка = Запрос.Выполнить().Выбрать(); Делов то :) |
|||
6
Deahianaianyrto
22.08.14
✎
11:10
|
(5) А как в запросе поставить условие что товар в группе?
|
|||
7
MaXpaT
22.08.14
✎
11:12
|
(6) Где Таблица.Номенклатура В ИЕРАРХИИ (&Товар)
|
|||
8
Deahianaianyrto
22.08.14
✎
11:14
|
(7) А так будет работать? Ведь по идее наоборот Товар в Иерархии Группа
|
|||
9
User_Agronom
22.08.14
✎
11:17
|
Группы = Новый Массив;
ТоварЗапомнить = Товар; Пока ТоварЗапоминить.Родитель <> Справочник.Номенклатура.Пустая Ссылка цикл Группы.Добавить(товарЗапомнить.Родитель); ТоварЗапоминить = ТоварЗапоминить.Родитель; КонецЦикла; И этот массив передавай параметром. |
|||
10
hhhh
22.08.14
✎
11:19
|
(8) (ВЫБРАТЬ Ссылка Из Справочник.Номенклатура КАК НОменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСВедений.Цены КАК Цены ПО НОменклатура.РОдитель = Цены.ГРуппаНоменклатуры ИЛИ НОменклатура.РОдитель.РОдитель = Цены.ГРуппаНоменклатуры ИЛИ НОменклатура.РОдитель.РОдитель.РОдитель = Цены.ГРуппаНоменклатуры ИЛИ НОменклатура.РОдитель.РОдитель.РОдитель.РОдитель = Цены.ГРуппаНоменклатуры ИЛИ НОменклатура.РОдитель.РОдитель.РОдитель.РОдитель.РОдитель = Цены.ГРуппаНоменклатуры ИЛИ НОменклатура.РОдитель.РОдитель.РОдитель.РОдитель.РОдитель.РОдитель = Цены.ГРуппаНоменклатуры |
|||
11
User_Agronom
22.08.14
✎
11:21
|
(10) И выпал в ошибку. Ты же не знаешь сколько уровней брать?
|
|||
12
MaXpaT
22.08.14
✎
11:24
|
посмотри аналог в типовой бухии 2.0
общиймодуль.БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры() там это сделано примерно как в (10) СписокГрупп = ОбщегоНазначения.ПолучитьСписокВышестоящихГрупп(Номенклатура); Функция ПолучитьСписокВышеСтоящихГрупп(ЭлементСправочника) Экспорт Результат = Новый Массив; Если НЕ ЗначениеЗаполнено(ЭлементСправочника) Тогда Возврат Результат; КонецЕсли; МетаданныеСправочника = ЭлементСправочника.Метаданные(); Если НЕ МетаданныеСправочника.Иерархический Тогда Возврат Результат; КонецЕсли; ИмяСправочника = МетаданныеСправочника.Имя; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Справочник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 Цикл ТекущийЭлемент = Выборка["Родитель" + Индекс]; Если ЗначениеЗаполнено(ТекущийЭлемент) Тогда Результат.Добавить(ТекущийЭлемент); Иначе Прервать; КонецЕсли; КонецЦикла; Иначе ТекущийЭлемент = Неопределено; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции |
|||
13
MaXpaT
22.08.14
✎
11:25
|
ну или как в (9) по-сути тоже самое, выполняться немного дольше будет, зато текста поменьше
|
|||
14
anatoly
22.08.14
✎
11:30
|
(10) рукалицо...
В ИЕРАРХИИ некошерно? (8) да - наоборот, просто поменять местами поле и параметр в той строке |
|||
15
Deahianaianyrto
22.08.14
✎
11:34
|
(9)
Группы = Новый Массив; ТоварЗапомнить = Товар; Пока ТоварЗапомнить.Родитель <> Справочники.Номенклатура.ПустаяСсылка() Цикл Группы.Добавить(ТоварЗапомнить.Родитель); ТоварЗапоминить = ТоварЗапомнить.Родитель; КонецЦикла; Даёт бесконечный цикл |
|||
16
Deahianaianyrto
22.08.14
✎
11:38
|
(14) Говорит что некорректное условие (если поменять местами)
|
|||
17
User_Agronom
22.08.14
✎
11:39
|
(15) А глазки разуть? Самому?
|
|||
18
User_Agronom
22.08.14
✎
11:48
|
Похоже не получается:
Группы = Новый Массив; ТоварЗапомнить = Товар; Пока ТоварЗапомнить.Родитель <> Справочники.Номенклатура.ПустаяСсылка() Цикл Группы.Добавить(ТоварЗапомнить.Родитель); ТоварЗапомнить = ТоварЗапомнить.Родитель; КонецЦикла; Сообщить("найдено "+Группы.Количество()+" элементов"); Работает код |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |