Работа с классическими системами на платформе 1С:Предприятие 7.7, особенно в связке с MS SQL Server, требует глубокого понимания внутренних механизмов хранения данных. Одной из самых неприятных и труднообъяснимых проблем является внезапное исчезновение отборов в журналах документов по общим реквизитам. Чаще всего это происходит после, казалось бы, безобидных манипуляций в Конфигураторе, таких как добавление нового счета в План счетов. В данной статье мы подробно разберем, почему это происходит, как устроена таблица отборов и какими методами можно восстановить работоспособность системы.
Для начала проанализируем ситуацию: в базе объемом около 12 Гб, существующей более 10 лет, после добавления счета через Конфигуратор пропадают отборы по всем общим реквизитам. При этом физически документы в базе присутствуют, но функции поиска и фильтрации в журналах перестают выдавать результаты.
Выясним причину такого поведения. В 1С 7.7 для SQL-версий механизмы отбора и сортировки по общим реквизитам реализованы не через прямые индексы таблиц документов, а через специальную вспомогательную таблицу _1SCrdoc (Criteria Documents). Эта таблица служит своего рода общим индексом для всех документов, у которых включено свойство «Отбор» или «Сортировка» для общих реквизитов или граф отбора. Когда мы записываем документ, система автоматически дублирует значения соответствующих реквизитов в _1SCrdoc.
Рассмотрим, что происходит при изменении метаданных. Добавление «предопределенного» счета в Конфигураторе инициирует процесс реструктуризации. В этот момент 1С обновляет описание структуры в файле 1cv7.dds и пытается синхронизировать SQL-таблицы. На больших базах (как в нашем примере — 12 Гб) этот процесс крайне чувствителен к любым микросбоям, таймаутам SQL-сервера или логическим ошибкам в самом файле 1cv7.md. Если в процессе обновления метаданных связь между документами и таблицей _1SCrdoc нарушается, отборы «ломаются».
Самый простой и эффективный способ избежать проблем с реструктуризацией на критически больших или старых базах — это минимизация изменений метаданных. Рассмотрим подход, который применил автор темы для успешного решения задачи. Вместо создания счета в Конфигураторе, мы можем добавить его непосредственно в режиме «1С:Предприятие».
Проанализируем преимущества этого метода:
_1SACC, что происходит мгновенно и безопасно.Важный нюанс: Этот метод подходит только для объектов, которые позволяют пользовательское создание (счета, элементы справочников). Если же требуется добавить новый реквизит документа, этот способ не сработает.
Если отборы уже пропали, это сигнализирует о скрытых повреждениях в структуре 1cv7.md. Даже если штатный MDDoctor не находит ошибок, проблема может скрываться в нарушении внутренней нумерации идентификаторов. Разберем шаги по глубокой очистке конфигурации:
Метод «Объединение с самим собой»:
Попробуем выполнить процедуру объединения конфигураций, выбрав в качестве файла-источника тот же самый 1cv7.md, с которым мы работаем. Это заставляет 1С пересчитать внутренние ссылки и может помочь восстановить логическую структуру.
Использование утилиты GComp:
Рассмотрим более радикальный, но эффективный метод. Сторонняя утилита GComp позволяет декомпилировать MD-файл в набор текстовых файлов и собрать его обратно. Посмотрим на алгоритм действий:
Этот процесс часто «лечит» те ошибки, которые игнорируются штатными средствами тестирования.
Если мы уверены, что структура MD-файла в порядке, но данные в _1SCrdoc повреждены или отсутствуют, нам придется прибегнуть к инструментам SQL Server Management Studio (SSMS). Выясним, как заставить систему полностью перестроить индексы отборов.
Иногда помогает полная очистка таблицы _1SCrdoc. Рассмотрим пример SQL-запроса для этой операции (обязательно сделайте полную копию базы перед выполнением!):
-- Очистка таблицы критериев отбора
TRUNCATE TABLE _1SCrdoc;
После выполнения этой команды таблица станет пустой, и отборы пропадут окончательно. Однако это позволит нам запустить процедуру «Тестирование и исправление» в Конфигураторе. Выберем следующие пункты:
В процессе ТиИ 1С увидит, что таблица _1SCrdoc пуста, и начнет заполнять её заново, последовательно обходя все документы. Для базы в 12 Гб этот процесс может занять много времени (более 7-10 часов), но это единственный способ гарантированно синхронизировать данные документов с таблицей отборов.
Чтобы в будущем не сталкиваться с подобными ситуациями, проанализируем рекомендации по обслуживанию высоконагруженных систем 1С 7.7 на SQL:
_1SCrdoc, что и провоцирует рассинхронизацию.Таким образом, мы выяснили, что проблема исчезновения отборов чаще всего связана с повреждением вспомогательной таблицы _1SCrdoc или скрытыми дефектами MD-файла. Используя приведенные выше методы — от мягкого добавления объектов в «Предприятии» до жесткой пересборки структуры через GComp или SQL-запросы — вы сможете восстановить работу даже самой запущенной базы.