В процессе длительной разработки и многократного объединения конфигураций в 1С 7.7 разработчики часто сталкиваются с накоплением скрытого «мусора» в файле метаданных 1Cv7.MD. Это проявляется в виде постоянных ложных сообщений об изменении диалогов форм при сравнении конфигураций, ошибок утилит проверки целостности метаданных (например, MDDiags сообщает: «Размер потока не соответствует заявленному»), а также появления зависших временных таблиц в базе данных SQL. Разберем подробно внутреннее устройство файла конфигурации, причины возникновения этих проблем и пошаговые методы их устранения.
Файл конфигурации 1Cv7.MD представляет собой структурированное OLE-хранилище (формат Compound File). Ошибка «Размер потока не соответствует заявленному» в потоках Dialog Stream и постоянные ложные срабатывания при сравнении возникают по следующим причинам:
WorkBook. В потоке остаются так называемые хвостовые байты (trailing bytes) от удаленных реквизитов и слоев.Проанализируем практические методы восстановления корректной структуры форм и удаления мусорных данных из 1Cv7.MD.
Самый простой и безопасный способ заставить платформу пересчитать заголовок и тело потока Dialog Stream:
Если ручная правка не помогает или поврежденных форм слишком много, разберем конфигурацию на исходные текстовые файлы с помощью утилиты GComp:
correct_dlg.pl), который выравнивает координаты контролов, очищает лишние пробелы и приводит структуры к единому виду.GComp создает новое чистое OLE-хранилище без фрагментации и мусорных секторов.Удаление объектов в 1С 7.7 не уменьшает физический размер файла 1Cv7.MD, так как OLE-контейнер не освобождает секторы автоматически. Чтобы очистить контейнер, выполним пересохранение:
1Cv7.MD существенно уменьшается, а внутренние таблицы словаря метаданных перестраиваются.При анализе структуры СУБД в разных базах можно заметить две особенности: разные числовые префиксы (например, SC100 в одной базе и SC200 в другой) и наличие таблиц вида SC70_NEW, DT38204_NEW.
Разберем природу этих явлений:
SC — справочник, DH/DT — шапка и табличная часть документа, RG/RA — регистры) и внутреннего уникального ID объекта. Если справочник создавался в базах независимо, его внутренний ID будет отличаться. Попытка накатить метаданные прямой загрузкой из другой базы при несовпадении ID приведет к потере данных, так как платформа попытается удалить старую таблицу и создать пустую с новым ID. Для выравнивания структуры между разными базами данные переносят через правила конвертации или внешние обработки выгрузки/загрузки._NEW: эти таблицы представляют собой следы аварийно завершенной реструктуризации. При изменении структуры метаданных 1С 7.7 создает временную таблицу с постфиксом _NEW, копирует туда данные с преобразованием типов, удаляет старую таблицу и переименовывает временную. Если в процессе сохранения произошел сбой (отключение питания, зависание процесса, разрыв сети), временная таблица остается в базе.Перед удалением временных таблиц необходимо убедиться, что они действительно являются мусорными, а не содержат единственную копию актуальных данных после сбоя переименования.
Проанализируем состояние таблиц следующим SQL-запросом:
-- Поиск всех временных таблиц реструктуризации в базе
SELECT
t.name AS TableName,
p.rows AS TotalRows
FROM sys.tables t
INNER JOIN sys.partitions p ON t.object_id = p.object_id
WHERE t.name LIKE '%_NEW' AND p.index_id IN (0, 1)
ORDER BY t.name;
Выполним проверку по шагам:
SC70) и временной (SC70_NEW). Если основная таблица существует и содержит актуальные данные, а в таблице _NEW данных нет или они дублируются, временную таблицу можно безопасно удалить._NEW, необходимо вручную переименовать _NEW в имя основной таблицы._NEW запустим Конфигуратор в монопольном режиме и выполним полное Тестирование и исправление информационной базы с проверкой физической целостности и реиндексацией.