|
Запрос в 1с по остаткам - баг или фича? | ☑ | ||
---|---|---|---|---|
0
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
|
Начни от
Выбрать РАЗЛИЧНЫЕ ВТ.Номенклатура ИЗ ВТ |
|||
2
wasa
26.10.21
✎
11:17
|
(1) Никакой разницы.
|
|||
3
Галахад
гуру
26.10.21
✎
11:22
|
400 позиций или 400 строк?
|
|||
4
arsik
гуру
26.10.21
✎
11:22
|
(0) Интересный случай. У вас волчанка.
|
|||
5
Мультук
гуру
26.10.21
✎
11:23
|
(0)
СКД ? |
|||
6
arsik
гуру
26.10.21
✎
11:23
|
(0) СКД или просто запрос?
|
|||
7
acht
26.10.21
✎
11:24
|
(0) > Он возвращает, допустим, 400 позиций товаров, где есть отрицательные остатки по приведенным аналитикам.
Он возвращает, допустим, 400 позиций товаров, где есть отрицательные остатки по любым аналитикам. |
|||
8
wasa
26.10.21
✎
11:27
|
Запрос В СКД и консоли запросов дает такой результат. Думаю, что в обычном запросе получу правильные данные. Но вопрос остается - что делает СКД?
|
|||
9
Мультук
гуру
26.10.21
✎
11:30
|
(8)
>>Запрос В СКД и консоли запросов дает такой результат Не нужно путать консоль запросов и консоль СКД. >>Но вопрос остается - что делает СКД? Упрощает тебе жизнь. Что же еще? Раньше она не пыталась "оптимизировать" временные таблицы, а теперь видать - научилась. Но это не точно(c) |
|||
10
wasa
26.10.21
✎
11:31
|
(3) Пусть будет 400 различных товаров. Не суть. Суть в том, что 2-й вариант запроса возвращает ТОЛЬКО товары, по которым минуса СУММАРНО до номенклатуры.
|
|||
11
Ivanich
26.10.21
✎
11:32
|
А что вернёт
Выбрать ВТ.Номенклатура ИЗ ВТ |
|||
12
Dmitrii
гуру
26.10.21
✎
11:34
|
(8) >> что делает СКД?
СКД выкидывает из запроса, те поля которые не используются в конечном запросе и не помечены как обязательные (можно поставить флажок в свойствах поля СКД). Чтобы убедиться - посмотри запрос, который строится к БД. Некоторые конструкторы (включая типовой) это позволяют. Но, как сказано в (9), это не точно. |
|||
13
youalex
26.10.21
✎
11:34
|
вместо гадания по стеклянному шару давно бы посмотрел в тех же ИР какой запрос формирует СКД.
|
|||
14
youalex
26.10.21
✎
11:36
|
Скорее всего тупо выкидывает из вирт. таблицы поля, которые дальше не используются
|
|||
15
acht
26.10.21
✎
11:53
|
(10) > 2-й вариант запроса возвращает ТОЛЬКО товары, по которым минуса СУММАРНО до номенклатуры.
Ну так ты же сам заказываешь различные значения одной колонки и потом удивляешься. Товар1 Серия1 -1 Товар1 Серия2 -2 Что ожидается? |
|||
16
wasa
26.10.21
✎
11:59
|
Этот запрос я формировал в стандартной консоли отчетов 1С
База: Комплексная автоматизация, редакция 1.1 (1.1.67.1) Платформа: 1С:Предприятие 8.3 (8.3.11.2899) Еще раз: Суть в том что при выборке из виртуальной таблицы, и стандартная обработка "КОнсоль запросов" И Отчет на СКД ведут себя одинаково, а именно - при выборке из виртуальной таблицы неявно агрегируют данные там, где их не просили. ДОПУСТИМ У вас есть 100 товаров с отрицательными остатками в разрезе серий. Но если они "компенсируются" положительными по другим сериям - результат запроса будет пустота. Серии, или склады, или вообще неважно что. Изначальный вопрос был в том, чтобы выбрать предварительно список товаров имеющих проблемы и построить по ним отчет по остаткам. В рамках одного запроса. Что нужно указать в тексте запроса, чтобы обойти эту лишнюю операцию агрегирования? |
|||
17
wasa
26.10.21
✎
12:00
|
Да, вопрос чисто академический. Конечно я понимаю как обойти это программно и не морочить голову.
|
|||
18
acht
26.10.21
✎
12:05
|
(16) > список товаров имеющих проблемы
Ты его и получаешь. X товаров умножить на Y серий = 400 записей об отрицательных остатов по комбинации товар+серия Ты честно получил свой X. Чего ты хочешь еще? Хочешь комбинаций товар+серия, так напиши "выбрать разлчиные товар, серия из ..." |
|||
19
acht
26.10.21
✎
12:06
|
- У вас вопрос, или вы не знаете как работает бухгалтерия?
- У меня вопрос. Как работает бухгалтерия? |
|||
20
Garykom
гуру
26.10.21
✎
12:11
|
(17) У тебя непонимание какое то в (0)
И в (1) тебе правильно ответили! |
|||
21
Dmitrii
гуру
26.10.21
✎
12:35
|
(18) >> Ты его и получаешь.
Не получает он его. В этом и проблема. Я бы тоже ждал на выходе список проблемных номенклатур, а не данных просуммированных по одному лишь измерению. Имеем
По идее после выполнения первого запроса должно быть.
После помещения этого результата в ВТ и выборки из ВТ должно остаться.
А вместо этого уже при выполнении первого запроса система получила данные только в разрезе номенклатур и не найдя там отрицательных остатков получила пустую таблицу ВТ. Для меня такое поведение тоже является несколько неожиданным. Первый то запрос у меня в разрезе серий специально сделан, чтобы остатки увидеть в их разрезе. |
|||
22
timurhv
26.10.21
✎
12:36
|
||||
23
acht
26.10.21
✎
12:41
|
(21) > По идее после выполнения первого запроса должно быть
Товар1 Серия1 -1 Эт почему? |
|||
24
acht
26.10.21
✎
12:42
|
А, там единица, Ну да
|
|||
25
Kesim
26.10.21
✎
12:43
|
(21) вроде всегда так было
|
|||
26
Garykom
гуру
26.10.21
✎
12:57
|
(16) Убрать ВТ и сделать Группировку на Номенклатуру
https://infostart.ru/1c/articles/125988/ |
|||
27
ptiz
26.10.21
✎
13:22
|
(0) Это фича СКД. В обычной консоли запросов всё нормально.
|
|||
28
pechkin
26.10.21
✎
13:29
|
автозаполнение отключай
|
|||
29
Classic
26.10.21
✎
13:41
|
(0)
В первом же посте ответили. УБЕРИ РАЗЛИЧНЫЕ!!!!! |
|||
30
wasa
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 |
|||
31
wasa
26.10.21
✎
14:04
|
(27) Извини, ты проверил? Я то как раз удивился тому, что в моей консоли возвращает неправильно.
|
|||
32
wasa
26.10.21
✎
14:08
|
(27) Спасибо. Интересно, эта фича как то документируется 1с? )
|
|||
33
timurhv
26.10.21
✎
14:09
|
(30)
>Запрос из (0) ИЗ КОНСОЛИ ЗАПРОСОВ ИЛИ СКД вернет ОДНУ позицию, Товар1 >Этот же запрос в чистом виде вернет ТРИ товара. Товар1, Товар2, Товар3 Что за консоль такая? Я бы выкинул\переименовал ее. |
|||
34
wasa
26.10.21
✎
14:14
|
(33) Стандартная, из конфы Комплексная автоматизация, редакция 1.1 (1.1.67.1)
|
|||
35
wasa
26.10.21
✎
14:41
|
Проверил запрос на конфе 1С:Комплексная автоматизация 2 (2.4.13.209) в консоли отчетов. Работает правильно, результат из описанного выше примера - три записи.
Резюме: В СКД есть баг, который агрегирует то, что его не просили. Отсюда и ошибка. В конкретной моей консоли запросов - тот же баг, скорее всего она построена также на скд. На это тему наверное можно закрыть. |
|||
36
Garykom
гуру
26.10.21
✎
14:46
|
(35) Это не баг это фича с оптимизацией запросов
Убирает неиспользуемые поля из всех запросов, перед тем как отправить на выполнение движку/серверу |
|||
37
Garykom
гуру
26.10.21
✎
14:51
|
(36)+ Абсолютно такая же что и в динамических списках, где даже изобрели галочку "Использовать всегда"
|
|||
38
wasa
26.10.21
✎
15:10
|
(36) Да, соглашусь. Мой запрос из (0) ПЕРЕД выполнением на СКД будет преобразован в вид:
Выбрать РегОстатки.Номенклатура Поместить ВТ ИЗ РегистрыНакопления.Товары.Остатки() как РегОстатки Где РегОстатки.КОличествоОстаток <0; ////// Выбрать Вт.Номенклатура ИЗ ВТ Потому и агрегирует до номенклатуры. |
|||
39
ptiz
26.10.21
✎
15:23
|
(35) Тебе всю тему долбят, что твоя консоль на СКД сделана.
|
|||
40
Xapac
26.10.21
✎
15:25
|
(0) Пришлите копию базы для анализа
|
|||
41
серый КТУЛХУ
26.10.21
✎
19:08
|
имхо ничего оно не агрегирует и скд не косячит.
читаем по слогам: Выбрать РАЗЛИЧНЫЕ ВТ.Номенклатура ИЗ ВТ --- ну так различные "номенклатура" и получаешь... это разве по сути не то же самое, что ВТ.Выгрузить().Свернуть("Номенклатура","") ?.. |
|||
42
Garykom
гуру
26.10.21
✎
19:26
|
(41) попробуй ))
|
|||
43
DTX 4th
26.10.21
✎
20:56
|
Я бы посмотрел на эту КОНСОЛЬ ЗАПРОСОВ)
Выкладывай сюда |
|||
44
DTX 4th
26.10.21
✎
20:59
|
||||
45
wasa
27.10.21
✎
10:16
|
(39) Да все уже.
(41) Нет. Не то же. (43) Да нафиг оно тебе? Стандартная консоль, неуправляемые формы. Тема разобрана, добавить уже нечего. Остался правда вопрос, как в СКД все таки получить из (30) все три значения, чтобы в дальнейшем их использовать в отборе в другом запросе. Но оно уже за рамками темы. |
|||
46
Garykom
гуру
27.10.21
✎
10:19
|
(45) >как в СКД
условие наложи на пропадаемые поля, ну там не нулл например |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |