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

12.12.23

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

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».
 
 Сокращения:

ВО – Версионирование объектов

ИД – История данных

БСП – Библиотека стандартных подсистем

Киллер-фича – особенность ИД или ВО, отсутствующая у конкурирующей подсистемы, но дающая очень нужный функционал

Баг – Недоработка, приводящая к нежелательным последствиям

Фича – специфичное поведение, фишка

 

Содержание:

Почему я решил написать данную статью?

Как работает ВО?

Запись

Удаление

Как работает ИД?

Объекты использования

[Киллер-фича №0]

Таблицы в СУБД

Программное включение, проверка и сброс настроек ИД

[Киллер-фича №1]

[Баг №1]

Создание версий. Изменение объекта, выборка изменений и переход на версию

[Киллер-фича №2]

[Киллер-фича №3]

Восстановление удаленного объекта

[Киллер-фича №4]

Тонкость с общими реквизитами и регистрами сведений

Особенность для плана счетов

[Баг или фича?]

Особенность записи версии (перевод с авто на ручной режим) [upd 11.05.2023]

[Баг или фича?]

Ошибка ПриЗаписи(). Вылечили в платформе 8.3.24.1020 [upd 19.06.2023]

Обработка после записи версии истории данных

Таблицы, содержащие ExtX1

Кратко о ИД

Схема работы ИД

Выводы

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

1 История данных появилась довольно-таки давно, в платформе 8.3.11.2867 от 21.11.17, а используют ее единицы.

В 2021 году я провел около 100 собеседований за 3 месяца. В финальной части собеседования я задавал шесть вопросов и один из вопросов звучал так:

«В БСП есть подсистема «Версионирование объектов» и в платформе есть механизм «История данных». В чем отличия?»

Если привести статистику, то 50% не слышали про ИД. 20% слышали, но не знают, в чем отличие.

2 Более развернуто ответить на вопрос из новости: Новое в 1С 8.3.24: настройка истории изменения данных в режиме 1С:Предприятие

«посоветуйте, какой механизм выбрать, если база запускается с нуля?
на перспективу Платформенный? или отработанный БСПшный?
Настроить какой реквизит в документе сохранять или нет, конечно круто, но напрягают все эти костыли с внешними обработками по настройке»

3 Не нашел статью, детально разжевывающей механизм «История данных» со всеми нюансами. Захотел поковыряться, собрать всю информацию в одном месте, чтобы по необходимости подсматривать. [Шпаргалка]

4 И возможно популяризировать «Историю данных», но это не точно.

Я не буду описывать, что должна быть использована функциональная опция "ИспользоватьВерсионированиеОбъектов" и какое дополнительное свойство объекту можно добавить, чтобы запись версии не состоялась, просто опишу, как происходит работа «в лоб».

Запись:

Есть подписка на событие «ЗаписатьВерсиюОбъекта», работает она перед записью. Источник вызова «ОпределяемыйТип.ВерсионируемыеДанныеОбъект», в нем описаны все типы, по которым работает версионирование.

Версии пишутся в регистр сведений «ВерсииОбъектов» у которого есть измерение «Объект» с жестким описанием типа «БизнесПроцессСсылка, ДокументСсылка, ПланВидовРасчетаСсылка, ЗадачаСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, СправочникСсылка».

Сама версия хранится в ресурсе «ВерсияОбъекта», в регистре «ВерсияОбъектов»:

Удаление:

1 Есть подписка «ОчиститьИнформациюОбАвтореВерсии», это служебный вариант чистки версий.

2 Есть регламентное задание «ОчисткаУстаревшихВерсийОбъектов», которое на основание регистра сведений «НастройкиВерсионированияОбъектов» чистит старые версии. Версия хранится на основании ресурса «СрокХраненияВерсий» с типом ПеречислениеСсылка.СрокиХраненияВерсий.

3 Когда вы удаляете объект, удаляются все его версии. [Поведение это можно поправить, но нужно программировать]

4 Можно просто зайти в регистр «ВерсииОбъектов» и удалить (Del) версии вручную. [Это, кстати, не очень хорошо и с ИД так не сделать]

Как работает ИД?

Вот тут остановимся поподробнее, рассмотрим в примерах.

ИД работает по следующим объектам:

  1. Общие реквизиты;

[Включено автоматически и программно менять нельзя]

  1. Константы; [с версии "8.3.13"]
  2. Планы обмена; [с версии "8.3.13"]
  3. Справочники;
  4. Документы;
  5. Планы видов характеристик; [с версии "8.3.12"]
  6. Планы счетов; [с версии "8.3.12"]
  7. Планы видов расчета; [с версии "8.3.13"]
  8. Бизнес-процессы;
  9. Задачи;
  10. Регистры сведений.

[Измерения включены по умолчанию и выключать их нельзя]

Киллер-фича №0: ИД может хранить историю по регистрам сведений. ВО так не умеет.

 

Таблицы в СУБД:

_DataHistoryMetadata – Метаданные истории данных

_DataHistorySettings – Настройки истории данных

_DataHistoryQueue0 – Очередь истории данных

_DataHistoryLatestVersions, _DataHistoryLatestVersions1, _DataHistoryLatestVersions2 – Последние версии истории данных

_DataHistoryVersions – Версия истории данных

 

_DataHistoryAfterWriteQueue – Очередь обработки после записи истории данных.

[Появилась в версии 8.3.15. Если стоит версия совместимости меньше 8.3.15, тогда данной таблицы в СУБД не будет]

Данные таблицы реализованы для объектов, созданных в расширении:

_DataHistoryMetadataExtX1 – Метаданные истории данных

_DataHistorySettingsExtX1 – Настройки истории данных

_DataHistoryVersionsExtX1 – Версия истории данных

_DataHistoryLatestVerExtX1 – Последние версии истории данных

Давайте перейдем к экспериментам в ходе которых появятся ответы как работает ИД. 

 

Подготовительные действия:

Скачал БСП 3.1.7.306 и развернул демо базу.

В MSSQL почистил регистр с версиями.

Код:

TRUNCATE TABLE [_InfoRg429]

В MSSQL написал небольшой запрос, который будет выводить по регистру ВО и всем служебным таблицам ИД следующие данные:

  • rows - количество строк(записей) в таблице,
  • reserved - количество килобайт, забронированное данной таблицей,
  • data - количество килобайт, используемое данными,
  • index_size - количество килобайт, используемое индексами,
  • unused - количество килобайт, забронированное таблицей, но пока данное пространство не заполнено данными.

Код:

USE BSP_DEMO
go 
sp_spaceused [_InfoRg429]
go 
sp_spaceused [_DataHistoryLatestVersions]
go 
sp_spaceused [_DataHistoryLatestVersions1]
go 
sp_spaceused [_DataHistoryLatestVersions2]
go 
sp_spaceused [_DataHistoryMetadata]
go 
sp_spaceused [_DataHistoryQueue0]
go 
sp_spaceused [_DataHistorySettings]
go 
sp_spaceused [_DataHistoryVersions]
go 
sp_spaceused [_DataHistoryAfterWriteQueue]

Где BSP_DEMO – название базы данных.

 
 Результат:

 

Программное включение, проверка и сброс настроек ИД

Выключаем версионирование по всем объектам кроме документа «_ДемоПоступлениеТоваров»

Админстрирование/Общие настройки/История изменений/Настроить

Проверяем, что ИД в конфигураторе по документу «ДемоПоступлениеТоваров» выключено.

