Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос в 1с по остаткам - баг или фича?

Запрос в 1с по остаткам - баг или фича?
Я
   wasa
 
26.10.21 - 11:13
Создаем запрос типа:

ВЫБРАТЬ
    ТоварыНаСкладахОстатки1.СерияНоменклатуры КАК СерияНоменклатуры,
    ТоварыНаСкладахОстатки1.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки1.КоличествоОстаток КАК КоличествоОстаток,
    ТоварыНаСкладахОстатки1.Склад КАК Склад
//ПОМЕСТИТЬ ВТ
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки1
ГДЕ
    ТоварыНаСкладахОстатки1.КоличествоОстаток < 0

Он возвращает, допустим, 400 позиций товаров, где есть отрицательные остатки по приведенным аналитикам. Теперь, в теле этого запроса делаем так:

ВЫБРАТЬ
    ТоварыНаСкладахОстатки1.СерияНоменклатуры КАК СерияНоменклатуры,
    ТоварыНаСкладахОстатки1.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки1.КоличествоОстаток КАК КоличествоОстаток,
    ТоварыНаСкладахОстатки1.Склад КАК Склад
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки1
ГДЕ
    ТоварыНаСкладахОстатки1.КоличествоОстаток < 0
;

Выбрать РАЗЛИЧНЫЕ ВТ.Номенклатура ИЗ ВТ

По идее результатом должен быть список из тех самых 400 +- позиций, по которым были остатки с минусом. Но - нет ) Результат всего четыре позиции, по которым остатки ТОЛЬКО по аналитике номенклатура суммарно - меньше нуля.  Где порылась собака? Мне в скиллбокс за новыми знаниями?
   ДенисЧ
 
1 - 26.10.21 - 11:16
Начни от 
Выбрать РАЗЛИЧНЫЕ ВТ.Номенклатура ИЗ ВТ
   wasa
 
2 - 26.10.21 - 11:17
(1) Никакой разницы.
   Галахад
 
3 - 26.10.21 - 11:22
400 позиций или 400 строк?
   arsik
 
4 - 26.10.21 - 11:22
(0) Интересный случай. У вас волчанка.
   Мультук
 
5 - 26.10.21 - 11:23
(0)

СКД ?
   arsik
 
6 - 26.10.21 - 11:23
(0) СКД или просто запрос?
   acht
 
7 - 26.10.21 - 11:24
(0) > Он возвращает, допустим, 400 позиций товаров, где есть отрицательные остатки по приведенным аналитикам.

Он возвращает, допустим, 400 позиций товаров, где есть отрицательные остатки по любым аналитикам.
   wasa
 
8 - 26.10.21 - 11:27
Запрос В СКД и консоли запросов дает такой результат. Думаю, что в обычном запросе получу правильные данные. Но вопрос остается - что делает СКД?
   Мультук
 
9 - 26.10.21 - 11:30
(8)
>>Запрос В СКД и консоли запросов дает такой результат
Не нужно путать консоль запросов и консоль СКД.


>>Но вопрос остается - что делает СКД?

Упрощает тебе жизнь. Что же еще?
Раньше она не пыталась "оптимизировать" временные таблицы, а теперь видать - научилась. Но это не точно(c)
   wasa
 
10 - 26.10.21 - 11:31
(3) Пусть будет 400 различных товаров. Не суть. Суть в том, что 2-й вариант запроса возвращает ТОЛЬКО товары, по которым минуса СУММАРНО до номенклатуры.
   Ivanich
 
11 - 26.10.21 - 11:32
А что вернёт 
Выбрать ВТ.Номенклатура ИЗ ВТ
   Dmitrii
 
12 - 26.10.21 - 11:34
(8) >> что делает СКД?

СКД выкидывает из запроса, те поля которые не используются в конечном запросе и не помечены как обязательные (можно поставить флажок в свойствах поля СКД).
Чтобы убедиться - посмотри запрос, который строится к БД. Некоторые конструкторы (включая типовой) это позволяют.
Но, как сказано в (9), это не точно.
   youalex
 
13 - 26.10.21 - 11:34
вместо гадания по стеклянному шару давно бы посмотрел в тех же ИР какой запрос формирует СКД.
   youalex
 
14 - 26.10.21 - 11:36
Скорее всего тупо выкидывает из вирт. таблицы поля, которые дальше не используются
   acht
 
