ERP. Перенос даты платежа с выходного на рабочий день
Учетные задачи - Взаиморасчеты
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
В ЕРП при работе с соглашениями есть механизм автоматического планирования даты платежа с различными вариантами отсчета. Можно считать от даты заказа, даты заказа, согласования, отгрузки, поступления с заданным количеством дней отсрочки.

При этом доступны два варианта учета отсрочки:
- по календарным дням
- по рабочим дням.

С рабочими днями все понятно - есть производственный календарь, по нему определяются рабочие дни и отсчет ведется только по ним. При этом не может быть ситуации, что платеж выпадает на выходной день. С календарными днями все сложнее. Отсчет ведется корректно, плановые даты четко соответствуют дате начала и количеству дней отсрочки. Но если дата выпадает на нерабочий (выходной или праздничный) день, то алгоритм никак это не обрабатывает. И это объяснимо - в настройках стоит "по календарным дням". Но казначею или бухгалтеру на банке от этого не легче.
Рассмотрим пример из демо-базы ЕРП.
Допустим, есть документ "Приобретение товаров и услуг" от 09 июля 2024 года, в котором используется соглашение об условиях закупки.

В соглашении на закладке "Условия закупок" можно посмотреть кликнуть на гиперссылку оплаты и открыть окно настроек оплаты. Видно, что в данном случае выставлен вариант отсрочки "По календарным дням" - именно то, что нам нужно.

Оплата разбита на 3 этапа:
- 2 дня от даты заказа (30%)
- 5 дней от даты отгрузки (30%)
- 11 дней от даты отгрузки (40%)

Для простоты опустим вариант "от даты заказа" и будем смотреть только этапы "от даты отгрузки".
Заполним график оплат по выставленным настройкам, и получим следующую картину:
Видим, что штатный механизм сработал корректно
- оплата второй части через 5 дней выпадает на 14.07.24
- оплата третьей части через 11 дней выпадает на 20.07.24
Расчет верный, но по календарю видно, что эти даты выпали на выходные дни.

Оплата в эти даты невозможна и штатный механизм никак это не отрабатывает. Страдает платежный календарь и график оплат.
Сдвиг даты платежа для всех соглашений
Предлагается расширение, которое поможет решить эту задачу. В настройках можно включить/отключить механизм сдвига даты и выбрать направление сдвига.
Итак, открываем окно настроек. Команда вызова настроек добавлена в подсистему "НСИ и администрирование".

В настройках включаем флаг "Учитывать вид дня оплаты по производственному календарю", выбираем вариант сдвига. По умолчанию это "Следующий рабочий день (вперед)". Доступен также вариант "Предыдущий рабочий день (назад)". Оставим значение по умолчанию. Сохраняем настройки.

Нужно понимать, что несмотря на то, что флаг называется "Учитывать вид дня оплаты по производственному календарю" механизм работает только если в соглашении учет отсрочки выставлен в положение "По календарным дням".

После сохранения настроек проверяем как включение настроек отразилось на графике оплат. Возвращаемся в документ, перезаполняем график платежей

Видим, что обе даты изменились. Доработка сработала так, как и было задумано.
- 14 июля (воскресенье) изменилось на 15 июля (понедельник)
- 20 июля (суббота) изменилось на 22 июля (понедельник).
Вариант "Предыдущий рабочий день (назад)" работает аналогично.
Но нюанс этого подхода в том, что он работает по принципу "ковровой бомбардировки" - механизм затрагивает все соглашения "по календарным дням". При этом невозможен вариант, когда какое-то соглашение не сдвигается или часть соглашений сдвигается "вперед", а часть сдвигается "назад". Увы, все движется только в одном направлении.
Чтобы выйти из этой ситуации воспользуемся штатным механизмом формул, который существует в ЕРП. Но также внесем в него свои изменения, чтобы формулы тоже умели сдвигать платеж при выпадении на нерабочий день.
Сдвиг даты платежа индивидуально
Возвращаемся в настройки. Отключаем общий механизм сдвига.
Обратимся ко второй части настроек - сдвиг даты платежа индивидуально (по формуле).

Механизм формул не нужно включать или активировать - он уже работает по умолчанию, поэтому здесь только общее описание подхода и гиперссылка на открытие подробной справки. В справке подробно описано как работает механизм и как его настраивать.

Суть доработок в следующем: в стандартное окно редактирования формулы добавлены две новых функции:
- СдвигДатыПлатежа.ПривестиДатуКПлатежномуДнюВперед()
- СдвигДатыПлатежа.ПривестиДатуКПлатежномуДнюНазад()
Функции принимают один аргумент - дату, которую они должны привести к рабочей. В свою очередь дата может также быть описана формулой, например
[ДатаОтгрузки] + [Сдвиг]
т.е. сначала происходит расчет внутреннего выражения, затем результат передается в функцию.
Добавим две формулы:
- приведение полученной даты от даты отгрузки вперед, т.е. на следующий рабочий день
- приведение полученной даты от даты отгрузки назад, т.е. на предыдущий рабочий день.

Формулы можно создать предварительно, либо в процессе выбора варианта отсчета в соглашении. Сделаем это. В соглашении в варианте отсчета выберем "Формула", дальше создадим новую формулу как описано выше, или просто выберем, если формула уже создана. Чтобы не было путаницы рекомендую давать формулам осмысленное подробное наименование, отражающее что именно формула делает.

Настроим соглашение с вариантами отсрочки по формуле со сдвигом и назад и вперед. Получится такая картина:

Проверим, как работает добавленные функции. Заполним оплаты по соглашению в документе поступления.

Видим, что даты сдвинулись в ожидаемом направлении. Субботняя дата сдвинулась на пятницу, воскресная - на понедельник

Таким образом я продемонстрировал, что при использовании формул мы можем управлять сдвигом платежа даже внутри одного соглашения.
Что будет, если задействованы сразу два механизма - "общий для всех соглашений" и сдвиг по формуле? Общий сдвиг отрабатывает последним, поэтому сначала отработают формулы, сдвинут на рабочие дни и общий сдвиг просто проигнорирует даты, т.к. они уже рабочие.
Добавление расширения в базу
Расширение не требует реструктуризации таблиц, поэтому может быть добавлено в режиме предприятие.
В режиме "Предприятие"
- скачиваете файл расширения
- в главном меню "Функции для технического специалиста"
- раскрываете ветку "Стандартные", выбираете строку "Управление расширениями конфигурации"
- кнопка "Добавить", выбираете скачанный файл
- новое расширение добавится в список расширений. Название: "Исправление даты оплаты"
- снимаете галки "Безопасный режим", "Защита от опасных действий"
- перезапускаете базу
В режиме "Конфигуратор"
- скачиваете файл расширения
- в главном меню вызываете список расширений: "Конфигурация" --> "Расширения конфигурации"
- добавляете новое расширение - имя, синоним, назначение, префикс - произвольные, т.к. они заменятся на значения из файла. Но лучше сразу указать имя как в расширении "СдвигДатыПлатежа"

- новое расширение добавится в список расширений. Снимаете галки "Безопасный режим", "Защита от опасных действий"

- двойным щелчком открываете конфигурацию расширения
- для конфигурации расширения вызываете меню "Действия" --> "Конфигурация" --> "Загрузить конфигурацию из файла"

- в диалоге выбираете скачанный файл
- затем снова "Действия" --> "Конфигурация" --> "Обновить конфигурацию расширения"
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.6.1.61, 2.5.27.101, 2.5.27.75
Вступайте в нашу телеграмм-группу Инфостарт