Видим, что история данных стоит «Не использовать»

 

Включаем программно ИД для документа «_ДемоПоступлениеТоваров»:

Настройки = Новый НастройкиИсторииДанных;
Настройки.Использование = Истина;	
ИсторияДанных.УстановитьНастройки(Метаданные.Документы._ДемоПоступлениеТоваров, Настройки);

Можно воспользоваться бесплатной обработкой Настройка состава "Истории данных"

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

В таблице [_DataHistoryMetadata]:

В колонке [_Content] содержится метаданные документа «_ДемоПоступлениеТоваров», в случае изменения метаданных будут создаваться новые версии метаданных.

В таблице [_DataHistorySettings]:

В колонке [_Content] хранятся настройки на основании которых будут собираться версии ИД.

Программные настройки можно прочитать следующим кодом:

Настройки = ИсторияДанных.ПолучитьНастройки(Метаданные.Документы._ДемоПоступлениеТоваров);

Если Настройки = Неопределено, значит программные настройки у объекта отсутствуют.

 

Давайте очистим программные настройки и посмотрим, что поменялось.

Программные настройки можно очистить следующим кодом:

ИсторияДанных.УстановитьНастройки(Метаданные.Документы._ДемоПоступлениеТоваров, Неопределено);

Я воспользуюсь обработкой Настройка состава "Истории данных"

 

В таблице [_DataHistoryMetadata] изменилась актуальность:

Таблица [_DataHistorySettings] стала пустой:

Таким образом мы получили подтверждение того, что программные настройки для ИД хранятся в [_DataHistorySettings]

Для продолжения экспериментов я опять включу ИД по документу «_ДемоПоступлениеТоваров»

Мы ничего не меняли, просто включили, очистили и повторно включили ИД по документу «_ДемоПоступлениеТоваров», но теперь у нас в таблице [_DataHistoryMetadata] две одинаковые версии метаданных.

Доказательство. Сделаем группировку по метаданным и содержимому:

[Баг №1] Мы нащупали узкое место. Я считаю это недоработкой, так как можно написать обработку, которая будет включать, менять или очищать настройки ИД до тех пор, пока база не съест все пространство. По-хорошему настройка метаданных должны сравниваться с предыдущей версией и если они идентичны тогда в предыдущей настройки метаданных менять статус на актуальную, не создавая новую запись.

Перед включением или выключением ИД убедитесь в том, что оно вам точно нужно

Киллер-фича №1: ИД настраивается программно. ВО первоначально настраивается в конфигураторе. ИД имеет возможность тонкой настройки, ВО настраивается на объект целиком.

 

Создание версий. Изменение объекта и переход на версию.

Перед следующими экспериментами я почищу таблицы истории данных и программно включу ИД у документа «_ДемоПоступлениеТоваров»:

Давайте создадим версию в ВО и ИД:

Просто запишем документ из демо базы.

Появилась запись в регистре версий [_InfoRg429]:

В таблице, отвечающей за очередью [_DataHistoryQueue0] появилась запись:

В ИД версия формируется не сразу, сначала данные о версии поступают в очередь истории данных [_DataHistoryQueue0]. Для создания версий нужно выполнить код, либо в конфигураторе должна стоять галка «Обновлять историю данных после записи».

Выполним код создания версий:

ИсторияДанных.ОбновитьИсторию();

Примечание: В этот момент в одной из таблиц «DataHistoryLatestVersions» создается последняя версия данных затирая предыдущую, а в таблице «DataHistoryVersions» записывается разносное действие. Это важно понимать особенно когда споры идут про размер данных. Когда вы удаляете версии, вы удаляете действия из таблицы «DataHistoryVersions»

Запись в [_DataHistoryQueue0] исчезла:

Появилась запись в [_DataHistoryLatestVersions1]:

Эта таблица хранит последнюю версию объекта.

Появилась запись в [_DataHistoryVersions]:

На данном этапе версии в таблицах [_DataHistoryLatestVersions1] и [_DataHistoryVersions] равны.

Теперь в документе передвину строку вверх и создам версию:

В [_DataHistoryVersions] добавилась запись:

В [_DataHistoryLatestVersions1] была записана последняя версия:

Я сравнивал содержимое контента таблицы [_DataHistoryLatestVersions1] с предыдущей версией, различие было в 2 небольших фрагментах.

ТОП-6 инструментов для разработчика 1С

Подборка лучших инструментов для разработчика 1С включает Toolkit, DCT, OneDebugger, PrintWizard, DataFormWizard и Infostart MCP. Любой инструмент со скидкой 20% при покупке от двух решений.

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

Версионирование объектов VS История данных БСП Платформа версия Баг Киллер-фича расширение 8.3.11.2867 8.3.15 SQL Фича Настройки Метаданные Очередь отборы удаление версии

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

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

См. также

Механизмы платформы 1С Программист Бесплатно (free)

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

16.07.2025    42397    TitanLuchs    109    

152

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

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

19.06.2025    16141    zeegin    15    

61

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

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

03.02.2025    24058    bayselonarrend    127    

68

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

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

30.01.2025    30295    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    50574    user2122906    12    

63

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

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

14.01.2025    43211    dsdred    110    

155

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

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

23.06.2024    37859    bayselonarrend    22    

179
Отзывы
35. DIvanmgn 27.04.23 07:50 Сейчас в теме
Обнаружил еще одну плюшку. Если в конфиуграторе для объекта пометить, что история используется, а в пользовательском режиме отключить, то можно создавать версии по отдельным экземплярам объекта.

ИсторияДанных.ЗаписатьВерсию()
malenushka1; METAL; sstas007; fedor40; Rjhev; zhichkin; dsdred; +7 Ответить
47. zhichkin 1572 04.08.23 16:35 Сейчас в теме
(21) Добрый день! Каюсь, прошёл как-то механизм ИД мимо меня =) Больше 15 лет в 1С и вот такое вот недоразумение =) Спасибо огромное Вам за статью. Статья шикарная. Лично мне не хватило трассировок СУБД - что и как делает 1С на уровне SQL. Ну это ладно, сам посмотрю.

Вопрос про "ПослеЗаписи": означает ли это, что запись в таблицу _DataHistoryQueue0 выполняется вне транзакции записи основного объекта, история которого регистрируется в данный момент ? Прошу прощения, я конечно же сам могу посмотреть это на уровне СУБД, но вдруг Вы сразу знаете ответ ?
Kinestetik; user659424_aivanov1968; v8devops; EvgeniyOlxovskiy; fedor40; dsdred; +6 Ответить
41. dsdred 4276 27.07.23 13:21 Сейчас в теме
(39) Если у вас 8.3.21 и выше попробуйте таблицы по ИС вынести на отдельный скоростной диск.

Вообще я в 1С написал пожелание чтобы сделали отдельную базу для хранения версий.
Присоединяйтесь, напишите им тоже.
Чем больше запросов тем больше вероятность их реализации.
cheburashka; METAL; t278; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1589 06.03.23 09:57 Сейчас в теме
Отличное исследование, спасибо!
maxrubtsoff; t278; Student1C; Rjhev; zhichkin; dimisa; Рамзес; Дмитрий31178; dsdred; +9 Ответить
2. dsdred 4276 06.03.23 10:03 Сейчас в теме
(1)Надеюсь людям будет интересно и полезно.
zhichkin; +1 Ответить
3. CheBurator 3234 06.03.23 16:42 Сейчас в теме
Основательно!
Mizrael; dsdred; +2 Ответить
4. Air777 06.03.23 17:26 Сейчас в теме
в 8.3.14 ИД точно безбожно глючила на каждом шагу.
Потыкал, потыкал и выкинул в ведро. Надеюсь починили.
Но дальнейшего развития функционала особо нет. Например выгрузить во внешнюю БД, как с этим? Опять руками. Спасибо я тогда все руками сделаю сразу.