15 - 26.10.21 - 11:53
(10) > 2-й вариант запроса возвращает ТОЛЬКО товары, по которым минуса СУММАРНО до номенклатуры.

Ну так ты же сам заказываешь различные значения одной колонки и потом удивляешься.

Товар1     Серия1    -1
Товар1     Серия2    -2

Что ожидается?
   wasa
 
16 - 26.10.21 - 11:59
Этот запрос я формировал в стандартной консоли отчетов 1С 
База: Комплексная автоматизация, редакция 1.1 (1.1.67.1) 
Платформа: 1С:Предприятие 8.3 (8.3.11.2899)

Еще раз: Суть в том что при выборке из виртуальной таблицы, и стандартная обработка "КОнсоль запросов" И Отчет на СКД ведут себя одинаково, а именно - при выборке из виртуальной таблицы неявно агрегируют данные там, где их не просили.

ДОПУСТИМ У вас есть 100 товаров с отрицательными остатками в разрезе серий. Но если они "компенсируются" положительными по другим сериям - результат запроса будет пустота.
Серии, или склады, или вообще неважно что.

Изначальный вопрос был в том, чтобы выбрать предварительно список товаров имеющих проблемы и построить по ним отчет по остаткам. В рамках одного запроса.

Что нужно указать в тексте запроса, чтобы обойти эту лишнюю операцию агрегирования?
   wasa
 
17 - 26.10.21 - 12:00
Да, вопрос чисто академический. Конечно я понимаю как обойти это программно и не морочить голову.
   acht
 
18 - 26.10.21 - 12:05
(16) > список товаров имеющих проблемы
Ты его и получаешь.

X товаров умножить на Y серий = 400 записей об отрицательных остатов по комбинации товар+серия

Ты честно получил свой X. Чего ты хочешь еще?
Хочешь комбинаций товар+серия, так напиши "выбрать разлчиные товар, серия из ..."
   acht
 
19 - 26.10.21 - 12:06
- У вас вопрос, или вы не знаете как работает бухгалтерия?
- У меня вопрос. Как работает бухгалтерия?
   Garykom
 
20 - 26.10.21 - 12:11
(17) У тебя непонимание какое то в (0)

И в (1) тебе правильно ответили!
   Dmitrii
 
21 - 26.10.21 - 12:35
(18) >> Ты его и получаешь.

Не получает он его. В этом и проблема. Я бы тоже ждал на выходе список проблемных номенклатур, а не данных просуммированных по одному лишь измерению.

Имеем
 
Товар1 Серия1 -1
Товар1 Серия2  1


По идее после выполнения первого запроса должно быть.
Товар1 Серия1 -1


После помещения этого результата в ВТ и выборки из ВТ должно остаться.
Товар 1


А вместо этого уже при выполнении первого запроса система получила данные только в разрезе номенклатур и не найдя там отрицательных остатков получила пустую таблицу ВТ.
Для меня такое поведение тоже является несколько неожиданным. Первый то запрос у меня в разрезе серий специально сделан, чтобы остатки увидеть в их разрезе.
   timurhv
 
22 - 26.10.21 - 12:36
   acht
 
23 - 26.10.21 - 12:41
(21) > По идее после выполнения первого запроса должно быть
Товар1 Серия1 -1

Эт почему?
   acht
 
24 - 26.10.21 - 12:42
А, там единица, Ну да
   Kesim
 
25 - 26.10.21 - 12:43
(21) вроде всегда так было
   Garykom
 
26 - 26.10.21 - 12:57
(16) Убрать ВТ и сделать Группировку на Номенклатуру
https://infostart.ru/1c/articles/125988/
   ptiz
 
27 - 26.10.21 - 13:22
(0) Это фича СКД. В обычной консоли запросов всё нормально.
   pechkin
 
28 - 26.10.21 - 13:29
автозаполнение отключай
   Classic
 
29 - 26.10.21 - 13:41
(0)
В первом же посте ответили.

УБЕРИ РАЗЛИЧНЫЕ!!!!!
   wasa
 
30 - 26.10.21 - 13:59
Извините, кому не отвечу, в основном ответы неверны.

Еще раз: Имеем
Товар 1  - сумма остатка -1
Серия1 - 10
Серия2 - -11
Товар 2 - сумма остатка 0
Серия1 - -1
Серия2 - 1
Товар2 - сумма остатка - +1
Серия1 - -5
Серия2 - 6
Кроме них, в регистре имеем еще 97 товаров с разными сериями, в которых остатки в разрезе товара или серий - положительные, нам они не нужны

