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

Помогите пожалуйста с запросом

Помогите пожалуйста с запросом
Я
   AnisaL
 
23.09.20 - 10:39
Добрый день! Есть запрос к справочнику номенклатура, который считает какое количество на складе товара в 3-х регионах и плюс с ценой по региону, и он выдает по 15 строк одной и той же номенклатуры, вместо одной строки со всеми количествами и ценами. Как быть?

ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Ссылка,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад В (&Магнитогорск)
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоМагнитогорск,
    
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенМагнитогорск
            ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена)
    
    Конец КАК ЦенаМагнитогорск,

    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад В (&Челябинск)
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоЧелябинск,
    
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенЧелябинск
            ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена)
    
    Конец КАК ЦенаЧелябинск,
    
        ВЫБОР
        КОГДА ТоварыНаСкладах.Склад В (&Оренбург)
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоОренбург,
    
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенОренбург
            ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена)
    
    Конец КАК ЦенаОренбург
                    
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах
        ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа и СпрНоменклатура.Ссылка В (&Номенклатура)

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка,
    ТоварыНаСкладах.Склад,
    ЦеныНоменклатурыСрезПоследних.ВидЦены
   dka80
 
1 - 23.09.20 - 10:41
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,

Выполни этот запрос отдельно и ты увидишь почему. Срез последних регистра сведений дает по всем Измерениям. У тебя, видимо, характеристики есть
   ДенисЧ
 
2 - 23.09.20 - 10:41
Как выбираешь, так и выдаёт... Не надо считать 1с умней себя...
   AnisaL
 
3 - 23.09.20 - 10:42
(0) Вот что выдает запрос: https://b.radikal.ru/b34/2009/d1/a52bb19b1325.jpg
   AnisaL
 
4 - 23.09.20 - 10:45
(1) Нет, характеристик нету
   ДенисЧ
 
5 - 23.09.20 - 10:45
А если 

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка,
//    ТоварыНаСкладах.Склад,

    ЦеныНоменклатурыСрезПоследних.ВидЦены
   AnisaL
 
6 - 23.09.20 - 11:02
(5) {(4, 9)}: Поле не входит в группу "ТоварыНаСкладах.Склад"
КОГДА <<?>>ТоварыНаСкладах.Склад В (&Магнитогорск)
{ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.МодульОбъекта(555)}:    ПарЗап = Запрос.НайтиПараметры();
{ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1439)}:    РезультатСтруктура = ОбъектОбработки().СчитатьПараметрыЗапроса(ТекстЗапроса, ИдентификаторТекущегоЗапроса);
{ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1038)}:    ЗаполнитьПараметрыПриВыполненииЗапроса(Текст);
{ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1010)}:    ВыполнитьЗапросСервер(ИндексТекущегоЗапроса, РезультатЗапроса, ВыводитьВременныеТаблицы, ВыводитьИдентификатор, Текст, ТекстСообщения);
{ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(518)}:    ЗапуститьВыполнениеЗапроса(Ложь);

по причине:
{(4, 9)}: Поле не входит в группу "ТоварыНаСкладах.Склад"
КОГДА <<?>>ТоварыНаСкладах.Склад В (&Магнитогорск)
   eTmy
 
7 - 23.09.20 - 11:10
Представление null сделайте правильно и все сгруппируется
   AnisaL
 
8 - 23.09.20 - 11:11
(7) Подскажите как это сделать? Я что-то не соображу
   AnisaL
 
9 - 23.09.20 - 11:22
(7) (1) Удалила из запроса левое соединение с регистром сведений цены срез последних, оставило только количество, и теперь стало выдаваться 5 строк: https://a.radikal.ru/a29/2009/38/9002dfdde43d.jpg
   AnisaL
 
10 - 23.09.20 - 11:23
(9) То есть количество не правильно формируется
   AnisaL
 