Как обычно тут за нас подумали, а там где не подумали проще выкинуть чем допилить.
Да хорошо когда есть выбор. Лично для меня выбор тоже очевиден. Пожалуй еще через 10 лет посмотрю ИД, может и буду пользовать...
А пока спасибо автору за проделанную работу.
Было интересно
Merkalov; RibD; +2 1 Ответить
5. dsdred 4276 06.03.23 17:42 Сейчас в теме
(4)Спасибо за комментарий.
С 21 помоему версии можно таблицы субд перенести на другой диск, поэтому впринципе переносить в отдельную базу необязательно.

А так впринципе переносить надо лишь одну таблицу с разносными версиями, ну и по хорошему с метаданными надо что-то делать. Чистить от тех по которым нет версий например.
n_mezentsev; +1 Ответить
11. Andronav 07.03.23 07:45 Сейчас в теме
(5) Вот как раз хочется чтобы версии объектов хранились во внешней базе полностью а не на уровне таблицы. Пока сами допиливаем и переносим версии в другую базу. Для ИД думаю это будет сделать сложнее. Может у кого есть такой опыт? Но давно хочется чтобы 1С предусмотрела функционал хранения вспомогательных данных (версии, файлов и т.п...) в отдельных БД.
user1315860; +1 Ответить
6. pyrkin_vanya 504 06.03.23 20:30 Сейчас в теме
Однозначно плюс за статью.

Лично я уже года два использую ИД в своей самописеой базе. Ниразу не словил ниодного глюка. По мне отличный механизм.
arz; pkotov; Tworozhok; dsdred; +4 Ответить
9. starik-2005 3301 07.03.23 06:42 Сейчас в теме
(6)
Ниразу не словил ниодного глюка.
Даже в браузере эти слова подчеркиваются красной линией, ибо пишутся раздельно. Какая-то беда в последнее время у всех с этим "раздельнописанием", даже у аффтора статьи.

(0) Но все равно плюс.
WarAn; pkotov; 3dice; sstas007; RibD; Дмитрий31178; +6 Ответить
10. dsdred 4276 07.03.23 06:50 Сейчас в теме
(9)
Какая-то беда в последнее время у всех с этим "раздельнописанием", даже у аффтора статьи.


что есть то ест...
Но я ниспециально не специально.
12. pyrkin_vanya 504 07.03.23 10:12 Сейчас в теме
(9) Я тоже не специально.))) После укладки детеныша человеческого и криков слабо голова соображает. Но за статью еще раз плюс
dsdred; Khamatnurov; +2 Ответить
13. starik-2005 3301 07.03.23 10:18 Сейчас в теме
(12) Я просто тут готовлюсь к ЕГАМ, поэтому лезу каждый раз проверять, что правильно ли я думаю, что это пишется не так. Это нервирует )))
Khamatnurov; pyrkin_vanya; +2 Ответить
51. 3dice 28 23.02.24 10:55 Сейчас в теме
(9)"не" и "ни" еще так часто путают. беда.
7. genayo 06.03.23 22:10 Сейчас в теме
Отсутствие работы с ИД в БСП удивляет, если честно. Механизм не достаточно обкатан в результате, например есть плавающий глюк с выполнением обработки после записи версии непосредственно, при массовой записи объектов.
8. dsdred 4276 07.03.23 05:22 Сейчас в теме
(7)1 отсутствие в бсп работы с ИД связано с тем, что механизм платформенный и обещают добавить в саму платформу обработку функционал которой я реализовал месяц назад и упоминал в статье.
2 опишите пожалуйста глюк подробнее я думаю читателям и мне будет интересно и полезно о нем знать.
14. user628741_news_novel 07.03.23 15:32 Сейчас в теме
Платформа 8.3.21.1622 режим совместимости 8.3.12. Конфигурация ERP. Есть несколько расширений.

При программной установке ИД и если потом перезапустить сеанс, то сразу или через некоторое время ИД слетает (не применяется) и соответственно пропадет команда "История данных" у объекта.


Т.е. если выполнить
ИсторияДанных.ПолучитьНастройки(ОбъектМД)
, то возвращается
Неопределено


При этом в таблицах DataHistorySettings и DataHistoryMetadata записи по объекту которому установили ИД есть.
Кто-нибудь сталкивался с таким поведением платформы? Куда копать?
15. dsdred 4276 07.03.23 15:45 Сейчас в теме
(14)я попробую воспроизвемти
22. user628741_news_novel 09.03.23 09:47 Сейчас в теме
(15) удалось воспроизвести?
Есть какие-то идеи?
23. dsdred 4276 09.03.23 10:09 Сейчас в теме
(22) ещё не пробовал. Из идей поменять режим совместимости на 8.3.15 и попробовать.
26. user628741_news_novel 09.03.23 18:39 Сейчас в теме
(23) поставил режим совместимости 8.3.15 не помогло.
Вообще странно.
Если настройки хранятся в таблицах DataHistorySettings и DataHistoryMetadata и значение записей для объекта и не меняется.
Но из режима предприятия пропадает команда "История данных" и записи не пишутся в таблицу _DataHistoryQueue0
Видимо эти настройки хранятся где-то ещё.
16. PaStrel 132 08.03.23 01:15 Сейчас в теме
Качественная статья, заполняющая очередной пробел в документации 1С. Автору плюс. Но сам параллельный механизм становится недоброй традицией 1С. Асинхронность дублирует оповещения, история данных версионирование. Что следующее?
JohnConnor; dsdred; +2 Ответить
17. BabySG 08.03.23 11:19 Сейчас в теме
Ключевая причина отсутствия поддержки ИД в БСП - это разница работы в РИБе.
А так - на крупных проектах размер ИД выходит меньше на круг, чем ВО. От 20%, когда у тебя сотни тысяч объектов в день.
18. 13D 73 08.03.23 22:29 Сейчас в теме
«В БСП есть подсистема «Версионирование объектов» и в платформе есть механизм «История данных». В чем отличия?»

теперь и я знаю в чём отличие))))
спасибо! крайне позновательно
19. dsdred 4276 08.03.23 23:09 Сейчас в теме
(18)Рад, что статья пригодилась.
20. setrak 159 09.03.23 00:20 Сейчас в теме
Очень интересно расписано. Сейчас как раз у себя осуществляю переход с версий на историю. По плюсам ИД все понятно, но единственно, пока не смог найти ответ, в какой момент происходит запись истории? с ВО все понятно, подписка на событие перед записью, а вот история когда пишется? Это чтобы мне понимать, будет ли влиять на скорость проведения документа ведение истории (при большом объеме истории) или нет? Исходя из того, что историю никогда не резать.
21. dsdred 4276 09.03.23 08:26 Сейчас в теме
(20)провел эксперемент
Перед записью и при записи версии ещё небыло.
В После записи запись попала в таблицу DataHistoryQueue0.
rname; EvgeniyOlxovskiy; zhichkin; setrak; +4 Ответить
47. zhichkin 1572 04.08.23 16:35 Сейчас в теме
(21) Добрый день! Каюсь, прошёл как-то механизм ИД мимо меня =) Больше 15 лет в 1С и вот такое вот недоразумение =) Спасибо огромное Вам за статью. Статья шикарная. Лично мне не хватило трассировок СУБД - что и как делает 1С на уровне SQL. Ну это ладно, сам посмотрю.

