Имя: Пароль:
1C
 
Глюки СКД
,
0 МаксимБел
 
29.12.22
11:06
Делаю отчет в СКД. Получаю набор данных запросом. В запросе соединяю две таблицы левым соединением. В условиях запроса отбираю только те записи, которых нет в правой таблице.

ВЫБРАТЬ
    Остатки.Изображение КАК Изображение,
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.СерияНоменклатурыСертификат КАК СерияНоменклатурыСертификат,
    Остатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    Остатки.Штрихкод КАК Штрихкод,
    Остатки.КоличествоОстаток,
    Продажи.Номенклатура КАК НоменклатураПрод
ИЗ
    Остатки КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
        ПО Остатки.Номенклатура = Продажи.Номенклатура
            И Остатки.ХарактеристикаНоменклатуры = Продажи.ХарактеристикаНоменклатуры
            И Остатки.СерияНоменклатурыСертификат = Продажи.СерияНоменклатурыСертификат
ГДЕ
    Продажи.Номенклатура ЕСТЬ NULL

СКД полностью игнорирует это условие и выводит на экран все записи левой таблицы.
Этот же запрос без проблем отрабатывает в консоли запросов.
Куда смотреть, что делать?
1 Kassern
 
29.12.22
11:09
(0) Скорее всего у вас отчет добавлен во внешние обработки, а вы тестируете новую версию через файл->Открыть и у вас открывается сохраненная ранее версия
2 МаксимБел
 
29.12.22
11:10
Нет. Настройки не сохранял. Пробовал скидывать на стандартные. Ничего не меняется
3 Kassern
 
29.12.22
11:12
(2) причем тут настройки? У вас этот отчет есть в справочнике ДополнительныеОтчетыИОбработки?
4 МаксимБел
 
29.12.22
11:14
Нет
5 Kassern
 
29.12.22
11:16
(4) Попробуйте в условии написать ЕстьNull(Продажи.Номенклатура,"")<>"" либо используете внутреннее соединение.
6 МаксимБел
 
29.12.22
11:16
(3) 100% Открывается то что надо, потому что отчет меняется, при внесении изменений в конфигураторе. Меняются поля, отборы и т.п. Проблема точно не в этом
7 МаксимБел
 
29.12.22
11:18
(5) Вот так:  ЕстьNull(Продажи.Номенклатура,"")<>"" вроде бы отработало. Бред какой-то. Спасибо)
8 Kassern
 
29.12.22
11:19
(7) Насколько я помню, есть исключение на сравнение с NULL в запросах
9 Kassern
 
29.12.22
11:21
(8) Вот тут есть примечание в конце статьи https://helpf.pro/faq/view/93.html
На ИТС так же находил инфу, сейчас искать лень)
10 МаксимБел
 
29.12.22
11:22
(7) Рано обрадовался. Не работает. При таком условии, отчет вообще ничего не отбирает. Сравнивать с NULL напрямую нельзя (типа так Поле = NULL)
11 Kassern
 
29.12.22
11:23
(10) Должно работать, в запросах только в путь ЕстьNull отрабатывает
12 Kassern
 
29.12.22
11:24
Если вам нужно вывести все где нет продаж, то есть Номенклатура = null, тогда ЕстьNull(Продажи.Номенклатура,"")=""
13 Мультук
 
гуру
29.12.22
11:26
(7)

Берем "Консоль СКД" и смотрим во что СКД преобразовывает запрос.

https://infostart.ru/public/15036/
14 toypaul
 
гуру
29.12.22
11:28
Предлагаю проверить следующее - в выбранные поля отчета добавит поле НоменклатураПрод
15 МаксимБел
 
29.12.22
11:44
(14) Не помогает
16 МаксимБел
 
29.12.22
11:44
(13) у меня управляемое приложение
17 Kassern
 
29.12.22
11:48
(15) Вы скажите, что вы хотите получить своим запросом? Все остатки по которым не было продаж? Тогда смотрите (12)
18 НЕА123
 
29.12.22
12:04
(7)
может ВНУТРЕННЕЕ правильней?
19 МаксимБел
 
29.12.22
12:04
(16) Совершенно верно. Остатки по которым не было продаж за указанный период
20 МаксимБел
 
29.12.22
12:05
(18) Внутренне даст противоположенный результат. А учитывая условие - вообще перманентно пустой результат будет
21 Kassern
 
29.12.22
12:06
(20) поменяйте уже <> на = и все у вас получится
22 МаксимБел
 
29.12.22
12:10
(21) Эту ошибку я сразу заметил и написал правильно =
23 Kassern
 
29.12.22
12:11
(22) И что у вас выводится в поле Продажи.Номенклатура?
24 НЕА123
 
29.12.22
12:16
ГДЕ
НЕ Продажи.Номенклатура = Остатки.Номенклатура
25 magicSan
 
29.12.22
12:31
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот,
    выбор когда ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот есть null тогда 1 иначе -1 конец
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&начало
            ,
                  
                  ) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&начало, , , ) КАК ВыручкаИСебестоимостьПродажОбороты
        ПО (ТоварыНаСкладахОстатки.Номенклатура = ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура)
        где  ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот есть null


всё работает, расходимся
26 Kassern
 
29.12.22
12:36
(25) Значит ТС что-то не договаривает
27 МаксимБел
 
29.12.22
14:09
(23) NUll
28 МаксимБел
 
29.12.22
14:12
Переписал отчет без использования СКД. Всё норм. Причем тот же запрос копипастой перенес. Не первый раз замечаю, что СКД выводит какую-то дичь, когда работа идет с регистрами накопления. Причем, что интересно, бывали случаи, когда результат отличался на копии базы. С регистрами бухгалтерии никогда подобного не замечал.
29 magicSan
 
29.12.22
14:25
(28) включи тж покажи нам запрос, звучит как звиздешь. СКД допиливатет отчет по отборам ну у тебя их нет. делаю ставку на глюки с вариантами отчета. Они решаются созданием нового отчета.
30 МаксимБел
 
29.12.22
15:18
(29)
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    ТоварыНаСкладахОстатки.Номенклатура.ОсновноеИзображение КАК Изображение,
    ТоварыНаСкладахОстатки.СерияНоменклатуры.Сертификат,
    Штрихкоды.Штрихкод КАК Штрихкод,
    ТоварыНаСкладахОстатки.КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериодаБух, Склад = &Склад) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
        ПО ТоварыНаСкладахОстатки.Номенклатура = Штрихкоды.Владелец
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Штрихкоды.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.Качество = Штрихкоды.Качество
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.СерияНоменклатуры.Сертификат,
    Продажи.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ Продажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &НачПериода И &КонПериода

СГРУППИРОВАТЬ ПО
    Продажи.Номенклатура,
    Продажи.СерияНоменклатуры.Сертификат,
    Продажи.ХарактеристикаНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остатки.Изображение КАК Изображение,
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.СерияНоменклатурыСертификат КАК СерияНоменклатурыСертификат,
    Остатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    Остатки.Штрихкод КАК Штрихкод,
    Остатки.КоличествоОстаток,
    ТИПЗНАЧЕНИЯ(Продажи.Номенклатура) КАК НоменклатураПрод
ИЗ
    Остатки КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
        ПО Остатки.Номенклатура = Продажи.Номенклатура
            И Остатки.ХарактеристикаНоменклатуры = Продажи.ХарактеристикаНоменклатуры
            И Остатки.СерияНоменклатурыСертификат = Продажи.СерияНоменклатурыСертификат
ГДЕ
    Продажи.Номенклатура ЕСТЬ NULL
31 МаксимБел
 
29.12.22
15:20