Администрирование · 10 мин
Как получить дату запрета редактирования в 1С
Как узнать дату запрета редактирования в 1С: через настройки БСП, функцию ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() и запросом к константе. Примеры кода.
Дата запрета редактирования (дата запрета изменения данных) — механизм библиотеки стандартных подсистем (БСП), который блокирует ввод и изменение документов и других объектов за закрытый период. Получить её может понадобиться в трёх типичных ситуациях: администратор хочет посмотреть текущее значение в интерфейсе, разработчик — прочитать дату программно в коде, аналитик — выяснить, почему конкретному пользователю запрещено редактировать документ.
Способ получения даты зависит от того, как она настроена: единая дата для всех пользователей, дата по разделам учёта или индивидуальные даты для отдельных пользователей и групп. Ниже разобраны все варианты — от просмотра в интерфейсе до кода на встроенном языке и запроса к константе напрямую.
Где в интерфейсе посмотреть текущую дату запрета
В типовых конфигурациях на базе БСП (Бухгалтерия предприятия, Управление торговлей, ERP, Зарплата и управление персоналом) настройка находится в разделе Администрирование → Поддержка и обслуживание → Регламентные операции. Там есть флажок «Даты запрета изменения данных» и ссылка «Настроить». Если флажок снят — запрет не действует, и получать дату бессмысленно: механизм просто выключен.
По ссылке «Настроить» открывается форма, где видно способ установки даты: «Общая дата», «По разделам» или «По разделам и объектам». Здесь же отображается само значение — конкретная дата, относительная дата («конец прошлого года», «конец прошлого квартала» и т.п.) или комбинация для разных разделов учёта.
Важный нюанс: если включена настройка «Для пользователей» (переключатель «Указывать дату запрета: для всех пользователей / для отдельных пользователей»), то у разных сотрудников действуют разные даты. Общая форма настройки показывает значения по группам, а фактическую дату для конкретного пользователя нужно определять с учётом его приоритета в настройках.
- 1Откройте Администрирование → Поддержка и обслуживание → Регламентные операции
- 2Убедитесь, что включён флажок «Даты запрета изменения данных»
- 3Откройте ссылку «Настроить» и посмотрите способ установки даты
- 4Если дата задана для отдельных пользователей — разверните нужную группу и посмотрите значение
- 5Проверьте, не задана ли относительная дата (конец квартала, месяца) — она пересчитывается автоматически
Как получить дату программно через модуль БСП
Для разработчиков правильный способ — использовать программный интерфейс подсистемы «Даты запрета изменения данных». Общий модуль называется ДатыЗапретаИзменения, а функция, возвращающая действующую дату, — ДатаЗапретаИзмененияДанных() (в старых версиях БСП — ДатаЗапретаРедактированияДанных()).
Функция учитывает всю логику настройки: разделы учёта, индивидуальные даты пользователей, относительные даты. Это её ключевое преимущество перед чтением константы напрямую — вы получаете именно ту дату, которая реально действует для текущего сеанса.
// Простое получение даты запрета для текущего пользователя
ДатаЗапрета = ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных();
Если ЗначениеЗаполнено(ДатаЗапрета) Тогда
Сообщить("Редактирование запрещено до: " + Формат(ДатаЗапрета, "ДЛФ=D"));
Иначе
Сообщить("Дата запрета не установлена");
КонецЕсли;
// Проверка конкретного объекта перед изменением
ОписаниеДанных = Новый Структура;
ОписаниеДанных.Вставить("НоваяВерсия", Ложь);
ОписаниеДанных.Вставить("Данные", ДокументОбъект);
ДатаОбнаружена = Неопределено;
Если ДатыЗапретаИзменения.ИзменениеЗапрещено(ДокументОбъект, , ОписаниеДанных, ДатаОбнаружена) Тогда
Сообщить("Изменение запрещено, действует дата: " + ДатаОбнаружена);
КонецЕсли;Если нужна дата запрета для другого пользователя (например, при проверке в регламентном задании от имени администратора), следует либо выполнять код в сеансе этого пользователя, либо самостоятельно анализировать настройки: функция по умолчанию работает для текущего пользователя сеанса.
Чтение значения из константы напрямую
Физически общая дата запрета хранится в константе ДатаЗапретаРедактированияДанных. Прочитать её можно одной строкой: Константы.ДатаЗапретаРедактированияДанных.Получить(). Этот способ работает быстро и подходит для простых отчётов, но имеет серьёзное ограничение.
Константа содержит только общую дату. Если в настройках используются разделы учёта, относительные даты или индивидуальные значения для пользователей, значение константы не отражает реальную картину. Данные о разделах и пользовательских исключениях хранятся в других объектах — в частности, в структуре константы «НастройкиДатЗапретаИзмененияДанных» (хранилище значения) в новых версиях БСП.
Способы получения даты
Возвращает фактически действующую дату с учётом разделов и пользователей. Рекомендуемый способ, но работает только в конфигурациях с БСП.
Быстро и просто, но даёт только общую дату без учёта разделов и индивидуальных настроек.
Подходит администратору для разового просмотра; не годится для автоматизации и проверок в коде.
Как узнать, какая дата действует для конкретного пользователя
Когда дата задана «для отдельных пользователей», действующее значение определяется по приоритету: настройка для конкретного пользователя важнее настройки для его группы, а настройка группы важнее общей даты «для всех пользователей». Поэтому простого просмотра одного поля недостаточно.
Самый надёжный практический приём — зайти под учётной записью интересующего пользователя и попытаться провести тестовый документ закрытого периода: система выдаст сообщение с указанием действующей даты запрета. Либо выполнить отчёт/обработку с вызовом ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() в сеансе этого пользователя.
Ещё один вариант — внешняя обработка, которая в цикле по пользователям информационной базы формирует таблицу действующих дат. Такие обработки несложно написать самостоятельно на основе программного интерфейса БСП, но запускать их нужно от имени каждого проверяемого пользователя или с эмуляцией его настроек.
Как выбрать способ
Относительные даты: почему значение «само меняется»
Частая причина вопросов — относительная дата запрета. В настройке можно выбрать не фиксированную дату, а «конец прошлого года», «конец прошлого квартала», «конец прошлого месяца» или «конец прошлой недели». В этом случае фактическая дата пересчитывается автоматически при наступлении нового периода.
При чтении константы напрямую вы можете увидеть не дату, а признак относительного режима (в зависимости от версии БСП значение хранится иначе). Функция ДатаЗапретаИзмененияДанных() корректно вычисляет относительную дату на текущий момент — ещё один аргумент в пользу программного интерфейса.
Учтите также параметр «Отсрочка» (количество дней, в течение которых после наступления нового периода старая дата ещё действует). Он влияет на фактическое значение и тоже учитывается функцией БСП.
Проверка результата и ограничения
После получения даты убедитесь, что она соответствует ожиданиям: сравните программное значение с тем, что видно в форме настройки. Если они расходятся — почти наверняка в настройке задействованы разделы, относительная дата или пользовательские исключения.
Работа с датой запрета доступна только пользователям с правами администратора или с ролью «Настройка дат запрета изменения данных». Обычному пользователю форма настройки недоступна, но это не мешает ему видеть сообщение о запрете с указанием даты при попытке изменить старый документ.
Изменение даты запрета программно (запись константы) — допустимая, но рискованная операция: при сложной настройке прямая запись константы может рассинхронизировать данные. Для автоматической установки даты лучше использовать форму настройки или штатные процедуры БСП, а перед любыми экспериментами на рабочей базе сделать копию.
Что важно запомнить
Дата запрета просматривается в Администрирование → Регламентные операции, а программно получается функцией ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных(). Прямое чтение константы годится только для простой общей даты. Всегда учитывайте относительные даты, разделы учёта и индивидуальные настройки пользователей.
Частые вопросы
Как узнать дату запрета, если нет прав администратора?
Попробуйте открыть любой документ закрытого периода и записать его: система покажет сообщение с действующей датой запрета. Либо попросите администратора выполнить функцию ДатыЗапретаИзменения.ДатаЗапретаИзмененияДанных() в вашем сеансе через внешнюю обработку.
Почему функция возвращает пустую дату, хотя запрет работает?
Возможные причины: используется устаревшее имя функции, не подключён нужный модуль в вашей версии БСП, либо запрет настроен только по разделам, а вызывается вариант без параметров. Проверьте состав общего модуля ДатыЗапретаИзменения в вашей конфигурации через конфигуратор.
Где хранятся даты запрета по разделам учёта?
Общая дата — в константе ДатаЗапретаРедактированияДанных, а расширенные настройки (разделы, объекты, пользователи, относительные даты) — в константе-хранилище настроек подсистемы, в новых версиях БСП это «НастройкиДатЗапретаИзмененияДанных». Редактировать их вручную не рекомендуется.
Можно ли получить дату запрета запросом?
Да, для общей даты: «ВЫБРАТЬ Константы.ДатаЗапретаРедактированияДанных КАК ДатаЗапрета ИЗ Константы КАК Константы». Но запрос не вычислит относительные даты и не учтёт пользовательские исключения — для этого нужен программный интерфейс БСП.
Дата запрета стоит, а старый документ всё равно проводится. Почему?
Наиболее вероятные причины: у пользователя задана индивидуальная дата с более ранним сроком, включена отсрочка после смены периода, либо документ относится к разделу, для которого запрет не настроен. Проверьте фактическую дату через функцию БСП именно в сеансе этого пользователя.