Процесс реструктуризации базы данных в 1С:Предприятии 7.7 — это критическая операция, особенно на крупных информационных базах. Часто возникают ситуации, когда процесс запускается неосторожно (например, при добавлении субконто на счете с большим количеством движений) или прерывается из-за внешних факторов (отключение питания, сбой сети или принудительное завершение работы пользователем). Рассмотрим детально, как устроена эта процедура, и что можно предпринять в случае ее «зависания» или срыва.
Проанализируем, как 1С 7.7 управляет изменениями. Когда мы вносим изменения в метаданные (файл 1cv7.md) и сохраняем их, система должна привести физическую структуру таблиц (DBF или SQL) в соответствие с новой логикой. Для управления этим процессом платформа создает в корневом каталоге базы данных служебный файл 1SRECALC.CMD.
Этот файл является своего рода сценарием или «чек-листом». В нем построчно записаны операции, которые Конфигуратор должен выполнить: перестроение таблиц, создание индексов, пересчет бухгалтерских итогов или обновление ссылок. Если процесс прерывается, то при следующем запуске Конфигуратор видит наличие 1SRECALC.CMD и автоматически возобновляет работу с того этапа, на котором остановился. Именно поэтому просто перезапустить программу и «отменить» изменения обычно не получается.
Если реструктуризация зациклилась или выполняется недопустимо долго, существует радикальный способ — удаление управляющего файла. Выясним, к чему это может привести. Как отмечалось в обсуждении, основным виновником автозапуска является 1SRECALC.CMD. Его удаление позволит зайти в Конфигуратор, но это несет серьезные риски Metadata Mismatch (несоответствие метаданных структуре таблиц).
Важные последствия:
1cv7.md остался в промежуточном состоянии, база может перестать открываться или начнет выдавать ошибки при обращении к измененным счетам.NEW_STRU. В него 1С копирует новые структуры файлов перед тем, как заменить ими оригиналы. Если процесс был прерван на середине, часть данных может остаться в основной папке, а часть — в NEW_STRU.Для минимизации рисков после удаления 1SRECALC.CMD крайне желательно выполнить процедуру «Загрузить измененную конфигурацию» (MD в MD), чтобы синхронизировать описание объектов со словарем данных 1cv7.dds.
Проанализируем ситуацию, когда реструктуризация «зависает» на этапе пересчета перекрестных ссылок (таблица _1SRCDOC). Это часто происходит в базах с огромным количеством документов. Система пытается проверить каждую ссылку, что может занять десятки часов. В этом случае можно применить следующую хитрость:
Разберем последовательность действий:
_1SRCDOC._1SRCDOC в штатном режиме без блокировки работы всей системы.Иногда быстрее выполнить изменения «руками», чем ждать штатную реструктуризацию. Посмотрим на алгоритм, предложенный специалистами:
// Примерный алгоритм подмены метаданных:
1. Создаем пустую базу с нужной структурой (добавленными субконто).
2. Сохраняем её, получаем новые файлы 1cv7.md и 1cv7.dds.
3. В рабочей базе через SQL-команду 'ALTER TABLE' добавляем нужные колонки в таблицы итогов и проводок.
4. Подменяем MD и DDS файлы в рабочей базе на новые.
Этот метод требует глубокого понимания структуры таблиц 1С (например, _1SENTRY для проводок и _1SBKTTL для итогов). Он позволяет избежать длительного процесса переливания данных из старых таблиц во временные, который 1С выполняет автоматически.
Выясним причину, по которой реструктуризация может начать пересчет итогов с крайне древних дат, таких как 1753 или 1796 год. В MS SQL Server минимально возможная дата — 01.01.1753. Если в базе данных 1С есть записи с «пустыми» или поврежденными датами, механизм пересчета бухгалтерских итогов интерпретирует их как минимальные значения. В результате система пытается рассчитать итоги за сотни лет, что и вызывает бесконечное ожидание. Если вы видите такое поведение, это признак того, что перед реструктуризацией следовало выполнить проверку логической целостности данных.
Подводя итог, проанализируем лучший порядок действий при сбое:
Помните, что 1С 7.7 не гарантирует атомарность всей реструктуризации в рамках одной транзакции, поэтому любое прерывание процесса переводит базу в состояние «неопределенности», требующее ручного контроля файлов 1SRECALC.CMD и 1cv7.dds.