Как реализовать дату запрета редактирования в конфигурации 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

1. Организация хранения даты запрета

Прежде всего, нам необходимо место для хранения самой даты. Лучше всего для этого подходит создание объекта типа Константа с названием ДатаЗапретаРедактирования. Этот подход позволит администраторам оперативно изменять дату через интерфейс программы, не прибегая к редактированию кода конфигуратора.

2. Создание глобальной функции проверки

Чтобы не дублировать код во всех документах, мы создадим централизованную функцию в ГлобальныйМодуль. Это позволит нам вызывать проверку из любого места конфигурации.


Функция глПроверитьДатуЗапрета(ДатаДокумента) Экспорт
    Если ДатаДокумента <= Константа.ДатаЗапретаРедактирования Тогда
        Возврат Истина; // Редактирование запрещено
    КонецЕсли;
    Возврат Ложь; // Редактирование разрешено
КонецФункции

3. Реализация защиты при открытии формы

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


Процедура ПриОткрытии()
    Если глПроверитьДатуЗапрета(ДатаДок) = Истина Тогда
        Форма.ТолькоПросмотр(1);
        Предупреждение("Документ заблокирован для редактирования!");
    КонецЕсли;
КонецПроцедуры

Важно помнить, что метод Форма.ТолькоПросмотр(1) является лишь первым барьером. Хотя он визуально ограничивает возможности пользователя, для надежности нам необходимо закрыть возможность записи на уровне логики самого объекта.

4. Блокировка записи документа

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


Процедура ПриЗаписи()
    Если глПроверитьДатуЗапрета(ДатаДок) = Истина Тогда
        СтатусВозврата(0); // Отменяем запись
        Предупреждение("Изменение документов данной даты запрещено!");
    КонецЕсли;
КонецПроцедуры

5. Защита при программном изменении

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

Для таких кейсов вам необходимо:

  1. Провести ревизию всех внешних обработок, которые осуществляют запись документов.
  2. Внедрить вызов функции глПроверитьДатуЗапрета() непосредственно в код процедур, отвечающих за импорт данных.
  3. Если проверка возвращает «Истина», принудительно прерывать выполнение обработки записи.

6. Советы по автоматизации внедрения

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

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

← На главную