Имя: Пароль:
1C
1С v8
Помогите с запросом на выбор из нужной колонки!
0 Zebbar
 
29.08.12
10:10
Есть таблица. Назовем ее Аналоги. В ней колонки Номенклатура и Аналог.

Есть документ с табличной частью ЗаказНаПр-во, который содержит Номенклатура.
Мне надо написать запрос, который проходит по табличной части документа ЗаказНаПр-во и возвращает Номенклатура, если его нет в колонке Аналог, либо, если Номенклатура содержится в колонке Аналог, то Номенклатура из таблицы Аналог

То есть такой пример:
Таблица Аналоги
Номенклатура Аналог
Слон Животное
Слон Таракан
Муха Комар

Таблица Заказ
Номенклатура
Таракан
Кит
Муха

Запрос должен вернуть
Слон
Кит
Муха

У меня получается запрос типа такого, но он не работает:
ВЫБРАТЬ
   ЗаказНаПроизводствоПродукция.Номенклатура,
   ВЫБОР
       КОГДА Аналоги.Номенклатура ЕСТЬ NULL
           ТОГДА Аналоги.Аналог
       ИНАЧЕ Аналоги.Номенклатура
   КОНЕЦ КАК Номенклатура1
ИЗ
   Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ябБазовыеПозиции.Номенклатура КАК Номенклатура,
           ябБазовыеПозиции.Аналог КАК Аналог
       ИЗ
           РегистрСведений.ябБазовыеПозиции КАК ябБазовыеПозиции
       ГДЕ
           ябБазовыеПозиции.ДляРецептуры = ИСТИНА) КАК Аналоги
       ПО ЗаказНаПроизводствоПродукция.Номенклатура = Аналоги.Аналог
ГДЕ
   ЗаказНаПроизводствоПродукция.Ссылка = &ЗаказНаПроизводство
1 Zebbar
 
29.08.12
10:12
Точнее оно не так, чтобы совсем не работает. Если это Аналог - то возвращается его основной товар. Если это не Аналог - то ничего не возвращается
2 palpetrovich
 
29.08.12
11:01
сумбур какой-то в сабже, попробуй изложить понятнее
3 Reset
 
29.08.12
11:12
То есть такой пример:

Таблица Аналоги
Номенклатура Аналог
Слон Животное
Слон Таракан
Муха Комар

Таблица Заказ
Номенклатура
Таракан
Кит
Муха


==>
Выбрать isNull(Аналоги.Номенклатура,Заказ.Номенклатура) как Номенклатура
из ТаблицаЗаказ как Заказ
левое соединение ТаблицаАналоги как Аналоги
по Заказ.Номенклатура=Аналоги.Аналог
4 Reset
 
29.08.12
11:14
тем не менее, с (2) согласен
5 rutony
 
29.08.12
11:19
(0)
ВЫБРАТЬ
   ЕСТЬNULL(Аналоги.Аналог, ЗаказНаПроизводствоПродукция.Номенклатура) КАК Номенклатура    
ИЗ
   Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Аналоги КАК Аналоги
       ПО ЗаказНаПроизводствоПродукция.Номенклатура = Аналоги.Номенклатура
6 rutony
 
29.08.12
11:20
(0) Почему номенклатуру ищешь в аналогах, а не в номенклатуре...
7 Reset
 
29.08.12
11:30
(5) Твой запрос решает задачу "Максимально заменить товар в заказе на аналоги", а автору, вероятно , нужно "Максимально избавиться от аналогов".
Хотя это домыслы
8 Reset
 
29.08.12
11:38
+ к (3) версия в терминах (0)
ВЫБРАТЬ isNull(ябБазовыеПозиции.Номенклатура,ЗаказНаПроизводствоПродукция.Номенклатура)
   ИЗ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ябБазовыеПозиции КАК ябБазовыеПозиции
       ПО ябБазовыеПозиции.ДляРецептуры = ИСТИНА
       И ЗаказНаПроизводствоПродукция.Номенклатура = ябБазовыеПозиции.Аналог

ГДЕ
   ЗаказНаПроизводствоПродукция.Ссылка = &ЗаказНаПроизводство
9 Reset
 
29.08.12
11:38
хотя автор пропал куда-то, ладно
10 Zebbar
 
30.08.12
08:43
(7) Да, правильно
11 Zebbar
 
30.08.12
08:48
Вчера уже сделал. У меня ошибка здесь была:
   ВЫБОР
       КОГДА Аналоги.Номенклатура ЕСТЬ NULL
           ТОГДА Аналоги.Аналог
       ИНАЧЕ Аналоги.Номенклатура
   КОНЕЦ КАК Номенклатура1

Должно быть так:
   ВЫБОР
       КОГДА Аналоги.Номенклатура ЕСТЬ NULL
           ТОГДА ДокЗаказ.Номенклатура
       ИНАЧЕ Аналоги.Номенклатура
   КОНЕЦ КАК Номенклатура,
AdBlock убивает бесплатный контент. 1Сергей