Как добавить реквизит в документ 1С, чтобы его можно было редактировать в закрытом периоде?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему обычный реквизит документа не подходит?

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

Рассмотрим по шагам профессиональные способы решения этой задачи.

Способ 1. Использование независимого регистра сведений

Это наиболее гибкий и технически правильный метод. Суть заключается в том, что мы храним значение нашей «галки» не в самом документе, а в отдельном объекте — регистре сведений, где ключом (измерением) является ссылка на наш документ.

Шаг 1. Создание регистра сведений

В конфигурации или расширении создадим новый регистр сведений (назовем его, например, ДополнительныеПризнакиДокументов):

  1. Режим записи: Независимый (это критически важно, так как подчиненный регистратору регистр также будет заблокирован в закрытом периоде).
  2. Периодичность: Непериодический.
  3. Измерения: ДокументСсылка (тип — ссылка на нужный вид документа).
  4. Ресурсы: Галка (тип — Булево).

Шаг 2. Вывод реквизита на форму документа

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

  1. Добавим на форму документа реквизит формы (не путать с реквизитом объекта!) с именем ФлагЗакрытогоПериода и типом Булево.
  2. Перетащим его на элементы формы в удобное место.

Шаг 3. Программная логика работы с данными

Теперь нам нужно обеспечить чтение и запись этого значения. Разберем программный код. В модуле формы документа пропишем следующие процедуры:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Читаем значение из регистра при открытии формы
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ДополнительныеПризнакиДокументов.Галка
        |ИЗ
        |   РегистрСведений.ДополнительныеПризнакиДокументов КАК ДополнительныеПризнакиДокументов
        |ГДЕ
        |   ДополнительныеПризнакиДокументов.ДокументСсылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        ФлагЗакрытогоПериода = Выборка.Галка;
    КонецЕсли;

    // Важный нюанс: если период закрыт, форма станет "ТолькоПросмотр".
    // Нам нужно принудительно разрешить редактирование нашей галки.
    ЭтаФорма.Элементы.ФлагЗакрытогоПериода.ТолькоПросмотр = Ложь;
КонецПроцедуры

Для записи значения при изменении флага создадим обработчик события ПриИзменении для нашего элемента формы:


&НаСервере
Процедура ЗаписатьФлагВРегистрНаСервере()
    // Используем менеджер записи для независимого регистра
    МенеджерЗаписи = РегистрыСведений.ДополнительныеПризнакиДокументов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ДокументСсылка = Объект.Ссылка;
    МенеджерЗаписи.Галка = ФлагЗакрытогоПериода;
    МенеджерЗаписи.Записать(Истина); // Записываем независимо от состояния документа
КонецПроцедуры

&НаКлиенте
Процедура ФлагЗакрытогоПериодаПриИзменении(Элемент)
    ЗаписатьФлагВРегистрНаСервере();
КонецПроцедуры

Способ 2. Использование механизма «Дополнительные сведения» (БСП)

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

Преимущества этого метода:

  1. Данные хранятся в типовом регистре сведений ДополнительныеСведения.
  2. Для редактирования дополнительных сведений в БСП предусмотрена отдельная роль, что позволяет пользователю менять их, даже если сам документ закрыт для правки.
  3. Этот функционал легко выводится в список документов.

Чтобы настроить это, перейдите в раздел Администрирование — Общие настройки — Свойства. Добавьте новое дополнительное сведение к нужному документу с типом «Булево». Теперь в форме документа через кнопку «Еще — Дополнительные сведения» пользователь сможет управлять этой галкой.

Вывод реквизита в список документов

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

  1. Откройте форму списка документа в конфигураторе (или в расширении).
  2. Найдите ДинамическийСписок, который является источником данных для таблицы.
  3. Настройте произвольный запрос для этого списка.
  4. В запросе выполните ЛЕВОЕ СОЕДИНЕНИЕ основной таблицы документов с вашим регистром сведений по полю Ссылка.

Пример запроса для динамического списка:


ВЫБРАТЬ
    ДокументРеализация.Ссылка,
    ДокументРеализация.Дата,
    ДокументРеализация.Номер,
    ЕСТЬNULL(ДопРеквизиты.Галка, ЛОЖЬ) КАК ФлагПроверки
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументРеализация
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеПризнакиДокументов КАК ДопРеквизиты
        ПО ДокументРеализация.Ссылка = ДопРеквизиты.ДокументСсылка

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

Важные замечания по безопасности и архитектуре

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

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

← На главную