Что делать, если в 1С 7.7 на SQL пропали отборы документов после изменения плана счетов?

Программист 1С v7.7 Бухгалтерский учет
← На главную

Работа с классическими системами на платформе 1С:Предприятие 7.7, особенно в связке с MS SQL Server, требует глубокого понимания внутренних механизмов хранения данных. Одной из самых неприятных и труднообъяснимых проблем является внезапное исчезновение отборов в журналах документов по общим реквизитам. Чаще всего это происходит после, казалось бы, безобидных манипуляций в Конфигураторе, таких как добавление нового счета в План счетов. В данной статье мы подробно разберем, почему это происходит, как устроена таблица отборов и какими методами можно восстановить работоспособность системы.

Суть проблемы и механизм работы отборов в SQL-версии 7.7

Для начала проанализируем ситуацию: в базе объемом около 12 Гб, существующей более 10 лет, после добавления счета через Конфигуратор пропадают отборы по всем общим реквизитам. При этом физически документы в базе присутствуют, но функции поиска и фильтрации в журналах перестают выдавать результаты.

Выясним причину такого поведения. В 1С 7.7 для SQL-версий механизмы отбора и сортировки по общим реквизитам реализованы не через прямые индексы таблиц документов, а через специальную вспомогательную таблицу _1SCrdoc (Criteria Documents). Эта таблица служит своего рода общим индексом для всех документов, у которых включено свойство «Отбор» или «Сортировка» для общих реквизитов или граф отбора. Когда мы записываем документ, система автоматически дублирует значения соответствующих реквизитов в _1SCrdoc.

Рассмотрим, что происходит при изменении метаданных. Добавление «предопределенного» счета в Конфигураторе инициирует процесс реструктуризации. В этот момент 1С обновляет описание структуры в файле 1cv7.dds и пытается синхронизировать SQL-таблицы. На больших базах (как в нашем примере — 12 Гб) этот процесс крайне чувствителен к любым микросбоям, таймаутам SQL-сервера или логическим ошибкам в самом файле 1cv7.md. Если в процессе обновления метаданных связь между документами и таблицей _1SCrdoc нарушается, отборы «ломаются».

Решение 1: Безопасное добавление объектов в режиме «Предприятие»

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

Проанализируем преимущества этого метода:

  1. Отсутствие Alter Table: SQL-серверу не требуется изменять структуру таблиц или перестраивать системные индексы.
  2. Сохранение целостности _1SCrdoc: Поскольку структура базы не меняется, вспомогательная таблица отборов не затрагивается.
  3. Стабильность: Для системы это обычная операция добавления записи в таблицу _1SACC, что происходит мгновенно и безопасно.

Важный нюанс: Этот метод подходит только для объектов, которые позволяют пользовательское создание (счета, элементы справочников). Если же требуется добавить новый реквизит документа, этот способ не сработает.

Решение 2: Диагностика и лечение файла метаданных (MD)

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

Метод «Объединение с самим собой»: Попробуем выполнить процедуру объединения конфигураций, выбрав в качестве файла-источника тот же самый 1cv7.md, с которым мы работаем. Это заставляет 1С пересчитать внутренние ссылки и может помочь восстановить логическую структуру.

Использование утилиты GComp: Рассмотрим более радикальный, но эффективный метод. Сторонняя утилита GComp позволяет декомпилировать MD-файл в набор текстовых файлов и собрать его обратно. Посмотрим на алгоритм действий:

  1. Разбираем MD-файл на исходные тексты.
  2. Внимательно изучаем структуру (на этом этапе часто выявляются «хвосты» от удаленных объектов).
  3. Собираем MD-файл заново.
  4. Заменяем старый файл в каталоге базы и проводим реструктуризацию в монопольном режиме.

Этот процесс часто «лечит» те ошибки, которые игнорируются штатными средствами тестирования.

Решение 3: Восстановление таблицы _1SCrdoc на уровне SQL

Если мы уверены, что структура MD-файла в порядке, но данные в _1SCrdoc повреждены или отсутствуют, нам придется прибегнуть к инструментам SQL Server Management Studio (SSMS). Выясним, как заставить систему полностью перестроить индексы отборов.

Иногда помогает полная очистка таблицы _1SCrdoc. Рассмотрим пример SQL-запроса для этой операции (обязательно сделайте полную копию базы перед выполнением!):


-- Очистка таблицы критериев отбора
TRUNCATE TABLE _1SCrdoc;

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

В процессе ТиИ 1С увидит, что таблица _1SCrdoc пуста, и начнет заполнять её заново, последовательно обходя все документы. Для базы в 12 Гб этот процесс может занять много времени (более 7-10 часов), но это единственный способ гарантированно синхронизировать данные документов с таблицей отборов.

Профилактика проблем на больших базах 7.7

Чтобы в будущем не сталкиваться с подобными ситуациями, проанализируем рекомендации по обслуживанию высоконагруженных систем 1С 7.7 на SQL:

  1. Регулярная проверка MD: Периодически создавайте пустую базу из вашего MD-файла. Если при загрузке или первом входе возникают ошибки — ваш файл метаданных нестабилен.
  2. Мониторинг места: Несмотря на то что 12 Гб — это немного для SQL 2008, помните, что временные таблицы при реструктуризации могут требовать в 2-3 раза больше места, чем занимает сама база.
  3. Монопольный режим: Любые изменения метаданных проводите только после создания бэкапа и в монопольном режиме, предварительно убедившись, что все сессии SQL-пользователей завершены корректно.
  4. Обновление статистики: Не забывайте регламентно обновлять статистику в SQL Server, так как некорректные планы запросов могут приводить к таймаутам во время записи в _1SCrdoc, что и провоцирует рассинхронизацию.

Таким образом, мы выяснили, что проблема исчезновения отборов чаще всего связана с повреждением вспомогательной таблицы _1SCrdoc или скрытыми дефектами MD-файла. Используя приведенные выше методы — от мягкого добавления объектов в «Предприятии» до жесткой пересборки структуры через GComp или SQL-запросы — вы сможете восстановить работу даже самой запущенной базы.

← На главную