Как узнать дату появления документа в конфигурации 1С

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

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

Способ 1. Анализ журнала регистрации

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

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

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

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

Способ 2. Использование хранилища конфигурации

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

Разберем алгоритм действий:

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

Если база тестовая и к хранилищу не подключена, этот метод, к сожалению, не сработает, поэтому перейдем к более «тяжелым» техническим методам.

Способ 3. Получение даты через таблицу Config в SQL

Этот метод считается одним из самых точных, так как он обращается напрямую к системным таблицам 1С. Каждая запись в таблице Config имеет поле Creation, которое теоретически хранит дату создания записи. Однако, чтобы найти нужную запись, нам сначала нужно узнать UUID документа.

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

  1. Выполним выгрузку конфигурации в файлы (Конфигурация — Выгрузить конфигурацию в файлы...). Это создаст набор XML-файлов.
  2. Найдем файл Document.ИмяВашегоДокумента.xml.
  3. Внутри файла в корневом теге будет указан атрибут uuid, например: 78bfc1dc-26d5-465e-b410-076c43bfaf1e.
  4. Теперь обратимся к SQL-серверу и выполним запрос к таблице Config:

SELECT [FileName], [Creation], [Modified]
FROM [ИмяВашейБазы].[dbo].[Config]
WHERE [FileName] LIKE '%78bfc1dc-26d5-465e-b410-076c43bfaf1e%'

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

Способ 4. Анализ структуры SQL-таблиц

Если база данных работает на MS SQL Server, можно попытаться узнать дату создания самой таблицы документа. Каждому документу 1С соответствует одна или несколько таблиц в SQL (например, _Document123).

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


Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
    Если Строка.ИмяМетаданных = "Документ.ИмяВашегоДокумента" Тогда
        Сообщить("Имя таблицы в SQL: " + Строка.ИмяТаблицыХранения);
    КонецЕсли;
КонецЦикла;

Затем в SQL Management Studio выполним запрос:


SELECT name, create_date, modify_date
FROM sys.tables
WHERE name = '_Document123' -- подставьте имя из 1С

Нюанс этого метода: при обновлении конфигурации, если в документ добавляются реквизиты, требующие реструктуризации, 1С может пересоздать таблицу. В этом случае create_date обновится, и мы увидим дату последнего серьезного изменения структуры документа, а не его создания.

Способ 5. Метод «Двоичного поиска» по архивам

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

Рассмотрим процесс:

  1. Возьмем самый старый и самый новый архив.
  2. Возьмем архив из середины временного промежутка.
  3. Сравним текущую конфигурацию с этим средним архивом через Конфигурация — Сравнить, объединить с конфигурацией из файла.
  4. Если документ в архиве есть — значит, он появился раньше. Сдвигаем поиск в сторону более старых архивов.
  5. Если документа нет — сдвигаемся к более новым.

Этот метод кажется трудоемким, но на практике он позволяет вычислить дату появления объекта с точностью до дня всего за 5-7 сравнений, даже если у вас накопились сотни архивов за несколько лет.

Способ 6. Парсинг GUID (теоретический)

Существует мнение, что из GUID (UUID) объекта можно извлечь дату создания. Проанализируем этот момент подробнее. Стандарт RFC 4122 определяет несколько версий UUID. Версия 1 (V1) действительно базируется на времени (timestamp). Однако 1С:Предприятие чаще всего генерирует UUID версии 4, которые являются полностью случайными (псевдорандомными).

Если вы видите, что первая группа цифр GUID у объектов, созданных примерно в одно время, имеет последовательный характер, возможно, перед вами UUID V1. В этом случае существуют специализированные парсеры, позволяющие перевести первые 60 бит идентификатора в дату и время. Но для современных систем 1С (платформы 8.3) это скорее исключение, чем правило.

Резюме и рекомендации

Для эффективного расследования рекомендуется комбинировать методы. Начните с журнала регистрации. Если данных в нем нет, попробуйте SQL-запрос к таблице Config, предварительно узнав UUID объекта через выгрузку в XML. Если же база данных неоднократно переносилась через файлы выгрузки, наиболее достоверным источником останется только история хранилища или анализ архивов бэкапов.

Чтобы в будущем не сталкиваться с подобными трудностями, хорошей практикой считается использование поля «Комментарий» в свойствах объекта метаданных. Многие разработчики при создании объекта записывают туда дату, задачу в баг-трекере и свою фамилию. Также неоценимую помощь оказывает внедрение системы контроля версий (Git) через EDT (Enterprise Development Tools) или использование штатного Хранилища 1С.

← На главную