Имя: Пароль:
1C
1С v8
Левое соединение. Язык запросов. Хелп.
0 Затейник
 
12.10.11
11:02
Итак, помогите решить проблему. Вторые сутки сражаюсь....

Конфигурация самописка. 8.2.13.219
Есть два регистра остатков. У обоих присутствуют измерения Контрагент и Договор. Выбираем из виртуальной таблице "ОстаткиИОбороты" два этих измерения, и ресурсы, начальный остаток, приход, расход, конечный остаток. Делаем простое Левое соединение. В результате запроса, появляются строчки со значениями NULL в измерениях и наличием сумм в некоторых колонках. Как такое вообще могло произойти ?

В обоих регистрах все измерения заполнены корректно. Пустых значений в измерениях нету. И тестирование и исправление над базой провел. и Бубном тряс над монитором, и в стороне от него...

Соединения над другими регистрами проходит корректно, только с этими двумя творится черти что.

Скриншот из консоли запросов:
http://s017.radikal.ru/i402/1110/88/879efd49491b.jpg

Ну и сам текст запроса:

ВЫБРАТЬ
   ВзаиморасчетыПоНарядамОстаткиИОбороты.Контрагент КАК Контрагент,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
   НарядыОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
   НарядыОстаткиИОбороты.СуммаПриход КАК СуммаПриход,
   НарядыОстаткиИОбороты.СуммаРасход КАК СуммаРасход,
   НарядыОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток1,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.СуммаПриход КАК СуммаПриход1,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.СуммаРасход КАК СуммаРасход1,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток1,
   ВзаиморасчетыПоНарядамОстаткиИОбороты.Регистратор КАК Регистратор,
   НарядыОстаткиИОбороты.Регистратор КАК Регистратор1
ИЗ
   РегистрНакопления.Наряды.ОстаткиИОбороты(&ДатаС, &ДАтаПо, Регистратор, , ) КАК НарядыОстаткиИОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыПоНарядам.ОстаткиИОбороты(&ДатаС, &ДАтаПо, Регистратор, , ) КАК ВзаиморасчетыПоНарядамОстаткиИОбороты
       ПО НарядыОстаткиИОбороты.Контрагент = ВзаиморасчетыПоНарядамОстаткиИОбороты.Контрагент
           И НарядыОстаткиИОбороты.ДоговорКонтрагента = ВзаиморасчетыПоНарядамОстаткиИОбороты.ДоговорКонтрагента

УПОРЯДОЧИТЬ ПО
   Контрагент,
   ДоговорКонтрагента
АВТОУПОРЯДОЧИВАНИЕ
1 dimaldinho
 
12.10.11
11:06
У вас контрагент и договор выводятся из правой таблицы.
2 Ненавижу 1С
 
гуру
12.10.11
11:06
на то оно и ЛЕВОЕ
есть строки у первого регистра и нет аналогичных у второго

попробуй их получать из первого регистра
3 chelentano
 
12.10.11
11:06
(0) значит не все договоры и контрагенты из НарядыОстаткиИОбороты есть в ВзаиморасчетыПоНарядамОстаткиИОбороты
4 Shurjk
 
12.10.11
11:07
(0) NULL получается когда по условиям соединения нет соответствующих записей в присоединяемой таблице.
5 Ненавижу 1С
 
гуру
12.10.11
11:07
(4) и не только ))
6 Затейник
 
12.10.11
11:09
(1) (2) в точку. Пасиб. Мозг видно затуманился. )
7 Shurjk
 
12.10.11
11:11
(5) В данном случае это исчерпывающий ответ, в других случаях получение NULL происходит аналогично. Например попытка получить дату несуществующего документа.
8 Ненавижу 1С
 
гуру
12.10.11
11:12
(7) не только, не только - там еще всякие субконто и реквизиты не для групп, например
9 Shurjk
 
12.10.11
11:12
(8) Я же говорю аналогично происходит. Принцип тот же пытаемся получить то чего нет, получаем NULL
10 Ненавижу 1С
 
гуру
12.10.11
11:14
(9) то чего нет часто получаем Неопределено или пустую ссылку ))
11 Shurjk
 
12.10.11
11:16
(10) Пустая ссылка это когда реквизит есть и не заполнен, непределено когда рекизит есть но он и имеет составной тип, все четко и понятно.
12 Shurjk
 
12.10.11
11:16
+(11) нет это значит нет.
13 Ненавижу 1С
 
гуру
12.10.11
11:35
(11) только пустая ссылка может быть и у составного типа ))
14 Леха Дум
 
12.10.11
11:52
брошу свои пять копеек:
сюда:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыПоНарядам.ОстаткиИОбороты(&ДатаС, &ДАтаПо, Регистратор, , ) КАК ВзаиморасчетыПоНарядамОстаткиИОбороты
       ПО НарядыОстаткиИОбороты.Контрагент = ВзаиморасчетыПоНарядамОстаткиИОбороты.Контрагент
           И НарядыОстаткиИОбороты.ДоговорКонтрагента = ВзаиморасчетыПоНарядамОстаткиИОбороты.ДоговорКонтрагента

нужно дописать: И НарядыОстаткиИОбороты.Регистратор = ВзаиморасчетыПоНарядамОстаткиИОбороты.Регистратор
15 Леха Дум
 
12.10.11
11:53
+(14) при условии, что двиги делает один и тот же документ
16 Леха Дум
 
12.10.11
12:02
Если хочется видеть все документы, тогда через ОБЪЕДИНИТЬ ВСЕ