11 - 23.09.20 - 11:34
Что-то ничего у меня не получается (. Может вообще как-то по другому надо запрос написать?
   AnisaL
 
12 - 23.09.20 - 11:50
Вот убрала цены, вот что получилось : https://b.radikal.ru/b34/2009/28/e1a6a802d41e.jpg
   dka80
 
13 - 23.09.20 - 11:55
(12) запрос покажи
   AnisaL
 
14 - 23.09.20 - 12:02
(13)
ВЫБРАТЬ
    СпрНоменклатура.Наименование КАК Наименование,
    СпрНоменклатура.Артикул КАК Артикул,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоМагнитогорск,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоЧелябинск,
    
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоОренбург
                    
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах
        ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Наименование,
    СпрНоменклатура.Артикул,
    ТоварыНаСкладах.Склад.Родитель
   eTmy
 
15 - 23.09.20 - 12:04
(12) В пустых колонках какой тип данных? Null?
   Andreyyy
 
16 - 23.09.20 - 12:04
(14) Попробуйте сначала во временную таблицу, а оттуда выборку и сгруппировать.
Что-то было подобное, не нашел другого решения.
   eTmy
 
17 - 23.09.20 - 12:10
ВЫБРАТЬ
    СпрНоменклатура.Наименование КАК Наименование,
    СпрНоменклатура.Артикул КАК Артикул,
    МАКСИМУМ(ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ) КАК КолвоМагнитогорск,
    МАКСИМУМ(ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ) КАК КолвоЧелябинск,
    
    МАКСИМУМ(ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
            ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоОренбург
                    
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах
        ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа

СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Наименование,
    СпрНоменклатура.Артикул,
    ТоварыНаСкладах.Склад.Родитель

Если там не null, то вот так должно схлопнуться (агрегатную функцию нужную сами выберите)
   AnisaL
 
18 - 23.09.20 - 12:12
(15) А как узнать? В конфигураторе эти столбцы с типом "число"
   eTmy
 
19 - 23.09.20 - 12:14
(18) В консоли запроса, в результате запроса просто 2 раза тыкнуть, откроется значение)
   AnisaL
 
20 - 23.09.20 - 12:17
(19) я тыкаю 2 раза, и ничего не открывается
   AnisaL
 
21 - 23.09.20 - 12:17
(17) Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(4, 14)}: Недопустимо использование вложенных агрегирующих функций
МАКСИМУМ(<<?>>ВЫБОР

Вот какая ошибка выходит
   dka80
 
22 - 23.09.20 - 12:23
ИНАЧЕ Сумма(0)
   dka80
 
23 - 23.09.20 - 12:23
Или сначала во временную таблицу без агрегирующих функций, а затем выборка из временной таблицы с агрегирующими функциями
   dka80
 
24 - 23.09.20 - 12:27
(21)
сумма(ВЫБОР
        КОГДА ТоварыНаСкладах.Склад В (&Оренбург)
            ТОГДА (ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0))
        ИНАЧЕ 0
    КОНЕЦ)
   eTmy
 
25 - 23.09.20 - 12:29
(24) +, тс просто неправильно пыталась сгруппировать
   Rovan
 
26 - 23.09.20 - 12:38
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах - там несколько складов

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних - там несколкко видов цен !
   AnisaL
 
27 - 23.09.20 - 12:53
(24) Теперь 3 строки выдает с одной номенклатурой: https://d.radikal.ru/d16/2009/58/2f2f0f66a7f8.jpg
   AnisaL
 
28 - 23.09.20 - 13:27
(23) Сделала как вы сказали, сначала во временную таблицу, потом выборку с агрегатными функциями. Получилось в одну строку вывести, спасибо! Но почему-то по Оренбургу остаток не выводит, в чем может быть дело?  https://b.radikal.ru/b12/2009/0a/6b947a9789a9.jpg
   dka80
 
29 - 23.09.20 - 13:28
СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка
   AnisaL
 
30 - 23.09.20 - 13:42
(29) у меня есть эта группировка
 
 Рекламное место пустует
   dka80
 
31 - 23.09.20 - 13:44
(30) только эта группировка должна быть

Неправильно:
СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка,
    ТоварыНаСкладах.Склад,
    ЦеныНоменклатурыСрезПоследних.ВидЦены

Правильно:
СГРУППИРОВАТЬ ПО
    СпрНоменклатура.Ссылка
   AnisaL
 
32 - 23.09.20 - 13:52
(31) ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Ссылка,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоМагнитогорск,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоЧелябинск,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоОренбург
ПОМЕСТИТЬ ВТ
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах
        ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ.Ссылка КАК Ссылка,
    СУММА(ВТ.КолвоМагнитогорск) КАК КолвоМагнитогорск,
    СУММА(ВТ.КолвоЧелябинск) КАК КолвоЧелябинск,
    СУММА(ВТ.КолвоОренбург) КАК КолвоОренбург
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Ссылка
   AnisaL
 