Вопрос про "ПослеЗаписи": означает ли это, что запись в таблицу _DataHistoryQueue0 выполняется вне транзакции записи основного объекта, история которого регистрируется в данный момент ? Прошу прощения, я конечно же сам могу посмотреть это на уровне СУБД, но вдруг Вы сразу знаете ответ ?
Kinestetik; user659424_aivanov1968; v8devops; EvgeniyOlxovskiy; fedor40; dsdred; +6 Ответить
24. monwig 12 09.03.23 10:53 Сейчас в теме
Полезная статья, наконец-то в одном месте собрана вся информация по таблицам и работе механизма, но есть что добавить)

Кто-нибудь работал с платформенной историей на больших объемах данных? В Highload-е? Мы попробовали - нам не понравилось.

Почему-то ни на its, ни в статьях нет упоминаний о том, как именно происходит обновление истории. Да, везде написано, что при стандартных настройках, когда у тебя включено ведение истории и не стоит галочка Обновлять историю данных сразу после записи, необходимо выполнять метод ИсторияДанных.ОбновитьИсторию() чтобы данные из очереди (_DataHistoryQueue) перетекли уже в таблицы версий и мы смогли историю увидеть, только скорость работы этого метода оставляет желать лучшего. На наших не самых больших объемах задание запускаемое раз в 5 минут просто не успевает обрабатывать все данные в очереди и очередь пухнет безумными темпами. За 1.5 суток +70GB записей в таблице очередей.

Если включить галочку Обновлять историю данных сразу после записи, тогда начинаются интересности. В таком случае запись все равно сначала будет положена в таблицу _DataHistoryQueue0, но сразу после этого, на сделанную запись, платформой будет запущено фоновое задание от имени пользователя, который сделал изменение версии (удобно, да?) и это не вызывает проблем, пока вы не доходите до регламентных заданий, где в рамках одного задания происходит изменение более чем 1 записи и все это работает в многопоточном режиме.
На нашей базе работает интеграция, 1 регламент запускается в 20 потоков, в каждом регламенте обрабатываются входящие сообщения, могут записаться новые справочники, записи в несколько регистров сведений. На базе история включена по 10 справочникам и 1 регистру. При работе всех 20 потоков, в пике поймали ~10.000 фоновых заданий на обновление истории, база после такого умирает, через пару минут фоновики отрабатывают, база отвисает и так по кругу с каждым запуском задания.
Причем задания на обновление данных будут продолжаться запускаться на каждую запись в таблице очереди, даже после удаления записей из таблицы, в таком случае помогает только перезапуск рабочих процессов. И это на базе не включена история по типовым объектам, пользовательская работа не генерирует изменений для истории, все объемы от одного регламента.

В итоге имеем ситуацию, что пользоваться методом ИсторияДанных.ОбновитьИсторию() мы не можем, т.к. с любым временем запуска наше количество изменений не успевает обрабатываться, а обновлять историю сразу так же не можем, т.к. это приводит к неадекватному количеству фоновых заданий для обновления истории. И это одна из самых менее нагруженных наших баз. Из того что я вижу, данный механизм просто не жизнеспособен при больших объемах и многопоточной работе в базе. Если у кого-то есть успешный опыт - поделитесь подробностями)
Krivoruchko_O; saddy; zaryazhenniy; user1315860; cheburashka; mityushov.vv; Сисой; EvgeniyOlxovskiy; vvp117; toypaul; t278; 1CUnlimited; Merkalov; sstas007; Student1C; zhichkin; tulakin_s; JohnConnor; Dach; detro; sulfur17; triviumfan; worker1c; dsdred; +24 Ответить
25. dsdred 4276 09.03.23 11:13 Сейчас в теме
(24)спасибо за подробно описанный кейс
27. user628741_news_novel 10.03.23 15:05 Сейчас в теме
(24) А версионирование объектов из БСП лучше себя показала на больших объемах? В Highload-е?

Лично я, встречал когда в регистре версий объектов уже больше 1000000 записей, то запись объекта (например, документ ЗаказКлиента) по которому включено версионирование происходило дольше.
sstas007; dsdred; +2 Ответить
28. dsdred 4276 10.03.23 15:53 Сейчас в теме
(27)нет, она лучше не может себя показать. Я пользовался ей на базе Розница с 500 магазинами и периодически случались ошибки при записи документов.
EvgeniyOlxovskiy; +1 Ответить
29. monwig 12 10.03.23 23:58 Сейчас в теме
(27) на одной из баз, регистр версий весит больше 2ТБ, в нем больше 600млн строк и проблем его обслуживанием, добавлением\удалением записей или просмотром никаких не возникает.
Merkalov; t278; triviumfan; +3 Ответить
30. itmind 304 14.03.23 02:12 Сейчас в теме
(29) Проблема будет с очень долгой реструктуризацией таблицы. Например после обновления, в котором удалено много метаданных из конфигурации. (обновления ЕРП для примера)
EvgeniyOlxovskiy; t278; n_mezentsev; dsdred; +4 Ответить
31. monwig 12 14.03.23 14:28 Сейчас в теме
(30) сама по себе долгая реструктуризация не является проблемой.

Если вы можете взять тех. окно на сутки (или более длительное время), то можете спокойно провести реструктуризацию. Так же вы можете использовать "новый" режим реструктуризации, который значительно быстрее стандартного режима. Если нельзя взять длительное тех. окно и время реструктуризации все еще выходит за требуемое время, тогда у вас еще есть несколько вариантов:
- Сделать реструктуризацию на СУБД
- Если таблица не является необходимой для работы сразу после обновления, вы можете очистить данную таблицу и после обновления перенести в нее данные.
- Использовать фоновое обновление конфигурации. Да, вам придется отказаться от внесения изменений в метаданные в расширениях, но позволит прийти к тому, чтобы любая реструктуризации проходила в фоне, а база блокировалась только для принятия изменений.
- Вы можете просто не вносить изменения, которые приводят к реструктуризации той или иной таблицы

У нас нет проблем с реструктуризацией)
@Fancy; sstas007; dsdred; +3 Ответить
75. Alex__Alex 9 27.12.24 15:12 Сейчас в теме
(24) Ну вообщем то 1с нежизнеспособна на больших базах и во всех остальных аспектах
76. monwig 12 27.12.24 16:50 Сейчас в теме
(75) странный тезис, отлично работают базы размером в десятки терабайт. У нас в эксплуатации есть базы такого размера, которого у классического IT в компании не видели)
Как оно будет работать зависит только от прямоты рук тех сотрудников, кто будет обслуживать эти базы.
Windsor77; +1 Ответить
101. kudzia 15 01.07.26 23:08 Сейчас в теме
(24)
И это на базе не включена история по типовым объектам, пользовательская работа не генерирует изменений для истории, все объемы от одного регламента.

Если пользовательская работа не генерирует изменений для истории и все объёмы от одного регламента - тогда зачем нужна история в самой 1С ?
Вам нужен наверное механизм дампа загружаемых данных в виде каких-нибудь удобоваримых таблиц - прямо сразу в файлы и выгружать - безо всякой истории.
Увидеть историю можно просто открыв таблицу типа мхл или эксел или ещё какую-нибудь.

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

