В процессе разработки на платформе 1С часто возникает задача расчета даты, отстоящей от текущей на заданное количество рабочих дней. В составе Библиотеки стандартных подсистем (БСП) уже предусмотрены готовые механизмы для работы с производственными календарями, однако их использование требует осторожности. Рассмотрим, как правильно применять эти инструменты и как застраховать свой код от изменений в структуре БСП.
Для решения задачи определения даты по производственному календарю в БСП существует специальный функционал. Основным методом, позволяющим вычислить дату с учетом рабочих дней, является функция ДатаПоКалендарю, расположенная в общем модуле КалендарныеГрафики.
Разберем пример использования данного метода:
ПланируемаяДата = КалендарныеГрафики.ДатаПоКалендарю(
Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей()[0],
ТекущаяДата(),
3,
Истина
);
Давайте проанализируем параметры этой функции:
Важно помнить, что архитектура БСП может меняться с выходом новых версий. Фирма «1С» регулярно проводит рефакторинг общих модулей с целью оптимизации производительности или изменения логики работы подсистем. Код, который отлично работал на текущем релизе, может вызвать ошибку после обновления БСП из-за того, что функция была перемещена в другой модуль (например, из КалендарныеГрафики в КалендарныеГрафикиСервер) или изменена сигнатура методов. Для уточнения расположения и параметров функций можно использовать справочник описания методов программного интерфейса БСП.
Если вы используете такие вызовы во многих местах конфигурации, обновление системы может стать очень трудоемкой задачей, требующей массового исправления кода. Чтобы избежать подобных ситуаций, мы рекомендуем применять стратегию «обертки». Для упрощения технического сопровождения нескольких баз можно автоматизировать архивирование, обновление и тестирование баз 1С в фоновом режиме.
Чтобы обеспечить независимость вашего прикладного кода от внутренних изменений БСП, следуйте простым правилам:
МойПроект_РаботаСДатами. Внутри этого модуля создайте функцию, которая будет вызывать методы БСП. Если при обновлении библиотеки путь к функции изменится, вам достаточно будет внести правку только в одном месте — внутри вашей функции-обертки.ПроизводственныеКалендари через Запрос. Это гарантирует предсказуемость результата и полную независимость от обновлений библиотеки.Подводя итог, можно сказать, что использование функций БСП — это верный путь, позволяющий не изобретать велосипед. Однако, сочетая этот подход с созданием промежуточного слоя абстракции в виде собственных функций, вы обеспечите своему проекту высокую надежность и значительно упростите процесс последующего сопровождения и обновления конфигурации.