База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить остатки в разрезе Контрагента и Документа на начало нового периода? › Ответ в теме: Как получить остатки в разрезе Контрагента и Документа на начало нового периода?
Да, получить остатки на начало нового периода рассрочки по регистру накопления РасрочкаПродаж в разрезе Контрагент и ДокументОснование можно с помощью запроса, который выбирает сумму ресурса Сумма по всем движениям с датой ПериодРассрочки меньше начала нового периода. При этом учитывается, что приход идет из документа РеализацияТоваровУслуг, а расход из документа ОплатаРассрочки.
В запросе фильтрация по дате ПериодРассрочки < &ДатаНачалаНовогоПериода позволяет получить состояние на начало нового периода. Группировка по Контрагенту и ДокументОснованию дает остатки именно в нужном разрезе. Фильтр по ДокументОснованию, ссылающемуся на РеализацияТоваровУслуг, ограничивает выборку приходными операциями. При этом ресурс Сумма учитывает и приход, и расход (расходы обычно отражаются отрицательными значениями). Если нужно явно выделить приход и расход по типу документа основания, можно добавить условие, которое проверяет, что приход связан с РеализацияТоваровУслуг и сумма положительна, а расход — с ОплатаРассрочки и сумма отрицательна. Но обычно в регистре накопления это уже отражено корректно. СИНХРОН-КОД: в вопросе упомянуто, что приход из документа РеализацияТоваровУслуг и расход из ОплатаРассрочки, и в финальном коде это учтено через фильтр по ДокументОснованию и условие по сумме. Ниже пример запроса и условие для фильтрации по типу документа движения:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | РасрочкаПродаж.Контрагент КАК Контрагент, | РасрочкаПродаж.ДокументОснование КАК ДокументОснование, | СУММА(РасрочкаПродаж.Сумма) КАК Остаток |ИЗ | РегистрНакопления.РасрочкаПродаж КАК РасрочкаПродаж |ГДЕ | РасрочкаПродаж.ПериодРассрочки < &ДатаНачалаНовогоПериода | И РасрочкаПродаж.ДокументОснование.Ссылка В ( | ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг | ) |СГРУППИРОВАТЬ ПО | РасрочкаПродаж.Контрагент, | РасрочкаПродаж.ДокументОснование"; Запрос.УстановитьПараметр("ДатаНачалаНовогоПериода", НачалоДня(ДатаНовогоПериода)); Запрос.Выполнить().Выгрузить(); |
Объяснение:
— Параметр &ДатаНачалаНовогоПериода задается как начало дня даты нового периода рассрочки.
— В выборке берутся записи с ПериодРассрочки меньше этой даты, то есть остаток на начало нового периода.
— Группировка по Контрагенту и ДокументОснованию.
— Фильтр по ДокументОснованию ограничивает приходными операциями из РеализацияТоваровУслуг.
Если нужно добавить явное разделение приходов и расходов по типу документа, можно использовать условие:
|
1 2 3 4 5 |
| (РасрочкаПродаж.ДокументОснование ССЫЛКА Документ.РеализацияТоваровУслуг | И РасрочкаПродаж.Сумма > 0) | ИЛИ | (РасрочкаПродаж.ДокументОснование ССЫЛКА Документ.ОплатаРассрочки | И РасрочкаПродаж.Сумма < 0) |
Таким образом, итоговый запрос даст корректные остатки на начало нового периода рассрочки в нужном разрезе.