Имя: Пароль:
1C
1С v8
В запросе ПОЛНОЕ СОЕДИНЕНИЕ не срабатывает. Подскажите.
0 gRIP
 
22.11.11
16:04
Привет всем.
Делаю Инвентаризацию по складу. Надо вывести печ. форму с колонками Номенклатура, Штрихкод, УчетКол, УчетВес (эти две колонки из регистра ОстаткиТМЦ), ФактКол, ФактВес (эти две колонки - из тч Изделия, документа Инвентаризация). Таким образом какой-то Номенклатуры может не быть в регистре, какой-то - в документе. Делаю Запрос с подзапросом и пытаюсь соединить их через ПОЛНОЕ СОЕДИНЕНИЕ. Но не попадают данные о Номенклатуре, которая есть в регистре, но нет в документе. Может кто подскажет, что не так ? Сам текст запроса вот:

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

       ПО Инвентаризация.Номенклатура = Подзапрос.Номенклатура
           И Инвентаризация.Штрихкод = Подзапрос.Штрихкод
ГДЕ
   Инвентаризация.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
   Инвентаризация.Номенклатура,
   Инвентаризация.Штрихкод
АВТОУПОРЯДОЧИВАНИЕ
1 Maxus43
 
22.11.11
16:06
ЕСТЬNULL(Инвентаризация.Номенклатура, Подзапрос.Номенклатура)
2 Axel2009
 
22.11.11
16:20
(0) а откуда он по вашему должен взять данные, которых нет в документе?
3 gRIP
 
22.11.11
16:54
(1) Не очень понял куда это вставлять. Вставил вместо строки 2 ЕСТЬNULL(Инвентаризация.Номенклатура, Подзапрос.Номенклатура) КАК Номенклатура, И в СГРУППИРОВАТЬ ПО Подзапрос.Номенклатура, но всё-равно не показывает полностью всю Номенклатуру.
4 andrewks
 
22.11.11
16:54
вместо Инвентаризация.Номенклатура
5 gRIP
 
22.11.11
16:58
(2) Ну, вроде, подзапрос выбирает все данные из регистра остатков, по нужному складу. Т.е. туда попадет вобще вся номенклатура на складе. А при Полном соединении, я так понимаю, она должна хм ...  отобразиться как NULL, с УчетКол, и УчетВес. Разве нет ?
6 gRIP
 
22.11.11
17:00
(4) Да, я туда и вставил получилось
ВЫБРАТЬ
ЕСТЬNULL(Инвентаризация.Номенклатура, Подзапрос.Номенклатура) КАК Номенклатура,
Инвентаризация.Штрихкод,
...
и в конце пришлось добавить группировку
СГРУППИРОВАТЬ ПО
Подзапрос.Номенклатура,
Инвентаризация.Номенклатура,
....
(иначе ругает, что Подзапрос.Номенклатура не входит в группировку)
Но, всё-равно выдаёт неправильный результат :-/
7 Buster007
 
22.11.11
17:00
(0) запрос написан неправильно.
ГДЕ
   Инвентаризация.Ссылка = &Ссылка
когда нет таких позиций в документе, Инвентаризация тоже является NULL, а ты накладываешь условие на результат запроса.
Дальше думай сам.
8 Axel2009
 
22.11.11
17:07
(6) в сгруппировать тоже надо ЕСТЬNULL(Инвентаризация.Номенклатура, Подзапрос.Номенклатура)
9 Рыцарь
 
22.11.11
17:10
может лучше использовать конструкцию ОБЪЕДИНИТЬ ВСЕ? или я что то не так понял..
10 Defender aka LINN
 
22.11.11
17:10
Ну и где там полное соединение?
11 GROOVY
 
22.11.11
17:12
(10) Тебе сказали "Полное" и все. Не спорь с коллегами ;)
12 Defender aka LINN
 
22.11.11
17:14
(11) Молчу, молчу... :)
13 VVi3ard
 
22.11.11
17:34
(7) правильно написал
14 gRIP
 
22.11.11
18:20
Через ОБЪЕДИНИТЬ ВСЕ я и решил. Но это частный случай. Насколько я понимаю Объединение сработает только при одинаковых колонках. Ну а если колонки отличаются ?
В Сгруппировать ЕСТЬNULL(Инвентаризация.Номенклатура, Подзапрос.Номенклатура) - не помогло.

Думаю про Ссылку...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший