Схлопывание документов

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. gamograff 20.10.15 14:46 Сейчас в теме
Добрый день. Есть следующая задача: есть выборка документов "ПоступлениеТоваровУслуг". Нужно их объединить следующим образом: есть предельная сумма, объединение документов должно идти по порядку выборки. Как только сумма следующего документа выводит общую сумму за пределы предельной суммы, документ записывается с датой первого, который вошёл в эту сумму. То есть в итоге сумма итогового документа должна быть равна или чуть меньше предельной суммы. После его записи мы переходим к следующему документу и так же объединяем дальше, пока не закончится выборка. Например:
12.05.2015 20р
13.05.2015 40р
14.05.2015 10р
Предельная сумма 65р
Итоговый документ будет от 12.05.2015 с суммой 60р, а документ от 14.05.2015 пойдёт в следующее объединение. И так далее.
И вот теперь вопрос. Как реализовать это всё реализовать? Как запомнить дату первого вошедшего в объединение документа (если создавать новый документ) или менять этот самый первый документ, это не принципиально, и как начать выбирать новые документы после записи объединения? Заранее спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Martinian 10 20.10.15 14:54 Сейчас в теме
(1) gamograff, задачка элементарная, на мой взгляд. Алгоритм определения минимального/максимального числа из выборки представляете?
4. Xershi 1488 20.10.15 14:58 Сейчас в теме
(1) gamograff, ну самый простой вариант. Сделай запрос выгрузить в ТЗ. А дальше перебираем документы. Пока сумма будет меньше записываем номенклатуру из документов, если она превысила, то всю записанную номенклатуру засовываем в новый документ.

Примерно так, только зачем такой огород, у вас же станет в 2 раза больше прихода.
3. mymyka 20.10.15 14:57 Сейчас в теме
ПТиУ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Пока Выборка.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ПТиУ.Дата) Тогда
ПТиУ.Дата = Выборка.Дата;
КонецЕсли;
Если ПТиУ.Сумма + Выборка.Сумма < ПредельноеКоличество Тогда //если у Поступления нет реквизита сумма, то получаем ПТиУ.НужнаяТабличнаяЧасть.Итог("ИмяКолонкиССуммой")
//переносим строчки из ПТиУ в текущий документ
Иначе
ПТиУ.Записать();
ПТиУ = Выборка.Ссылка.ПолучитьОбъект();
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(ПТиУ.Ссылка) Тогда // сумма последних документ меньше предельной, условие не выполнилось, записи не было
ПТиУ.Записать();
КонецЕсли;

а вообще, куда интереснее погуглить нарастающие итоги в запросе и построить табличку через Минимум(Период) и Сумма(ПТиУ.СуммаДокумента).
Оставьте свое сообщение

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