При сопровождении баз данных на платформе 1С:Предприятие 7.7 (SQL-версия) нередко возникает задача развертывания тестовой копии из рабочей среды. Типичная ситуация: разработчик создает новый вид документа параллельно в рабочей и тестовой базах, после чего делает дамп рабочей базы в Microsoft SQL Server Management Studio (SSMS) и восстанавливает его поверх тестовой СУБД. Однако после запуска тестовой базы новые документы полностью отсутствуют в журналах, хотя в рабочей базе они существуют и заполнены данными.
Разберем детально, почему платформа ведет себя подобным образом, как устроена физическая структура хранения документов в MS SQL и как правильно восстановить тестовую базу без риска повредить боевые данные.
Проанализируем внутренние механизмы платформы 1С 7.7. В отличие от более поздних версий платформы, где метаданные и данные хранятся неразрывно внутри единой базы СУБД, в 1С 7.7 конфигурация хранится в файле каталога информационной базы — 1cv7.md, а структура таблиц описана в файле словаря 1cv7.dds.
Когда мы создаем любой новый объект метаданных (документ, справочник, реквизит), платформа автоматически генерирует для него внутренний уникальный идентификатор — ID (в 36-ричной системе счисления):
ID: таблица шапки документа получает имя DH<ID>, таблица табличной части — DT<ID>, а в общем журнале документов _1SJOURN тип документа фиксируется в поле IDDOCDEF.Когда мы восстановили бэкап рабочей базы на тестовый SQL-сервер, таблицы в СУБД перезаписались и получили идентификаторы из рабочей базы. Но каталог тестовой базы на диске остался прежним: файл 1cv7.md тестовой базы ожидает совершенно другой ID документа. В результате платформа либо обращается к несуществующей таблице, либо не находит в журнале _1SJOURN записей с тем IDDOCDEF, который прописан в локальном 1cv7.md.
Для того чтобы тестовая база «увидела» восстановленные из SQL данные, необходимо привести файл конфигурации в строгое соответствие с загруженной структурой таблиц СУБД.
Разберем по шагам правильный алгоритм действий:
1cv7.md из каталога рабочей базы в каталог тестовой базы данных.1cv7.dds, однако при первом же сохранении конфигурации платформа перегенерирует его автоматически.usrdef.При копировании конфигурационных файлов или всего каталога информационной базы возникает серьезная опасность случайной модификации боевых данных. Настройки подключения к СУБД сохраняются в локальных служебных файлах (в частности, в файле 1cv7.cfg).
Если скопировать файлы и сразу запустить 1С в режиме «Предприятие», программа может подключиться не к тестовой базе SQL, а к рабочей. Пользователи или тестировщики начнут вносить изменения в боевую среду.
Чтобы избежать этой критической ошибки, выполним следующие действия:
1cv7.md с SQL-таблицами и сформирует корректный файл словаря 1cv7.dds.Чтобы в будущем не сталкиваться с несовпадением внутренних идентификаторов объектов, придерживаемся следующих правил:
1cv7.md при монопольном доступе. Только в этом случае внутренние идентификаторы ID документов и справочников в обеих базах останутся идентичными.ID, перенос следует выполнять не через дамп SQL-сервера, а специализированными средствами обмена: универсальными обработками выгрузки/загрузки через текстовые файлы/XML, конфигурацией «Конвертация данных» или через OLE-соединение (V77.Application).