Как узнать, кто и когда создал или изменил документ в 1С задним числом?

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

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

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

Метод 1. Детальный анализ Журнала регистрации (ЖР)

Самый простой, быстрый и штатный способ расследовать инцидент — воспользоваться системным Журналом регистрации. Но если просто открыть его и прокрутить до даты документа (трехмесячной давности), мы ничего не найдем. Документ был записан недавно, а значит, и искать событие нужно в логах за последние дни.

Рассмотрим по шагам, как правильно настроить фильтрацию в Журнале регистрации, чтобы быстро локализовать проблему:

  1. Перейдем в раздел Администрирование, затем выберем пункт Обслуживание и откроем Журнал регистрации.
  2. Нажмем на кнопку Установить отбор (значок воронки).
  3. В открывшемся окне настройки отбора перейдем на вкладку Данные. В поле Данные нажмем кнопку выбора, выберем тип документа Расходный кассовый ордер и укажем конкретную ссылку на наш проблемный документ.
  4. На вкладке Основные снимем ограничение по периоду (или установим период, охватывающий последнюю неделю/месяц, когда предположительно произошел сбой в нумерации). Это критически важно: реальная дата создания документа находится в настоящем времени, а не три месяца назад.
  5. На вкладке События выберем только интересующие нас действия: Данные.Добавление (создание документа), Данные.Изменение (редактирование) и Данные.Проведение.
  6. Нажмем Применить.

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

Важное предупреждение: Журнал регистрации может быть очищен администратором или злоумышленником для скрытия следов. Если вы не обнаружили записей, проверьте на сервере наличие архивных файлов журнала регистрации (файлы формата .lgp или база данных SQLite .lgd в каталоге srvinfo вашего сервера 1С).

Метод 2. Извлечение реальной даты создания из UUID (УИД)

Что делать, если Журнал регистрации был очищен, урезан или отключен? Существует продвинутый и очень элегантный способ, которым пользуются опытные программисты. Мы можем извлечь реальное время создания ссылки на документ прямо из его уникального идентификатора (GUID/UUID).

Платформа 1С по умолчанию генерирует идентификаторы по стандарту RFC 4122 (Version 1, time-based). Структура такого идентификатора содержит в себе точное количество 100-наносекундных интервалов, прошедших с начала Григорианского календаря (с 15 октября 1582 года). Зная это, мы можем дешифровать временную метку.

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


Функция ПолучитьРеальнуюДатуИзСсылки(СсылкаНаОбъект) Экспорт
    УИД = Строка(СсылкаНаОбъект.УникальныйИдентификатор());
    // Очищаем строку УИД от дефисов
    СтрокаУИД = СтрЗаменить(УИД, "-", "");
    
    // Проверяем версию UUID. В 1С версия v1 должна содержать единицу в определенной позиции
    Если Сред(СтрокаУИД, 13, 1) <> "1" Тогда
        ВызватьИсключение "Идентификатор документа не относится к типу Time-Based (v1). Извлечь дату невозможно.";
    КонецЕсли;
    
    // Перегруппировываем символы для получения шестнадцатеричного представления таймстемпа
    // Берем 3-ю часть (символы 14-16), затем 2-ю часть (символы 9-12), и в конце — 1-ю часть (символы 1-8)
    ТаймстемпHEX = Сред(СтрокаУИД, 14, 3) + Сред(СтрокаУИД, 9, 4) + Лев(СтрокаУИД, 8);
    
    // Переводим HEX-строку в десятичное число
    ЧислоИнтервалов = HexToDec(ТаймстемпHEX);
    
    // Переводим 100-наносекундные интервалы в секунды
    ВсегоСекунд = ЧислоИнтервалов / 10000000;
    
    // Начальная точка отсчета по стандарту RFC 4122 — 15 октября 1582 года
    ДатаНачала = Дата(1582, 10, 15, 0, 0, 0);
    
    // Рассчитываем итоговую дату по UTC
    ДатаUTC = ДатаНачала + ВсегоСекунд;
    
    // Добавляем смещение вашего часового пояса (например, +3 часа для Москвы)
    СмещениеВСекундах = 3 * 3600; 
    
    Возврат ДатаUTC + СмещениеВСекундах;
