Как выбрать данные в зависимости от приоритета?
30.09.2010
15:18
#1
Здравствуйте!Подскажите,пожалуйста,как можно выбирать данные в зависимости от приоритета.Запросом из регистра сведений я получаю примерно след таблицу: <br>Продукция Этап Приоритет Очерёдность <br>Дверь Заготовка 1 <br>Производство дверей Покраска 3 1 <br>Заготовка 4 1 <br>Изготвление 4 2 <br>То есть выстраиваю в порядке приоритета в зависимости от продукции.Продукция может быть номенклатурой,родителем номенклатуры,номенклатурной группой или вообще ничего нет.Далее,я получаю данные из документа.И мне нужно,в зависимости от того,что есть в столбце продукция(сама номенклатура или родитель номенклатуры и т.д.) выбрать соответстующие этапы.И мне непонятно,как это можно сделать.Может у кого-нибудь есть похожий пример? <br><br>
30.09.2010
15:25
#2
Напрашивается "Левое соединение", но конец описание какой-то путаный. Вот например искомая продукция Дверь и что должно получиться? Какие этапы ей соответствуют? По каким признакам определять, что этот этап нужен?
30.09.2010
15:36
#3
Допустим,в номенклатуре документа указана дверь.Тогда я смотрю в регистр сведений,в котором этапы изготовления двери выстроены по приоритету.То есть,если номенклатура Дверь есть в регистре тогда беру соответствующие этапы.Но её может там не быть.Может быть родитель этой номенклатуры,там уже другие этапы,беру их.Ещё вариант,что это не справочник Номенклатура,а справочник НоменклатурныеГруппы или же в регистре вообще ничего этого нет,тогда уже беру этапы соответствующие пустым полям,но это в последнюю очередь.Непонятно,как выбирать именно те этапы,которые нужны.
30.09.2010
15:38
#4
"Вот сам запрос к регистру сведений:<br>Запрос1=Новый Запрос;<br> Запрос1.Текст="ВЫБРАТЬ<br> | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция,<br> | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Этап,<br> | ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Очередность КАК Очередность,<br> | ВЫБОР<br> | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция ССЫЛКА Справочник.Номенклатура<br> | ТОГДА ВЫБОР<br> | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция.ЭтоГруппа<br> | ТОГДА 2<br> | ИНАЧЕ ВЫБОР<br> | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция = &ПустаяНоменклатура<br> | ТОГДА 4<br> | ИНАЧЕ 1<br> | КОНЕЦ<br> | КОНЕЦ<br> | ИНАЧЕ ВЫБОР<br> | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция ССЫЛКА Справочник.НоменклатурныеГруппы<br> | ТОГДА ВЫБОР<br> | КОГДА ЭтапыПроцессаОбработкиЗаказаНаПродукцию.Продукция = &ПустаяНоменклатурнаяГруппа<br> | ТОГДА 4<br> | ИНАЧЕ 3<br> | КОНЕЦ<br> | ИНАЧЕ 4<br> | КОНЕЦ<br> | КОНЕЦ КАК Приоритет<br> <br> |ИЗ<br> | РегистрСведений.ЭтапыПроцессаОбработкиЗаказаНаПродукцию КАК ЭтапыПроцессаОбработкиЗаказаНаПродукцию<br> |УПОРЯДОЧИТЬ ПО<br> | Приоритет,<br> | Очередность";<br>"
30.09.2010
17:12
#5
"Скажите все-таки, какой результат должен получиться, если искомая продукция Дверь, а вашим запросом вы получили таблицу 1-го поста? Если должна получиться только одна запись: "Дверь Заготовка 1", тогда поместите результат вашего запроса во внутреннюю таблицу, а следующим запросом выберите Минимум и сравняйте по нему:<br>Запрос1=Новый Запрос;<br>Запрос1.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;<br>Запрос1.Текст="ВЫБРАТЬ<br>//Ваши поля (из того самого запроса)<br>|Поместить ВТТабл<br>|ИЗ<br>| РегистрСведений.ЭтапыПроцессаОбработкиЗаказаНаПродукцию КАК ЭтапыПроцессаОбработкиЗаказаНаПродукцию<br>|;<br>|Выбрать<br>| Этапы.Продукция,<br>| Этапы.Этап,<br>| Этапы.Очередность<br>|Из ВТТабл Как Этапы<br>|Где<br>| Этапы.Продукция В (&Продукция) И <br>| Этапы.Приоритет = (Выбрать Минимум (Приоритет) ИЗ ВТТабл Где Продукция В (&Продукция))<br>|Сгруппировать по<br>| Этапы.Продукция,<br>| Этапы.Этап,<br>| Этапы.Очередность<br>|";<br>МасПрод = Новый Массив;<br>МасПрод.Добавить (Дверь);<br>МасПрод.Добавить (Дверь.Родитель);<br>МасПрод.Добавить (ПустаяСсылка());<br>Запрос1.УстановитьПараметр ("Продукция", МасПрод);<br>Запрос1.Выполнить().Выгрузить().ВыбратьСтроку("""");<br><br>В общем попробуйте сначала на одном элементе используя консоль запросов. Когда получите нужный результат, тогда перейдете на склейку со строками документа."
30.09.2010
17:29
#6
В данном случае,так как Дверь есть в выборке из регистра,получается,что нужно выбрать этап Заготовка.
30.09.2010
17:49
#7
Вы не подскажете,почему если поставить в моём запросе минимум перед кострукцией с выбором,в резельтате не будут отбираться записи с минимальным приоритетом?
30.09.2010
18:00
#8
"Тогда запрос должен сработать.<br>А с документом примерно так должно получиться (сокращенно):<br>Выбрать Номенклатура Как Ном <br>Поместить ВТНом <br>из Документ <br>Где Ссылка = &Ссылка;<br>//Тут ваш запрос <br>Выбрать ...<br>Поместить ВТЭтапы ....<br>;<br>Выбрать //Склеиваем Продукцию из документа с Этапами - таблица сильно вырастет<br> Ном, Этапы.*<br>Поместить ВТНомЭт<br>Из ВТНом<br>Левое Соединение ВТЭтапы как Этапы<br> По Ном = Этапы.Продукция ИЛИ Ном.Родитель = Этапы.Продукция ИЛИ Этапы.Продукция = &ПустаяСсылка<br>;<br>Выбрать //НАходим минимальный приоритет по каждой Продукции из документа<br> Ном, Минимум (Приоритет) Как Приоритет<br>Поместить ВТМинПриор<br>Из ВТНомЭт<br>СГРуппировать по Ном<br> ;<br>Выбрать //Наконец выбираем из склейки только то что нам надо<br> Этапы.*<br>Из ВТМинПриор как МинПриор<br>Левое соединение ВТНОмЭт Как Этапы<br> По МинПриор.Ном = Этапы.Ном И МинПриор.Приоритет = Этапы.Приоритет<br><br><br>Что-то типа того - экспериментируйте."
Выбор конфигурации- возможность работы со штрих-кодомУчет затрат и платежей через посредников в УТ 10.3
Читают тему
(гостей: 1)