Ситуация, когда после штатной процедуры Тестирования и исправления (ТиИ) документы в информационной базе остаются на месте, но полностью теряют свои движения в регистрах накопления, является критической. Особенно остро эта проблема проявилась в версиях платформы 8.3.12 и 8.3.13. Разберем детально причины этого поведения, проанализируем взаимосвязь с механизмом расширений и найдем надежные способы сохранения данных.
Проанализируем типичный лог ошибок, который выдает система при выполнении ТиИ в подобной ситуации:
ЖурналДокументов.ДокументыПоЗапасам: Обнаружена ссылка на несуществующий документ. Запись удалена.
РегистрНакопления.Закупки: Неверная ссылка на регистратор. Запись удалена.
На первый взгляд кажется, что база данных разрушена. Однако, если перепровести документы, движения восстанавливаются до следующего запуска ТиИ. Это сигнализирует о том, что проблема не в физическом отсутствии данных, а в логическом конфликте механизмов проверки целостности платформы и структуры таблиц, измененных через расширения.
Рассмотрим подробнее техническую сторону. Когда мы добавляем реквизиты или новые объекты через расширения конфигурации, платформа 1С изменяет структуру таблиц в СУБД. В определенных релизах платформы (в частности, 8.3.12.1685) алгоритм проверки логической целостности некорректно сопоставляет идентификаторы объектов (UUID) основной конфигурации и записи в регистрах, если эти объекты задействованы в расширении. Платформа «перестает видеть» связь между регистратором и набором записей, ошибочно помечая движения как «сиротские» и удаляя их.
Как показала практика и опыт участников обсуждения, наиболее стабильным решением является отказ от хранения данных в расширениях в пользу основной конфигурации. Рассмотрим этот метод по шагам:
Префикс_МойРеквизит).После переноса структурных изменений в основную базу процедура ТиИ перестанет воспринимать документы и их движения как ошибочные.
Проблема с удалением движений была признана багом платформы и исправлена в более поздних релизах. Если ваша инфраструктура позволяет, выполним следующие действия:
Если обновление платформы сейчас невозможно, а данные из расширений нельзя оперативно перенести в основную конфигурацию, проанализируем настройки самой процедуры ТиИ.
Основной вред в данной ситуации наносит этап «Проверка логической целостности» с установленным флагом «При наличии ссылок на несуществующие объекты: Удалять объект». Чтобы предотвратить потерю движений, при запуске тестирования следует:
Рассмотрим ситуацию с серверным вариантом базы (MS SQL или PostgreSQL). Иногда ошибки ТиИ могут быть вызваны «фантомными» записями в кэше сервера 1С или некорректным планом запроса в СУБД. Перед радикальными изменениями метаданных попробуем выполнить следующую последовательность действий:
Технологический цикл очистки:
.dt..dt обратно.Также стоит помнить, что в режиме совместимости 8.3.10 и ниже возможности расширений сильно ограничены. Попытки «обмануть» систему, подняв режим совместимости программно (через правку кода), как это делал автор темы, часто приводят к тому, что внутренние механизмы платформы (включая ТиИ) начинают работать непредсказуемо.
Для стабильной работы системы 1С с расширениями придерживаемся правила: «Данные — в основной конфигурации, логика — в расширении». Если вы столкнулись с удалением движений, первым делом проверьте версию платформы и попробуйте отключить проверку логической целостности в настройках ТиИ. Это сохранит ваши данные до момента перехода на исправленный релиз платформы или переноса метаданных в основной контур базы.