Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

СКД: проблема с отчетом

СКД: проблема с отчетом
Я
   slafor
 
22.12.21 - 18:37
Я уже писал вопросы на эту тему: Проблема с запросом по остаткам . Но тут возникли новые, и их ничуть не меньше.

Общая задача такая. Есть отчет по регистру Партии на складах, у регистра есть измерения Номенклатура и Партия, Партия - это документ поступления, либо Оприходования, либо Перемещения и т.д. Пользователь выбирает период поступлений (допустим, 01.01.2020-31.12.2021), и период продаж (скажем, 01.01.2021-31-12-2021). Это могут быть разные периоды, как вы поняли. В отчет должны попадать только та номенклатура, по которой были поступления за выбранный период (КоличествоПриход). В начальных остатках должны быть остатки только по ной номенклатуре, по которой были поступления за выбранный период поступлений (при этом, понятно, там будут партии, которых нет в главном запросе, на который мы ориентируемся - в запросе по приходам). В конечный остаток тоже попадают только та номенклатура, кпо которой были поступления. Интересный вопрос про расходы - в расход попадает та номенклатура, по которой были приходы, но при этом партии могут быть как до начала выбранного периода поступлений, так и из начального остатка - по партиям, которых в приходе еще нет.

Тут более-менее понятно, надо будет выводить какую-то строку с "пустой" партией, которая была до начала периода поступлений, и по ней суммировать все приходы отдельно.

Как вы думаете, возможно все это реализовать с помощью СКД, или ну его на фиг, лучше сделать вручную?
   azernot
 
1 - 22.12.21 - 18:43
На первый взгляд ничего сложно.
Первым пакетом запроса выбираем номенклатуру, у которой есть "поступления" за указаный период поступлений, складываем во временную таблицу.
Вторым пакетом запроса выбираем собственно нужные данные отчёта по номенклатуре из временной таблицы за период продаж.
Вуаля.
   slafor
 
2 - 22.12.21 - 18:54
(1) ) Я тоже так думал. Но продажи нам нужно показывать не просто за период продаж, и не просто по той номенклатуре, по который есть приходы за период поступлений, но и учитывать при этом начальные остатки на начало периода поступлений, причем делать это разрезе партий - так, если партия входит в период прихода, то и расход показываем по этой партии, а если она стоит в начальных остатках - то мы ее должны написать в какую-то "пустую" партию, потому что она в период поступлений-то не входит (и суммировать их потом?).
   azernot
 
3 - 22.12.21 - 19:05
(2) Звучит как бред какой-то. Это какая-то учебная задача или прикладная? Если прикладная, может лучше саму задачу описать, а не предполагаемый способ решения?

>учитывать при этом начальные остатки на начало периода поступлений
Ну и учитывайте, не очень понимаю к чему это обязывает.

>а если она стоит в начальных остатках - то мы ее должны написать в какую-то "пустую" партию, потому что она в период поступлений-то не входит
Ну во втором запросе проверяйте "дату партии" на вхождение в период поступлений и вместо партии выводите текст "Это не партия, а херня какая-то", с соответсвующей агрегацией.
   slafor
 
4 - 22.12.21 - 19:20
(3) Это не бред, а прикладная задача. Всю схему я описал в самом первом сообщении. Мне пока непонятно, как это реализовать.
   azernot
 
5 - 22.12.21 - 19:28
(4) это не сама прикладная задача, это предполагаемый способ её решения, причем описанный очень невнятно. Собственно из-за нечеткого понимантя задачи и  происходит непонимние того, как её решать.
   azernot
 
6 - 22.12.21 - 20:19
Выбрать
Номенклатура,
Партия
Поместить ДанныеОПоступлении
Из  РегистрНакопления.ПартииНаСкладах.Обороты(&НачалоПериодаПриход, &КонецПериодаПриход)
Где
КоличествоПриход<>0
;

Выбрать
ДанныеОПродажах.Номенклатура,
Isnull(ДанныеОПоступлении.Партия, "Это не партия из периода поступления") как Партия
Сумма( ДанныеОПродажах.КоличествоРасход) как КоличествоРасход
....
Из РегистрНакопления.ПартииНаСкладах.ОстаткиИОбороты(&НачалоПериодаПродажа, &КонецПериодаПродажа, , , Номенклатура в (выбрать различные ДанныеОПоступлении.номенклатура из  ДанныеОПоступлении)) КАК ДанныеОПродажах
Левое соединение ДанныеОПоступлении
По ДанныеОПродажах.номенклатура =  ДанныеОПоступлении.Номенклатура
И ДанныеОПродажах.Партия =ДанныеОПоступлении.Партия
Сгруппировать по
ДанныеОПродажах.Номенклатура,
Isnull(ДанныеОПоступлении.Партия, "Это не партия из периода поступления")

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.