![]() |
![]() |
![]() |
|
В настройке истории данных не отображаются метаданные реквизитов | ☑ | ||
---|---|---|---|---|
0
sdemon72
30.06.25
✎
20:42
|
Добрый вечер! Используем платформенный механизм "История данных" (не БСП "Версионирование").
По одному из объектов (документ "ИзменениеШтатногоРасписания", это ЗУП КОРП) при вызове метода "Получить метаданные()" в составе полей отображаются только "Проведен", "ПометкаУдаления", "ОбластьДанныхОсновныеДанные" и табличная часть "ДополнительныеРеквизиты" (со всеми полями). В конфигураторе реквизиты в историю данных включены, программно тоже принудительно попробовал один реквизит включить - ничего не помогает. Изза этого и в историю пишутся только эти поля. Метод "ОбновитьИсторию()" запускал, не помогает. Платформа 8.3.24.1764, конфигурация ЗУП КОРП 3.1.30.197, пиленная (добавлены реквизиты). Да, кстати: попробовал типовую демку той же версии - там метаданные отображаются корректно, и история пишется корректно. Подскажите, куда копать? |
|||
1
Мультук
гуру
01.07.25
✎
09:11
|
(0)
Вангую, что вы не найдете ответа ни здесь, ни через оф. каналы <Шутки юмора удалены> |
|||
2
Волшебник
30.06.25
✎
21:16
|
(1) Жертва БСП
|
|||
3
rozer76
30.06.25
✎
21:36
|
(0) недавно с аналогичным столкнулся в КА 2.5 на 21-ой платформе в самописном справочнике. Все перепробовал. Есть куча других самописных справочников и документов - там все ок. Включал и кодом и через ИР.
|
|||
4
timurhv
30.06.25
✎
23:48
|
(0) Что за метод такой, еще и с пробелами в кавычках? "Получить метаданные()"
Откуда выводы что из-за вызова непонятного метода - ошибки в версионировании платформы 1С? >Метод "ОбновитьИсторию()" запускал, не помогает. Так он вроде финализирует запись изменений реквизитов в основную таблицу версионирования, в пользовательском режиме никак это не видно, как будто и не произошло. По теме - больше похоже на проблемы расширения и все версионирование накручено там. |
|||
5
timurhv
30.06.25
✎
23:54
|
(1) Версионирование БСП работает раз так в 100 медленнее.
Условно документ без версионирования проводится 0.1 сек, с БСП = 1.3 сек, с платформенным версионированием 0.12 сек Но есть проблемы в части сокращения объемов версионирования данных, которые сделаны платформой. В части БСП это делается намного проще, т.к. хранит весь слепок если было изменение. Если не было - только хеш. В платформе 1С хранит изменение конкретного реквизита (ов), либо строк ТЧ без контроля их перемещения номеров, полного слепка нет, нужно все отслеживать от первого слепка. |
|||
6
sdemon72
01.07.25
✎
09:29
|
(4)> Что за метод такой, еще и с пробелами в кавычках? "Получить метаданные()"
ИсторияДанных.ПолучитьМетаданные(). Прошу прощения за неточность. >Откуда выводы что из-за вызова непонятного метода - ошибки в версионировании платформы 1С? Не "из-за", а является индикатором, что что-то не так с таблицей _DataHistoryMetadata. История данных "не видит" метаданные объекта и, соответственно, не пишет по ним данные. >Так он вроде финализирует запись Да, в т.ч. информацию по структуре метаданных. Вот тут написано подробно: https://kostyanetsky.ru/notes/metadata-not-found/ >больше похоже на проблемы расширения В первую очередь об этом подумал и удалил все расширения - не помогло. |
|||
7
sdemon72
01.07.25
✎
09:31
|
Хочу поковырять таблицы СУБД. Кто-то знает, как декодировать информацию в полях "_Content"?
|
|||
8
sdemon72
01.07.25
✎
10:54
|
Так, вроде нашел причину. В таблице "_DataHistoryMetadata" обнаружил следующее (отобрано по нужному объекту МД, и это после сброса, т.е. по факту, отключения настроек истории):
_metadataid | _issettings | _isactual | _metadataversionnumber ------------------------------------+-------------+-----------+------------------------ \x9df11f1fa836fabf4e63247590d31026 | t | t | 1 \x9df11f1fa836fabf4e63247590d31026 | t | t | 2 \x9df11f1fa836fabf4e63247590d31026 | t | t | 3 \x9df11f1fa836fabf4e63247590d31026 | t | t | 4 Баг с неудалением строк этой таблицы при отключении истории был упомянут здесь: https://infostart.ru/1c/articles/1803149/ Но обратите внимание, все версии метаданных помечены, как актуальные (в статье на скриншоте такого не было). Скорее всего, дело именно в этом. Сейчас в песочнице просто очистил эту таблицу (после сброса всех настроек истории), и включил историю заново, и все заработало корректно. Сейчас восстановлю еще раз копию продуктива и попробую сбросить лишние флаги актуальности... |
|||
9
sdemon72
01.07.25
✎
16:28
|
Сбросил лишние флаги - помогло, но отчасти. Новая версия метаданных сохранилась "правильная", и новые события пишутся в историю корректно. А вот старые версии данных остались "голыми". Но, оказывается, это поправимо - после замены значения поля "_Content" в таблице "_DataHistoryMetadata" значением из последней версии, предыдущие версии данных также стали открываться корректно. Понимаю, что решение не идеальное, но в моем случае сойдет.
Запрос для сброса лишних флагов (исправляет все обнаруженные случаи, это не выглядит опасным): UPDATE _datahistorymetadata AS dh SET _isactual = false WHERE _isactual AND EXISTS ( SELECT 1 FROM ( SELECT _metadataid, MAX(_metadataversionnumber) AS maxnumber FROM _datahistorymetadata GROUP BY _metadataid ) AS t WHERE t._metadataid = dh._metadataid AND dh._metadataversionnumber < t.maxnumber ); Запрос для перезаписи истории метаданных (только для выбранного объекта метаданных): WITH last_versions AS ( SELECT DISTINCT ON (_metadataid) _metadataid, _metadataversionnumber, _content FROM _datahistorymetadata WHERE _metadataid = decode('9df11f1fa836fabf4e63247590d31026', 'hex') ORDER BY _metadataid, _metadataversionnumber DESC ) UPDATE _datahistorymetadata AS dh SET _content = lv._content FROM last_versions AS lv WHERE dh._metadataid = lv._metadataid AND dh._metadataversionnumber < lv._metadataversionnumber; СУБД PostgreSQL, с запросами помог ИИ, за что ему спасибочки. Но проблема флагов актуальности повторяется именно на этом объекте метаданных после выключения и включения истории (на этом объекте). На других объектах не воспроизводится. Причины пока остались непонятны, ну хот как лечить теперь знаю, не так уж часто там настройки будут меняться. |
|||
10
sdemon72
01.07.25
✎
16:31
|
А, да. Как узнать ИД метаданных. Через выгрузку конфигурации в файлы, вот тут написано, как: https://infostart.ru/1c/articles/1168375/
На этом всем спасибо, если у кого появится подобный опыт, буду благодарен за информацию. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |