Имя: Пароль:
1C
 
Как выбрать данные в зависимости от приоритета?
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
Нет,так не получается отборать
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший