Как программно получить и изменить дату запрета изменений в 1С?

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

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

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

В большинстве современных конфигураций 1С данные хранятся в РегистреСведений.ДатыЗапретаИзменения. Этот регистр является независимым, что позволяет гибко настраивать запреты как для конкретных пользователей, так и для групп или всей системы в целом. Однако важно помнить: прямая работа с этим регистром — это лишь один из способов решения задачи, который не всегда учитывает сложные правила вычисления итоговой даты.

Способ 1: Получение даты через прямой запрос к регистру

Если вам необходимо быстро проанализировать настройки или получить минимальную дату запрета, можно воспользоваться запросом. Рассмотрим, как составить такой запрос, чтобы извлечь нужные данные:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	МИНИМУМ(ДатыЗапретаИзменения.ДатаЗапрета) КАК ДатаЗапрета
    |ИЗ
    |	РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения
    |ГДЕ
    |	ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
    НачДата = Выборка.ДатаЗапрета;
КонецЕсли;

Обратите внимание: использование конструкции ВЫБОР в условиях запроса иногда необходимо для обработки различных типов пользователей (групп, внешних пользователей), однако для простых задач достаточно фильтрации по конкретному значению или перечислению.

Способ 2: Использование методов БСП (рекомендуемый подход)

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

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

Почему этот метод лучше:

  1. Учитывает приоритеты настроек (пользователь vs группа vs все пользователи).
  2. Правильно обрабатывает относительные даты.
  3. Обеспечивает устойчивость кода при обновлении типовых конфигураций.

Программное изменение даты запрета

Когда вы приступаете к записи даты, помните, что РегистрСведений — это объект, к которому можно обратиться через НаборЗаписей или МенеджерЗаписи. Однако, для обеспечения целостности данных, настоятельно рекомендуется:

  1. Проверять, не используете ли вы уже готовые процедуры БСП для записи.
  2. Учитывать, что запись должна соответствовать структуре измерений регистра (кто является субъектом запрета: пользователь, группа или все пользователи).
  3. Всегда проводить тестирование на копии базы, так как изменение дат запрета напрямую влияет на возможность пользователей проводить или редактировать документы в системе.

Если задача состоит в том, чтобы каждый день сдвигать дату вперед, реализуйте это через РегламентноеЗадание. Внутри модуля задания опишите алгоритм, который:

Итог и рекомендации

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

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

← На главную