КонецФункции

Функция HexToDec(Знач HexЗначение)
    Разрядность = СтрДлина(HexЗначение);
    Результат = 0;
    Для Позиция = 1 По Разрядность Цикл
        Символ = ВРег(Сред(HexЗначение, Позиция, 1));
        ЗначениеСимвола = Найти("0123456789ABCDEF", Символ) - 1;
        Если ЗначениеСимвола < 0 Тогда
            Продолжить;
        КонецЕсли;
        Результат = Результат * 16 + ЗначениеСимвола;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Ограничения этого метода:

Метод 3. Проверка истории изменений (Версионирование объектов)

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

Посмотрим, как проверить, ведется ли история изменений для кассовых документов:

  1. Перейдем в меню Администрирование -> Общие настройки -> раздел История изменений.
  2. Убедимся, что флаг Хранить историю изменений установлен.
  3. Нажмем на гиперссылку Настройки хранения и найдем в списке документов Расходный кассовый ордер. Там должно быть указано версионирование (например, "Версионировать при записи" или "При проведении").

Если версионирование включено, мы можем открыть сам документ РКО, нажать на кнопку Еще в правом верхнем углу формы документа и выбрать пункт История изменений. Система покажет подробную таблицу:

Обратите внимание: Если эта настройка была выключена, то включать её сейчас для расследования прошлого инцидента бесполезно — история изменений начинает записываться только с момента включения опции.

Метод 4. Проверка реквизитов «Ответственный» или «Автор»

В типовой конфигурации 1С:Бухгалтерия 3.0 на уровне метаданных практически у каждого документа присутствует реквизит Ответственный (в некоторых других конфигурациях он называется Автор или Создал). Этот реквизит автоматически заполняется при создании документа текущим авторизованным пользователем.

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

  1. Откроем форму проблемного документа Расходный кассовый ордер.
  2. В правом верхнем углу нажмем Еще -> Изменить форму.
  3. Найдем в дереве элементов поле Ответственный (или Автор) и установим напротив него флажок видимости, после чего нажмем ОК. Поле появится на форме.
  4. Если через настройку формы вывести поле не удается, воспользуемся отчетом. Перейдем в Административный раздел -> Универсальный отчет.
  5. В настройках отчета выберем тип объекта Документ, имя — Расходный кассовый ордер, таблицу — Основные данные. Добавим в группировку или колонки реквизит Ответственный и сделаем отбор по нашему документу.

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

Метод 5. Метод исключения по резервным копиям (бэкапам)

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

Проанализируем стратегию поиска методом «двоичного поиска» (дихотомии) по цепочке бэкапов:

  1. Запросим у системного администратора архивные бэкапы базы данных за последние несколько недель (или месяцев) с определенным шагом (например, еженедельные копии).
  2. Развернем копии на тестовом сервере или локальном компьютере.
  3. Проверим наличие нашего документа с «прошлой» датой в этих копиях. Например, если у нас есть бэкапы за 1-е, 8-е, 15-е и 22-е число текущего месяца:
    • В бэкапе от 8-го числа документа еще нет.
    • В бэкапе от 15-го числа документ уже присутствует с датой трехмесячной давности.
  4. Благодаря этому мы локализовали временной интервал создания документа с точностью до одной недели (с 8-го по 15-е число).
  5. Далее разворачиваем ежедневные бэкапы за эту неделю и сужаем интервал до конкретного дня.
  6. Зная точный день, когда документ «вбросили» в информационную базу, мы сопоставляем это время со списком пользователей, которые вообще запускали 1С в этот рабочий день и имели технические права на изменение документов задним числом. Это позволяет сузить круг подозреваемых до минимума.

Подведем итоги

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

← На главную