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

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

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

Как в 1С 8 узнать и получить дату запрета редактирования: через интерфейс, запрос и встроенный язык. Примеры кода, проверка результата и типичные ошибки.

Дата запрета изменения данных — это механизм 1С, который блокирует редактирование, создание и удаление документов за закрытый период. Администратору, бухгалтеру и разработчику регулярно требуется узнать, какая дата запрета установлена в базе: чтобы проверить, почему документ не проводится, чтобы вывести значение в отчёт или чтобы автоматизировать контроль закрытия периода.

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

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

Где хранится дата запрета в типовых конфигурациях

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

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

В нетиповых и устаревших конфигурациях дата запрета может храниться в константе с названием вроде «ДатаЗапретаРедактированияДокументов». Такая константа существовала в ранних версиях «1С:Бухгалтерии 7.7» и перекочевала в некоторые самописные решения. Проверить наличие константы можно через конфигуратор: откройте ветку «Константы» и поищите по слову «запрет».

Как посмотреть дату запрета через интерфейс

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

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

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

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

Как получить дату запрета запросом

Если нужно вывести дату запрета в отчёт, консоль запросов или обработку, обратитесь напрямую к регистру сведений. Запрос к таблице регистра возвращает все установленные даты с разрезом по разделам и объектам.

// Запрос к регистру сведений «Даты запрета изменения данных»

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ДатыЗапрета.Раздел КАК Раздел,

| ДатыЗапрета.Объект КАК Объект,

| ДатыЗапрета.ДатаЗапрета КАК ДатаЗапрета,

| ДатыЗапрета.ОписаниеДатыЗапрета КАК Описание

|ИЗ

| РегистрСведений.ДатыЗапретаИзмененияДанных КАК ДатыЗапрета";

Результат = Запрос.Выполнить().Выгрузить();

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

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

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

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

// Проверка, попадает ли дата документа под запрет

Если ДатыЗапретаИзменения.ИзменениеЗапрещено("Документ.РеализацияТоваровУслуг", ДатаДокумента) Тогда

Сообщить("Документ попадает в закрытый период");

КонецЕсли;

// Получение даты запрета из константы (для нетиповых конфигураций)

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

Для регистра сведений без запроса можно использовать менеджер записи или набор записей с отбором. Это удобно, когда нужно прочитать одну конкретную настройку, например для конкретной организации:

МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Раздел = ПланВидовХарактеристик.РазделыДатЗапретаИзменения.НайтиПоНаименованию("Бухгалтерский учет");

МенеджерЗаписи.Объект = Организация;

МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда

ДатаЗапрета = МенеджерЗаписи.ДатаЗапрета;

КонецЕсли;

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

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

Как проверить, что полученное значение корректно

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

Второй способ проверки — практический: попробуйте под тестовым пользователем без административных прав провести документ датой раньше полученной границы. Если запрет работает, система выдаст сообщение вида «Редактирование данных этого периода запрещено». Если документ проводится — либо дата запрета другая, либо у пользователя есть право обхода запрета.

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

Контрольные точки

Как проверить результат

Значение из запроса и из формы настройки
Норма

Даты совпадают

Тревожный признак

Прочитана запись другого раздела или объекта

Проведение документа раньше даты запрета
Норма

Система выдаёт сообщение о запрете

Тревожный признак

Документ проводится — запрет не действует или есть право обхода

Тип значения в поле ДатаЗапрета
Норма

Дата или пусто с описанием относительного правила

Тревожный признак

Неожиданный тип — вероятно, не то поле или не тот регистр

Типичные ошибки и ограничения

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

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

Третья ошибка — изменение даты запрета напрямую в регистре через обработку или запрос, минуя форму настройки. Это может привести к рассогласованию с кэшированными значениями и служебными данными БСП. Изменяйте настройку штатно через интерфейс или через программный интерфейс модуля «ДатыЗапретаИзменения».

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

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

Почему запрос к регистру возвращает пустой результат, хотя запрет работает?

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

Как узнать дату запрета для конкретной организации, а не общую?

Нужно прочитать запись регистра, где измерение «Объект» равно ссылке на эту организацию, а раздел соответствует нужному разделу учёта. Если такой записи нет, действует общая дата запрета — запись с пустыми измерениями.

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

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

Что означает пустая дата запрета в регистре?

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

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

У пользователя есть роль или право, позволяющее игнорировать запрет (например, полные права), либо документ относится к разделу, для которого запрет не задан, либо в настройке указана относительная дата, которая на текущий момент вычисляется раньше даты документа.

Где посмотреть дату запрета в файловой базе без конфигуратора?

Через интерфейс предприятия: «Администрирование» → «Поддержка и обслуживание» → «Даты запрета изменения данных». Если пункта нет, воспользуйтесь универсальной обработкой «Консоль запросов» или отчётом по регистру сведений из меню «Все функции».

Итог

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

В типовых конфигурациях дата запрета хранится в регистре сведений «Даты запрета изменения данных» с разрезами по разделам и объектам. Посмотреть её можно в разделе «Администрирование», получить программно — запросом к регистру или через модуль «ДатыЗапретаИзменения». Учитывайте относительные даты и частные настройки, а изменения выполняйте только штатными средствами.