|
Добавить параметр отбора в СКД | ☑ | ||
---|---|---|---|---|
0
al_zzz
29.05.12
✎
06:25
|
Есть запрос для СКД:
ВЫБРАТЬ ВложенныйЗапрос.Номенклатура КАК Номенклатура, СУММА(ВложенныйЗапрос.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Количество ПОМЕСТИТЬ _1_ОстаткиТекущие ИЗ (ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки {ГДЕ ТоварыНаСкладахОстатки.Склад.*} ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТоварыВРозницеОстатки.Номенклатура, ТоварыВРозницеОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки {ГДЕ ТоварыВРозницеОстатки.Склад.*}) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки ПО ВложенныйЗапрос.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура ГДЕ ВложенныйЗапрос.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) > 0 {ГДЕ ВложенныйЗапрос.Номенклатура.*, ТоварыВРезервеНаСкладахОстатки.Склад.*} СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура, _1_ОстаткиТекущие.Количество КАК Остаток, ПродажиОбороты.КоличествоОборот ПОМЕСТИТЬ _2_БезПродаж ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, , Номенклатура <> &ПустаяССылка И (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты))) КАК ПродажиОбороты ПО _1_ОстаткиТекущие.Номенклатура = ПродажиОбороты.Номенклатура ГДЕ ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) <= 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _2_БезПродаж.Номенклатура, ВложенныйЗапрос.Дата ПОМЕСТИТЬ _4_НоменклатураДата ИЗ _2_БезПродаж КАК _2_БезПродаж, (ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Дата ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.НачалоПериода КАК НачалоПериода, МАКСИМУМ(ВложенныйЗапрос.Количество) КАК Количество ПОМЕСТИТЬ _4_Остатки ИЗ (ВЫБРАТЬ КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ) КАК НачалоПериода, ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура, ТоварыВРозницеОстатки.КоличествоОстаток КАК Количество ИЗ РегистрНакопления.ТоварыВРознице.Остатки( &НачалоПериода, Номенклатура В (ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие)) КАК ТоварыВРозницеОстатки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НАЧАЛОПЕРИОДА(ТоварыВРозницеОстаткиИОбороты.Период, ДЕНЬ), ТоварыВРозницеОстаткиИОбороты.Номенклатура, ТоварыВРозницеОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ РегистрНакопления.ТоварыВРознице.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, День, , Номенклатура В (ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие)) КАК ТоварыВРозницеОстаткиИОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ), ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &НачалоПериода, Номенклатура В (ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие)) КАК ТоварыНаСкладахОстатки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ), ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, День, , Номенклатура В (ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие)) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.НачалоПериода, ВложенныйЗапрос.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _4_Остатки.НачалоПериода, МИНИМУМ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(ОстаткиКонец.НачалоПериода, ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1)), СЕКУНДА, -1)) КАК КонецПериода, _4_Остатки.Номенклатура, СУММА(_4_Остатки.Количество) КАК Количество ПОМЕСТИТЬ _5_ОстаткиПериодами ИЗ _4_Остатки КАК _4_Остатки ЛЕВОЕ СОЕДИНЕНИЕ _4_Остатки КАК ОстаткиКонец ПО _4_Остатки.Номенклатура = ОстаткиКонец.Номенклатура И _4_Остатки.НачалоПериода < ОстаткиКонец.НачалоПериода СГРУППИРОВАТЬ ПО _4_Остатки.НачалоПериода, _4_Остатки.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ _3_НоменклатураДата.Номенклатура КАК Номенклатура, СУММА(ВЫБОР КОГДА ЕСТЬNULL(_5_ОстаткиПериодами.Количество, 0) > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК Количество ПОМЕСТИТЬ _6_ВНаличии ИЗ _4_НоменклатураДата КАК _3_НоменклатураДата ЛЕВОЕ СОЕДИНЕНИЕ _5_ОстаткиПериодами КАК _5_ОстаткиПериодами ПО _3_НоменклатураДата.Номенклатура = _5_ОстаткиПериодами.Номенклатура И (_3_НоменклатураДата.Дата МЕЖДУ _5_ОстаткиПериодами.НачалоПериода И _5_ОстаткиПериодами.КонецПериода) СГРУППИРОВАТЬ ПО _3_НоменклатураДата.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _1_ОстаткиТекущие.Номенклатура КАК Номенклатура, _1_ОстаткиТекущие.Количество КАК Количество, _6_ВНаличии.Количество КАК БылВНаличии {ВЫБРАТЬ Номенклатура.*, Количество, БылВНаличии} ИЗ _1_ОстаткиТекущие КАК _1_ОстаткиТекущие ВНУТРЕННЕЕ СОЕДИНЕНИЕ _2_БезПродаж КАК _2_БезПродаж ПО _1_ОстаткиТекущие.Номенклатура = _2_БезПродаж.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ _6_ВНаличии КАК _6_ВНаличии ПО _1_ОстаткиТекущие.Номенклатура = _6_ВНаличии.Номенклатура {ГДЕ _1_ОстаткиТекущие.Номенклатура.*, _6_ВНаличии.Количество КАК БылВНаличии} Как добавить новый параметр отбора СКД склад? |
|||
1
Defender aka LINN
29.05.12
✎
06:50
|
Ты что думаешь, эту простыню и правда кто-то читать будет? {} тебе в помощь и вперед
|
|||
2
al_zzz
29.05.12
✎
07:27
|
(1) Согласен. Попробую сформулировать вопрос:
Требуется получить список товаров, имеющих остатки, у которых не было продаж за некоторый период. Остаток = ТоварыНаСкладах + ТоварыВРознице - ТоварыВРезерве. Если делаю по всем складам, без отбора, всё отрабатывается корректно. Если добавляю в каждый регистр конструкцию {ГДЕ <НазваниеРегистра>.Склад.*}, получаю в качестве результата пустую таблицу, если делаю по складу, несколько строк - если делаю по группе складов. Не могу понять, почему неправильно фильтруется... |
|||
3
al_zzz
29.05.12
✎
08:04
|
Если выполняю запрос в консоли и задаю параметры явно, результат корректен.
|
|||
4
Пеппи
29.05.12
✎
08:20
|
(3)значит проблема с параметрами не в консоли.
|
|||
5
Defender aka LINN
29.05.12
✎
08:32
|
(2) Я тебе открою тайну, если скажу, что {} можно и параметрах таблиц использовать?
|
|||
6
al_zzz
29.05.12
✎
08:35
|
(5) Т.е. не {ГДЕ
<НазваниеРегистра>.Склад.*} а {ИЗ <НазваниеРегистра>(,{Склад.*})} - об этом речь? |
|||
7
Пеппи
29.05.12
✎
08:37
|
(6) да
|
|||
8
al_zzz
29.05.12
✎
09:16
|
Спасибо, всё получилось!
Подскажите ещё по одной теме. Как сделать такую вещь: Вот у меня сейчас отчет, реализованный на СКД, выводит список товаров, которые есть на остатках, но по которым нет продаж. А как его переделать так, чтобы если склад не выбран, он работал так же, если склад выбран(или группа складов), была возможность отобрать товар(включалась/выключалась), который не продавался в конкретном магазине, но по фирме в целом есть продажи? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |