К статье
Практический материал

Администрирование · 10 мин

Как получить дату запрета редактирования в 1С

Как узнать дату запрета редактирования в 1С: через настройки БСП, функцию ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() и запросом к константе. Примеры кода.

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

Способ получения даты зависит от того, как она настроена: единая дата для всех пользователей, дата по разделам учёта или индивидуальные даты для отдельных пользователей и групп. Ниже разобраны все варианты — от просмотра в интерфейсе до кода на встроенном языке и запроса к константе напрямую.

Где в интерфейсе посмотреть текущую дату запрета

В типовых конфигурациях на базе БСП (Бухгалтерия предприятия, Управление торговлей, ERP, Зарплата и управление персоналом) настройка находится в разделе Администрирование → Поддержка и обслуживание → Регламентные операции. Там есть флажок «Даты запрета изменения данных» и ссылка «Настроить». Если флажок снят — запрет не действует, и получать дату бессмысленно: механизм просто выключен.

По ссылке «Настроить» открывается форма, где видно способ установки даты: «Общая дата», «По разделам» или «По разделам и объектам». Здесь же отображается само значение — конкретная дата, относительная дата («конец прошлого года», «конец прошлого квартала» и т.п.) или комбинация для разных разделов учёта.

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

Как найти дату в интерфейсе
  1. 1
    Откройте Администрирование → Поддержка и обслуживание → Регламентные операции
  2. 2
    Убедитесь, что включён флажок «Даты запрета изменения данных»
  3. 3
    Откройте ссылку «Настроить» и посмотрите способ установки даты
  4. 4
    Если дата задана для отдельных пользователей — разверните нужную группу и посмотрите значение
  5. 5
    Проверьте, не задана ли относительная дата (конец квартала, месяца) — она пересчитывается автоматически

Как получить дату программно через модуль БСП

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

Функция учитывает всю логику настройки: разделы учёта, индивидуальные даты пользователей, относительные даты. Это её ключевое преимущество перед чтением константы напрямую — вы получаете именно ту дату, которая реально действует для текущего сеанса.

bsl
// Простое получение даты запрета для текущего пользователя
ДатаЗапрета = ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных();

Если ЗначениеЗаполнено(ДатаЗапрета) Тогда
    Сообщить("Редактирование запрещено до: " + Формат(ДатаЗапрета, "ДЛФ=D"));
Иначе
    Сообщить("Дата запрета не установлена");
КонецЕсли;

// Проверка конкретного объекта перед изменением
ОписаниеДанных = Новый Структура;
ОписаниеДанных.Вставить("НоваяВерсия", Ложь);
ОписаниеДанных.Вставить("Данные", ДокументОбъект);

ДатаОбнаружена = Неопределено;
Если ДатыЗапретаИзменения.ИзменениеЗапрещено(ДокументОбъект, , ОписаниеДанных, ДатаОбнаружена) Тогда
    Сообщить("Изменение запрещено, действует дата: " + ДатаОбнаружена);
КонецЕсли;

Если нужна дата запрета для другого пользователя (например, при проверке в регламентном задании от имени администратора), следует либо выполнять код в сеансе этого пользователя, либо самостоятельно анализировать настройки: функция по умолчанию работает для текущего пользователя сеанса.

Чтение значения из константы напрямую

Физически общая дата запрета хранится в константе ДатаЗапретаРедактированияДанных. Прочитать её можно одной строкой: Константы.ДатаЗапретаРедактированияДанных.Получить(). Этот способ работает быстро и подходит для простых отчётов, но имеет серьёзное ограничение.

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

Способы получения даты

Функция ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных()

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

Константы.ДатаЗапретаРедактированияДанных.Получить()

Быстро и просто, но даёт только общую дату без учёта разделов и индивидуальных настроек.

Интерфейс настройки

Подходит администратору для разового просмотра; не годится для автоматизации и проверок в коде.

Как узнать, какая дата действует для конкретного пользователя

Когда дата задана «для отдельных пользователей», действующее значение определяется по приоритету: настройка для конкретного пользователя важнее настройки для его группы, а настройка группы важнее общей даты «для всех пользователей». Поэтому простого просмотра одного поля недостаточно.

Самый надёжный практический приём — зайти под учётной записью интересующего пользователя и попытаться провести тестовый документ закрытого периода: система выдаст сообщение с указанием действующей даты запрета. Либо выполнить отчёт/обработку с вызовом ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() в сеансе этого пользователя.

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

Маршрут решения

Как выбрать способ

Нужно разово посмотреть дату администраторуОткройте настройку в разделе Администрирование — этого достаточно
Нужна проверка в коде перед записью объектаИспользуйте ДатыЗапретаИзменения.ИзменениеЗапрещено() — она сразу проверяет объект
Нужна дата для отчёта или журналаВызовите ДатаЗапретаИзмененияДанных() и обработайте пустое значение
Настроены индивидуальные даты по пользователямПроверяйте дату в сеансе конкретного пользователя, а не читайте общую константу

Относительные даты: почему значение «само меняется»

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

При чтении константы напрямую вы можете увидеть не дату, а признак относительного режима (в зависимости от версии БСП значение хранится иначе). Функция ДатаЗапретаИзмененияДанных() корректно вычисляет относительную дату на текущий момент — ещё один аргумент в пользу программного интерфейса.

Учтите также параметр «Отсрочка» (количество дней, в течение которых после наступления нового периода старая дата ещё действует). Он влияет на фактическое значение и тоже учитывается функцией БСП.

Типичные ошибки
01
Чтение только константы при настроенных разделах учёта — получаете общую дату, а реально действует другая
02
Отсутствие проверки ЗначениеЗаполнено() — пустая дата интерпретируется как «запрета нет», хотя код дальше сравнивает её с датами документов
03
Игнорирование относительной даты — администратор уверен, что запрет «на 31 декабря», а дата уже пересчиталась на конец квартала
04
Проверка даты в сеансе администратора вместо сеанса пользователя — у администраторов часто действует расширенная или отсутствующая дата запрета

Проверка результата и ограничения

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

Работа с датой запрета доступна только пользователям с правами администратора или с ролью «Настройка дат запрета изменения данных». Обычному пользователю форма настройки недоступна, но это не мешает ему видеть сообщение о запрете с указанием даты при попытке изменить старый документ.

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

Итог

Что важно запомнить

Дата запрета просматривается в Администрирование → Регламентные операции, а программно получается функцией ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных(). Прямое чтение константы годится только для простой общей даты. Всегда учитывайте относительные даты, разделы учёта и индивидуальные настройки пользователей.

Частые вопросы

Как узнать дату запрета, если нет прав администратора?

Попробуйте открыть любой документ закрытого периода и записать его: система покажет сообщение с действующей датой запрета. Либо попросите администратора выполнить функцию ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() в вашем сеансе через внешнюю обработку.

Почему функция возвращает пустую дату, хотя запрет работает?

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

Где хранятся даты запрета по разделам учёта?

Общая дата — в константе ДатаЗапретаРедактированияДанных, а расширенные настройки (разделы, объекты, пользователи, относительные даты) — в константе-хранилище настроек подсистемы, в новых версиях БСП это «НастройкиДатЗапретаИзмененияДанных». Редактировать их вручную не рекомендуется.

Можно ли получить дату запрета запросом?

Да, для общей даты: «ВЫБРАТЬ Константы.ДатаЗапретаРедактированияДанных КАК ДатаЗапрета ИЗ Константы КАК Константы». Но запрос не вычислит относительные даты и не учтёт пользовательские исключения — для этого нужен программный интерфейс БСП.

Дата запрета стоит, а старый документ всё равно проводится. Почему?

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