Условие само по себе содержит неточность, которая делает постановку задачи некорректной. Читаем:
раз в неделю формируется документ «Пени», в котором автоматически должны рассчитываться пени по формуле: «Кол-во дней просрочки» * «% пени» * «оставшаяся сумма долга по счету».Получается, что каждую неделю надо взять ПенюЗаДень и умножить ее на некое КоличествоДнейПросрочки. Но что значит это КоличествоДнейПросрочки?
Ах да, чуть ниже это поясняется:
Просрочка отсчитывается от даты полной отгрузки плюс срок оплаты (из счета)И что? Может каждую неделю умножать ПенюЗаДень на все КоличествоДнейПросрочки? Но ведь тогда каждый раз будут получаться бессмысленные огромные суммы.
А что с ПенейЗаДень? Как ее считать? Читаем:
«% пени» * «оставшаяся сумма долга по счету»Что такое
«оставшаяся сумма долга по счету», кто ни будь понимает? На какой момент получать этот остаток долга по счету? Может на конец недели? Или на начало?
Да без разницы! Любой вариант будет лишен смысла, ведь пеня будет считаться крайне не точно.
В понедельник был ДолгПоСчету, во вторник его частично оплатили, а в среду закрыли полностью. Неужели пеня должна начислиться на все дни и на всю сумму?
Хорошо хотя бы четко указано, откуда взять процент:
Процент пеней также указывается в каждом счетеЛомая голову над задачей, и пытаясь составить из этой кучи фрагментов общую картину, я решил не делать тупо, как написано, а вместо этого дополнить задачу смыслом.
А смысл здесь довольно простой, только написано об этом сложно.
Суть в том, что надо организовать начисление Пени за каждый день просрочки.Пеня за каждый день должна считаться тоже очень просто:
ПеняЗаДень=
ОстатокДолга*
Процентгде
ОстатокДолга – это ОстатокДолгаПоСчету на этот день (не важно начало или конец дня, как угодно),
а
Процент – это тот самый Процент пеней, что указан пользователем в документе Счет
Кто-то воскликнет: «Но ведь документ Пеня делается не каждый день!», и будет совершенно прав.
Действительно, документ Пеня провдится один рез в неделю, а значит он должен:
-рассчитать пени для каждого счета за каждый день недели,
-по каждому Счету сложить пени за 7 дней, подведя итог по Счету
-для каждого Счета записать в регистр накопления Суммарную ПенюПоСчетуЗаНеделю
В своем решении я использую три регистра накопления.
-Сначала документ Счет делает приход в рег
Заказы-Затем РН списывает
Заказы и приходует в рег
ДолгиПоСчетам-Когда очередная РН списывает последнюю Сумму с остатка в
Заказах, то РН делает еще и запись в рег.свед.
ДатыПолнойОтгрузки-Далее проводим документ
Пени, который смотрит остатки
ДолговПоСчетам за каждый из дней своей недели, рассчитывает суммарную ПенюЗаНеделю по каждому счету и записывает ее в
ДолгиПоПеням-И на последок свою работу делает документ
ПриходДенег.
-Сперва он заглядывает в остатки
ДолговПоПеням данного контрагента и поочередно списывает их (они тоже хранятся в разрезе Счетов)
-После чего переходит к остаткам
ДолговПоСчетам и методично списывает их в порядке возрастания даты Счета.
Отчеты получились простыми.
АнализСчетов получает данные из таблиц
ДолгиПоСчетам.Остатки и
ДолгиПоПеням.ОстаткиСоответственно:
Задолженность по счету – это СуммаОстаток из ДолгиПоСчетам.Остатки
Задолженность по пеням – СуммаОстаток из ДолгиПоПеням.Остатки
Документ Счет берем в любой из таблиц, а ДатаПолнойОтгрузки – из рег.свед. ДатыПолнойОтгрузки
Анализ счета работает на таблицах Обороты всех трех регистров:
ЗаказыОбороты
ДолгиПоСчетамОбороты
ДолгиПоПенямОборотыПериодичность Регистратор позволяет выводить в отчет поле
Документ,
Отгружено – это ЗаказыОбороты.СуммаРасход
Оплачено - ДолгиПоСчетамОбороты.СуммаРасход
Пени - ДолгиПоПенямОбороты.СуммаПриход или -ДолгиПоПенямОбороты.СуммаРасход, в зависимости от того, является ли Регистратор документом Пени или ПриходДенег.
Пока все это печатал, нашел в своем решении и поправил пару недочетов, так что, если найдете косяки – милости прошу ))
Коллеги! Всем желаю, чтобы эта интересная задачка на экзамене не попадалась