Вход | Регистрация
 

Программно формируемая СКД и итоговый запрос макета

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что в итоге естественно никаких данных не возвращает. Это задекларированное поведение платформы? Обойти это как то возможно?
 
 
   YAGolova
 
1 - 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
   yavasya
 
2 - 14.08.19 - 14:04
(0) бро, это шедевр

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.