Почему Тестирование и исправление в 1С удаляет движения документов и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

Ситуация, когда после штатной процедуры Тестирования и исправления (ТиИ) документы в информационной базе остаются на месте, но полностью теряют свои движения в регистрах накопления, является критической. Особенно остро эта проблема проявилась в версиях платформы 8.3.12 и 8.3.13. Разберем детально причины этого поведения, проанализируем взаимосвязь с механизмом расширений и найдем надежные способы сохранения данных.

Выясняем причину: почему «Тестирование и исправление» считает движения ошибочными?

Проанализируем типичный лог ошибок, который выдает система при выполнении ТиИ в подобной ситуации:

ЖурналДокументов.ДокументыПоЗапасам: Обнаружена ссылка на несуществующий документ. Запись удалена.

РегистрНакопления.Закупки: Неверная ссылка на регистратор. Запись удалена.

На первый взгляд кажется, что база данных разрушена. Однако, если перепровести документы, движения восстанавливаются до следующего запуска ТиИ. Это сигнализирует о том, что проблема не в физическом отсутствии данных, а в логическом конфликте механизмов проверки целостности платформы и структуры таблиц, измененных через расширения.

Рассмотрим подробнее техническую сторону. Когда мы добавляем реквизиты или новые объекты через расширения конфигурации, платформа 1С изменяет структуру таблиц в СУБД. В определенных релизах платформы (в частности, 8.3.12.1685) алгоритм проверки логической целостности некорректно сопоставляет идентификаторы объектов (UUID) основной конфигурации и записи в регистрах, если эти объекты задействованы в расширении. Платформа «перестает видеть» связь между регистратором и набором записей, ошибочно помечая движения как «сиротские» и удаляя их.

Вариант решения №1: Разделение логики и структуры метаданных

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

  1. Анализ расширения: Проанализируем все объекты в расширении. Нас интересуют только те, которые влияют на структуру базы данных: новые реквизиты справочников/документов, новые регистры или добавление стандартных реквизитов в расширение с изменением свойств.
  2. Перенос метаданных: Создадим аналогичные реквизиты или объекты в основной конфигурации. Для удобства поддержки и будущих обновлений обязательно используем префиксы (например, Префикс_МойРеквизит).
  3. Сохранение кода в расширении: Весь программный код, формы и подписки на события мы можем оставить в расширении. Это позволит сохранить «чистоту» основной конфигурации в плане логики, но обеспечит стабильность хранения данных.
  4. Миграция данных: Если в расширении уже накоплены важные данные, перед удалением реквизитов из расширения необходимо написать обработку, которая перенесет значения из «расширенных» полей в новые поля основной конфигурации.

После переноса структурных изменений в основную базу процедура ТиИ перестанет воспринимать документы и их движения как ошибочные.

Вариант решения №2: Обновление платформы и изменение режима совместимости

Проблема с удалением движений была признана багом платформы и исправлена в более поздних релизах. Если ваша инфраструктура позволяет, выполним следующие действия:

Вариант решения №3: Выборочное тестирование и исправление

Если обновление платформы сейчас невозможно, а данные из расширений нельзя оперативно перенести в основную конфигурацию, проанализируем настройки самой процедуры ТиИ.

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

  1. Отключить проверку логической целостности.
  2. Использовать только «Реиндексацию таблиц» и «Пересчет итогов» — эти операции обычно безопасны для баз с расширениями.
  3. Если проверка целостности необходима, установите переключатель в положение «Создавать объекты» или «Очищать ссылку» (хотя последний вариант также может повредить движения, превратив регистратор в пустую ссылку).

Важные замечания по работе с расширениями и СУБД

Рассмотрим ситуацию с серверным вариантом базы (MS SQL или PostgreSQL). Иногда ошибки ТиИ могут быть вызваны «фантомными» записями в кэше сервера 1С или некорректным планом запроса в СУБД. Перед радикальными изменениями метаданных попробуем выполнить следующую последовательность действий:

Технологический цикл очистки:

  1. Выгрузим информационную базу в файл .dt.
  2. Удалим базу из кластера серверов 1С.
  3. Создадим новую пустую базу и загрузим .dt обратно.
  4. Попробуем выполнить ТиИ на копии в файловом режиме — если в файловом режиме движения не удаляются, значит проблема специфична для взаимодействия платформы с конкретной СУБД.

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

Резюме

Для стабильной работы системы 1С с расширениями придерживаемся правила: «Данные — в основной конфигурации, логика — в расширении». Если вы столкнулись с удалением движений, первым делом проверьте версию платформы и попробуйте отключить проверку логической целостности в настройках ТиИ. Это сохранит ваши данные до момента перехода на исправленный релиз платформы или переноса метаданных в основной контур базы.

← На главную