Имя: Пароль:
1C
1С v8
Нестабильное левое соединение
,
0 grasshoper
 
10.03.21
10:47
День добрый. Столкнулся недавно с непонятным поведением запроса (может что-то упускаю). При соединении с таблицей в конструкции ВЫБОР КОГДА ТОГДА КОНЕЦ второе условие (ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)) не отрабатывает. Если оставляю один какой-то из операндов условия, то оно срабатывает как нужно, но при добавлении ИЛИ отрабатывает только первая его часть. Может у кого есть идеи?

ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление <> &Строк
            ТОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
        ИНАЧЕ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
    КОНЕЦ)
1 Очевидно
 
10.03.21
10:49
можт всёже :
ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление <> &Строк
                ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
            ТОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
        ИНАЧЕ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
    КОНЕЦ)
2 grasshoper
 
10.03.21
10:50
(1) Сейчас попробую
3 grasshoper
 
10.03.21
10:52
(1) Не, такое логически не подходит мне
4 grasshoper
 
10.03.21
10:53
Нужно сравнить оформление в заказе и в спецификации, а если не совпадают, то по виду спецификации. Уже много конструкций перепробовал, но все не отрабатывают как нужно.
5 grasshoper
 
10.03.21
10:57
Даже если поменять местами СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье) ИЛИ СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление то отрабатывает лишь часть СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
6 Очевидно
 
10.03.21
10:58
(3) я про то что у вас "ИЛИ" Находится после "Тогда" ...
7 grasshoper
 
10.03.21
11:00
(6) Я и такую конструкцию пробовал

ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление <> &Строк ТОГДА
            ВЫБОР КОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье) ТОГДА
                ИСТИНА
            ИНАЧЕ
                ЛОЖЬ
            КОНЕЦ
        ИНАЧЕ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
    КОНЕЦ)
8 Йохохо
 
10.03.21
11:00
(7) а не пробовал прочитать что в (4) написано и прямо кодить не думая?
9 grasshoper
 
10.03.21
11:02
(8) Нужно запросом написать
10 Очевидно
 
10.03.21
11:05
"Нужно сравнить оформление в заказе и в спецификации, а если не совпадают, то по виду спецификации."
Перевожу на адекватную логику :
Нужно сравнить оформление в заказе и в спецификации, если совпадает, тогда ок, если нет, тогда дополнить сравнение видами спецификаций. Если оформления совпадают, тогда ок, если нет то нет.
Резулт:
... И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = &Строк ТОГДА
            Истина
        ИНАЧЕ СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
    КОНЕЦ)
11 Очевидно
 
10.03.21
11:08
Даже нет про "СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)" пропустил тогда так наверн:
...И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = &Строк ТОГДА
            СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ
            СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
    КОНЕЦ)
12 Terl
 
10.03.21
11:09
"Нужно сравнить оформление в заказе и в спецификации, а если не совпадают, то по виду спецификации"

Другими словами: КОГДА ЗаказыНаПроизводство.Оформление <> &Строк
                И СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
            ТОГДА  СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
            Иначе СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная) конец

Разве не так?
13 grasshoper
 
10.03.21
11:13
(12) Не так. В параметре всегда пустая строка, то есть это проверка на заполненность, можно и параметр убрать.

ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление <> ""
            ТОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
        ИНАЧЕ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
    КОНЕЦ)
14 Очевидно
 
10.03.21
11:13
(9) Если тяжело с "<>" попробуйте переформулировать на "=" ... это сильно упростит понимание ситуации.
15 grasshoper
 
10.03.21
11:14
(12) Если проверка оформления (СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление) пройдена, то соединяем по оформлению, а не по виду спецификации. (14) Сейчас попробую
16 grasshoper
 
10.03.21
11:16
(14) Попробовал так:
ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
                КОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                        ИЛИ СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ)

Те же грабли
17 Ботаник Гарден Меран
 
10.03.21
11:22
ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
                КОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ)

объединить

ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
                КОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ)
18 grasshoper
 
10.03.21
11:26
(17) Только если так пытаться
19 grasshoper
 
