|   |   | 
| 
 | Запрос в 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) >как в СКД
 условие наложи на пропадаемые поля, ну там не нулл например | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |