|
Отчет СКД поиск предыдущей записи регистра сведений | ☑ | ||
---|---|---|---|---|
0
Ly_Alena
28.01.15
✎
13:41
|
Из регистра цены номенклатуры нужно выбрать последнюю и предыдущую запись, чтобы посчитать рост или снижение цены.
Запрос СКД: ВЫБРАТЬ ВложенныйЗапрос.ПлановаяПредыдущая, ВложенныйЗапрос1.Приходная, ВложенныйЗапрос2.ПлановаяПоследняя, ВЫБОР КОГДА ВложенныйЗапрос.ПлановаяПредыдущая <> 0 ТОГДА (ВложенныйЗапрос2.ПлановаяПоследняя / ВложенныйЗапрос.ПлановаяПредыдущая - 1) * 100 КОНЕЦ КАК Рост, ВложенныйЗапрос.Номенклатура ИЗ (ВЫБРАТЬ ЦеныНоменклатуры.Цена КАК ПлановаяПредыдущая, ЦеныНоменклатуры.Номенклатура.Наименование КАК Номенклатура, ЦеныНоменклатуры.Номенклатура.Ссылка КАК НоменклатураСсылка, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ТипЦен.Код = "000000008" И ЦеныНоменклатуры.Номенклатура.ВидНоменклатуры.Код = "000000004" СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Цена, ЦеныНоменклатуры.Номенклатура.Наименование, ЦеныНоменклатуры.Номенклатура.Ссылка) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Цена КАК Приходная, ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка КАК НоменклатураСсылка ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = "000000001" СГРУППИРОВАТЬ ПО ЦеныНоменклатурыСрезПоследних.Цена, ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка) КАК ВложенныйЗапрос1 ПО ВложенныйЗапрос.НоменклатураСсылка = ВложенныйЗапрос1.НоменклатураСсылка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка КАК НоменклатураСсылка, ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяПоследняя, ЦеныНоменклатурыСрезПоследних.Период КАК Период ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = "000000008") КАК ВложенныйЗапрос2 ПО ВложенныйЗапрос.НоменклатураСсылка = ВложенныйЗапрос2.НоменклатураСсылка ГДЕ ВложенныйЗапрос2.Период > ВложенныйЗапрос.Период Выдает две записи - первая правильно отбирает. Вторая нет. Что не так? |
|||
1
Ly_Alena
28.01.15
✎
13:41
|
Добрый вечер!
|
|||
2
Ly_Alena
28.01.15
✎
13:49
|
ТО есть мне нужна только одна запись - первая
|
|||
3
Ly_Alena
29.01.15
✎
05:04
|
Я что в черном списке?
|
|||
4
VladZ
29.01.15
✎
05:45
|
(0) Ух, намутила... Неспешный поиск в инете всяко бы привел тебя, как минимум, сюда: infostart.ru/public/77568/
Посмотри внимательно на второй подзапрос. |
|||
5
Ly_Alena
29.01.15
✎
06:19
|
(4) спасибо, инэт весь перерыла - этот пример не попадался. Сейчас буду разбираться!
|
|||
6
Ly_Alena
29.01.15
✎
06:50
|
(4) Как мне кажется моя сложность (в данном случае) в том, что все берется из одного регистра сведений ЦеныНоменклатуры, а именно берется "Приходная", "Плановая предпоследняя", "Плановая последняя". Все выводится в РАЗНЫХ столбцах.
|
|||
7
Ly_Alena
29.01.15
✎
07:14
|
Берутся три цены, но с разным ТипЦены
|
|||
8
вовочка
29.01.15
✎
07:34
|
поиск на мисте по срез предпоследних
v8: Срез последних и предпоследних |
|||
9
Ly_Alena
29.01.15
✎
08:00
|
(8) Вовочка!!! Спасибо! То что надо!
|
|||
10
Ly_Alena
29.01.15
✎
10:49
|
Вот что получилось:
ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Период, ЦеныНоменклатурыСрезПоследних.Номенклатура ПОМЕСТИТЬ ВТ_СрезПоследних ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = "000000008" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЦеныНоменклатуры.Период, ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Цена КАК ПлановаяПредыдущая, ВложенныйЗапрос.ПриходнаяПоследняя, ВложенныйЗапрос1.ПлановаяПоследняя, ВЫБОР КОГДА ЦеныНоменклатуры.Цена > 0 ТОГДА (ВложенныйЗапрос1.ПлановаяПоследняя / ЦеныНоменклатуры.Цена - 1) * 100 КОНЕЦ КАК Рост ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период, ЦеныНоменклатуры.Номенклатура КАК Номенклатура ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СрезПоследних КАК ВТ_СрезПоследних ПО ЦеныНоменклатуры.Период < ВТ_СрезПоследних.Период И ЦеныНоменклатуры.Номенклатура = ВТ_СрезПоследних.Номенклатура ГДЕ ЦеныНоменклатуры.ТипЦен.Код = "000000008" СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура) КАК ПредпоследниеДвижения ПО ЦеныНоменклатуры.Период = ПредпоследниеДвижения.Период И ЦеныНоменклатуры.Номенклатура = ПредпоследниеДвижения.Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК ПриходнаяПоследняя ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = "000000001") КАК ВложенныйЗапрос ПО ЦеныНоменклатуры.Номенклатура = ВложенныйЗапрос.Номенклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяПоследняя ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = "000000008") КАК ВложенныйЗапрос1 ПО ЦеныНоменклатуры.Номенклатура = ВложенныйЗапрос1.Номенклатура |
|||
11
Ly_Alena
29.01.15
✎
10:51
|
НО (!) - выводит только ту номенклатуру, у которой в регистре заполнены все три цены. если хоть одна цена не заполнена - то в отчет не попадает. Подскажите пожалуйста, как сделать чтобы выводил всю номенклатуру?
|
|||
12
chelentano
29.01.15
✎
10:56
|
(11) вместо внутреннего соединения левое
|
|||
13
echo77
29.01.15
✎
11:00
|
http://infostart.ru/public/267055/
Посчитать разницу с предыдущей записью |
|||
14
Ly_Alena
29.01.15
✎
11:00
|
(12) Точно! Спасибо!
|
|||
15
Ly_Alena
02.02.15
✎
08:24
|
Доброе утро!
Та же задача, с небольшим изменением в части дат. Даты указывает пользователь - начальную и конечную. Загвоздка в том что выводит две записи и к начальнойдате почему-то заданную дату не привязывает. Что не так? ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Период КАК ПериодНач, NULL КАК ПериодКон, ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач, NULL КАК ПлановаяСебестоимостьКон ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних СГРУППИРОВАТЬ ПО ЦеныНоменклатурыСрезПоследних.Период, ЦеныНоменклатурыСрезПоследних.Цена, ЦеныНоменклатурыСрезПоследних.Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, ЦеныНоменклатурыСрезПоследних.Период, ЦеныНоменклатурыСрезПоследних.Номенклатура, NULL, ЦеныНоменклатурыСрезПоследних.Цена ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП) СГРУППИРОВАТЬ ПО ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Период, ЦеныНоменклатурыСрезПоследних.Цена |
|||
16
Ly_Alena
02.02.15
✎
09:04
|
Никто не хочет помогать?
|
|||
17
Ly_Alena
02.02.15
✎
13:05
|
На счет почему к датам не привязывает - разобралась - в учет еще время идет. А вот как сделать чтобы в одну строчку выводить...
|
|||
18
Ly_Alena
02.02.15
✎
13:30
|
В Последнем запросе в группировках - номенклатуру вниз (максимум).
|
|||
19
Ly_Alena
03.02.15
✎
05:48
|
НО теперь другой косяк вылез - при такой группировке - рост попадает вниз и неправильно считается.
ВЫБРАТЬ НАЧАЛОПЕРИОДА(ЦеныНоменклатурыСрезПоследних.Период, ДЕНЬ) КАК ПериодНач, ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач, 0 КАК ПлановаяСебестоимостьКон, 0 КАК ПериодКон ПОМЕСТИТЬ Цены ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0, ЦеныНоменклатурыСрезПоследних.Номенклатура, 0, ЦеныНоменклатурыСрезПоследних.Цена, НАЧАЛОПЕРИОДА(ЦеныНоменклатурыСрезПоследних.Период, ДЕНЬ) ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(Цены.ПериодНач) КАК ПериодНач, МАКСИМУМ(Цены.ПлановаяСебестоимостьНач) КАК ПлановаяСебестоимостьНач, МАКСИМУМ(Цены.ПлановаяСебестоимостьКон) КАК ПлановаяСебестоимостьКон, Цены.Номенклатура КАК Номенклатура, МАКСИМУМ(Цены.ПериодКон) КАК ПериодКон, СРЕДНЕЕ(ВЫБОР КОГДА Цены.ПлановаяСебестоимостьНач > 0 ТОГДА (Цены.ПлановаяСебестоимостьКон / Цены.ПлановаяСебестоимостьНач - 1) * 100 КОНЕЦ) КАК Рост ИЗ Цены КАК Цены СГРУППИРОВАТЬ ПО Цены.Номенклатура |
|||
20
Ly_Alena
03.02.15
✎
07:09
|
Решила - сгруппировала в первой временной без роста. выгрузила во вторую временную и там уже посчитала рост.
|
|||
21
ИС-2
naïve
03.02.15
✎
07:18
|
(17) самое простое на закладке выбранные объединить поля в группу, с условием вместе
|
|||
22
Ly_Alena
03.02.15
✎
13:20
|
В итоге решение было такое:
ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена КАК ПлановаяСебестоимостьНач, NULL КАК ПлановаяСебестоимостьКон ПОМЕСТИТЬ Цены ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачальнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура, NULL, ЦеныНоменклатурыСрезПоследних.Цена ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонечнаяДата, ТипЦен.Код = "000000007") КАК ЦеныНоменклатурыСрезПоследних ГДЕ ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ(&ОП) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(Цены.ПлановаяСебестоимостьНач) КАК ПлановаяСебестоимостьНач, СУММА(Цены.ПлановаяСебестоимостьКон) КАК ПлановаяСебестоимостьКон, Цены.Номенклатура КАК Номенклатура ПОМЕСТИТЬ ЦеныГруппированные ИЗ Цены КАК Цены СГРУППИРОВАТЬ ПО Цены.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЦеныГруппированные.ПлановаяСебестоимостьНач, ЦеныГруппированные.ПлановаяСебестоимостьКон, ЦеныГруппированные.Номенклатура, (ЦеныГруппированные.ПлановаяСебестоимостьКон / ЦеныГруппированные.ПлановаяСебестоимостьНач - 1) * 100 КАК Рост ИЗ ЦеныГруппированные КАК ЦеныГруппированные |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |