Имя: Пароль:
1C
1С v8
Разница вывода данных в отчет СКД и консоль запросов
0 Веселый Джузеппе
 
17.03.21
20:06
Добрый вечер!
Никак не пойму в чем проблема
Есть запрос
...
ВЫБРАТЬ
    СУММА(врНаВыход.иКоличествоСтраховокВПервомПериоде) КАК иКоличествоСтраховокВПервомПериоде,
    СУММА(врНаВыход.иКоличествоСтраховокВоВторомПериоде) КАК иКоличествоСтраховокВоВторомПериоде,
    СУММА(ВЫБОР
            КОГДА врНаВыход.иКоличествоСтраховокВПервомПериоде <> 0
                    И врНаВыход.иКоличествоСтраховокВоВторомПериоде <> 0
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК иПовторноКупилиСтраховку
ИЗ
    врНаВыход КАК врНаВыход

В СКД выводит https://clip2net.com/s/4bllfjY
В консоли запросов этот же запрос с теми же параметрами - https://clip2net.com/s/4bllgNW

Почему в СКД считает не так же как в консоли? 4 часа просидел, помираю
Есть идеи?
1 ДедМорроз
 
17.03.21
21:55
А в врНаВыход точно одно и тоже?
2 ДедМорроз
 
17.03.21
22:01
Попробуй ради интереса поменять 0 и 1 местами и посмотреть,что получится.
3 Sasha_H
 
17.03.21
22:29
что такое "врНаВыход" - представлен не весь запрос.
4 Sasha_H
 
17.03.21
22:30
СКД - многое оптимизирует и если в каком-то из промежуточных ВТ протаскиваемое поле не используется он его отсекат совсем.
5 ДедМорроз
 
17.03.21
22:45
Там скорее преобразование Null в ноль.
6 TormozIT
 
гуру
18.03.21
01:13
Ставь расширение "Инструменты разработчика". Далее
Если отчет без программной обработки (события ПриКомпоновкеРезультата) то и вызывай через CTRL+ALT+~ глобальное меню прям в отчете и затем в нем команду "Отладить компоновку" https://www.hostedredmine.com/issues/879329
Если же отчет с программной обработкой (события ПриКомпоновкеРезультата), то смотри тут https://www.youtube.com/watch?v=-NJJP79TccI
7 TormozIT
 
гуру
18.03.21
07:45
(6) Видимо уже засыпал. Правильный хоткей - CTRL+~ или CTRL+ALT+E. А CTRL+ALT+ - неправильный. https://infostart.ru/1c/articles/1273456/
8 DrZombi
 
гуру
18.03.21
08:11
(0) Выложи полный запрос.
9 Веселый Джузеппе
 
18.03.21
08:18
Доброе утро, вчера отрубило)
(1) вот здесь видно, что данные корректны
https://clip2net.com/clip/m400553/bd6f9-clip-94kb.png?nocache=1

(6) установил расширение и вот что получается

ПОЛНЫЙ ЗАПРОС ПО СКД

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ врНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    (Номенклатура.Наименование ПОДОБНО "%Страховка%"
            ИЛИ Номенклатура.Наименование ПОДОБНО "%Страхование%")
    И НЕ Номенклатура.ПометкаУдаления
    И НЕ Номенклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказКлиентаТовары.Количество КАК Количество1,
    0 КАК Количество2,
    ЗаказКлиентаТовары.СуммаСНДС КАК СуммаСНДС1,
    0 КАК СуммаСНДС2,
    ЗаказКлиентаТовары.Ссылка.Партнер КАК Партнер
ПОМЕСТИТЬ врОбъединение
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
    ЗаказКлиентаТовары.Ссылка.Проведен
    И ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ &НачалоПериода1 И &ОкончаниеПериода1
    И ЗаказКлиентаТовары.Номенклатура В
            (ВЫБРАТЬ
                врНоменклатура.Номенклатура
            ИЗ
                врНоменклатура КАК врНоменклатура)
    И ЗаказКлиентаТовары.Ссылка.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)

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

ВЫБРАТЬ
    0,
    ЗаказКлиентаТовары.Количество,
    0,
    ЗаказКлиентаТовары.СуммаСНДС,
    ЗаказКлиентаТовары.Ссылка.Партнер
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
    ЗаказКлиентаТовары.Ссылка.Проведен
    И ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ &НачалоПериода2 И &ОкончаниеПериода2
    И ЗаказКлиентаТовары.Номенклатура В
            (ВЫБРАТЬ
                врНоменклатура.Номенклатура
            ИЗ
                врНоменклатура КАК врНоменклатура)
    И ЗаказКлиентаТовары.Ссылка.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врОбъединение.Партнер КАК иПартнер,
    СУММА(врОбъединение.Количество1) КАК иКоличествоСтраховокВПервомПериоде,
    СУММА(врОбъединение.Количество2) КАК иКоличествоСтраховокВоВторомПериоде,
    СУММА(врОбъединение.Количество1) <> 0
        И СУММА(врОбъединение.Количество2) <> 0 КАК П1
ПОМЕСТИТЬ врГруппировка
ИЗ
    врОбъединение КАК врОбъединение

СГРУППИРОВАТЬ ПО
    врОбъединение.Партнер

ИМЕЮЩИЕ
    СУММА(врОбъединение.Количество1) <> 0 И
    СУММА(врОбъединение.Количество2) <> 0
;

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

Если я в итоговом пакете убираю поле Партнер и суммирую поля без него, СКД интерпретирует запрос на вид https://clip2net.com/s/4blzL1A
Естественно при таком выполнении данные неверны, но почему так делает я не понял...
10 Веселый Джузеппе
 
18.03.21
08:22
выше битая ссылка, смотрите тут
https://clip2net.com/s/4blzOCZ
или
https://clip2net.com/clip/m400553/81b47-clip-102kb.png?nocache=1
11 TormozIT
 
гуру
18.03.21
08:24
Ставь в конструкторе схемы компоновки флажок "Обязательное использование".
https://i.imgur.com/sRMi8sy.png
12 Веселый Джузеппе
 
18.03.21
08:30
(11) поставил у П1 - оно попало в запрос
но у меня группируется по партнеру, но в итоговой выборке мне надо откинуть эту группировку и посчитать итоги, чтобы вывести одной строкой в таблицу, соответственно поля ПАРТНЕР нет в полях СКД на выход и я не могу задать обязательный вывод
https://clip2net.com/s/4blzYGV
13 Веселый Джузеппе
 
18.03.21
08:50
попробовать на банальном запросе - та же история
если из итоговой выборки убирать партнета - СКД и в предыдущих пакетах "врГруппировка" убирает группировку по партнеру - https://clip2net.com/s/4blAm3i

ВЫБРАТЬ
    "Партнер1" КАК Партнер,
    5 КАК Число1,
    5 КАК Число2
ПОМЕСТИТЬ врОбъединение

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

ВЫБРАТЬ
    "Партнер1",
    5,
    5
    ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Партнер2",
    15,
    5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врОбъединение.Партнер КАК Партнер,
    СУММА(врОбъединение.Число1) КАК Число1,
    СУММА(врОбъединение.Число2) КАК Число2
ПОМЕСТИТЬ врГруппировка
ИЗ
    врОбъединение КАК врОбъединение

СГРУППИРОВАТЬ ПО
    врОбъединение.Партнер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(врГруппировка.Число1) КАК Число1,
    СУММА(врГруппировка.Число2) КАК Число2,
    СУММА(ВЫБОР КОГДА врГруппировка.Число1 = врГруппировка.Число2 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК Сравнение
ИЗ
    врГруппировка КАК врГруппировка
14 Веселый Джузеппе
 
18.03.21
08:52
15 Веселый Джузеппе
 
18.03.21
09:20
Короче объяснения я не нашел, пришлось крутить костыль, отсекаю раньше и считаю количество партнеров

https://c2n.me/4blBoVA

если кто знает ответ пишите! тему буду проверять периодически
всем спасибо, сдаемсууууу
16 toypaul
 
гуру
18.03.21
09:35
Я знаю. Устал уже повторять.

Если поле из запроса нигде не используется, то в список ВЫБРАТЬ его включать не надо (нельзя)

вместо

ВЫБРАТЬ ЕщеПоле, ПОЛЕ ИЗ Таблица СГРУППИРОВАТЬ ПО ПОЛЕ

надо писать

ВЫБРАТЬ ЕщеПоле ИЗ Таблица СГРУППИРОВАТЬ ПО ПОЛЕ

но нужно постоянно следить за тем, чтобы конструктор не добавлял ПОЛЕ в список ВЫБРАТЬ. а он это любит делать. хуже всего когда твой отчет будут дорабатывать те кот этого не знают
17 toypaul
 
гуру
18.03.21
09:38
Более надежный способ (но не такой красивый), "протаскивать" все ненужные поля до последнего запроса в любом виде. Как МАКСИМУМ, например. И ставить им флажок "обязательное".

Хотя и здесь может получиться "шляпа". Если снять флажок "Автозаполнение" и потом его снова поставить, то вполне себе может быть, что флажок "Обязательное" потеряется.
18 TormozIT
 
гуру
18.03.21
10:03
(13) Еще есть такой способ выявления изменений в тексте запроса https://www.hostedredmine.com/issues/851723
19 TormozIT
 
гуру
18.03.21
10:16
(15) Анализатор СКД проверяет наличие ссылок на поле в финальном запросе пакета. В твоем случае их нет. Поэтому он его удалил из предыдущих запросов пакета. Действительно сложно назвать такое поведение правильным.
Чтобы этого не происходило, достаточно в последний запрос добавить нейтральное выражение с обращением к нужному полю. Например
ГДЕ НЕ врГруппировка.Партнер ЕСТЬ NULL
20 TormozIT
 
гуру
18.03.21
11:29
Отправил описание проблемы в 1С https://www.hostedredmine.com/issues/923054
21 Веселый Джузеппе
 
18.03.21
13:09
Спасибо за ответы, тему сохранил в закладки)
22 TormozIT
 
гуру
31.03.21
15:28
Был уверен, что в 1С признают это поведение ошибкой. Но даже после более подробного обоснования своей позиции, я все же получил отказ в признании ошибкой:
"Такое поведение платформы является штатным. Пересматривать его нет необходимости. При разработке прикладных решений эту особенность необходимо учитывать"
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.