10.03.21
11:27
Ещё пробовал так:

ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
    И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
            КОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                ТОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
    КОНЕЦ
    ИЛИ ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
            КОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
    КОНЕЦ)
20 Очевидно
 
10.03.21
11:27
попробуйте вывести в своём запросе поля, которые вы используете в условиях соединения :
- ЗаказыНаПроизводство.Оформление
- СпецификацииНоменклатуры.ВидСпецификации
- СпецификацииНоменклатуры.Оформление

Убедитесь что у вас попадают совпадения (об которых речь) при котором :
1. ЗаказыНаПроизводство.Оформление <> ""
2. СпецификацииНоменклатуры.ВидСпецификации <> ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
3. СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление

как вариант, временно включите в выборку эти условия
- ЗаказыНаПроизводство.Оформление <> "" как условие1
- СпецификацииНоменклатуры.ВидСпецификации <> ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье) как условие2
- СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление как условие3

(если вы знаете конкретный пример спецификаций и заказов в которых проблема, поставьте ограничение в "Где закакз = &заказ и спецификация = &Спецификация", а это условие в соединении временно закоментируйте)

Какие результаты у проблемных строк ?
21 grasshoper
 
10.03.21
11:35
(20) Как раз и отрабатываю на заказе с одной проблемной номенклатурой. ВидСпецификации И Оформление вывожу в отчет. Для номенклатуры в заказе стоит оформление 52 и есть только одна спецификация для этой номенклатуры с оформлением 52, и также есть две спецификации с видом ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье).
22 Очевидно
 
10.03.21
11:54
т.е. вы хотите сказать что у вас есть строка
ЗаказыНаПроизводство.Оформление = "52"
Есть спецификации :
1 шт СпецификацииНоменклатуры.Оформление = "52"
2 шт СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)

"Нужно сравнить оформление в заказе и в спецификации, а если не совпадают, то по виду спецификации"
Тогда
... И (ВЫБОР
        КОГДА ЗаказыНаПроизводство.Оформление = ""
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
        ИНАЧЕ ВЫБОР
                КОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                        ИЛИ СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    КОНЕЦ)
Выведет вам спецификации
СпецификацииНоменклатуры.Оформление = "52",
и Обе спецификации СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
Если вы не получаете Обе спецификации СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
значит варианта 2:
1. ЗаказыНаПроизводство.Оформление = ""
2. СпецификацииНоменклатуры.ВидСпецификации <> ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
23 Очевидно
 
10.03.21
11:55
или "52" в заказе отличается от "52" в спецификации
24 grasshoper
 
10.03.21
12:05
(23) Выводит только по спецификации с оформлением 52, для сырьевой есть две спецификации, там ещё есть условие на поиск максимальной даты к дате заказа, но я его опустил.
25 grasshoper
 
10.03.21
12:06
(22) ВидСпецификации для сырьевых спецификаций однозначно ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
26 Очевидно
 
10.03.21
12:16
т.е. поля ЗаказыНаПроизводство.Оформление = "" как условие1 даёт ложь, а СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье) даёт истину и у вас их нет в выборке ?
но ведь так не бывает ? можт ещё какие-то условия есть ?
текст запроса большой ? можт весь текст в студию ?
27 Вафель
 
10.03.21
12:31
скорее всего там не пустая ссылка а нул
28 Вафель
 
10.03.21
12:31
или еще какое пустое значение
29 grasshoper
 
10.03.21
12:41
(26) Вот полный текст запроса:
ВЫБРАТЬ
    ЗаказНаПроизводствоПродукции.Ссылка.Дата КАК ДатаЗаказа,
    ЗаказНаПроизводствоПродукции.Номенклатура КАК Номенклатура,
    ЗаказНаПроизводствоПродукции.Оформление КАК Оформление,
    СУММА(ЗаказНаПроизводствоПродукции.Количество) КАК КоличествоБе,
    СУММА(ЗаказНаПроизводствоПродукции.Вес) КАК КоличествоКг
ПОМЕСТИТЬ ЗаказыНаПроизводство
ИЗ
    Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукции
ГДЕ
    ЗаказНаПроизводствоПродукции.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ЗаказНаПроизводствоПродукции.Ссылка = &ЗаказНаПроизвоство

