|
Помогите пожалуйста с запросом | ☑ | ||
---|---|---|---|---|
0
AnisaL
23.09.20
✎
10:39
|
Добрый день! Есть запрос к справочнику номенклатура, который считает какое количество на складе товара в 3-х регионах и плюс с ценой по региону, и он выдает по 15 строк одной и той же номенклатуры, вместо одной строки со всеми количествами и ценами. Как быть?
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, ВЫБОР КОГДА ТоварыНаСкладах.Склад В (&Магнитогорск) ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоМагнитогорск, ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенМагнитогорск ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) Конец КАК ЦенаМагнитогорск, ВЫБОР КОГДА ТоварыНаСкладах.Склад В (&Челябинск) ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоЧелябинск, ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенЧелябинск ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) Конец КАК ЦенаЧелябинск, ВЫБОР КОГДА ТоварыНаСкладах.Склад В (&Оренбург) ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоОренбург, ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦенОренбург ТОГДА МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) Конец КАК ЦенаОренбург ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа и СпрНоменклатура.Ссылка В (&Номенклатура) СГРУППИРОВАТЬ ПО СпрНоменклатура.Ссылка, ТоварыНаСкладах.Склад, ЦеныНоменклатурыСрезПоследних.ВидЦены |
|||
1
dka80
23.09.20
✎
10:41
|
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,
Выполни этот запрос отдельно и ты увидишь почему. Срез последних регистра сведений дает по всем Измерениям. У тебя, видимо, характеристики есть |
|||
2
ДенисЧ
23.09.20
✎
10:41
|
Как выбираешь, так и выдаёт... Не надо считать 1с умней себя...
|
|||
3
AnisaL
23.09.20
✎
10:42
|
(0) Вот что выдает запрос: https://b.radikal.ru/b34/2009/d1/a52bb19b1325.jpg
|
|||
4
AnisaL
23.09.20
✎
10:45
|
(1) Нет, характеристик нету
|
|||
5
ДенисЧ
23.09.20
✎
10:45
|
А если
СГРУППИРОВАТЬ ПО СпрНоменклатура.Ссылка, // ТоварыНаСкладах.Склад, ЦеныНоменклатурыСрезПоследних.ВидЦены |
|||
6
AnisaL
23.09.20
✎
11:02
|
(5) {(4, 9)}: Поле не входит в группу "ТоварыНаСкладах.Склад"
КОГДА <<?>>ТоварыНаСкладах.Склад В (&Магнитогорск) {ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.МодульОбъекта(555)}: ПарЗап = Запрос.НайтиПараметры(); {ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1439)}: РезультатСтруктура = ОбъектОбработки().СчитатьПараметрыЗапроса(ТекстЗапроса, ИдентификаторТекущегоЗапроса); {ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1038)}: ЗаполнитьПараметрыПриВыполненииЗапроса(Текст); {ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(1010)}: ВыполнитьЗапросСервер(ИндексТекущегоЗапроса, РезультатЗапроса, ВыводитьВременныеТаблицы, ВыводитьИдентификатор, Текст, ТекстСообщения); {ВнешняяОбработка.ИнструментыРазработчикаКонсольЗапросов.Форма.Форма.Форма(518)}: ЗапуститьВыполнениеЗапроса(Ложь); по причине: {(4, 9)}: Поле не входит в группу "ТоварыНаСкладах.Склад" КОГДА <<?>>ТоварыНаСкладах.Склад В (&Магнитогорск) |
|||
7
eTmy
23.09.20
✎
11:10
|
Представление null сделайте правильно и все сгруппируется
|
|||
8
AnisaL
23.09.20
✎
11:11
|
(7) Подскажите как это сделать? Я что-то не соображу
|
|||
9
AnisaL
23.09.20
✎
11:22
|
(7) (1) Удалила из запроса левое соединение с регистром сведений цены срез последних, оставило только количество, и теперь стало выдаваться 5 строк: https://a.radikal.ru/a29/2009/38/9002dfdde43d.jpg
|
|||
10
AnisaL
23.09.20
✎
11:23
|
(9) То есть количество не правильно формируется
|
|||
11
AnisaL
23.09.20
✎
11:34
|
Что-то ничего у меня не получается (. Может вообще как-то по другому надо запрос написать?
|
|||
12
AnisaL
23.09.20
✎
11:50
|
Вот убрала цены, вот что получилось : https://b.radikal.ru/b34/2009/28/e1a6a802d41e.jpg
|
|||
13
dka80
23.09.20
✎
11:55
|
(12) запрос покажи
|
|||
14
AnisaL
23.09.20
✎
12:02
|
(13)
ВЫБРАТЬ СпрНоменклатура.Наименование КАК Наименование, СпрНоменклатура.Артикул КАК Артикул, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоМагнитогорск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоЧелябинск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоОренбург ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа СГРУППИРОВАТЬ ПО СпрНоменклатура.Наименование, СпрНоменклатура.Артикул, ТоварыНаСкладах.Склад.Родитель |
|||
15
eTmy
23.09.20
✎
12:04
|
(12) В пустых колонках какой тип данных? Null?
|
|||
16
Andreyyy
23.09.20
✎
12:04
|
(14) Попробуйте сначала во временную таблицу, а оттуда выборку и сгруппировать.
Что-то было подобное, не нашел другого решения. |
|||
17
eTmy
23.09.20
✎
12:10
|
ВЫБРАТЬ
СпрНоменклатура.Наименование КАК Наименование, СпрНоменклатура.Артикул КАК Артикул, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ) КАК КолвоМагнитогорск, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ) КАК КолвоЧелябинск, МАКСИМУМ(ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург ТОГДА СУММА(ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ КАК КолвоОренбург ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа СГРУППИРОВАТЬ ПО СпрНоменклатура.Наименование, СпрНоменклатура.Артикул, ТоварыНаСкладах.Склад.Родитель Если там не null, то вот так должно схлопнуться (агрегатную функцию нужную сами выберите) |
|||
18
AnisaL
23.09.20
✎
12:12
|
(15) А как узнать? В конфигураторе эти столбцы с типом "число"
|
|||
19
eTmy
23.09.20
✎
12:14
|
(18) В консоли запроса, в результате запроса просто 2 раза тыкнуть, откроется значение)
|
|||
20
AnisaL
23.09.20
✎
12:17
|
(19) я тыкаю 2 раза, и ничего не открывается
|
|||
21
AnisaL
23.09.20
✎
12:17
|
(17) Ошибка получения информации набора данных
по причине: Ошибка в запросе набора данных по причине: {(4, 14)}: Недопустимо использование вложенных агрегирующих функций МАКСИМУМ(<<?>>ВЫБОР Вот какая ошибка выходит |
|||
22
dka80
23.09.20
✎
12:23
|
ИНАЧЕ Сумма(0)
|
|||
23
dka80
23.09.20
✎
12:23
|
Или сначала во временную таблицу без агрегирующих функций, а затем выборка из временной таблицы с агрегирующими функциями
|
|||
24
dka80
23.09.20
✎
12:27
|
(21)
сумма(ВЫБОР КОГДА ТоварыНаСкладах.Склад В (&Оренбург) ТОГДА (ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0)) ИНАЧЕ 0 КОНЕЦ) |
|||
25
eTmy
23.09.20
✎
12:29
|
(24) +, тс просто неправильно пыталась сгруппировать
|
|||
26
Rovan
гуру
23.09.20
✎
12:38
|
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах - там несколько складов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних - там несколкко видов цен ! |
|||
27
AnisaL
23.09.20
✎
12:53
|
(24) Теперь 3 строки выдает с одной номенклатурой: https://d.radikal.ru/d16/2009/58/2f2f0f66a7f8.jpg
|
|||
28
AnisaL
23.09.20
✎
13:27
|
(23) Сделала как вы сказали, сначала во временную таблицу, потом выборку с агрегатными функциями. Получилось в одну строку вывести, спасибо! Но почему-то по Оренбургу остаток не выводит, в чем может быть дело? https://b.radikal.ru/b12/2009/0a/6b947a9789a9.jpg
|
|||
29
dka80
23.09.20
✎
13:28
|
СГРУППИРОВАТЬ ПО
СпрНоменклатура.Ссылка |
|||
30
AnisaL
23.09.20
✎
13:42
|
(29) у меня есть эта группировка
|
|||
31
dka80
23.09.20
✎
13:44
|
(30) только эта группировка должна быть
Неправильно: СГРУППИРОВАТЬ ПО СпрНоменклатура.Ссылка, ТоварыНаСкладах.Склад, ЦеныНоменклатурыСрезПоследних.ВидЦены Правильно: СГРУППИРОВАТЬ ПО СпрНоменклатура.Ссылка |
|||
32
AnisaL
23.09.20
✎
13:52
|
(31) ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Ссылка, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоМагнитогорск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоЧелябинск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоОренбург ПОМЕСТИТЬ ВТ ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Ссылка КАК Ссылка, СУММА(ВТ.КолвоМагнитогорск) КАК КолвоМагнитогорск, СУММА(ВТ.КолвоЧелябинск) КАК КолвоЧелябинск, СУММА(ВТ.КолвоОренбург) КАК КолвоОренбург ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Ссылка |
|||
33
AnisaL
23.09.20
✎
13:53
|
(31) по Магнитогорску и Челябинску все работает, правильно считает остаток, а вот по Оренбургу 0. Не пойму в чем дело?
|
|||
34
dka80
23.09.20
✎
13:54
|
(33) запрос давай. Может по оренбургу просто нет остатков?
|
|||
35
AnisaL
23.09.20
✎
13:57
|
(34)
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Магнитогорск ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоМагнитогорск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Челябинск ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоЧелябинск, ВЫБОР КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург ТОГДА ЕСТЬNULL(ТоварыНаСкладах.ВНаличииОстаток, 0) ИНАЧЕ 0 КОНЕЦ КАК КолвоОренбург ПОМЕСТИТЬ ВТ ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладах ПО (ТоварыНаСкладах.Номенклатура = СпрНоменклатура.Ссылка) ГДЕ НЕ СпрНоменклатура.ЭтоГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Ссылка КАК Ссылка, СУММА(ВТ.КолвоМагнитогорск) КАК КолвоМагнитогорск, СУММА(ВТ.КолвоЧелябинск) КАК КолвоЧелябинск, СУММА(ВТ.КолвоОренбург) КАК КолвоОренбург ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Ссылка Остаток есть, в том то и дело |
|||
36
AnisaL
23.09.20
✎
13:57
|
(34) Остаток точно есть
|
|||
37
dka80
23.09.20
✎
14:01
|
КОГДА ТоварыНаСкладах.Склад.Родитель = &Оренбург
Вот это условие не выполняется. Может параметр неверный, может родитель у склада оренбурга другой |
|||
38
AnisaL
23.09.20
✎
14:20
|
(37) Да, действительно, параметр неверный. Просто всего 2 склада с именем Оренбург, и один из них группа, и он находил не группу. Спасибо! А теперь, подскажите, как мне к этим остаткам цены прикрутить?
|
|||
39
ColonelAp4u
23.09.20
✎
14:26
|
(38) Посмотри как я сделал твой запрос.
ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура, СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Остаток1Склад, СУММА(0) КАК Остаток2Склад, СУММА(0) КАК Остаток3Склад, СУММА(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &Период, Склад = &Склад И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура, СУММА(0), СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток), СУММА(0), СУММА(ЦеныНоменклатурыСрезПоследних.Цена) ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &Период, Склад = &Склад2 И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура, СУММА(0), СУММА(0), СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток), СУММА(ЦеныНоменклатурыСрезПоследних.Цена) ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &Период, Склад = &Склад3 И Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен3) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура |
|||
40
ColonelAp4u
23.09.20
✎
14:27
|
тебе нужно поменять в параметрах временных таблиц Склад = &Склад на склад.Родитель = &Магнитогорск или что то там.
|
|||
41
dka80
23.09.20
✎
14:31
|
(38) выбери цены во временную таблицу, сгруппировав максимум(цена) по номенклатуре.
далее левым соединением к запросу с остатками (что ты во временную таблицу поместила) |
|||
42
ColonelAp4u
23.09.20
✎
14:38
|
(41) быстрее запрос отработает через объединение чем через выбор когда, + выбор из справочника с левым соединением по остаткам, зачем? А потом еще этот результат еще одним левым с максимум цена? Почему максимум цена, почему не срез последних по типу цен, который выдаст 1 строчку по 1 номенклатуре.
|
|||
43
dka80
23.09.20
✎
14:41
|
Потому что у нее несколько типов цен и срез последних выдает несколько строк
|
|||
44
ColonelAp4u
23.09.20
✎
14:42
|
(43) посмотри мой пример в (39) выдаст как надо + быстрее чем 2 левых соединения.
|
|||
45
ColonelAp4u
23.09.20
✎
14:46
|
(38) (43) https://imgur.com/a/kH2TLRB вот результат моего запрос.
|
|||
46
ColonelAp4u
23.09.20
✎
14:47
|
запроса*.
|
|||
47
AnisaL
23.09.20
✎
15:27
|
(46) Сейчас смена закончилась, завтра попробую
|
|||
48
AnisaL
24.09.20
✎
11:01
|
(41) Запрос написала как вы сказали, все получилось, спасибо большое. Могу текст запроса сюда кинуть. Теперь все красиво! Только одна проблемка, из-за того что запрос сильно изменился, пропал заголовок формы списка номенклатуры. Как его добавить? https://c.radikal.ru/c39/2009/08/2cd5f50206a2.jpg
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |