Проблемы перехода на механизм истории данных

25.06.26

Разработка - Механизмы платформы 1С

Платформенный механизм "История данных". Возможные проблемы при переходе на использование механизма.

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

 

1. Перенос существующих версий БСП в историю данных

Что привело к проблеме: большой объем переносимых данных, перенос не по порядку периода версий.

В нашей компании активно использовался механизм версионирования БСП, и при переходе на историю данных было принято решение о сохранении накопленных данных. Изначально решили перенести данные за последние 3 месяца. Однако после перехода все-таки потребовалось продублировать историю полностью. Сама по себе процедура переноса работе не мешала, но по некоторым объектам получилась ситуация, когда порядок версий по периоду не соответствовал порядку номеров версий.

Казалось бы, проблема не критичная – исходные номера версий фиксировались в комментарии, а сортировку по дате можно при желании реализовать в существующей форме «История изменений истории данных», но при тестировании удаления версий с «истекшим сроком годности» выяснилось, что удаление версий до даты работает скорее от номера версии, чем от даты удаления.

Воспроизведу пример на базе конфигурации «Демо БСП»

История объекта до удаления:

 

 

Выполнен метод:

ИсторияДанных.УдалитьВерсии(ОбъектМетаданных, ГраницаУдаления);

Где

ОбъектМетаданных = Метаданные.Справочники._ДемоКонтрагенты

ГраницаУдаления = 01.01.2015

Результат выполнения

 

 

Ожидала, что будут удалены версии с 6 по 8, но похоже, что удаление происходит по номерам версий. То есть складывается впечатление, что метод получает номер первой версии, которая не попадает в указанный период (или последнюю, которая попадает) и удаляет все версии с номерами меньше найденной.

Эта проблема у нас осталась нерешенной – от удаления отказались.

 

2. Использование расширений и новые реквизиты объекта

В процессе работы обратила внимание на то, что для некоторых объектов метаданных, по которым включена история данных, в данные версии не попадают значения реквизитов, добавленных после включения истории. Происходило это не для всех объектов, большинство работало так, как заявлено в документации.

В первую очередь были проверены настройки объекта на предмет включения новых реквизитов в историю и новые реквизиты отражались там как включенные. А вот в результате выполнения метода

ИсторияДанных.ПолучитьМетаданные();

в структуре возвращаемых полей нужного реквизита не было. После череды проверок с анализом таблицы СУБД _DataHistoryMetadata удалось выяснить следующее:

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

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

Проблему получилось воспроизвести на платформе 8.3.27.1719 в демонстрационной конфигурации БСП. Ошибка была зарегистрирована 1С (bugboard.1c, 60027282.)

Про анализ таблицы _DataHistoryMetadata расскажу немного подробнее.

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

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

 

 

_IsSettings – указывает, что версия метаданных сформирована при изменении настроек

_IsActual – указывает, что версия метаданных является актуальной

_MetadataVersionNumber – Номер актуальной версии метаданных в нашем случае равен 1 (история была включена впервые)

_IsExtensions - признак доработки объекта в расширении

Теперь добавим реквизит в этот справочник, и посмотрим, что произойдет в таблице.

В журнале регистрации помимо информации об изменении объекта будет зафиксирована информация об изменении таблицы метаданных истории данных:

 

 

В самой таблице метаданных истории появилась новая запись, для которой _MetadataVersionNumber стал «2», _IsActual – истина. А для первой версии _IsActual отключился

 

 

То же самое произойдет, если мы добавим еще один реквизит или непустую табличную часть – будет добавлена новая строка с новым номером версии метаданных и установленным признаком _IsActual. Для предыдущей версии _IsActual будет отключен

 

 

При отключении хранения истории в режиме 1С:Предприятие _IsActual отключается

 

 

При повторном включении происходит то же, что при добавлении нового реквизита

 

 

Теперь воспроизведу ситуацию, которая приводит к неожиданному поведению системы.

Справочник «Виды цен» добавляю в расширение (добавляю только модуль менеджера)

Включаю историю данных. Таблица метаданных истории данных выглядит так же, как и в начале предыдущего примера, но здесь включен флаг _IsExtensions. По идее это не противоречит истине, так как объект действительно включен в расширение.

 

 

Добавляю реквизит в конфигурацию. В журнале регистрации вижу, что был изменен сам объект и таблица метаданных истории данных.

 

 

Выполняю запрос к _DataHistoryMetadata и вижу, что никаких изменений не произошло

 

 

Получается, что новая версия метаданных в таблице не зарегистрировалась. Что подтверждается при формировании версии данных – новый реквизит там так же отсутствует.

Пробую отключить/включить хранение истории объекта в режиме 1С: Предприятие

При отключении ожидаю, что _IsActual будет отключен, но этого не происходит

 

 

При включении добавляется строка с новым номером версии, но в отличии от предыдущего эксперимента, _IsActual остается включенным у обеих строк

 

 

Тем не менее, добавленный ранее реквизит появляется в новых версиях.

При повторении добавления реквизита происходит то же самое – не добавляется строка в целевой таблице и в данных версии нового реквизита нет. И в этот раз включение/отключение настроек уже не спасает. Несмотря на то, что добавляется новая строка с новым номером версии метаданных, в версии данных объекта нового реквизита нет.

 

 

Для решения проблемы пользуемся методом, который крайне не рекомендуется при работе с 1С – вносим изменения в _DataHistoryMetadata прямым запросом SQL, который устанавливает значение поля _IsActual = 0х00 для всех версий, кроме самых последних.

Вариант не самый лучший, но другого не нашли.

 

3. Использование метода СформироватьПоВерсии()

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

 

Вот, пожалуй, и все моменты, на которые хотелось бы обратить внимание.

Полезные статьи по теме:

Версионирование объектов VS История данных

Вступайте в нашу телеграмм-группу Инфостарт

История данных Платформа 1С

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Механизмы платформы 1С Разработчик Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    44225    TitanLuchs    109    

153

Работа с интерфейсом WEB-интеграция Механизмы платформы 1С Бесплатно (free)

Веб-интерфейсы повышают качество внешнего вида приложений 1С, предсказуемы с точки зрения верстки, позволяют организовать удобные и высокопроизводительные рабочие места для пользователей. Расскажем об особенностях разработки веб-интерфейсов на React внутри 1С, двустороннем взаимодействии 1С и JavaScript, а также сборке веб-приложения в одностраничный файл.

19.06.2025    17576    zeegin    15    

62

Механизмы платформы 1С Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    25240    bayselonarrend    127    

68

Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    31839    user2122906    10    

67

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    52795    user2122906    12    

63

Механизмы платформы 1С WEB-интеграция Разработчик 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    45079    dsdred    110    

155

Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

23.06.2024    39340    bayselonarrend    22    

180
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 7410017 29.06.26 06:10 Сейчас в теме
Спасибо за статью, большой респект!
2. icu1c 13.08.26 08:49 Сейчас в теме
Отличная статья, встречался с подобной историей...
Для отправки сообщения требуется регистрация/авторизация