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

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

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

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

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

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

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

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