Почему-то считается что у вопроса нет цены. Но у вопроса есть цена.


Из того что я вижу, данный механизм просто не жизнеспособен при больших объемах и многопоточной работе в базе.

Из вашего описания следует что механизм жизнеспособен при больших объемах и многопоточной работе в базе, но вы не провели даже минимальной оптимизации процессов работы и процессов механизма - для того чтобы оно работало нормально и достаточно.

*upd: Я лично, считаю этот механизм не удобным и когда мое личное мнение спрашивают - я лично выбираю историю версий. с рядом доработок - ну хотя бы уж чтобы было видно какие реквизиты изменил пользователь, а какие были изменены сокрытыми от пользователя механизмами (ну разные происходят изменения реквизитов в "ПередЗаписью" - не сказать чтобы пользователь знал о них нажимая кнопку "Записать и закрыть" - а типовая покажет что якобы пользователь это дело изменил - но пользователь просто нажал "Записать и закрыть" - и нет нужды тратить время на выяснение - зачем же он изменил наименование - если он его и не менял - честное причестное слово! и правда - он не менял.

**upd: Цена вопроса очень наглядно раскрыта в казначействе и бюджетировании - там даже пороги выставляются непременно - от которых зависит - нужно ли визировать и от которых сразу ясно - входит ли оно в бюджет или может быть не входит и требуется провести оптимизацию с переносом средств между бюджетами чтобы задействовать простаивающий временно бюджет с другого направления.
Ну вот примерно так же и историю хранят и пользуются и в случае чего - цена вопроса имеет значение.
Это не принципиальный вопрос - о Родине. Этот вопрос имеет цену.
102. monwig 12 02.07.26 09:28 Сейчас в теме
(101)
Из вашего описания следует что механизм жизнеспособен при больших объемах и многопоточной работе в базе, но вы не провели даже минимальной оптимизации процессов работы и процессов механизма - для того чтобы оно работало нормально и достаточно.

а какая-то конкретика будет или вы просто решили накинуть?)

в моем примере база встала колом из-за истории по 1 объекту и многопотока, о какой оптимизации и процессах работы речь? Мой вывод о том, что механизм не жизнеспособен в highload исходит из того, что если у вас включена история по объекту, с которым работает регулярный многопоток - вы должны выключить эту историю и искать другой механизм версионирования изменений (старый механизм), потому что новый не способен переварить большой объем данных (количество записей объектов), т.к. на каждую сделанную запись (и не важно изменилось что-то или нет) создается фоновик для генерации версии.
103. kudzia 15 10.07.26 00:16 Сейчас в теме
(102)
а какая-то конкретика будет или вы просто решили накинуть?)

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

Более того, я привел достаточно конкретный пример оптимизации в этом же тексте чуть выше и даже написал где эта тема раскрыта чуть ниже.

У вас проблема в том что колом всё встало - объёмы большие - а ценность каждой версии не одинакова.

ps: Мир чем-то серьёзно болен. Сложно этого не замечать.
104. kudzia 15 10.07.26 00:18 Сейчас в теме
(102) Вы как раз таки и "накидывали" в своем тексте - не проведя никакой оптимизации - накидывали вывод о том что механизм ни для чего не подходит вообще.

Вы не заметили конечно же этого - я не пытаюсь сказать что вы специально всё выворачиваете наизнанку.
Это сегодня нормой является - ввиду сбоя в работе простейшей логики.
105. kudzia 15 10.07.26 00:30 Сейчас в теме
(102) В самом деле - представим что вы бы сначала внедрили историю данных, а уже затем начали бы делать свою интеграцию и в процессе этой интеграции - выяснилось бы что у вас система при такой схеме интеграции встаёт колом.
И вы бы сказали интеграторам - "ребята давайте переделывайте так чтобы оно работало, потому что ваша интеграция никуда не годится - система колом встает от вас."

Странно правда? :)
32. Tavalik 3464 21.03.23 09:13 Сейчас в теме
Спасибо. Интересная и подробная статья. Больше бы таких!

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

Неоднократно внедрял у клиентов именно такой способ хранения истории (готовых решений на инфостарте несколько).
cheburashka; Сисой; METAL; zhichkin; dsdred; +5 Ответить
33. dsdred 4276 22.03.23 11:39 Сейчас в теме
(32)Спасибо за отзыв.

Интересная и подробная статья. Больше бы таких!

Эх... Если бы Фирма 1С сама писала подобную документацию, тогда у людей было бы больше времени заниматься другими вещами и статьи были бы интереснее ))

Виталий, расскажи подробнее или дай ссылки на статьи, с теми вариантами которые ты внедрял.
У меня ощущение, что большинство идет по принципу версионирования от БСП.

Вообще можно подумать и насчет ИС с перебросом в стороннюю базу. По большому счету таблицы ИС можно с помощью SQL подружить с внешней базой.
34. Tavalik 3464 22.03.23 12:21 Сейчас в теме
(33)
2 раза встраивал сам, а также знаю про внедрения коллег вот этой подсистемы: https://softonit.ru/catalog/products/journal/

Давно правда это было, но тогда это решение устраивало и нас (1-2-3 линия поддержки, сами пользовались) и клиента.
35. DIvanmgn 27.04.23 07:50 Сейчас в теме
Обнаружил еще одну плюшку. Если в конфиуграторе для объекта пометить, что история используется, а в пользовательском режиме отключить, то можно создавать версии по отдельным экземплярам объекта.

ИсторияДанных.ЗаписатьВерсию()
malenushka1; METAL; sstas007; fedor40; Rjhev; zhichkin; dsdred; +7 Ответить
36. dsdred 4276 27.04.23 08:34 Сейчас в теме
(35)нормальный лайф хак. дополню статью.
37. dsdred 4276 11.05.23 11:43 Сейчас в теме
(35)Еще раз спасибо. Статью дополнил и обновил.
100. simgo83 71 14.11.25 06:14 Сейчас в теме
(35) Если это сделать, то пропадает стандартная команда просмотра истории. Хорошо когда платформа версии 8.3.15 и выше(можно использовать по условию ЗаписьИсторииДанных.Отказ =Истина и добавить еще ЗаписьИсторииДанных.ОбновлятьИсториюСразуПослеЗаписи =Ложь в объекте и без программного отключения истории). Имея платформу 8.3.12 вышел из положения добавлением команды с открытием платформенной обработки
 ОткрытьФорму("sysForm:DataHistoryVersions", Новый Структура("Data", Объект.Ссылка));   
38. truba 13.06.23 09:42 Сейчас в теме
Господа, вопросы:
1) - не очищается Таблица _DataHistoryLatestVerison после программного отключения всех настроек сохранения истории и очищения самой истории.
2) - _DataHistorySettings если вручную грохнуть строки, какие ожидать последствия?
3) - Слетают настройки из _DataHistorySettings. Не всегда, бекапов нет, ничего такого нет, одиночно стоящая база, но настройки слетают, вернее они не применяются даже.
40. dsdred 4276 27.07.23 13:17 Сейчас в теме
(38)Извиняюсь за долгий ответ. только сегодня увидел комментарий.
1 _DataHistoryLatestVerison не чистится после программного отключения. Настройки программного отключения и включения хранятся в _DataHistorySettings

