Как настроить фиксацию событий и версионирование для самописного документа в 1С:Управление торговлей

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

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

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

---

Почему не работают точки останова при записи документа?

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

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

Выяснив это поведение платформы, рассмотрим, как вернуть видимость самописного документа в системных механизмах.

---

Решение 1. Обновление идентификаторов метаданных (системный Журнал регистрации)

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

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

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

/ЗапускОбновленияИнформационнойБазы

Или выполним программное обновление справочника через внешнюю обработку или консоль кода:

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

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

---

Решение 2. Подключение документа к подсистеме «Версионирование объектов» (БСП)

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

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

Шаг 1. Настройка подписок на события

В конфигураторе перейдем в ветку Общие -> Подписки на события. Нам необходимо найти системную подписку, отвечающую за запись версий объектов. В зависимости от версии БСП она может называться:

Откроем свойства этой подписки и в поле Источник добавим галочкой наш новый документ.

Шаг 2. Расширение определяемых типов

Чтобы система БСП понимала, что наш документ может участвовать в версионировании, найдем в конфигураторе определяемый тип ВерсионируемыеДанные (если вы ведете разработку в расширении — используйте ВерсионируемыеДанныеРасширенный). Добавим наш документ в список типов этого объекта.

Шаг 3. Добавление команды «История изменений» на форму

Чтобы пользователи могли прямо из формы документа просматривать историю его версий, нам нужно связать документ с общей командой. Найдем общую команду ИсторияИзменений (или ПоказатьИсториюИзменений), откроем ее свойства и в поле Тип параметра команды отметим наш документ.

Шаг 4. Включение версионирования в пользовательском режиме

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

  1. Перейдем в раздел НСИ и администрирование -> Общие настройки -> История изменений.
  2. В открывшемся списке найдем наш новый документ.
  3. Установим для него желаемый режим ведения истории (например, «Версионировать при записи» или «Версионировать при проведении»).

Теперь при любом изменении документа система будет сохранять его точные копии, доступные для сравнения. Для сводного анализа сохраненных версий можно использовать отчет для просмотра истории изменения объектов на СКД.

---

Решение 3. Программная (кастомная) фиксация событий

Бывают ситуации, когда стандартного логирования платформы недостаточно. Например, вам требуется записывать в Журнал регистрации специфические бизнес-события: «Документ отправлен на согласование», «Изменен статус на "Отклонен"» или «Распечатана копия оригинала».

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

Рассмотрим пример реализации. Создадим новую подписку на событие ПриЗаписи для нашего документа и свяжем ее с серверным общим модулем. В обработчике подписки напишем следующий код:


Процедура ИмяОбщегоМодуля_ПриЗаписиДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    // Проверим, что документ не новый, и запишем кастомное событие
    Если Не Источник.ЭтоНовый() Тогда
        
        ТекстКомментария = СтрШаблон("Пользователь изменил документ %1. Текущий статус: %2", 
                                     Источник.Ссылка, 
                                     Источник.СтатусДокумента);
        
        // Прямая запись в Журнал регистрации платформы
        ЗаписьЖурналаРегистрации(
            "УчетДокументов.ИзменениеСтатуса",
            УровеньЖурналаРегистрации.Информация,
            Источник.Метаданные(),
            Источник.Ссылка,
            ТекстКомментария
        );
        
    КонецЕсли;
    
КонецПроцедуры

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

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

← На главную