Имя: Пароль:
1C
 
Программно формируемая СКД и итоговый запрос макета
0 YAGolova
 
14.08.19
13:27
Вопрос к знатокам СКД. Формирую схему программно таким образом, что текст основного запроса выходит примерно такой:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
{ВЫБРАТЬ
    Номенклатура.* КАК Номенклатура}
ИЗ
    Справочник.Номенклатура КАК Номенклатура
{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура1,
    Номенклатура.Ссылка.* КАК Номенклатура}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура2,
    Номенклатура.Ссылка.* КАК Номенклатура}

На платформе 8.3.7 из этого запроса при установке отборов на номенклатура1 и номенклатура2 выходил запрос

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П1

Переставили платформу на 8.3.13 и выходит запрос:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура = &П И NULL = &П1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
        Номенклатура.Ссылка КАК Номенклатура

ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    NULL = &П И Номенклатура = &П1

Что в итоге естественно никаких данных не возвращает. Это задекларированное поведение платформы? Обойти это как то возможно?
1 YAGolova
 
14.08.19
13:35
Вот что нашел при описании изменений поведения платформы. Для 8.3.1 они прям писали:
При использовании в запросе набора данных системы компоновки данных с автоматическим заполнением доступных настроек конструкции ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, и накладывании отбора на реквизит поля, отбор накладывается только в тех частях объединения, в которых данный реквизит существует. При применении отбора к полю отбор применяется только в тех частях, где выражение поля не равно NULL.

Источник: https://dl03.1c.ru/content/Platform/8_3_15_1565/1cv8upd_8_3_15_1565.htm#55463269-77f0-11e1-b5d1-e61f135f174b
2 yavasya
 
14.08.19
14:04
(0) бро, это шедевр

ГДЕ
    NULL = &П И Номенклатура = &П1

какая задача хть?
3 Конструктор1С
 
14.08.19
14:42
(0) а зачем ты именуешь одно и то же поле по-разному?

{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура1,
    Номенклатура.Ссылка.* КАК Номенклатура}
{ГДЕ
    Номенклатура.Ссылка.* КАК Номенклатура2,
    Номенклатура.Ссылка.* КАК Номенклатура}
4 YAGolova
 
14.08.19
15:11
(3) Т.к. хочу наложить разные отборы по номенклатуре в разных частях объединения. Там есть еще одно поле в это запросе, я просто сократил его. В каждой части запроса есть
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    &Сегмент1 КАК Сегмент

Соответственно таблица в итоге должна получиться где сегмент/номенклатура
5 YAGolova
 
14.08.19
15:12
(2) Так как раз платформа делает - эти NULL мне и мешают. Раньше такого поведения не было
6 kabanoff
 
14.08.19
15:18
(0) Да, я тоже столкнулся с этим в 8.3.13.1644.
Вот мои наблюдения: https://forum.infostart.ru/forum9/topic203141/message2266395/

(1) Да, разработчики обещают исправить это в 8.3.14.
7 kabanoff
 
14.08.19
15:20
(0) Вариант обхода - сформировать промежуточные временные таблицы и компоновочные отборы наложить именно в них.
8 YAGolova
 
14.08.19
15:25
(7) Это понятно, просто у меня этих объединений дохрена и плодить временные таблицы как то не кошерно