Механизмы расчета резервов по товарам организаций
Если Вы используете подсистему Интеркампани в конфигурациях УТ 11.4, КА 2.4 или ЕРП 2.4, и перед закрытием месяца обнаружили наличие отрицательных остатков по регистру накопления «ТоварыОрганизаций», это, как правило, говорит о том, что придется потратить значительное количество времени на устранение ошибок. Разумеется, величина проблемы зависит от количества организаций и складов, объема документов, наличия учета товаров в разрезе ГТД и других аспектов. Но в любом случае решить эту проблему быстро, получается далеко не всегда.
- Описание
- Подробнее
Описание
Основная причина такого положения вещей, это сложность и неочевидность механизма расчета резервов – центральной подсистемы механизма Интеркампани. Чтобы разобраться в проблеме и проследить алгоритм расчета резервов может уйти уйма времени, которого, как правило всегда недостаточно.
Я уже писал ранее о методике исправлении отрицательных остатков по товарам организаций, но:
- во-первых, описанные там подходы уже несколько устарели,
- во-вторых, в данной статье я хочу подробно остановиться на основных принципах формирования резервов. Взглянуть на этот процесс изнутри с позиции программиста.
Я не буду описывать различные нюансы расчета, а расскажу об основной концепции. Понимание этой концепции должно помочь при расследовании причин возникновения отрицательных остатков. А если у кого-то появиться желание разобраться в этом механизме более глубоко, данная статья будет для этого хорошей точкой опоры.
Примечание: Замечу сразу, что под резервами я здесь подразумеваю не резервы товаров на складах, а резервы образованные при нехватке товаров на определенной организации — резервы по Интеркампани. Если кто не знаком с реализацией данного механизма в ЕРП 2.4, для понимания текущего материала очень рекомендую прочесть эту статью.
И так поехали
Как было описано в первой статье на эту тему, расчет резервов в типовых конфигурациях выполняется в два этапа. Различные виды документов в процессе записи и проведения могут выполнять отдельно первый этап, отдельно второй или оба этапа последовательно.
Приведу схему из первой статьи
Виды документов | Операция | Первый этап | Второй этап |
Документы поступления | Проведение |
| V |
Отмена проведения |
| V | |
Документы списания
| Проведение, перепроведение с перезаполнением видов запасов | V |
|
Отмена проведения |
| V | |
Документы списания и поступления | Проведение, перепроведение с перезаполнением видов запасов | V | V |
Отмена проведения |
| V |
Первый этап расчета резервов
Первый этап расчета резервов выполняется при заполнении или перезаполнении видов запасов в документах, которые осуществляют списание товаров и имеют табличную часть «ВидыЗапасов».
К таким документам относятся: «Реализация товаров и услуг», «Отчет о розничных продажах», «Перемещение товаров», «Списание недостач товаров», «Сборка товаров», «Передача товаров между организациями».
Входная процедура расчета: ЗапасыСервер -> ЗаполнитьВидыЗапасовПоТоварамОрганизаций, которая вызывается в обработчике модуля документа «ПередЗаписью».
Расчет выполняется только в следующих случаях:
- Проводится непроведенный документ.
- Выполнены изменения в документе, которые влияют на количество и состав видов запасов.
- Указано дополнительное свойство для документа «ПерезаполнитьВидыЗапасов». Данное свойство можно использовать при перепроведении документов для принудительного перезаполнения видов запасов и перерасчета резервов.
В результате, формирование резервов происходит до начала проведения документа и итоговые данные сохраняются в дополнительных свойствах в таблице «ТаблицаРезервыТоваровОрганизаций». Если для данного вида документа выполняется только первый этап, сформированные записи будут помещены в регистр «РезервыТоваровОрганизаций» совместно с записью в остальные регистры. Если расчет резервов выполняется в два этапа, запись в регистр «РезервыТоваровОрганизаций» произойдет после записи в остальные регистры и после выполнения второго этапа расчета.
Алгоритм расчета резервов на первом этапе
Ниже будут перечислены ключевые этапы расчета с примерами и с указанием процедур общего модуля «ЗапасыСервер».
Процедура: СформироватьВТТоварыОрганизацийИзменения
Формируется таблица «ВТТоварыОрганизацийИзменения» с изменениями по регистру «ТоварыОрганизаций» — на первом этапе эти изменения представляют из себя данные регистра до начала проведения документа. Если регистр пуст, то-есть проводится непроведенный документ, таблица изменений тоже будет пустая.
Процедура: СформироватьВТСторноРезервов
Формируется таблица, содержащая записи сторнирующие существующие резервы «ВТСторноРезервов».
Если происходит принудительное перезаполнение видов запасов (данные документа не изменяются), таблица не формируется, ниже будет понятно, почему это так.
Для формирования записей сторно отбираются все существующие резервы (не только резервы сформированные по текущему документу). Полученные записи фильтруются по полям: «АналитикаУчетаНоменклатуры», «Организация», «ВидЗапасов», «НомерГТД». В качестве фильтра используются записи таблицы «ВТТоварыОрганизацийИзменения», данные которой были получены ранее. Максимальное количество в записях сторно ограничено максимальным количеством в записях таблицы изменений.
Пример:
Если с учетом фильтров найдено резервов в количестве: 100, а изменений по товарам организаций: 5, в записях сторно количество будет: 5.
Процедура: СформироватьВТТаблицаОстатков
Здесь происходит расчет доступных остатков. В зависимости от типа документа, расчет может выполняться по товарам организаций, по товарам отданным на комиссию, по проданным товарам, по переданным товарам между организациями, по проданным товарам к возврату, по переданной возвратной таре, и это еще не весь список. Но нас будет интересовать самый первый вариант — расчет по товарам организаций, в котом происходит расчет доступных остатков, с учетом всех возможных передач по настройкам передач Интеркампани.
Процедура: ТаблицаОстатковТоваровОрганизаций
Первым делом формируется вспомогательная таблица «ДвиженияДокумента».
Таблица получается следующим образом. К записям таблицы с движениям по товарам организаций перед записью «ДвиженияТоварыОрганизацийПередЗаписью», прибавляются записи из сформированной выше таблицы «ВТСторноРезервов». Причем, если движение по товарам организаций перед записью — это расход по регистру, количество записи будет взято со знаком «-».
Рассмотрим все это на примере
Товар1 есть в наличии в организации Орг1 в количестве 2 шт. и в организации Орг2 в количестве 2 шт.
Есть проведенный документ «Реализация товаров и услуг» по организации Орг1 с товаром Товар1 в количестве 3 шт. Реализация сформировала резерв по организации Орг1 1 шт. (приход) и по организации Орг2 1 шт. (расход) в части недостающего товара.
При изменении количества в документе с 3 на 4 и проведении документа, происходит следующее:
Данные регистра «РезервыТоваровОрганизаций» перед перепроведением:
Товар1, Орг1: количество 1 шт. (приход)
Товар1, Орг2: количество 1 шт. (расход)
Таблица «ДвиженияТоварыОрганизацийПередЗаписью»:
Товар1: количество 3 шт. (расход)
Таблица «ВТТоварыОрганизацийИзменения»:
Товар1: количество 3 шт.
Таблица «ВТСторноРезервов»:
Товар1, Орг1: количество -1 шт. (приход)
Товар1, Орг2: количество -1 шт. (расход)
Таблица «ДвиженияДокумента»:
Товар1, Орг1: количество -3 + 1 = -2 шт.
Товар1, Орг2: количество -1 шт.
Продолжим описание механизма расчета
Далее формируются доступные остатки по сумме регистров «ТоварыОрганизаций» и «РезервыТоваровОрганизаций». По умолчанию, остатки формируются на конец месяца документа и на конец каждого последующего месяца, до момента последнего движения в регистре «ТоварыОрганизаций». Соответственно, если остатков не будет хватать хотя бы в одном периоде, документ проводиться не будет.
Можно установить дополнительное свойство документа «ОкончаниеПериодаПомощникаИсправленияОстатков», для ограничения периода расчета остатков текущим месяцем.
Примечание: Для исправления отрицательных остатков по товарам организаций может потребоваться выполнять расчет на границу текущего документа включительно. Такая возможность есть, но для этого необходимо внести небольшие корректировки в функцию «ДополнитьЗапросКонтролемОстатковНаКаждыйМесяц».
Сформированные остатки дополняются данными из таблицы «ДвиженияДокумента» со знаком «-». Результирующие остатки считаются доступными для распределения товаров текущего документа.
Продолжим пример выше
Таблица «ТаблицаОстатков»:
Товар1, Орг1: количество 0 – (-2) = 2 шт.
Товар1, Орг2: количество 1 – (-1) = 2 шт.