Как изменить признак поступления оригиналов в документах закрытого периода в 1С 8.3?

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

Нередко возникает типовая бизнес-задача: бухгалтерии или менеджменту необходимо отслеживать фактическое поступление оригиналов первичных документов (накладных, актов, УПД). Часто оригиналы приходят с большим опозданием, когда бухгалтерский и налоговый периоды уже закрыты, а в базе установлена дата запрета изменения данных. Попытка решить эту задачу «в лоб» — добавлением реквизита непосредственно в документ — сразу наталкивается на технические ограничения платформы и архитектурные риски. Разберем подробно, почему так делать не стоит и как правильно реализовать этот механизм.

Почему нельзя добавлять реквизиты оригиналов в сам документ

Проанализируем ситуацию, которая возникает при добавлении реквизита с типом Булево в метаданные документа:

  1. Блокировка закрытого периода: при открытии формы документа в закрытом периоде типовые механизмы БСП (Библиотеки стандартных подсистем) автоматически блокируют интерфейс, устанавливая свойство Форма.ТолькоПросмотр = Истина. Интерактивно отредактировать флаг пользователь не сможет.
  2. Проблемы перезаписи через ОбменДанными: даже если сделать кнопку в списке, которая на сервере вызывает ОбменДанными.Загрузка = Истина и записывает объект без проверок, документ фактически модифицируется. Это приводит к регистрации изменений в планах обмена (РИБ, синхронизация с УТ, ЗУП), что может вызвать коллизии и ошибки при передаче данных в приемники с закрытым периодом.
  3. Сброс электронных подписей и искажение версий: если документ был подписан электронной подписью, любая перезапись объекта делает подпись недействительной. Кроме того, версионирование зафиксирует изменение задним числом, что вызовет вопросы у аудиторов.

Вариант 1. Использование типового механизма БСП

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

Рассмотрим по шагам, как включить и настроить этот функционал:

  1. Перейдем в раздел Администрирование — Параметры учета (или Настройки программы) — Печатные формы, отчеты и обработки.
  2. Установим флаг Отслеживание состояния оригиналов первичных документов.
  3. После активации в списках документов («Реализация (акты, накладные)», «Поступление (акты, накладные)») появится колонка состояния оригинала. Менять статус можно как для одного документа, так и для группы выделенных строк прямо из контекстного меню или командной панели.

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

Вариант 2. Разработка собственного независимого регистра сведений

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

Шаг 1. Создание структуры метаданных

В конфигураторе добавим новый непериодический независимый регистр сведений, например, СостоянияОригиналовДокументов:

  1. В ветке Измерения создадим измерение Документ с типом ссылки на нужные документы (или определяемым типом). Установим свойство Ведущее.
  2. В ветке Ресурсы создадим необходимые флаги с типом Булево: ОригиналПолучен, АктВозвращен.

Шаг 2. Отображение отметок в форме списка

В динамическом списке журнала документов откроем настройку запроса и добавим левое соединение с нашим новым регистром сведений:


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

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

Шаг 3. Изменение признака без открытия документа

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

Посмотрим на пример реализации клиентского и серверного методов в модуле формы списка:


&НаКлиенте
Процедура КомандаПереключитьОригинал(Команда)
    МассивВыделенных = Элементы.Список.ВыделенныеСтроки;
    Если МассивВыделенных.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ИзменитьПризнакОригиналаНаСервере(МассивВыделенных);
    Элементы.Список.Обновить();
КонецПроцедуры

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

Выясним причину, почему данный метод надежен: процедура обращается только к объекту МенеджерЗаписи регистра сведений. Сам ДокументОбъект не считывается, не блокируется транзакцией проведения и не перезаписывается. Соответственно, проверка прав и дат запрета изменения данных документа игнорируется, так как регистр сведений не привязан к дате закрытия периода.

Таким образом, архитектурно правильным решением для фиксации любых признаков пост-обработки документов закрытых периодов является полное разделение учетных данных документа и статусной информации через регистры сведений.

← На главную