Мой первый отчет, помогите!

1. user1218998 15.09.19 22:10 Сейчас в теме
Уважаемые форумчане!
Прошу помощи! Ни разу до сегодняшнего дня не имела дела с отчетами (только теория). И вот взрослое задание.
Есть уже давно в компании отчет на СКД, он из регистра накопления берет количество продаж за период по номенклатурным группам (КА 1.1).
Поступила задача отфильтровать его таким образом, чтобы в документе регистраторе "Реализация товаров и услуг" остались позиции только с ценой большей или равной типу цен "оптовая" (но по самому типу цен фильтр ставить нельзя, так как ручные скидки тогда пропустит, нужно именно больше или равно определенной цене).

И тут у меня вопрос КАК?
Цену по типу цены можно взять из регистра сведений Цены номенклатуры Срез последних, а вот как ее передать в основной запрос, наложить условие по Цене, да еще и соединить дату регистра сведений с датой регистратора (ведь цена должна доставаться именно на момент продажи). Вот тут ступор. Помогите кто чем может((

Прикрепляю отчет
Прикрепленные файлы:
Отчет по продажам с планами.erf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Ditron 184 16.09.19 16:21 Сейчас в теме +0.19 $m
называется это "Псевдосрез" ))
выглядит примерно так (и не вздумайте дату регистратора получать из регистратора (тавтология))
ВЫБРАТЬ
 Продажи.Период КАК Период,
 Продажи.Номенклатура КАК Номенклатура ,
 Продажи.Стоимость,
 Продажи.Количество
ПОМЕСТИТЬ ВТПродажи
ИЗ
 РегистрНакопления.ПродажиОбороты(&ПериодНач, &ПериодКон, Авто, <Еще какие-то условия>) КАК Продажи
//Если объем данных предположительно большой
ИНДЕКСИРОВАТЬ ПО
 Период,
 Номенклатура 
/////////////////////////////////////
;
//Собственно сам "псевдосрез"
ВЫБРАТЬ
 Продажи.Номенклатура,
 Продажи.Цена
ИЗ (ВЫБРАТЬ
 МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодЦены, // Тут берем максимальную дату цены но не более даты движения продажи для среза (см. условие лев. соед)
 Продажи.Номенклатура КАК Номенклатура,
 ВЫРАЗИТЬ(СУММА(Продажи.Стоимость) / СУММА(Продажи.Количество) КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
 ВТПродажи КАК Продажи
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
 ПО Продажи.Номенклатура = ЦеныНоменклатуры.Номенклатура 
    И Продажи.Период >= ЦеныНоменклатуры.Период
    И (ЦеныНоменклатуры.ТипЦены = &ТипОптовая)
СГРУППИРОВАТЬ ПО
    Продажи.Номенклатура) КАК ВЗПродажи
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
 ПО ВЗПродажи.Номенклатура = ЦеныНоменклатуры.Номенклатура 
    И ВЗПродажи.ПериодЦены = ЦеныНоменклатуры.Период
ИМЕЮЩИЕ ВЗПродажи.Цена >= ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)
Показать


