Имя: Пароль:
1C
1С v8
Левое соединение и NULL
, ,
0 distorter
 
18.06.17
14:40
Не отрабатывает ситуацию, когда в ТЧ есть Номенклатура, а на остатках ее нету. Не могу понять что не так в тексте запроса.


    Запрос.Текст =
        "ВЫБРАТЬ
        |    У_СборкаСоставКомплекта.Номенклатура КАК Номенклатура,
        |    У_СборкаСоставКомплекта.Количество КАК Количество,
        |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток,
        |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток,0) КАК КоличествоОстаток
        |ИЗ
        |    Документ.У_Сборка.СоставКомплекта КАК У_СборкаСоставКомплекта
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
        |        ПО У_СборкаСоставКомплекта.Номенклатура = ХозрасчетныйОстатки.Субконто1
        |ГДЕ
        |    ХозрасчетныйОстатки.Счет = &СчетУчетаТоваров
        |    И У_СборкаСоставКомплекта.Ссылка = &Ссылка";
1 Сергиус
 
18.06.17
14:49
(0)В каком смысле не отрабатывает? Пустой запрос возвращает?
2 distorter
 
18.06.17
15:00
(0) Работает как внутреннее соединение. То есть в выборке отсутствует номенклатура из таблицы Документ.У_Сборка.СоставКомплекта, которой нет на остатках, а должна присутствовать с КоличествоОстаток = 0.
3 Неверный Параметр И
 
18.06.17
15:02

        |ГДЕ
        |    ХозрасчетныйОстатки.Счет = &СчетУчетаТоваров

Вот здесь ошибка
4 DrZombi
 
гуру
18.06.17
15:09
(0) Вы используете в отборе не основную таблицу 😀
5 Фрэнки
 
18.06.17
15:27
Запрос.Текст =
        "ВЫБРАТЬ
        |    У_СборкаСоставКомплекта.Номенклатура КАК Номенклатура,
        |    У_СборкаСоставКомплекта.Количество КАК Количество,
        |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток,0) КАК СуммаОстаток,
        |    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток,0) КАК КоличествоОстаток
        |ИЗ
        |    Документ.У_Сборка.СоставКомплекта КАК У_СборкаСоставКомплекта
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
        |        ПО (У_СборкаСоставКомплекта.Номенклатура = ХозрасчетныйОстатки.Субконто1 И ХозрасчетныйОстатки.Счет = &СчетУчетаТоваров)
        |ГДЕ
        |    У_СборкаСоставКомплекта.Ссылка = &Ссылка";
6 distorter
 
18.06.17
15:43
(5) Так работает. Спасибо!
7 mehfk
 
18.06.17
17:48
(5) Неуд за неиспользование отборов в виртуальных таблицах.
8 Фрэнки
 
18.06.17
19:45
(7) а мне лениво было разбивать один текст запроса на виртуальную таблицу, тем более, что это спорная и неочевидная оптимизация
9 mehfk
 
19.06.17
04:23
(8) Неуд за тезис "это спорная и неочевидная оптимизация".
10 Redkiy
 
19.06.17
08:33
Я бы даже кол поставил за неиспользование параметров виртуальных таблиц.
11 Одинесю
 
19.06.17
08:37
Человек помог, а вы тут экзамены развели ))
12 1dvd
 
19.06.17
08:42
(8) Остатки - и есть виртуальная таблица
Чего там разбивать?