вы удаляли через команду ниже?
ИсторияДанных.УдалитьВерсии(Данные, НомерВерсииНачала, НомерВерсииКонца);


2 Слетит программное включение/выключение Истории данных. Грубо говоря вернетесь к первоначальным настройкам из конфигурации.

Это можно сделать командой
	// Удаление ранее сделанных настроек
	ИсторияДанных.УстановитьНастройки(ОбъектМетаданных, Неопределено); 

правда придётся по метаданным бежать и проще реально через запрос в СУБД

3 Вот тут надо смотреть по месту. Тут скорее всего человеческий фактор. Настройки хранятся железно, но если поднять бекап до их установки то и настроек не будет или чистит кто таблицу. В общем на вскидку не скажу.
42. truba 27.07.23 14:37 Сейчас в теме
(40)
вы удаляли через команду ниже?
ИсторияДанных.УдалитьВерсии
- прошу прощения так же за давностью не вспомню - но как помнится да. Смутило что в решении присутствует определенная утечка дисковой памяти. Это не единственное место утечки памяти, насколько я помню.

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

тут такой момент, который в мануалах не подсвечен - настройки вступают в силу при перестарте сеанса. Т.е. текущие установки в этом сеансе не подхватываются.
Сказать точнее: всегда не используются или периодически не используется в общем случае не могу.
43. dsdred 4276 27.07.23 14:39 Сейчас в теме
(42)
тут такой момент, который в мануалах не подсвечен - настройки вступают в силу при перестарте сеанса.

хм, странно...
У меня в 21 и 22 платформе все работало на лету.
44. truba 27.07.23 14:45 Сейчас в теме
(43) 20й релиз, когда начинал тестирование тоже все работало на лету (как мне казалось), но после стабильно работало только после перестарта сеанса. Обычные формы. Для себя решил что таблица настроек истории загружается при старте сеанса и однозначно кэшируется.
45. dsdred 4276 27.07.23 14:50 Сейчас в теме
(44)Реально странно.
Настройки пишутся в скуль, а механизм работает на уровне самой платформы. Поэтому перезапуск влиять не должен.

Я когда статью писал, все в одном сеансе делал и принскрины вставлял. При этом тут же в скуле смотрел что меняется.
46. truba 27.07.23 14:59 Сейчас в теме
(45) Допустим что пишутся в скуль сразу. Но пишутся ли они так же в кэш сервера предприятия в 20м релизе - не факт. И реализована ли верификация настроек в кэше и на сервере в 20м же релизе - тоже не факт. Видос записывать не буду, Вам придется поверить на слово).
Выглядит так - установка настроек (делал обработкой из статьи), сохранение настроек, попытка сохранения объекта - никаких изменений в очереди. Перестарт сеанса - сохранение объекта - появляются строки в таблице Queue.
39. StasN 15.06.23 06:42 Сейчас в теме
Из опыта использования ИД замечена одна проблема - почему то удаление версии по объекту длится неприлично долго, может несколько минут удалять одну единственную версию одного объекта, очистку не нужных версий никак не можем сделать, чтобы уменьшить таблицы, в самих таблицах в sql версии занимают уже десятки ГБ, видимо как то связано с большими объемами что удаление работает так долго
Но а в целом, по моему мнению и применительно к нашей базе (не типовая), ИД лучше чем ВО, когда у нас была ВО, часто попадали на длительную реструктуризацию, что у нас не приемлемо, объекты конфигурации меняются достаточно часто приводящие к реструктуризации
41. dsdred 4276 27.07.23 13:21 Сейчас в теме
(39) Если у вас 8.3.21 и выше попробуйте таблицы по ИС вынести на отдельный скоростной диск.

Вообще я в 1С написал пожелание чтобы сделали отдельную базу для хранения версий.
Присоединяйтесь, напишите им тоже.
Чем больше запросов тем больше вероятность их реализации.
cheburashka; METAL; t278; +3 Ответить
55. METAL 307 26.04.24 17:14 Сейчас в теме
(41) Если версия платформы 8.3.21 и выше - как вынести историю на отдельный диск? Не уверен что правильно понял идею, можете прокомментировать?
48. dsdred 4276 04.08.23 16:42 Сейчас в теме
(47) добрый вечер. Рад что статья пригодилась.

По поводу вопросов, честно скажу не проверял. Если проверите, напишите пожалуйста результаты. Думаю это будет полезно всем.
49. savant 57 20.02.24 08:20 Сейчас в теме
Добрый день!
После включения ИД. Создаётся версия 1 с изменениями.
Как получить программно версию до этих изменений?
Платформа как-то же сравнивает их.
50. dsdred 4276 20.02.24 08:47 Сейчас в теме
(49) первая версия содержит структуру объекта на момент создания версии. Изменения до не получить.
52. KAV2 159 05.03.24 17:35 Сейчас в теме
А как решаете проблему того, что каждый раз в истории данных создается новая запись, даже если объект не менялся (например, пользователь просто нажал на кнопку "ОК", ничего не меняя)?
53. dsdred 4276 05.03.24 17:38 Сейчас в теме
(52) эта проблема только у Планов обмена с подписками и БСПшной подсистемы версионирования на регистрах сведений. У истории данных на уровне платформы проверяется отличается текущее состояния объекта от того, что было до записи и если не меняется то и версия незаписывается.

Тут смысл, что пишется разностная версия, а не новая.
54. KAV2 159 05.03.24 17:59 Сейчас в теме
(53) спасибо за ответ, похоже что это поведение зависит от версии платформы, на 8.3.13 создается запись в истории в любом случае, а уже на 8.3.24 не создается, если не было изменений.
56. dsdred 4276 26.04.24 20:41 Сейчас в теме
57. artkor 294 29.05.24 10:44 Сейчас в теме
Спасибо за статью! Вы не в курсе можно ли из бинарника "_DataHistoryQueue0._Content" как-то дату записи версии вытащить? А то в продуктиве "помойка" из версий образовалась на несколько миллионов - вероятно 80% не нужно.
58. dsdred 4276 29.05.24 11:22 Сейчас в теме
(57)Добрый день. Сам я потратил пару часов и не смог расшифровать.
Знаю, что Дмитрий Жичкин вот в этой статье https://infostart.ru/1c/articles/1916860/ расписал как это сделать.
59. artkor 294 29.05.24 11:43 Сейчас в теме
(58) тоже 3 часов потратил не смог :) и статью эту читал
60. dsdred 4276 29.05.24 12:14 Сейчас в теме
(59) Видимо после той статьи надо еще n часов потратить на поиски информации, но покрайней мере там даны слова для поиска ))
61. Doronichi 21.08.24 22:48 Сейчас в теме
Добрый день!

Может кто-нибудь подскажет, почему в подсистеме версионирования из БСП регламентное задание по очистке устаревших версий очищает лишь данные версии, а саму строку в регистре "ВерсииОбъектов" оставляет?
62. dsdred 4276 22.08.24 05:34 Сейчас в теме
(61) Доброе утро.
Этот вопрос лучше задать в фирму 1с. Может быть хотели оставить сам факт изменения для истории.

Это ещё одно отличие с Историей данных. У Истории данных, удаление старых версий идёт полное, но фирма 1с до сих пор не нарисовала подсистему для работы с Историей данных.
П.С. В выходные выложу подсистему в которой можно будет автоматически чистить версии в Истории данных.
63. user1621540 16.09.24 19:29 Сейчас в теме
(62)

Здравствуйте!

