В процессе сопровождения сложных или старых систем 1С часто возникает необходимость выяснить, когда именно в конфигурации появился тот или иной объект (например, новый документ). Это может быть полезно для проведения внутренних расследований, понимания логики развития системы или при отсутствии документации. Важно понимать, что универсальной «кнопки» с датой создания в конфигураторе нет, но существует несколько проверенных способов извлечь эту информацию из технических данных базы.
Если в базе данных ведется подробный журнал регистрации и он не сокращался за интересующий нас период, это самый простой и быстрый способ. Для детального изучения событий используйте анализ журнала регистрации. Нам необходимо найти событие, связанное с изменением структуры конфигурации.
Рассмотрим пошагово, как настроить фильтр в журнале регистрации:
Информационная база. Изменение конфигурации базы данных.Новый объект: Документ.ИмяВашегоДокумента.Проанализируем результат: в журнале будет зафиксирован момент, когда конфигурация базы данных была обновлена. Именно в этот момент новый документ физически появился в структуре таблиц SQL. Обратите внимание, что событие Добавление для самого документа как объекта метаданных в журнале не фиксируется в явном виде, фиксируется именно факт изменения конфигурации с перечислением новых объектов в комментарии.
Если разработка ведется с использованием хранилища конфигурации, задача упрощается до нескольких кликов. Хранилище хранит полную историю всех изменений метаданных.
Разберем алгоритм действий:
Если база тестовая и к хранилищу не подключена, этот метод, к сожалению, не сработает, поэтому перейдем к более «тяжелым» техническим методам.
Этот метод считается одним из самых точных, так как он обращается напрямую к системным таблицам 1С. Каждая запись в таблице Config имеет поле Creation, которое теоретически хранит дату создания записи. Однако, чтобы найти нужную запись, нам сначала нужно узнать UUID документа.
Рассмотрим, как это сделать программно или через выгрузку, применив анализ структуры метаданных:
Document.ИмяВашегоДокумента.xml.uuid, например: 78bfc1dc-26d5-465e-b410-076c43bfaf1e.Config:
SELECT [FileName], [Creation], [Modified]
FROM [ИмяВашейБазы].[dbo].[Config]
WHERE [FileName] LIKE '%78bfc1dc-26d5-465e-b410-076c43bfaf1e%'
Проанализируем ситуацию: поле Creation покажет дату добавления объекта. Важное замечание: если конфигурация когда-либо загружалась целиком из файла .cf (через «Загрузить конфигурацию из файла»), все даты Creation будут перезаписаны датой этой загрузки. В таком случае метод покажет не дату создания объекта разработчиком, а дату последней полной загрузки метаданных.
Если база данных работает на 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 обновится, и мы увидим дату последнего серьезного изменения структуры документа, а не его создания.
Если у вас сохранились регулярные бэкапы конфигурации (файлы .cf), но вы не знаете, в какой из них впервые появился объект, можно применить алгоритм двоичного поиска (дихотомии).
Рассмотрим процесс:
Этот метод кажется трудоемким, но на практике он позволяет вычислить дату появления объекта с точностью до дня всего за 5-7 сравнений, даже если у вас накопились сотни архивов за несколько лет.
Существует мнение, что из 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С.