[ОБУЧАЛОВКА] Почему оплата не закрывает документ, на основании которого была выписана?
Очень часто всплывает вопрос, аналогичный "Почему оплата не закрывает документ, на основании которого была выписана?" Уж сколько копий переломано по этому поводу, выдано объяснений и развернуто дискуссий… однако воз и ныне там… Вопросы и бредовые пожелания плодятся как кролики/тараканы (кстати, про тараканов у меня здесь: http://infostart.ru/profile/174/projects/1969/). Мой ответ простой: в рамках договора в типовой ТиС погашение долгов документами оплаты реализовано по ФИФО (документ-основание используется лишь для удобства заполнения документа оплаты), почему по ФИФО, а не, например, как описано в заголовке? ДА ОЧЕНЬ ПРОСТО!!! Бухгалтеры в принципе неспособны обеспечить закрытие документов-оснований документами оплаты по нескольким простым причинам: не учитывают взаимозачеты (дает сдвижку оплат); не учитывают возвраты (влияющие на долги по документам оплаты), частичные оплаты/переплаты добавляют геморроя… банальные ошибки как со стороны бухгалтеров при разноске платежей, так и со стороны клиентов при указании назначений платежей и т.д. Если это суммировать, то вывод простой — бухгалтера!!! ПРОСТО НЕСПОСОБНЫ ЦЕЛЕНАПРАВЛЕННО И АККУРАТНО ВЫПОЛНЯТЬ ВСЕ ТРЕБУЕМЫЕ ДЕЙСТВИЯ ПРИ ВЕДЕНИИ ВЗАИМОРАСЧЕТОВ ПО ПРИНЦИПУ ПОГАШЕНИЯ "ДОКУМЕНТОВ-ОСНОВАНИЙ"!!! (вдогонку: почему-то многие бухгалтера уверены, что они умеют ТУПО СЧИТАТЬ лучше, ЧЕМ ТУПО УМЕЕТ СЧИТАТЬ КОМПЬЮТЕР)
- Описание
- Подробнее
Описание
..тем не менее дети все также тянут ручки к троиловым шашкам, а некоторые — и к атомным бомбам… Ну что же, дадим им поиграться… Реализуем в рамках типовой ТиС погашение платежей долгов клиентов не по принципу ФИФО, а по принципу привязки к «документам-основаниям»… Для этого надо внести небольшие коррективы в глобальный модуль в процедуру глДвижениеДолгов
.. в глобальном модуле смотрим процедуру глДвижениеДолгов()
от начала процедуры примерно 80-я строка
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.Сортировать("+КредДокумент",1); // погашаем долги по ФИФО
в этом участке кода формируется простой список погашаемых долгов(документов), отсортированный по хронологии документов-долгов.
Сразу за этим кодом вставляем вот такой код:
//НАЧАЛО вот здесь вставляем код, который делает что-надо
Если глЕстьРеквизитШапки("ДокОснование", Конт.Вид()) <> 0 Тогда
//проверяем есть ли реквизит "ДокОснование"
Если Конт.ДокОснование.Выбран() <> 0 Тогда //проверяем указано ли основание поз = 0; Если ТаблИтогов.НайтиЗначение(Конт.ДокОснование,поз,"КредДокумент") > 0 Тогда
//по документу-основанию есть непогашенный долг
Если поз > 1 Тогда //основание где-то в глубине, стоит в общей очереди
ТаблИтогов.СдвинутьСтроку(1-поз,поз); КонецЕсли; //сдвиг основания вверх КонецЕсли; КонецЕсли; //выбрано основание
КонецЕсли; //по реквизиту шапки //КОНЕЦ вот здесь вставляем код, который делает что-надо
Вышеприведенный код приведен для частного случая — когда кредитный документ образует всего одну запись о долге (например, долг за товары). В общем случае, когда кредитный документ может образовывать несколько долгов (долг за товары, долг за услуги) — требуется творческая переработка данного кода 😉
…куда пойдет оставшаяся сумма платежа, если документ-основание по какой-либо причине уже оплачен частично — лично меня (при реализации вышеприведенного кода) как в пословице: «проблемы индейцев шерифа не волнуют»…
…В развитие выше приведенного кода можно предложить много чего интересного: например, если документ-основание уже оплачен частично — 100 руб накладная, 100 руб платеж, а по какой-то причине 20 руб по накладной уже получилось оплачено — СТОРНИРУЕМ 20 руб. ранее проведенной оплаты — бухгалтер же у нас супермозг — велел 100 рублей на накладную повесить — погашаем накладную на 100 руб, освободившиеся 20 руб. — или болтаются предоплатой (???) или идут в оплату следующих(???) неоплаченных накладных… о том как это показать по бухучету (сторнирование, перевод «освободившейся» оплаты в предоплату и т.д. и все действия по НДС, связанные с этим) — проблемы индейцев шерифа не волнуют…
Реализуем также другую хотелку: чтобы долги погашались не по ФИФО, не по документу основанию, а по хронологии дат оплат, указанных в качестве планируемых/ожидаемых в документах(долгах). Делаем так: в процедуре глДвижениеДолгов() строки кода
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.Сортировать("+КредДокумент",1); // погашаем долги по ФИФО
заменяем на такое:
ВремВзаим.ВыгрузитьИтоги(ТаблИтогов,1,1); ТаблИтогов.НоваяКолонка("ДатаОплаты","Дата"); ТаблИтогов.ВыбратьСтроки(); Пока ТаблИтогов.ПолучитьСтроку()=1 Цикл
ТаблИтогов.ДатаОплаты = ТаблИтогов.КредДокумент.ДатаОплаты; //тут маленькая "засада" -разбираться самим
КонецЦикла; ТаблИтогов.Сортировать("+ДатаОплаты,+КредДокумент",1);
..
Все… Желаю успехов в труде и заработной плате!
ДА! Понравилось/пригодилось? Оставь благодарственный коммент автору и плюсани рейтинг…

