Как добавить собственное значение в список вариантов дат запрета изменения?

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

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

Понимание архитектуры механизма

Важно понимать, что список вариантов, который мы видим в интерфейсе, не является простым справочником. Это программно формируемый список. Основная сложность заключается в том, что система ожидает не просто добавления строки в выпадающий список, но и наличия логики расчета даты для этой строки. За хранение самих дат отвечает регистр сведений ДатыЗапретаИзменения.

Способ №1: Использование расширения конфигурации

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

  1. Создайте расширение для конфигурации.
  2. Найдите общий модуль, отвечающий за формирование списка вариантов (обычно это модули, связанные с подсистемой ДатыЗапретаИзменения).
  3. Используйте аннотацию &После для процедуры, которая заполняет описание доступных вариантов.
  4. Добавьте свое значение в список вариантов.

Однако простого добавления недостаточно. Вам придется дописать логику расчета даты. Рассмотрим примерный алгоритм реализации:


// Пример логики расчета даты в обработчике
Функция ПолучитьДатуЗапретаДляВарианта(Вариант, ТекущаяДата)
    Если Вариант = "ПредыдущиеТриДня" Тогда
        Возврат ТекущаяДата - (60 * 60 * 24 * 3);
    КонецЕсли;
КонецФункции

Преимущества: сохранение целостности основной конфигурации, удобство обновления.

Недостатки: высокая сложность реализации, необходимость поддерживать код при обновлении БСП, так как структура вызовов может меняться.

Способ №2: Прямая запись в регистр через регламентное задание

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

Разберем процесс по шагам:

  1. Создайте Регламентное задание, которое будет запускаться по расписанию (например, раз в сутки).
  2. В обработчике задания рассчитайте нужную вам дату (например, текущую дату минус три дня).
  3. Используйте объект РегистрыСведенийМенеджер.ДатыЗапретаИзменения для записи данных.

// Пример записи в регистр
НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(НужныйПользователь);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ДатаЗапрета = ТекущаяДата() - (3 * 24 * 60 * 60);
// Заполняем остальные измерения
НаборЗаписей.Записать();

Этот метод считается более профессиональным, так как он не затрагивает интерфейс пользователя и не конфликтует с обновлениями конфигурации. Он полностью опирается на штатный функционал платформы 1С для работы с регистрами.

Рекомендации по выбору метода

Анализируя ситуацию, мы приходим к выводу, что выбор зависит от ваших приоритетов:

Независимо от выбранного пути, помните: всегда старайтесь минимизировать изменение типовых модулей. Использование расширений или внешних обработок всегда предпочтительнее прямого редактирования конфигурации.

← На главную