Как правильно вычислять рабочие даты в 1С с использованием БСП?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С часто возникает задача расчета даты, отстоящей от текущей на заданное количество рабочих дней. В составе Библиотеки стандартных подсистем (БСП) уже предусмотрены готовые механизмы для работы с производственными календарями, однако их использование требует осторожности. Рассмотрим, как правильно применять эти инструменты и как застраховать свой код от изменений в структуре БСП.

Использование функций БСП для расчета дат

Для решения задачи определения даты по производственному календарю в БСП существует специальный функционал. Основным методом, позволяющим вычислить дату с учетом рабочих дней, является функция ДатаПоКалендарю, расположенная в общем модуле КалендарныеГрафики.

Разберем пример использования данного метода:


ПланируемаяДата = КалендарныеГрафики.ДатаПоКалендарю(
    Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей()[0],
    ТекущаяДата(),
    3,
    Истина
);

Давайте проанализируем параметры этой функции:

Почему прямые вызовы функций БСП могут быть опасны?

Важно помнить, что архитектура БСП может меняться с выходом новых версий. Фирма «1С» регулярно проводит рефакторинг общих модулей с целью оптимизации производительности или изменения логики работы подсистем. Код, который отлично работал на текущем релизе, может вызвать ошибку после обновления БСП из-за того, что функция была перемещена в другой модуль (например, из КалендарныеГрафики в КалендарныеГрафикиСервер) или изменена сигнатура методов. Для уточнения расположения и параметров функций можно использовать справочник описания методов программного интерфейса БСП.

Если вы используете такие вызовы во многих местах конфигурации, обновление системы может стать очень трудоемкой задачей, требующей массового исправления кода. Чтобы избежать подобных ситуаций, мы рекомендуем применять стратегию «обертки». Для упрощения технического сопровождения нескольких баз можно автоматизировать архивирование, обновление и тестирование баз 1С в фоновом режиме.

Рекомендации по созданию стабильного кода

Чтобы обеспечить независимость вашего прикладного кода от внутренних изменений БСП, следуйте простым правилам:

  1. Создавайте собственные обертки. Вынесите логику обращения к БСП в отдельный общий модуль вашего проекта, например, МойПроект_РаботаСДатами. Внутри этого модуля создайте функцию, которая будет вызывать методы БСП. Если при обновлении библиотеки путь к функции изменится, вам достаточно будет внести правку только в одном месте — внутри вашей функции-обертки.
  2. Прямые запросы к данным. Если задача достаточно проста, опытные разработчики иногда предпочитают не полагаться на API БСП, а обращаются напрямую к регистру сведений ПроизводственныеКалендари через Запрос. Это гарантирует предсказуемость результата и полную независимость от обновлений библиотеки.
  3. Проверка актуальности данных. Всегда помните, что любая функция, основанная на производственном календаре, будет выдавать неверный результат, если сам календарь не заполнен на соответствующий период. Перед расчетом сроков убедитесь, что пользователи своевременно заполнили данные в регистре на текущий и будущий годы.

Подводя итог, можно сказать, что использование функций БСП — это верный путь, позволяющий не изобретать велосипед. Однако, сочетая этот подход с созданием промежуточного слоя абстракции в виде собственных функций, вы обеспечите своему проекту высокую надежность и значительно упростите процесс последующего сопровождения и обновления конфигурации.

← На главную