..тем не менее дети все также тянут ручки к троиловым шашкам, а некоторые - и к атомным бомбам... Ну что же, дадим им поиграться... Реализуем в рамках типовой ТиС погашение платежей долгов клиентов не по принципу ФИФО, а по принципу привязки к "документам-основаниям"... Для этого надо внести небольшие коррективы в глобальный модуль в процедуру глДвижениеДолгов
.. в глобальном модуле смотрим процедуру глДвижениеДолгов()
от начала процедуры примерно 80-я строка
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.Сортировать("+КредДокумент",1); // погашаем долги по ФИФО
в этом участке кода формируется простой список погашаемых долгов(документов), отсортированный по хронологии документов-долгов.
Сразу за этим кодом вставляем вот такой код:
//НАЧАЛО вот здесь вставляем код, который делает что-надо
Если глЕстьРеквизитШапки("ДокОснование", Конт.Вид()) <> 0 Тогда
//проверяем есть ли реквизит "ДокОснование"
Если Конт.ДокОснование.Выбран() <> 0 Тогда //проверяем указано ли основание поз = 0; Если ТаблИтогов.НайтиЗначение(Конт.ДокОснование,поз,"КредДокумент") > 0 Тогда
//по документу-основанию есть непогашенный долг
Если поз > 1 Тогда //основание где-то в глубине, стоит в общей очереди
ТаблИтогов.СдвинутьСтроку(1-поз,поз); КонецЕсли; //сдвиг основания вверх КонецЕсли; КонецЕсли; //выбрано основание
КонецЕсли; //по реквизиту шапки //КОНЕЦ вот здесь вставляем код, который делает что-надо
Вышеприведенный код приведен для частного случая - когда кредитный документ образует всего одну запись о долге (например, долг за товары). В общем случае, когда кредитный документ может образовывать несколько долгов (долг за товары, долг за услуги) - требуется творческая переработка данного кода ;-)
...куда пойдет оставшаяся сумма платежа, если документ-основание по какой-либо причине уже оплачен частично - лично меня (при реализации вышеприведенного кода) как в пословице: "проблемы индейцев шерифа не волнуют"...
...В развитие выше приведенного кода можно предложить много чего интересного: например, если документ-основание уже оплачен частично - 100 руб накладная, 100 руб платеж, а по какой-то причине 20 руб по накладной уже получилось оплачено - СТОРНИРУЕМ 20 руб. ранее проведенной оплаты - бухгалтер же у нас супермозг - велел 100 рублей на накладную повесить - погашаем накладную на 100 руб, освободившиеся 20 руб. - или болтаются предоплатой (???) или идут в оплату следующих(???) неоплаченных накладных... о том как это показать по бухучету (сторнирование, перевод "освободившейся" оплаты в предоплату и т.д. и все действия по НДС, связанные с этим) - проблемы индейцев шерифа не волнуют...
Реализуем также другую хотелку: чтобы долги погашались не по ФИФО, не по документу основанию, а по хронологии дат оплат, указанных в качестве планируемых/ожидаемых в документах(долгах). Делаем так: в процедуре глДвижениеДолгов() строки кода
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.Сортировать("+КредДокумент",1); // погашаем долги по ФИФО
заменяем на такое:
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.НоваяКолонка("ДатаОплаты","Дата"); ТаблИтогов.ВыбратьСтроки(); Пока ТаблИтогов.ПолучитьСтроку()=1 Цикл
ТаблИтогов.ДатаОплаты = ТаблИтогов.КредДокумент.ДатаОплаты; //тут маленькая "засада" -разбираться самим
КонецЦикла; ТаблИтогов.Сортировать("+ДатаОплаты,+КредДокумент",1);
..
Все... Желаю успехов в труде и заработной плате!
ДА! Понравилось/пригодилось? Оставь благодарственный коммент автору и плюсани рейтинг...