Необходимо выбрать все остатки (в т. ч. положительные) по товарам, в разрезе серий которых есть отрицательные остатки
В реальной базе есть еще склады, характеристики и т.д, но в контексте примера мы их опустим, для простоты.

Запрос из (0) ИЗ КОНСОЛИ ЗАПРОСОВ ИЛИ СКД вернет ОДНУ позицию, Товар1
Этот же запрос в чистом виде вернет ТРИ товара. Товар1, Товар2, Товар3
 
 
   wasa
 
31 - 26.10.21 - 14:04
(27) Извини, ты проверил? Я то как раз удивился тому, что в моей консоли возвращает неправильно.
   wasa
 
32 - 26.10.21 - 14:08
(27) Спасибо. Интересно, эта фича как то документируется 1с? )
   timurhv
 
33 - 26.10.21 - 14:09
(30)
>Запрос из (0) ИЗ КОНСОЛИ ЗАПРОСОВ ИЛИ СКД вернет ОДНУ позицию, Товар1
>Этот же запрос в чистом виде вернет ТРИ товара. Товар1, Товар2, Товар3

Что за консоль такая? Я бы выкинул\переименовал ее.
   wasa
 
34 - 26.10.21 - 14:14
(33) Стандартная, из конфы Комплексная автоматизация, редакция 1.1 (1.1.67.1)
   wasa
 
35 - 26.10.21 - 14:41
Проверил запрос на конфе 1С:Комплексная автоматизация 2 (2.4.13.209) в консоли отчетов. Работает правильно, результат из описанного выше примера - три записи.
Резюме: В СКД есть баг, который агрегирует то, что его не просили. Отсюда и ошибка.
В конкретной моей консоли запросов - тот же баг, скорее всего она построена также на скд.
На это тему наверное можно закрыть.
   Garykom
 
36 - 26.10.21 - 14:46
(35) Это не баг это фича с оптимизацией запросов
Убирает неиспользуемые поля из всех запросов, перед тем как отправить на выполнение движку/серверу
   Garykom
 
37 - 26.10.21 - 14:51
(36)+ Абсолютно такая же что и в динамических списках, где даже изобрели галочку "Использовать всегда"
   wasa
 
38 - 26.10.21 - 15:10
(36) Да, соглашусь. Мой запрос из (0) ПЕРЕД выполнением на СКД будет преобразован в вид:

Выбрать
РегОстатки.Номенклатура
Поместить ВТ 
ИЗ РегистрыНакопления.Товары.Остатки() как РегОстатки
Где РегОстатки.КОличествоОстаток <0;
//////

Выбрать Вт.Номенклатура ИЗ ВТ

Потому и агрегирует до номенклатуры.
   ptiz
 
39 - 26.10.21 - 15:23
(35) Тебе всю тему долбят, что твоя консоль на СКД сделана.
   Xapac
 
40 - 26.10.21 - 15:25
(0) Пришлите копию базы для анализа
   серый КТУЛХУ
 
41 - 26.10.21 - 19:08
имхо ничего оно не агрегирует и скд не косячит.
читаем по слогам: Выбрать РАЗЛИЧНЫЕ ВТ.Номенклатура ИЗ ВТ
--- ну так различные "номенклатура" и получаешь... это разве по сути не то же самое, что ВТ.Выгрузить().Свернуть("Номенклатура","") ?..
   Garykom
 
42 - 26.10.21 - 19:26
(41) попробуй ))
   DTX 4th
 
43 - 26.10.21 - 20:56
Я бы посмотрел на эту КОНСОЛЬ ЗАПРОСОВ)
Выкладывай сюда
   DTX 4th
 
44 - 26.10.21 - 20:59
https://i.imgur.com/u4MYWQb.png

17 лет стажа, а консоль запросов не освоена) Как так
   wasa
 
45 - 27.10.21 - 10:16
(39) Да все уже.
(41) Нет. Не то же.
(43) Да нафиг оно тебе? Стандартная консоль, неуправляемые формы.
Тема разобрана, добавить уже нечего.

Остался правда вопрос, как в СКД все таки получить из (30) все три значения, чтобы в дальнейшем их использовать в отборе в другом запросе. Но оно уже за рамками темы.
   Garykom
 
46 - 27.10.21 - 10:19
(45) >как в СКД

условие наложи на пропадаемые поля, ну там не нулл например


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