СГРУППИРОВАТЬ ПО
    ЗаказНаПроизводствоПродукции.Ссылка.Дата,
    ЗаказНаПроизводствоПродукции.Номенклатура,
    ЗаказНаПроизводствоПродукции.Оформление
;

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

ИНДЕКСИРОВАТЬ ПО
    ДатаУтверждения,
    ВидСпецификации,
    Номенклатура
;

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

ИНДЕКСИРОВАТЬ ПО
    ДатаУтверждения,
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказыНаПроизводство.ДатаЗаказа КАК ДатаЗаказа,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.ДатаУтверждения
        КОГДА НЕ СпецификацииНоменклатуры.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.ДатаУтверждения
    КОНЕЦ КАК ДатаУтверждения,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.Спецификация
        КОГДА НЕ СпецификацииНоменклатуры.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.Спецификация
    КОНЕЦ КАК Спецификация,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.ВидСпецификации ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.ВидСпецификации
        КОГДА НЕ СпецификацииНоменклатуры.ВидСпецификации ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации
    КОНЕЦ КАК ВидСпецификации,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.КомплектующееНоменклатура ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.КомплектующееНоменклатура
        КОГДА НЕ СпецификацииНоменклатуры.КомплектующееНоменклатура ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.КомплектующееНоменклатура
    КОНЕЦ КАК Сырье,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.КомплектующееЕдиницаИзмерения ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.КомплектующееЕдиницаИзмерения
        КОГДА НЕ СпецификацииНоменклатуры.КомплектующееЕдиницаИзмерения ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.КомплектующееЕдиницаИзмерения
    КОНЕЦ КАК ЕдиницаИзмерения,
    СУММА(ЗаказыНаПроизводство.КоличествоКг * ВЫБОР
            КОГДА НЕ СпецификацииПолуфабрикаты.КомплектующееКоличествоБе ЕСТЬ NULL
                ТОГДА СпецификацииНоменклатуры.КомплектующееКоличествоБе / СпецификацииНоменклатуры.НоменклатураВыходноеКоличествоКг * СпецификацииПолуфабрикаты.КомплектующееКоличествоБе / СпецификацииПолуфабрикаты.НоменклатураВыходноеКоличествоКг
            КОГДА НЕ СпецификацииНоменклатуры.КомплектующееКоличествоБе ЕСТЬ NULL
                ТОГДА СпецификацииНоменклатуры.КомплектующееКоличествоБе / СпецификацииНоменклатуры.НоменклатураВыходноеКоличествоКг
        КОНЕЦ) КАК КоличествоБе
