|
Как выбрать данные в зависимости от приоритета? | ☑ | ||
|---|---|---|---|---|
|
0
Ups
30.09.10
✎
15:28
|
Здравствуйте!Подскажите,пожалуйста,как можно выбирать данные в зависимости от приоритета.Запросом из регистра сведений я получаю примерно след таблицу:
Продукция Этап Приоритет Очерёдность Дверь Заготовка 1 Производство дверей Покраска 3 1 Заготовка 4 1 Изготвление 4 2 То есть выстраиваю в порядке приоритета в зависимости от продукции.Продукция может быть номенклатурой,родителем номенклатуры,номенклатурной группой или вообще ничего нет.Далее,я получаю данные из документа.И мне нужно,в зависимости от того,что есть в столбце продукция(сама номенклатура или родитель номенклатуры и т.д.) выбрать соответстующие этапы.И мне непонятно,как это можно сделать.Может у кого-нибудь есть похожий пример? |
|||
|
1
le_
30.09.10
✎
15:33
|
Выбор
Когда Продукция ССЫЛКА Справочник.Номенклатура Тогда //это номенклатура 1 Когда Продукция ССЫЛКА Справочник.НоменклатурныеГруппы Тогда //это номенклатурная группа 2 Когда Продукция.ЭтоГруппа Тогда //это группа из справочника 3 Иначе //это ХЗ Конец КАК Приоритет |
|||
|
2
Ups
30.09.10
✎
15:36
|
Запрос1=Новый Запрос;
Запрос1.Текст="ВЫБРАТЬ | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция, | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Этап, | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Очередность КАК Очередность, | ВЫБОР | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция ССЫЛКА Справочник.Номенклатура | ТОГДА ВЫБОР | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция.ЭтоГруппа | ТОГДА 2 | ИНАЧЕ ВЫБОР | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция = &ПустаяНоменклатура | ТОГДА 4 | ИНАЧЕ 1 | КОНЕЦ | КОНЕЦ | ИНАЧЕ ВЫБОР | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция ССЫЛКА Справочник.НоменклатурныеГруппы | ТОГДА ВЫБОР | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция = &ПустаяНоменклатурнаяГруппа | ТОГДА 4 | ИНАЧЕ 3 | КОНЕЦ | ИНАЧЕ 4 | КОНЕЦ | КОНЕЦ КАК Приоритет |ИЗ | РегистрСведений.ЭтапыПроцессаОбработкиЗаказаНаПродукцию КАК ЭтапыПроцессаОбработкиЗаказаНаПродукцию |УПОРЯДОЧИТЬ ПО | Приоритет, | Очередность"; |
|||
|
3
Ups
30.09.10
✎
15:37
|
Сам запрос я составила.Мне непонятно,как связать это с номенклатурой документа,чтобы выбирались нужные этапы.Ведь в самом регистре может и не быть этой номенклатуры.
|
|||
|
4
le_
30.09.10
✎
15:40
|
(3) А зачем выборка делается из этого регистра, если там может не быть продукции?
Сделай выборку из другого регистра и соедини с табличной частью документа. Или сразу из табличной части документа делай выборку [и если необходимо, соединяй с этим или другим регистром]. |
|||
|
5
Ups
30.09.10
✎
15:42
|
Так в том-то и дело,что если продукции в регистре нет,то просто берутся другие по приоритету этапы.
|
|||
|
6
Ups
30.09.10
✎
15:43
|
Я так понимаю,что мне надо сделать ещё один запрос к документу,выбрать номенклатуру,родителя,номенклатурную группу и как-то связать эти данные с выборкой из регистра,а вот как,я не очень понимаю.
|
|||
|
7
le_
30.09.10
✎
15:46
|
Пример запроса к табличной части документа:
ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Документ, РеализацияТоваровУслугТовары.Номенклатура, РеализацияТоваровУслугТовары.Количество ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары Пример запроса к табличной части документа и связи с регистром сведений по номенклатуре: ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Документ, РеализацияТоваровУслугТовары.Номенклатура, РеализацияТоваровУслугТовары.Количество, РегистрЦен.Цена ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Д, ) КАК ЦеныНоменклатурыСрезПоследних) КАК РегистрЦен ПО РеализацияТоваровУслугТовары.Номенклатура = РегистрЦен.Номенклатура |
|||
|
8
Ups
30.09.10
✎
15:52
|
Я,наверное,непонятно объяснила(Регистр хранит Этапы,которые мне и нужны.Но этапы могут быть указаны не для номенклатуры,а ,например,для родителя номенклатуры.есть ещё варианты.Если номенклатура в регистре есть,то тогда берём этапы с приоритетом 1(как в моём запросе),а если нет,то смотрим остальные случаи.
|
|||
|
9
le_
30.09.10
✎
15:52
|
На тот случай, если в регистре сведений нет записи с этой номенклатурой, то можно использовать либо Выбор Когда <a> Тогда <b> Иначе <c> Конец, либо что-то типа такого:
ЕСТЬNULL(РегистрЦен.Цена, 0) КАК Цена |
|||
|
10
le_
30.09.10
✎
15:54
|
(8) Ну, в запросе просто несколько связей будет с номенклатурой, с родителем номенклатуры, с номенклатурной группой. И там, где не NULL в регистре, там гут, иначе не есть гут.
|
|||
|
11
Русмус
30.09.10
✎
16:01
|
ВЫБРАТЬ
Этап, Приоритет, <еще чего нибудь> ПОМЕСТИТЬ Т ИЗ &ИсточникДанных ; ВЫБРАТЬ Этап, МАКСИМУМ(Приоритет) Приоритет ПОМЕСТИТЬ ПриорТ ИЗ Т ; ВЫБРАТЬ ПриорТ.Этап, ПриорТ.Приоритет, Т.<все остальные поля> ИЗ ПриорТ ЛЕВОЕ СОЕДИНЕНИЕ Т ПО Этап = Этап И Приоритет = Приоритет |
|||
|
12
le_
30.09.10
✎
16:07
|
ИМХО, можно без временных таблиц.
|
|||
|
13
Русмус
30.09.10
✎
16:11
|
(12) конечно, можно. Но сейчас-то главное, чтобы понятно было.
|
|||
|
14
Ups
30.09.10
✎
16:13
|
Но в самом регистре нет колонки приоритет,это я её создаю в запросе.
|
|||
|
15
le_
30.09.10
✎
16:16
|
(14) Сделай выборку из табличной части документа, соедини с регистром по номенклатуре ИЛИ номенклатурной группе ИЛИ родителю номенклатуры.
И для тех записей, которым не нашлось соответствия в регистре (Есть NULL), вычисляй приоритет так, как хочешь. |
|||
|
16
Ups
30.09.10
✎
16:16
|
а
|
|||
|
17
Ups
30.09.10
✎
16:17
|
а в моём запросе можно как-нибудь поставить условие на минимум приоритета?
|
|||
|
18
le_
30.09.10
✎
16:22
|
(17) Минимум(Выбор ... Конец) КАК МинимумПриоритета
|
|||
|
19
Ups
30.09.10
✎
16:33
|
Нет,так не получается отборать
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |