Имя: Пароль:
1C
1С v8
1С82 ЛЕВОЕ СОЕДИНЕНИЕ
,
0 sergey0703ua
 
18.02.13
17:56
Помогите пожалуйста разобраться:
Запрос.Текст = "
|ВЫБРАТЬ
|    ОтчетПроизводстваЗаСмену.Номенклатура Как Номенклатура,
|   ЕСТЬNULL(ЗатратыНаПродукцию.СуммаЗатрат,0) как СуммаЗатрат
|   ИЗ
|    Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
|  ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.НормыЗатратНаПродукцию как ЗатратыНаПродукцию
| ПО
| ОтчетПроизводстваЗаСмену.Номенклатура.НоменклатурнаяГруппа = ЗатратыНаПродукцию.НоменклатурнаяГруппа
|ГДЕ
|((ОтчетПроизводстваЗаСмену.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК) И (ЗатратыНаПродукцию.Период =&ДатаН ))

Выбирает только те "Номенклатуры" из документа "ОтчетПроизводстваЗаСмену" по которым находит записи в РегистреСведений "ЗатратыНаПродукцию", как доработать код чтобы выбирались и те "Номенклатуры" из документа "ОтчетПроизводстваЗаСмену" по которым НЕТ записей в РегистреСведений ?
1 rotting
 
18.02.13
17:57
полное
2 Волшебник
 
18.02.13
17:58
Лучше правое
3 Naumov
 
18.02.13
17:59
Добавь поле со значением 1 в запрос, например
4 Reset
 
18.02.13
18:04
Вот это условие отрезает записи, которых нет в регистре

И (ЗатратыНаПродукцию.Период =&ДатаН ))
5 alexkv_m
 
18.02.13
18:04
Условие (ЗатратыНаПродукцию.Период =&ДатаН ) обрубает их.
Запрос.Текст = "
|ВЫБРАТЬ
|    ОтчетПроизводстваЗаСмену.Номенклатура Как Номенклатура,
|   ЕСТЬNULL(ЗатратыНаПродукцию.СуммаЗатрат,0) как СуммаЗатрат
|   ИЗ
|    Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
|  ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.НормыЗатратНаПродукцию как ЗатратыНаПродукцию
| ПО
| ОтчетПроизводстваЗаСмену.Номенклатура.НоменклатурнаяГруппа = ЗатратыНаПродукцию.НоменклатурнаяГруппа
И (ЗатратыНаПродукцию.Период =&ДатаН )
|ГДЕ
|(ОтчетПроизводстваЗаСмену.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК)

так попробуй...
6 hhhh
 
18.02.13
18:06
ГДЕ
|((ОтчетПроизводстваЗаСмену.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК) И (ЗатратыНаПродукцию.Период =&ДатаН ИЛИ ЗатратыНаПродукцию.Период ЕСТЬ NULL))
7 Darklight
 
18.02.13
18:07
Не знаю как там с правым соединение (2), но я бы написал вот так

ВЫБРАТЬ
   ЕСТЬNULL(ОтчетПроизводстваЗаСмену.Номенклатура,неопределено), КАК Номенклатура,
   ЕСТЬNULL(ЗатратыНаПродукцию.СуммаЗатрат, 0) КАК СуммаЗатрат
ИЗ
   Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.НормыЗатратНаПродукцию КАК ЗатратыНаПродукцию
       ПО ОтчетПроизводстваЗаСмену.Номенклатура.НоменклатурнаяГруппа = ЗатратыНаПродукцию.НоменклатурнаяГруппа
       И ЗатратыНаПродукцию.Период = &ДатаН
ГДЕ
   ОтчетПроизводстваЗаСмену.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК


Правда есть загвоздка (не известна структура регистра ЗатратыНаПродукцию), точнее две
1. В регистре нет Номенклатуры, а в результате запроса выводится номенклатура (в первом поле) - когда в т.ч. не будет номенклатуры - результат в поле будет "неопределено" (можно подставить номенклатурную группу - но это всё же не номенклатура)
2. Если регистр "ЗатратыНаПродукцию" периодический (и поле "Период" - это период, а не реквизит, ресурс, измерение), то и обращаться тогда видимо нужно через срезпоследнего к виртуальной таблице.
8 Darklight
 
18.02.13
18:10
(7)Виноват - поспешил - не так понял задачу - видимо всё же вместо полного - нужно левое соединение ;)
9 Волшебник
 
18.02.13
18:10
(7) ЗатратыНаПродукцию - это оборотный регистр накопления
10 Darklight
 
18.02.13
18:10
как в (5)
11 Darklight
 
18.02.13
18:11
(9)в (0) написано так - РегистрСведений.НормыЗатратНаПродукцию
12 GANR
 
18.02.13
18:14
(0) Фильтрацию ЗатратыНаПродукцию.Период = &ДатаН сделать ПЕРЕД левым соединением, т. е. во вложенном запросе. Ты его рубишь и превращаешь во внутреннее.
13 GANR
 
18.02.13
18:15
(2) нельзя-ли ТелепатБот приучить к этой ошибке?
14 GANR
 
18.02.13
18:23
15 sergey0703ua
 
18.02.13
20:45
Спасибо ОГРОМНОЕ!!! Все выбирается как нужно, как и посоветовал  alexkv_m
Перенес условие "(ЗатратыНаПродукцию.Период =&ДатаН )"
Запрос.Текст = "
|ВЫБРАТЬ
|    ОтчетПроизводстваЗаСмену.Номенклатура Как Номенклатура,
|   ЕСТЬNULL(ЗатратыНаПродукцию.СуммаЗатрат,0) как СуммаЗатрат
|   ИЗ
|    Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСмену
|  ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.НормыЗатратНаПродукцию как ЗатратыНаПродукцию
| ПО
| ОтчетПроизводстваЗаСмену.Номенклатура.НоменклатурнаяГруппа = ЗатратыНаПродукцию.НоменклатурнаяГруппа
И (ЗатратыНаПродукцию.Период =&ДатаН )
|ГДЕ
|(ОтчетПроизводстваЗаСмену.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.