Спасибо за статью и обработку.

1) Есть стандартная обработка "Изменение истории данных" (через режим специалиста). Вы о ней знаете и свою написали с расширенным функционалом специально или платформенная недавно появилась или и то и то?

2) Чистка истории штука полезная в обновленной обработке, но при тестах появились странные глюки. Причем дело не в вашей обработке даже, а, похоже, в целом в чистке версий. Т.к. сначала я грешил на ряд своих манипуляций (с вашей обработкой, со стандартной, с включением-отключением программным и т. д.) Но дальше воспроизвел проблему на "коробочном" варианте.

Платформа 8.3.24.1667, совместимость 8.3.21

Делаю "из коробки" тестовый пример - новый справочник, в нем один реквизит, одна ТЧ (с одним реквизитом ТЧ). Ставлю использование истории и обе галки по истории, чтобы вообще ничего программно не делать. В пользовательском режиме ничего не меняю. Добавляю новый элемент справочника, заполняю реквизиты, заполняю ТЧ одной строкой - пару раз изменяю - все хорошо, история работает, отчеты строятся, версии сравниваются, переходы на версии делаются. Удаляю кодом (ИсторияДанных.УдалитьВерсии(Метаданные, Дата)). По итогу версии удалены, новые версии сохраняются (начиная со следующего, после удаленной номера), вроде бы все хорошо. Но сравнение новых версий выдает ошибки. Если не изменялась ТЧ, то ошибка "Данные истории не найдены". Если ТЧ изменялась, то "Не найдена строка табличной части". Переход на версию тоже не работает. Если пытаться кодом различия посмотреть - тоже ошибка.

В общем, либо в моей платформе проблема, либо в целом с чисткйо истории проблема. Пока еще не смотрел так детально, как в статье, что там в СУБД происходит, буду посвободнее - гляну.
64. dsdred 4276 16.09.24 19:58 Сейчас в теме
(63) Добрый вечер, рад что обработка пригодилась.
1)
Есть стандартная обработка "Изменение истории данных" (через режим специалиста). Вы о ней знаете и свою написали с расширенным функционалом специально или платформенная недавно появилась или и то и то?


Про стандартную обработку знаю. Я свою нарисовал на несколько месяцев раньше, а затем сравнил со стандартной.
Вот две статьи сравнения:
История данных. Изменения в платформе 8.3.26
История данных. Изменения в платформе 8.3.24

Так же я написал подсистему по автоматическому удалению версий похожую на БСП.
https://infostart.ru/1c/articles/2175170/

2) Интересная ошибка. Попробую воспроизвести. В суппорт 1С писали?
EvgeniyOlxovskiy; user1621540; +2 Ответить
65. user1621540 16.09.24 20:30 Сейчас в теме
(64)

Пока не писал, думал сначала в СУБД глянуть, партнерс пошерстить, может кто ответ уже есть, а потом писать.

Но не понадобилось, недолгие поиски привели на пост человека (сторонний ресурс), где он описывает такую же проблему. Он пишет, что проблема именно в параметре "Дата" в варианте (Метаданные, Дата) метода удаления версий (мол, это как-то приводит к проблеме). Без второго параметра версии чистятся и начинаются с первой опять и снова все работает. Я попробовал - глюки исчезли (но и версии удалились все, а не до даты).

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

УдалитьВерсии(Метаданные) - нормально работает
УдалитьВерсии(Данные, ВерсияОт, ВерсияДо) - нормально работает
УдалитьВерсии(Данные, ВерсияОт) - нормально работает

Я было подумал, что надо сохранять первую версию при частичном удалении - версию создания объекта, но нет,
УдалитьВерсии(Данные, 1, 1) - при существующих более старших - работает.

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

Человек о своей проблеме писал в начале 2022 года, так что либо историей никто не пользуется особо, либо пользуются, пишут в суппорт, а исправлений нет.
66. dsdred 4276 16.09.24 20:36 Сейчас в теме
(65)
Человек о своей проблеме писал в начале 2022 года, так что либо историей никто не пользуется особо, либо пользуются, пишут в суппорт, а исправлений нет.

Чаще всего в саппорт не пишут. Я стараюсь писать, в моих интересах чтобы механизм работал нормально.
67. user1621540 17.09.24 14:28 Сейчас в теме
(66)

Написал в 1с, по результатам отпишусь.
68. dsdred 4276 17.09.24 23:14 Сейчас в теме
(67) отлично. Когда присвоят номер с ссылкой ошибки, можно сюда его написать, чтобы люди могли за статусом следить.
69. user1621540 18.09.24 17:45 Сейчас в теме
(68)

1с пока не ответил, но у меня появилась информация, что это исправлено в 8.3.24.1691 70082754 Сам не проверял, но по полученной информации в 1691 ошибки уже нет.
70. succub1_5 95 22.10.24 11:56 Сейчас в теме
Добрый день, ошибка появилась (платформа 8.3.25.1394), БП 3.0.161.19 (немного доработанная).
У типовых объектов - все ок, у добавленного после обновления/перехода на новую платформу - ошибка при сравнении или открытии:
Ошибка при вызове метода контекста (ПолучитьРазличияВерсий)
{mngbase/DataHistoryVersionDifferencesRuForm.lf(49)}:Различия = ИсторияДанных.ПолучитьРазличияВерсий(Параметры.Данные, Параметры.НомерВерсииПослеИзменения, Параметры.НомерВерсииДоИзменения);
{ВнешняяОбработка.StandardDataChangeHistory.Форма.Form.Форма(989)}:OpenForm(GetFormNameByData(curData, "DataHistoryVersionDifferencesForm"), FormParams);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Не найдена строка табличной части

В таблицу версии выводит.
71. dsdred 4276 22.10.24 12:33 Сейчас в теме
(70) Добрый день. В 1с написали по этой ошибке?
72. vovan_victory 65 01.11.24 20:38 Сейчас в теме
Добрый вечер.
Ни кто не сталкивался со следующей проблемой:

при сохранении версии регистра пытаюсь сохранить дополнительны данные:
    
	Рс =  РегистрыСведений.ОтветственныеЛицаОрганизаций.СоздатьНаборЗаписей();
	.............
         .......
       Комментарий = "";
	
	Пользователь = Пользователи.АвторизованныйПользователь();
	ИмяПользователя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь,"Наименование");
	
	Рс.ЗаписьИсторииДанных.ДобавитьДополнительныеДанные("ДатаНачала",СтрокаРс.Период,"Дата начала действия");

	ИсторияДанных.ЗаписатьВерсию(Рс,ТекущаяДата(),Пользователь.УникальныйИдентификатор(),ИмяПользователя,ИмяПользователя,ВидИзмененияДанных.Изменение,Комментарий);
Показать


После записи смотрю версию типовой обработкой. Все данные сохранились, но дополнительных данных нет. Так же смотрю через ПолучитьДанныеВерсии(). Тоже не вижу доп. данных.
Предполагал, что результат будет аналогичным тому, как работает версионирование БСП. Т.е доп. данные будут включены в версию как реквизиты объекта. Но тут вообще ни чего не происходит. Может я что то не так делаю или не правильно понял назначение метода ДобавитьДополнительныеДанные()?
73. dsdred 4276 01.11.24 21:35 Сейчас в теме
(72) Вроде все верно, но на регистрах не проверял.
В документы и справочники дополнительные данные добавлялись.
Будет время проведу эксперимент.