ИЗ
    ЗаказыНаПроизводство КАК ЗаказыНаПроизводство
        ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
        ПО ЗаказыНаПроизводство.Номенклатура = СпецификацииНоменклатуры.Номенклатура
            И (ВЫБОР
                КОГДА ЗаказыНаПроизводство.Оформление = ""
                    ТОГДА СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
                ИНАЧЕ ВЫБОР
                        КОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                                ИЛИ СпецификацииНоменклатуры.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                            ТОГДА ИСТИНА
                        ИНАЧЕ ЛОЖЬ
                    КОНЕЦ
            КОНЕЦ)
            И (СпецификацииНоменклатуры.ДатаУтверждения В
                (ВЫБРАТЬ
                    МАКСИМУМ(Спецификации.ДатаУтверждения)
                ИЗ
                    СпецификацииНоменклатуры КАК Спецификации
                ГДЕ
                    Спецификации.Номенклатура = СпецификацииНоменклатуры.Номенклатура
                    И Спецификации.ДатаУтверждения <= ЗаказыНаПроизводство.ДатаЗаказа
                    И ВЫБОР
                        КОГДА ЗаказыНаПроизводство.Оформление = ""
                            ТОГДА Спецификации.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сборочная)
                        ИНАЧЕ ВЫБОР
                                КОГДА СпецификацииНоменклатуры.Оформление = ЗаказыНаПроизводство.Оформление
                                        ИЛИ Спецификации.ВидСпецификации = ЗНАЧЕНИЕ(Перечисление.ВидыСпецификаций.Сырье)
                                    ТОГДА ИСТИНА
                                ИНАЧЕ ЛОЖЬ
                            КОНЕЦ
                    КОНЕЦ))
        ЛЕВОЕ СОЕДИНЕНИЕ СпецификацииСырьяИМатериалов КАК СпецификацииПолуфабрикаты
        ПО (ВЫБОР
                КОГДА СпецификацииНоменклатуры.КомплектующееНоменклатура.ВидВоспроизводства = ЗНАЧЕНИЕ(Перечисление.ВидыВоспроизводстваНоменклатуры.Производство)
                        ИЛИ СпецификацииНоменклатуры.КомплектующееНоменклатура.ВидВоспроизводства = ЗНАЧЕНИЕ(Перечисление.ВидыВоспроизводстваНоменклатуры.Переработка)
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
            И (СпецификацииНоменклатуры.КомплектующееНоменклатура = СпецификацииПолуфабрикаты.Номенклатура)
            И (СпецификацииПолуфабрикаты.ДатаУтверждения В
                (ВЫБРАТЬ
                    МАКСИМУМ(Спецификации.ДатаУтверждения)
                ИЗ
                    СпецификацииСырьяИМатериалов КАК Спецификации
                ГДЕ
                    Спецификации.Номенклатура = СпецификацииПолуфабрикаты.Номенклатура
                    И Спецификации.ДатаУтверждения <= ЗаказыНаПроизводство.ДатаЗаказа))

СГРУППИРОВАТЬ ПО
    ЗаказыНаПроизводство.ДатаЗаказа,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.ДатаУтверждения
        КОГДА НЕ СпецификацииНоменклатуры.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.ДатаУтверждения
    КОНЕЦ,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.Спецификация
        КОГДА НЕ СпецификацииНоменклатуры.Спецификация ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.Спецификация
    КОНЕЦ,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.ВидСпецификации ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.ВидСпецификации
        КОГДА НЕ СпецификацииНоменклатуры.ВидСпецификации ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.ВидСпецификации
    КОНЕЦ,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.КомплектующееНоменклатура ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.КомплектующееНоменклатура
        КОГДА НЕ СпецификацииНоменклатуры.КомплектующееНоменклатура ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.КомплектующееНоменклатура
    КОНЕЦ,
    ВЫБОР
        КОГДА НЕ СпецификацииПолуфабрикаты.КомплектующееЕдиницаИзмерения ЕСТЬ NULL
            ТОГДА СпецификацииПолуфабрикаты.КомплектующееЕдиницаИзмерения
        КОГДА НЕ СпецификацииНоменклатуры.КомплектующееЕдиницаИзмерения ЕСТЬ NULL
            ТОГДА СпецификацииНоменклатуры.КомплектующееЕдиницаИзмерения
    КОНЕЦ
30 grasshoper
 
10.03.21
12:49
Спецификации на номенклатуру из заказа https://ibb.co/V24CPS0
Параметры запроса https://ibb.co/TTgWWsh
31 Очевидно
 
10.03.21
12:50
ну так может "дата утверждения" не подходит под 3-е условие соединения ?
32 grasshoper
 
10.03.21
12:53
(31) Дата заказа 2020 год, а в спецификациях на сырье 2016 год, для оформления (52) 2018 год.
33 Очевидно
 
10.03.21
13:20
(32) Блок соединения, простым не назовёшь )
Могу предложить только декомпозицию этого удовольствия :
1. Оставить только блок "Номенклатура = Номенклатура". + добавить ограничение про заказ в "ГДЕ".
Остальные условия соединения закоментить. Убедится, что необходимые спецификации присутствуют в выборке.
2. Поочереди вернуть сначала 2-й блок, а затем 3-й ... определить после какого блока нужные спецификации пропадут.
3. Закоментить часть условий конкретного блока условий чтобы понять по какой ветке условий пошли данные.
4. Поочереди их раскоментить и следить когда спецификации пропадут ... таким образом дойти до конкретного условия в конкретном блоке, который отрабатывает некорректно.
Внимательно посмотреть на значения в ссылках и на условие.
34 grasshoper
 
10.03.21
13:28
(33) Спасибо, буду пробовать.