33 - 23.09.20 - 13:53
(31) по Магнитогорску и Челябинску все работает, правильно считает остаток, а вот по Оренбургу 0. Не пойму в чем дело?
   dka80
 
34 - 23.09.20 - 13:54
(33) запрос давай. Может по оренбургу просто нет остатков?
   AnisaL
 
35 - 23.09.20 - 13:57
(34)
 ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Ссылка,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоМагнитогорск,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоЧелябинск,
    ВЫБОР
        КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
            ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоОренбург
ПОМЕСТИТЬ ВТ
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах
        ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа
;

////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
    ВТ.Ссылка КАК Ссылка,
    СУММА(ВТ.КолвоМагнитогорск) КАК КолвоМагнитогорск,
    СУММА(ВТ.КолвоЧелябинск) КАК КолвоЧелябинск,
    СУММА(ВТ.КолвоОренбург) КАК КолвоОренбург
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Ссылка

Остаток есть, в том то и дело
   AnisaL
 
36 - 23.09.20 - 13:57
(34) Остаток точно есть
   dka80
 
37 - 23.09.20 - 14:01
КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
Вот это условие не выполняется. Может параметр неверный, может родитель у склада оренбурга другой
   AnisaL
 
38 - 23.09.20 - 14:20
(37) Да, действительно, параметр неверный. Просто всего 2 склада с именем Оренбург, и один из них группа, и он находил не группу. Спасибо! А теперь, подскажите, как мне к этим остаткам цены прикрутить?
   ColonelAp4u
 
39 - 23.09.20 - 14:26
(38) Посмотри как я сделал твой запрос.
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура,
    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Остаток1Склад,
    СУММА(0) КАК Остаток2Склад,
    СУММА(0) КАК Остаток3Склад,
    СУММА(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            &Период,
            Склад = &Склад
                И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

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

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

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура,
    СУММА(0),
    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток),
    СУММА(0),
    СУММА(ЦеныНоменклатурыСрезПоследних.Цена)
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            &Период,
            Склад = &Склад2
                И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

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

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

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура,
    СУММА(0),
    СУММА(0),
    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток),
    СУММА(ЦеныНоменклатурыСрезПоследних.Цена)
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            &Период,
            Склад = &Склад3
                И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен3) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура
   ColonelAp4u
 
40 - 23.09.20 - 14:27
тебе нужно поменять в параметрах временных таблиц Склад = &Склад на склад.Родитель = &Магнитогорск или что то там.
   dka80
 
41 - 23.09.20 - 14:31
(38) выбери цены во временную таблицу, сгруппировав максимум(цена) по номенклатуре.
далее левым соединением к запросу с остатками (что ты во временную таблицу поместила)
   ColonelAp4u
 
42 - 23.09.20 - 14:38
(41) быстрее запрос отработает через объединение чем через выбор когда, + выбор из справочника с левым соединением по остаткам, зачем? А потом еще этот результат еще одним левым с максимум цена? Почему максимум цена, почему не срез последних по типу цен, который выдаст 1 строчку по 1 номенклатуре.
   dka80
 
43 - 23.09.20 - 14:41
Потому что у нее несколько типов цен и срез последних выдает несколько строк
   ColonelAp4u
 
44 - 23.09.20 - 14:42
(43) посмотри мой пример в (39) выдаст как надо + быстрее чем 2 левых соединения.
   ColonelAp4u
 
45 - 23.09.20 - 14:46
(38) (43) https://imgur.com/a/kH2TLRB  вот результат моего запрос.
   ColonelAp4u
 
46 - 23.09.20 - 14:47
запроса*.
   AnisaL
 
47 - 23.09.20 - 15:27
(46) Сейчас смена закончилась, завтра попробую
   AnisaL
 
48 - 24.09.20 - 11:01
(41) Запрос написала как вы сказали, все получилось, спасибо большое. Могу текст запроса сюда кинуть. Теперь все красиво! Только одна проблемка, из-за того что запрос сильно изменился, пропал заголовок формы списка номенклатуры. Как его добавить? https://c.radikal.ru/c39/2009/08/2cd5f50206a2.jpg


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