Имя: Пароль:
1C
1С v8
Запрос -получить значение "по умолчанию"
0 Dirk Diggler
 
14.07.11
07:35
В доке УТ "Заказ поставщику" есть возможность распечатать его по данным поставщика, с его артикулами и т.п.
Реализуется это следующей строкой:

   ТекстИсточникАртикула = "
       |    ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       |    ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
       |   И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры
       |    И НоменклатураКонтрагентов.Контрагент = ЗаказПоставщику.Поставщик";


Записей может быть несколько, скажем, в зависимости от характеристики номенклатуры. Допустим, в доке указана позиция номенклатуры Х с характеристикой А, а в регистре сведений такой записи нет, есть запись только для самой номенклатуры Х, без характеристики.

Как мне поправить запрос так, чтобы всех характеристик, для которых нет записей в РС "Номенклатура контрагентов", возвращались значения из строки с пустой характеристикой?
1 Dirk Diggler
 
14.07.11
07:37
очевидно, что

|И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры ИЛИ НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)

не подойдет - появится дополнительная строка в рез-те запроса.... больше пока в голову не идет ничего.
2 Extro
 
14.07.11
07:40
ЕстьNULL(НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,  Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
3 Extro
 
14.07.11
07:41
еще одна ")" в конце
4 Dirk Diggler
 
14.07.11
07:44
Работает. Спасибо!
5 Dirk Diggler
 
14.07.11
07:47
Но, правда, в такой модификации:

ТекстИсточникАртикула = "
       |    ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       |    ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
       |   И ЕстьNULL(НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,ЗаказПоставщику.ХарактеристикаНоменклатуры) = ЗаказПоставщику.ХарактеристикаНоменклатуры
       |    И НоменклатураКонтрагентов.Контрагент = ЗаказПоставщику.Поставщик";
6 Dirk Diggler
 
14.07.11
07:52
а, не, не работает...
7 Dirk Diggler
 
14.07.11
07:55
но мысль понятна, ща разовьем
8 Extro
 
14.07.11
08:34
Не, кажись непонял
подсказываю:

Выбрать
ЗаказПоставщику.Номенклатура,
ЕстьNULL(НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,ЗаказПоставщику.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатуры
ИЗ Документ.ЗаказПоставщику.Товары
     ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
          ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
9 Dirk Diggler
 
14.07.11
09:20
Да опять не то.... Тут, похоже, вложенный запрос со сверткой придется городить...
10 Extro
 
14.07.11
09:30
текст запроса напиши
11 Dirk Diggler
 
14.07.11
11:12
|ВЫБРАТЬ
   |   ВложенныйЗапрос.Поставщик,
   |    ВложенныйЗапрос.Номенклатура," + ТекстПоляТовараДляТоваров + "
   |    ВложенныйЗапрос.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
   |    ВложенныйЗапрос.Количество,
   |    ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
   |    ВложенныйЗапрос.Цена,
   |    ВложенныйЗапрос.Сумма,
   |    ВложенныйЗапрос.СуммаНДС,
   |    ВложенныйЗапрос.Характеристика,
   |   2    КАК НомерТЧ,
   |    ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
   |    NULL КАК Серия" + ТекстПоляАртикула + "
   |ИЗ
   |    (
   |    ВЫБРАТЬ
   |        ЗаказПоставщику.Поставщик,
   |        ЗаказПоставщику.Номенклатура,
   |        ЗаказПоставщику.ЕдиницаИзмерения,
   |        ЗаказПоставщику.Цена                        КАК Цена,
   |       МИНИМУМ(ЗаказПоставщику.НомерСтроки)        КАК НомерСтроки,    
   |        СУММА(ЗаказПоставщику.Количество)           КАК Количество,
   |        СУММА(ЗаказПоставщику.Сумма     )           КАК Сумма,
   |        СУММА(ЗаказПоставщику.СуммаНДС  )           КАК СуммаНДС,
   |        ЗаказПоставщику.ХарактеристикаНоменклатуры  КАК Характеристика" + ТекстВыборкиАртикула + ТекстВыборкиНоменклатуры + "
   |    ИЗ
   |        Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщику        
   | ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       |    ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
       |   И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры
       |   И НоменклатураКонтрагентов.ЕдиницаИзмерения = ЗаказПоставщику.ЕдиницаИзмерения
       |    И НоменклатураКонтрагентов.Контрагент = ЗаказПоставщику.Поставщик)
   |
   |    ГДЕ
   |        ЗаказПоставщику.Ссылка = &ТекущийДокумент
   |    ) КАК ВложенныйЗапрос
12 Extro
 
14.07.11
11:31
|ВЫБРАТЬ
   |   ВложенныйЗапрос.Поставщик,
   |    ВложенныйЗапрос.Номенклатура," + ТекстПоляТовараДляТоваров + "
   |    ВложенныйЗапрос.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
   |    ВложенныйЗапрос.Количество,
   |    ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
   |    ВложенныйЗапрос.Цена,
   |    ВложенныйЗапрос.Сумма,
   |    ВложенныйЗапрос.СуммаНДС,
   |    ВложенныйЗапрос.Характеристика,
   |   2    КАК НомерТЧ,
   |    ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
   |    NULL КАК Серия" + ТекстПоляАртикула + "
   |ИЗ
   |    (
   |    ВЫБРАТЬ
   |        ЗаказПоставщику.Поставщик,
   |        ЗаказПоставщику.Номенклатура,
   |        ЗаказПоставщику.ЕдиницаИзмерения,
   |        ЗаказПоставщику.Цена                        КАК Цена,
   |       МИНИМУМ(ЗаказПоставщику.НомерСтроки)        КАК НомерСтроки,    
   |        СУММА(ЗаказПоставщику.Количество)           КАК Количество,
   |        СУММА(ЗаказПоставщику.Сумма     )           КАК Сумма,
   |        СУММА(ЗаказПоставщику.СуммаНДС  )           КАК СуммаНДС,
   |        ЕстьNULL(НоменклатураКонтрагентов.ХарактеристикаНоменклатуры, Значение(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)  КАК Характеристика" + ТекстВыборкиАртикула + ТекстВыборкиНоменклатуры + "
   |    ИЗ
   |        Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщику        
   | ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       |    ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
       |   И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры
       |   И НоменклатураКонтрагентов.ЕдиницаИзмерения = ЗаказПоставщику.ЕдиницаИзмерения
       |    И НоменклатураКонтрагентов.Контрагент = ЗаказПоставщику.Поставщик)
   |
   |    ГДЕ
   |        ЗаказПоставщику.Ссылка = &ТекущийДокумент
   |    ) КАК ВложенныйЗапрос

ы?
13 Dirk Diggler
 
14.07.11
11:36
?? Вообще не похоже
14 Dirk Diggler
 
14.07.11
11:40
суть вопроса. Вот есть соединение:

   | ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       |    ПО НоменклатураКонтрагентов.Номенклатура = ЗаказПоставщику.Номенклатура
       |   И НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры
       |   И НоменклатураКонтрагентов.ЕдиницаИзмерения = ЗаказПоставщику.ЕдиницаИзмерения
       |    И НоменклатураКонтрагентов.Контрагент = ЗаказПоставщику.Поставщик)


Надо, если не исполняется равенство, НоменклатураКонтрагентов.ХарактеристикаНоменклатуры = ЗаказПоставщику.ХарактеристикаНоменклатуры, присоединить другую строчку, для которой совпадает номенклатура, а НоменклатураКонтрагентов.ХарактеристикаНоменклатуры - пустая ссылка.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой