Имя: Пароль:
1C
1С v8
ЗАПРОС: Внутреннее соединение по незаполненным полям составного типа работает?
0 vdeemer
 
20.07.17
14:47
Доброго времени суток!
В запросе делаю внутреннее соединение двух таблиц по нескольким полям. Одно поле составного типа (два вида документов), в результат запроса не попадают строки, в которых эти поля не заполнены.
[code]
ВЫБРАТЬ
    ВремТЗ.Заказ,
    ВремТЗ.ЗаказПоставщику,
    ВремТЗ.Номенклатура,
    ВремТЗ.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ ВыборкаСписания
ИЗ
    &ВремТЗ КАК ВремТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОстаткиЗаказовПоставщикам.ЗаказПоставщику,
    ОстаткиЗаказовПоставщикам.Заказ,
    ОстаткиЗаказовПоставщикам.Номенклатура,
    ОстаткиЗаказовПоставщикам.ХарактеристикаНоменклатуры,
    ОстаткиЗаказовПоставщикам.Цена,
    ОстаткиЗаказовПоставщикам.КоличествоОстаток,
    ОстаткиЗаказовПоставщикам.СуммаВсегоОстаток
ИЗ
    ВыборкаСписания КАК ВыборкаСписания
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикамПоЗаказам.Остатки(&ДатаСреза, ) КАК ОстаткиЗаказовПоставщикам
        ПО ВыборкаСписания.Заказ = ОстаткиЗаказовПоставщикам.Заказ
            И ВыборкаСписания.ЗаказПоставщику = ОстаткиЗаказовПоставщикам.ЗаказПоставщику
            И ВыборкаСписания.Номенклатура = ОстаткиЗаказовПоставщикам.Номенклатура
            И ВыборкаСписания.ХарактеристикаНоменклатуры = ОстаткиЗаказовПоставщикам.ХарактеристикаНоменклатуры

УПОРЯДОЧИТЬ ПО
    ОстаткиЗаказовПоставщикам.ЗаказПоставщику.Дата
[/code]

РегистрНакопления.ЗаказыПоставщикамПоЗаказам.Заказ, ВремТЗ.Заказ = {ЗаказПокупателя, ЗаказНаПроизводство}
В таблице, которой параметризуют ВремТЗ, есть запись. В остатках та же самая запись, поле Заказ не заполнено. Результат запроса пустой(( Можно, наверно, использовать ЕстьNULL(Заказ, 0) и по нулю все сойдется наверняка, но какое-то топорное решение. Что спасет отца русской демократии?
Спасибо.
1 catena
 
20.07.17
14:53
Эээ... вы себе что-то не то думаете про внутреннее соединение. Если у вас там разные значения, почему оно должно соединяться?
2 Лефмихалыч
 
20.07.17
14:53
когда поле составного типа не заполнено, его значение - Неопределено.

Пристёгивай к этому объединением такой же запрос, но с неопределеном.
3 vdeemer
 
20.07.17
14:55
(1) Значения одинаковые, Неопределено.
(2) Каким образом?
4 aleks_default
 
20.07.17
14:57
(2)А еще может быть пустая ссылка ЗаказНаПроизводство
5 Лефмихалыч
 
20.07.17
14:57
(4) это - заполненное значение
6 Лефмихалыч
 
20.07.17
14:59
а зачем, кстати, тут соединение? Достаточно запхать отбор в параметр виртуальной таблицы

(Заказ, Номенклатура, Характеристика)в(выбрать заказ, номенклатура, херактеристика)

результат тот же, а работать будет в разы шибче
7 vdeemer
 
20.07.17
15:02
(6) а разве в параметрах виртуальной таблицы регистра можно указывать "В"? там вроде через запятую перечисляются значения...
9 vdeemer
 
20.07.17
15:14
(7) снимается, можно)))
10 vdeemer
 
20.07.17
15:25
(6) допилил

[code]
ВЫБРАТЬ
    ВремТЗ.Заказ,
    ВремТЗ.ЗаказПоставщику,
    ВремТЗ.Номенклатура,
    ВремТЗ.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ ВыборкаСписания
ИЗ
    &ВремТЗ КАК ВремТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОстаткиЗаказовПоставщикам.ЗаказПоставщику,
    ОстаткиЗаказовПоставщикам.Заказ,
    ОстаткиЗаказовПоставщикам.Номенклатура,
    ОстаткиЗаказовПоставщикам.ХарактеристикаНоменклатуры,
    ОстаткиЗаказовПоставщикам.Цена,
    ОстаткиЗаказовПоставщикам.КоличествоОстаток,
    ОстаткиЗаказовПоставщикам.СуммаВсегоОстаток
ИЗ
    РегистрНакопления.ЗаказыПоставщикамПоЗаказам.Остатки(
            &ДатаСреза,
            (Заказ, ЗаказПоставщику, Номенклатура, ХарактеристикаНоменклатуры) В
                (ВЫБРАТЬ
                    ВыборкаСписания.Заказ,
                    ВыборкаСписания.ЗаказПоставщику,
                    ВыборкаСписания.Номенклатура,
                    ВыборкаСписания.ХарактеристикаНоменклатуры
                ИЗ
                    ВыборкаСписания)) КАК ОстаткиЗаказовПоставщикам

УПОРЯДОЧИТЬ ПО
    ОстаткиЗаказовПоставщикам.ЗаказПоставщику.Дата
[/code]

Те же яйца, только в профиль.
11 Naf2017
 
20.07.17
15:29
(2) согласен, но не всегда

в УТ 10.3 есть регистр СкидкиНаценкиПоЦеновымГруппам, в нем измерение составного типа ПолучательСкидки, так вот когда скидка "ВСЕМ", то там заполнено пустой ссылкой типа ДоговорКонтрагента

это типовое решение

эти пустые значения в 1С большой костыль как известно
12 aleks_default
 
20.07.17
15:31
(10)Возьми нормальную консоль запросов, в которой  нормально отображаются незаполненные значения.
13 vdeemer
 
20.07.17
15:55
(12) Взял, толку ноль
14 aleks_default
 
20.07.17
16:22
(13)Тогда еще и мозги захвати
15 vdeemer
 
20.07.17
17:09
(14) "Злы только дураки и дети" (с) А.С.Пушкин
Вы, я так понимаю, уже не ребенок.

Решение получилось топорным:
1. "подготовить" связываемые таблицы, приводя значения "неопределено" к простому значению, априори не могущему появиться в данных (я использовал пустую строку) оператором ВЫБОР
[code]
    ВЫБОР
        КОГДА ВыборкаСписания.Заказ = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
                ИЛИ ВыборкаСписания.Заказ = ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка)
                ИЛИ ВыборкаСписания.Заказ = ЗНАЧЕНИЕ(Документ.ВнутреннийЗаказ.ПустаяСсылка)
                ИЛИ ВыборкаСписания.Заказ = НЕОПРЕДЕЛЕНО
            ТОГДА ""
        ИНАЧЕ ЕСТЬNULL(ВыборкаСписания.Заказ, "")
    КОНЕЦ КАК Заказ,
[/code]
В операторе надо перечислить все используемые типы.
2. выбрать нужные данные
3. последний запрос оператором ВЫБОР конвертирует "взад" использованное в п.1 простое значение в НЕОПРЕДЕЛЕНО
Текст запроса вырастает втрое((
16 lodger
 
20.07.17
17:14
(15) откройте для себя оператор ССЫЛКА <ИмяТаблицы>
подробности в гугле или синтакс-помошнике.
17 Ёпрст
 
20.07.17
17:14
(15) Откуда уверенность, что в регистре в измерении Заказ будет пустая строка ?
18 Ёпрст
 
20.07.17
17:14
зачем такой case бестолковый делать ?
19 Ёпрст
 
20.07.17
17:16
ВремТЗ твоя откуда взялась ? колонка Заказ в ней, как типизирована хоть ?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.