Как то так
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TimoninD 16.09.19 03:50 Сейчас в теме
(1)Добрый день! Для начало нужно найти цену, соответствующую дате документа,. Я бы сделал левое соединение ценыНоменклатуры.СрезПоследных к основной таблице., В связи указал Регистратор.Дата <= ЦеныНоменклатурыСрезПоследних.Период. (не забудь про связи по номенклатуре и т.д.) . Ну а когда получишь цены, можно выбрать строки где цена >= оптовой цены
4. seevkik 8 16.09.19 05:05 Сейчас в теме
(2)Срез последних?) А ты наивен
3. seevkik 8 16.09.19 03:52 Сейчас в теме
КА 1 давно не тыкал, но цена реализации итак пишется в регистр продаж, разве не так? Максимум сумму нужно будет поделить на количество
А вопрос с ценой на дату продажи сложнее - гуглите цены на каждый день и соединяйте с полученной таблицей
5. Alexei_Siva 182 16.09.19 07:46 Сейчас в теме
Примерно такая схема отчета должна быть:
1. Таблица продаж
2. Соединение таблицы продаж со всеми оптовыми ценами по связи ТаблицаПродаж.Номенклатура = ОптовыеЦены.Номенклатура и ТаблицаПродаж.Период >= ОптовыеЦены.Период
3. Для измерений отчета (Регистратор - период - номенклатура) группировкой получаем максимальный период установки цен.
4. Соединяем таблицу 3 с таблицей продаж и оптовыми ценами по периоду установки - вроде как, получаем то что надо
6. starjevschik 16.09.19 08:47 Сейчас в теме
Это совсем не тривиальная задача. Если так уж хочется научиться - и кто-то готов это оплатить! - то я бы посоветовал начать с ключевого пункта. Написать запрос, которые будет получать цену номенклатуры из реализаций на дату реализации. Этому есть стопицот примеров в инете. Когда это получится, дальше уже попроще будет.
На самом последнем этапе, когда запрос будет готов, можно будет вспомнить о том, что это отчет на СКД, и засунуть готовый запрос туда.
7. VmvLer 16.09.19 09:35 Сейчас в теме
Согласен с (6) автор лукавит и это не учебная задачка по созданию нового отчета, а попытка ввести в искушение соблазна научить невинное дитя уму-разуму.
Это реальная задача по сложной модификацией типового отчета.

Не удивлюсь если тс - борода.
8. Ditron 184 16.09.19 16:21 Сейчас в теме +0.19 $m
называется это "Псевдосрез" ))
выглядит примерно так (и не вздумайте дату регистратора получать из регистратора (тавтология))
ВЫБРАТЬ
 Продажи.Период КАК Период,
 Продажи.Номенклатура КАК Номенклатура ,
 Продажи.Стоимость,
 Продажи.Количество
ПОМЕСТИТЬ ВТПродажи
ИЗ
 РегистрНакопления.ПродажиОбороты(&ПериодНач, &ПериодКон, Авто, <Еще какие-то условия>) КАК Продажи
//Если объем данных предположительно большой
ИНДЕКСИРОВАТЬ ПО
 Период,
 Номенклатура 
/////////////////////////////////////
;
//Собственно сам "псевдосрез"
ВЫБРАТЬ
 Продажи.Номенклатура,
 Продажи.Цена
ИЗ (ВЫБРАТЬ
 МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодЦены, // Тут берем максимальную дату цены но не более даты движения продажи для среза (см. условие лев. соед)
 Продажи.Номенклатура КАК Номенклатура,
 ВЫРАЗИТЬ(СУММА(Продажи.Стоимость) / СУММА(Продажи.Количество) КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
 ВТПродажи КАК Продажи
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
 ПО Продажи.Номенклатура = ЦеныНоменклатуры.Номенклатура 
    И Продажи.Период >= ЦеныНоменклатуры.Период
    И (ЦеныНоменклатуры.ТипЦены = &ТипОптовая)
СГРУППИРОВАТЬ ПО
    Продажи.Номенклатура) КАК ВЗПродажи
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
 ПО ВЗПродажи.Номенклатура = ЦеныНоменклатуры.Номенклатура 
    И ВЗПродажи.ПериодЦены = ЦеныНоменклатуры.Период
ИМЕЮЩИЕ ВЗПродажи.Цена >= ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)
Показать


Как то так
9. user1218998 16.09.19 17:34 Сейчас в теме
(8) Спасибо вам! Буду сейчас пробовать.
10. user1218998 16.09.19 22:39 Сейчас в теме
(8) Помогите пожалуйста, Продажи.Цена, откуда ее взять? Цена же только в документе регистратора есть
11. Ditron 184 17.09.19 12:02 Сейчас в теме
(10) конечно не выберите, зайдите в параметры вирт. таблицы обороты (в конструкторе запроса) и выберите вариант периодичности "Авто"

вот же в примере я написал
(&ПериодНач, &ПериодКон, Авто, <Еще какие-то условия>) 
12. Ditron 184 17.09.19 12:04 Сейчас в теме
(10) Цена это стоимость / количество ))
13. user1218998 19.09.19 10:19 Сейчас в теме
Помогите еще, товарищи).

По некоторым позициям нет цены на нужный тип цен, в таком случае, мне нужно искать цену по другому типу цен, как это прописать в запросе?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот