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