В процессе администрирования и поддержки баз данных на платформе 1С:Предприятие 7.7 специалисты часто сталкиваются с загадочной ситуацией: документ в базе данных существует, он проведен, по нему есть движения, но при анализе журнала регистрации (ЖР) нет абсолютно никаких следов его создания или изменения. Кажется, что документ возник буквально из ниоткуда.
В рамках этой статьи мы подробно разберем, почему возникает подобное поведение системы, проанализируем внутренние механизмы работы платформы 1С 7.7 и рассмотрим основные технические причины, по которым записи в файле 1cv7.mlg могут отсутствовать.
Основная и наиболее распространенная причина кроется в самой архитектуре платформы 1С 7.7. В отличие от современных версий платформы (таких как 1С 8.3), где практически любые манипуляции с объектной моделью логируются автоматически, в «семерке» действует строгое правило:
В журнал регистрации по умолчанию записываются только интерактивные действия пользователей.
Если пользователь открывает форму документа, нажимает кнопку «ОК» или «Провести», платформа фиксирует это событие в ЖР. Однако, если документ создается, модифицируется или проводится программно, платформа делает это «молча».
Рассмотрим классический пример программного создания документа с помощью внешней или внутренней обработки:
Процедура СоздатьДокументПрограммно()
НовыйДок = СоздатьОбъект("Документ.ПриходныйКассовый");
НовыйДок.Новый();
НовыйДок.Клиент = КонтрагентСсылка;
НовыйДок.СуммаДокумента = 15000;
НовыйДок.Записать();
НовыйДок.Провести();
КонецПроцедуры
При выполнении этого кода документ успешно запишется и проведется в базе данных. Но в журнале регистрации не появится ни одной строки. Чтобы запись все-таки была сформирована, разработчик должен явно вызвать встроенную функцию ЗаписьЖурналаРегистрации(). Проанализируем, как должен выглядеть правильный код с логированием:
Процедура СоздатьДокументСЛогированием()
НовыйДок = СоздатьОбъект("Документ.ПриходныйКассовый");
НовыйДок.Новый();
НовыйДок.Клиент = КонтрагентСсылка;
НовыйДок.СуммаДокумента = 15000;
НовыйДок.Записать();
НовыйДок.Провести();
// Явный вызов логирования для программных действий
ЗаписьЖурналаРегистрации("Программное создание ПКО", "Документы", "Новый", НовыйДок.ТекущийДокумент(), 2);
КонецПроцедуры
Если разработчик внешней обработки (или кода автосоздания подчиненных документов при проведении ведущих) не предусмотрел вызов этой функции, никаких следов в ЖР не останется.
Еще один сценарий, который часто используют недобросовестные специалисты или администраторы для скрытия своих действий, — временное отключение регистрации событий.
Выясним, как это происходит по шагам:
В результате этих манипуляций документы будут созданы, но за указанный промежуток времени записи в файле ЖР зафиксированы не будут.
В платформе 1С 7.7 журнал регистрации не хранится в таблицах базы данных SQL или DBF. Он представляет собой обычный текстовый файл с именем 1cv7.mlg, который физически располагается в каталоге базы данных в папке SYSLOG.
Поскольку это простой текстовый файл, любой пользователь, имеющий непосредственный доступ к сетевой папке с базой данных на уровне операционной системы, может:
1cv7.mlg через любой текстовый редактор (например, Notepad++ или встроенный Блокнот) и точечно удалить строки, содержащие информацию о создании конкретного документа.1cv7.mlg. Часто это делают «легально», когда файл журнала разрастается до гигантских размеров и начинает тормозить работу системы, однако при этом полностью теряется история за прошлые периоды.Иногда операции с документами производятся вообще в обход платформы 1С 7.7. Опытные программисты или системные администраторы могут вносить изменения напрямую в СУБД:
_1SJOURN и соответствующие таблицы шапки DH* и табличной части DT* конкретного вида документа).Поскольку сама исполняемая среда 1С в этот момент не запущена, перехватить эти действия и записать их в файл лога физически невозможно.
Рассмотрим ситуацию со стороны системного администрирования. При активной многопользовательской работе в файловом режиме (особенно при использовании сетевых ресурсов на базе Windows Server или Samba/Linux) файл 1cv7.mlg подвергается постоянным блокировкам.
Если в момент записи нового документа несколько пользователей одновременно инициировали запись в журнал регистрации, файл лога может оказаться кратковременно заблокирован операционной системой или антивирусным ПО. В некоторых релизах платформы 1С 7.7 при невозможности получить монопольный доступ к файлу ЖР для записи транзакция создания документа все равно завершается успешно, но запись в журнал просто отбрасывается без вывода критической ошибки пользователю.
При использовании современных операционных систем (Windows 10/11, Windows Server) без должной настройки прав доступа может сработать защитный механизм User Account Control (UAC).
Если каталог базы данных 1С 7.7 расположен в защищенных системных папках (например, внутри C:\Program Files\), операционная система перенаправляет все попытки записи в файлы логов в персональную виртуальную папку пользователя по пути:
%localappdata%\VirtualStore\Program Files\...
В этом случае у каждого пользователя фактически ведется свой собственный изолированный файл журнала регистрации, а в общем сетевом каталоге базы данных записи будут отсутствовать.
Мы проанализировали основные причины, по которым документы могут существовать в базе 1С 7.7 без соответствующих записей в журнале регистрации. Чаще всего это связано с архитектурным поведением платформы — программной записью объектов без явного вызова функции логирования. Для исключения злоупотреблений рекомендуется жестко разграничивать права доступа к сетевой папке SYSLOG на уровне операционной системы, а также использовать специализированные внешние компоненты для ведения защищенных логов.