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

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

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

Прикрепляю отчет
Прикрепленные файлы:
Отчет по продажам с планами.erf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Ditron 183 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 163 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 183 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 183 17.09.19 12:02 Сейчас в теме
(10) конечно не выберите, зайдите в параметры вирт. таблицы обороты (в конструкторе запроса) и выберите вариант периодичности "Авто"

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

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

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день