Каждый администратор и программист 1С сталкивался с ситуацией, когда пользователи утверждают: «Документ распровелся сам собой!». Вы открываете журнал регистрации, настраиваете отбор по документу и событию «Данные. Отмена проведения», но... Журнал пуст. При этом проведение документа в истории зафиксировано, а сам он сейчас находится в состоянии «Не проведен».
В этой статье мы подробно разберем, как именно происходит это «волшебство», почему платформа 1С:Предприятие позволяет обойти стандартную запись событий в журнал регистрации, и как провести детальное расследование, чтобы найти истинного виновника.
Для начала разберем стандартное поведение платформы. Когда пользователь интерактивно нажимает кнопку «Отменить проведение», система выполняет транзакцию записи с явным указанием режима записи. В этот момент вызывается обработчик события ОбработкаУдаленияПроведения() в модуле документа, очищаются движения по регистрам, а в журнал регистрации записывается системное событие «Данные. Отмена проведения».
Однако существует альтернативный технический сценарий, при котором документ переводится в статус «Не проведен», но платформа фиксирует это событие исключительно как «Данные. Изменение». Рассмотрим подробнее, как это реализуется на практике.
Самый частый случай — это работа внешних обработок, написанных без учета стандартов разработки 1С, либо неаккуратные действия программиста. Если требуется быстро «распроводить» документ из кода, разработчик может написать следующий фрагмент:
ДокументОбъект = СсылкаНаНакладную.ПолучитьОбъект();
ДокументОбъект.Проведен = Ложь;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Проанализируем, что происходит на уровне платформы при выполнении этого кода:
Запись (а не в режиме ОтменаПроведения).ОбработкаУдаленияПроведения() в модуле документа не вызывается!Ложь. При этом движения по регистрам накопления и сведений могут остаться «зависшими» в базе данных, если в конфигурации или подписках на события не прописано принудительное очищение наборов записей при обычной записи.Если в вашей системе настроена синхронизация данных (например, между «1С:Управление торговлей» и «1С:Бухгалтерия» или с мобильным приложением/сайтом), то перенос документов выполняется в специальном режиме.
Присвоение свойству объекта значения ОбменДанными.Загрузка = Истина сообщает платформе, что данные переносятся «как есть» из другой доверенной системы. В этом режиме:
Проведен имеет значение Ложь, платформа просто записывает его в базу данных. Запись фиксируется в журнале регистрации как рядовое «Изменение», выполненное пользователем, под которым запущен сеанс обмена (часто это фоновое задание или специальный служебный пользователь).Администраторы систем часто прибегают к стандартной обработке «Групповое изменение реквизитов» (входит в состав БСП). По умолчанию служебные реквизиты в ней скрыты, но через меню настроек их отображение можно легко включить.
Если пользователь с правами администратора выберет целевой документ, найдет в списке реквизитов поле Проведен и установит его в значение Ложь, обработка выполнит запись объекта. С точки зрения платформы это будет ровно тот же самый процесс, который мы описали в Сценарии 1. В журнале регистрации появится запись об изменении документа этим администратором, но никакого упоминания об отмене проведения там не будет.
Если вы столкнулись с подобным «волшебством», предлагаем выполнить следующие шаги для локализации и устранения проблемы.
Не ограничивайтесь поиском события «Отмена проведения». Настройте фильтр в журнале регистрации следующим образом:
Фоновое задание или COM-соединение, то изменение пришло через обмены. Если указан конкретный пользователь, обратите внимание на время проведения операции — возможно, в это время выполнялась регламентная обработка под его учетной записью.Обязательно проверьте, остались ли у неактивного (распроведенного) документа движения в регистрах накопления (например, по регистрам «Товары на складах», «Выручка и себестоимость продаж» и т.д.):
В типовой конфигурации «1С:Управление торговлей 11» встроена мощная система версионирования объектов БСП. Если она была включена для данного вида документов:
Проведен изменил свое значение с Истина на Ложь, какой пользователь записал эту версию, и какие еще реквизиты были изменены параллельно.Чтобы исключить появление «необъяснимых» изменений в базе данных, рекомендуем придерживаться следующих правил:
Применяя предложенную методику анализа журнала регистрации и структуры данных, вы всегда сможете точно определить, какое именно внешнее воздействие привело к изменению статуса проведения документа, и оперативно устранить первопричину сбоя.