// Добавляет данные и представление данных в параметры записи истории данных.
//
// Параметры:
//  Источник -  ПланВидовРасчетаОбъект, 
//				БизнесПроцессОбъект,
//				ПланСчетовОбъект,
//				ПланВидовХарактеристикОбъект,
//				ПланОбменаОбъект, 
//				БизнесПроцессОбъект, 
//				КонстантаМенеджерЗначения, 
//				СправочникОбъект, 
//				ЗадачаОбъект, 
//				ДокументОбъект,
//				РегистрСведенийНаборЗаписей - Объект для которого добавляются дополнительные данные.
//  Имя				 - Строка - Имя добавляемого поля или табличной части.
//  Значение		 - Произвольный - Значение добавляемого поля или табличной части. 
//  Представление	 - Соответствие, Строка - Если передана строка, то представление, используемое по умолчанию. При отсутствии представления на необходимом языке, поведение отлично от конфигуратора, в котором нет возможности указать представление, используемое по умолчанию.
//		Если передано соответствие, то представления на различных языках, где:
//			Ключ - код языка,
//			Значение - представление.
//
Процедура ДобавитьДополнительныеДанные(Источник, Имя, Значение, Представление) Экспорт
	
    Источник.ЗаписьИсторииДанных.ДобавитьДополнительныеДанные(Имя, Значение, Представление);  
	
КонецПроцедуры
Показать


// Произвести запись версии
//
// Параметры:
//  Данные 	 -  БизнесПроцессОбъект, 
//				ПланВидовРасчетаОбъект, 
//				ПланСчетовОбъект, 
//				ПланВидовХарактеристикОбъект, 
//				ПланОбменаОбъект,
//				РегистрСведенийНаборЗаписей,
//				КонстантаМенеджерЗначения, 
//				СправочникОбъект, 
//				ЗадачаОбъект, 
//				ДокументОбъект - Объект конфигурации по которому будет создана версия  
//  ВидИзменения - Строка - "Добавление" или "Изменение" или "Удаление"
//	Комментарий - Строка - Текст с примечанием
//
Процедура ЗаписатьВерсию(Данные, ВидИзменения = "Изменение", Комментарий = "Версия записана вручную", ДатаСоздания = Неопределено) Экспорт  
	
	Если Не ЗначениеЗаполнено(ДатаСоздания) Тогда 
		ДатаСоздания 	= ТекущаяДатаСеанса(); 
	КонецЕсли;
	
	ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();    

	Попытка 
		ИсторияДанных.ЗаписатьВерсию(
			Данные, 
			ДатаСоздания, 
			ТекущийПользователь.УникальныйИдентификатор, 
			ТекущийПользователь.Имя, 
			ТекущийПользователь.ПолноеИмя, 
			ВидИзмененияДанных[ВидИзменения], 
			Комментарий);   
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); 				
	КонецПопытки;	
	
КонецПроцедуры
Показать
74. vovan_victory 65 02.11.24 09:26 Сейчас в теме
(73) , добавлю уточнение. Платформа 8.3.24.1548
77. user944562 05.02.25 22:37 Сейчас в теме
Добрый день. Мы перешли на ИД, но столкнулись с проблемой, что новые реквизиты(допустим документа) не входят в состав фикс структуры ревизитов хранения историй. Пробовал программно включать-выключать историю для этого ревизита, результата 0. Может вы сталкивались с подобным, подскажете что может помочь?
78. dsdred 4276 05.02.25 22:44 Сейчас в теме
(77) Доброй ночи. У нас при переходе через стандартную обработку с версионирования БСПшного была ситуация, что не все реквизиты были включены, с помощью обработки https://infostart.ru/1c/tools/1808124/ включили эти реквизиты и все норм.
А по поводу добавленных реквизитов, у меня проблем вообще не было.
79. user944562 05.02.25 22:46 Сейчас в теме
(78) Да, я тоже использовал эту обработку, к сожалению она не помогла. Но спасибо за ответ, буду копать дальше.
80. dsdred 4276 05.02.25 22:47 Сейчас в теме
(79) Не за что.
П.С. Как вариант попробовать на другой платформе.
Возможно платформенный косяк.
81. Дмитрий74Чел 250 12.03.25 12:30 Сейчас в теме
Кто-нибудь делал програмное открытие формы истории данных? Как понял, используется встроенная обработка StandardDataChangeHistory, но у неё нет интерфейса чтобы передать отбор. Получается вызвать форму могу, но передать отборы некуда, стандартно открывается форма отборов, которая мне не нужна.

В типовом варианте из формы элемента открывается та же форма обработки, но уже с отборами. А в коде обработки не вижу параметров, и как понял предусмотрен вариант обработки где нет формы отборов (тогда код не вызывает форму отборов, а сразу применяет отборы).
82. dsdred 4276 12.03.25 12:35 Сейчас в теме
(81) Я программного вызова формы не делал.
Посмотреть могу, но пока не знаю когда.
84. dsdred 4276 12.03.25 12:42 Сейчас в теме
(83) Да, вроде похоже на правду.
85. Дмитрий74Чел 250 20.03.25 17:49 Сейчас в теме
(83) в итоге для регистра сведений свое решение сделал https://infostart.ru/1c/tools/2345147/
86. dsdred 4276 21.03.25 07:51 Сейчас в теме
(85) Плюс вам в статью поставил.
Подумайте в сторону универсальной подсистемы.
87. PavelT_057 19 21.03.25 09:54 Сейчас в теме
Здравствуйте. Кто как обходит с регистрами сведений независимыми, например штрихкоды номенклатуры, столкнулся с проблемой, что платформа пишет в регистр 2 записи, сначала делает замещение и удаляет старую запись, потом добавляет новую, платформа у меня (8.3.25.1546). И когда она делает удаление записи, я не попадаю с ее версией в обработку «ОбработкаПослеЗаписиВерсийИсторииДанных», а только при добавлении. Как при использовании истории данных вместо планов обмена передать такую запись и не изобретать велосипед?
88. romioz 28.03.25 11:15 Сейчас в теме
Возможно есть еще одно различие:
в ИД можно сравнить только две версии и нельзя сравнить несколько версий как это можно делать в ВО
При анализе изменений, когда заранее не известно что именно изменили пользователи быстрее сравнить все версии и найти точно когда и что было изменено. В ИД это делать придется дольше сравнивая каждую версию отдельно друг с другом.
89. dsdred 4276 28.03.25 11:24 Сейчас в теме
(88) Но это же не совсем верно ;)
По большему счету этот функционал написан в ВО и ничто не мешает его продублировать в ИД.
ВО же не сразу все версии сравнивает, а так же скорее всего в цикле делает сравнение.

П.С. Как я уже говорил минус это то что 1С несделала подсистему до сих пор по работе с ИД.
90. romioz 28.03.25 12:45 Сейчас в теме
(89) Но тогда часть киллер фич ИД можно тоже не считать, так как это же самое решается доработкой в ВО :)
92. dsdred 4276 28.03.25 12:52 Сейчас в теме
93. romioz 28.03.25 12:53 Сейчас в теме
(92) Например восстановление удаленных объектов
91. romioz 28.03.25 12:49 Сейчас в теме
Ну и еще замечено, что сравнение одних и тех же версий в ВО происходит в 2-3 раза быстрее чем сравнение этих же версий в ИД. Естественно нужно проводить замеры и это пока только субъективное мнение.
Для отправки сообщения требуется регистрация/авторизация