При работе с распределенными информационными базами (УРБД) в «1С:Предприятие 7.7» администраторы часто сталкиваются со следующей проблемой. В центральной базе (ЦБ) вносятся незначительные изменения в конфигурацию (например, добавляется реквизит справочника или правится модуль). В это же время на периферийных точках (ПБ) пользователи продолжают активно работать и выгружают файлы обмена. Когда эти файлы приходят в центральную базу, штатный механизм загрузки блокирует операцию, выдавая ошибку о том, что конфигурация была изменена и сначала необходимо обновить конфигурацию на периферийной базе.
Что делать, если периферийная точка в данный момент недоступна, а данные из нее необходимо загрузить в ЦБ прямо сейчас? В этой статье мы подробно разберем, как устроен механизм регистрации изменений метаданных в УРБД, и рассмотрим три проверенных способа обхода этой ошибки: от точечного редактирования базы данных до корректировки файлов обмена.
Прежде чем переходить к практическим действиям, проанализируем ситуацию и поймем, как «1С 7.7» определяет, что конфигурации баз различаются. В системе УРБД за регистрацию всех изменений отвечает специальная таблица регистрации изменений — 1SUPDTS (в DBF-версии это файл 1SUPDTS.dbf, а в SQL-версии — таблица _1SUPDTS).
Когда вы сохраняете изменения в Конфигураторе центральной базы, система автоматически делает записи в эту таблицу для каждой из существующих периферийных баз. Эти записи указывают, какие именно объекты метаданных были изменены. Ключевым признаком изменения самой структуры конфигурации (файла метаданных 1Cv7.md) является запись, у которой идентификатор объекта равен пустому значению.
Если периферийная база присылает свой пакет данных, а в ЦБ для этой базы числится незакрытый (непереданный) флаг изменения метаданных, система блокирует загрузку во избежание нарушения логической целостности. Наша задача — временно «обмануть» систему, показав ей, что конфигурации ЦБ и ПБ идентичны.
Важное предупреждение: Описанные ниже методы безопасны только в том случае, если изменения в конфигурации ЦБ были неструктурными (например, добавлены текстовые модули, печатные формы или несущественные реквизиты, не влияющие на существующие данные). Если вы удалили реквизиты, изменили типы данных или структуру регистров, ручной обход блокировки может привести к необратимому разрушению базы данных!
Это наиболее быстрый и надежный способ решения проблемы, который не требует распаковки и изменения самих файлов обмена. Мы удалим флаг изменения конфигурации непосредственно из базы данных ЦБ.
Рассмотрим пошагово, как это сделать:
Вариант А: Для файловой базы (DBF)
Нам понадобится любой специализированный DBF-редактор (например, DBF Commander, DBF Navigator или аналогичный). Использовать Microsoft Excel категорически запрещено, так как он повреждает структуру заголовков файлов DBF при сохранении.
1SUPDTS.dbf, расположенный в каталоге базы данных ЦБ.DBSIGN содержится трехсимвольный код вашей проблемной периферийной базы.OBJID значение является пустым (в формате DBF пустое значение представляет собой строку из 9 пробелов: " ").Вариант Б: Для клиент-серверной базы (MS SQL)
Если ваша база развернута на MS SQL Server, задача упрощается. Нам не нужно монопольно блокировать файлы, достаточно выполнить один точечный SQL-запрос через SQL Server Management Studio (SSMS).
-- Замените 'ПБ1' на трехсимвольный код вашей периферийной базы
DELETE FROM _1SUPDTS
WHERE DBSIGN = 'ПБ1'
AND OBJID = ' ';
После удаления строк запускаем 1С:Предприятие в режиме «Монитор» или обычном режиме и выполняем загрузку файла обмена из ПБ. Система больше не увидит препятствий и успешно загрузит все документы и справочники.
Если вы по каким-то причинам опасаетесь напрямую редактировать таблицы базы данных, мы можем пойти другим путем — скорректировать номера транзакций в самом пришедшем из периферии файле обмена.
В основе контроля версий УРБД лежит сверка номеров отправленных и полученных пакетов. Если ПБ присылает файл обмена, где номер подтверждения принятой конфигурации меньше, чем текущий актуальный номер версии конфигурации в ЦБ, возникает блокировка. Мы можем вручную «подделать» это подтверждение в файле обмена.
Разберем этот метод по шагам:
CP*.zip или аналогичным) и извлеките из него небольшой текстовый файл 1Cv77Dld.id.{"Download ID", "GUID", "Код_ПБ", "GUID", "Код_ЦБ", "GUID", "N|Код_ПБ"}
N — это число, обозначающее номер последней транзакции выгрузки из ЦБ. Запомните это число (допустим, это число 12).
1Cv77Chs.dat.Acknowledgements. Там будет строка вида:
{"M|Код_ЦБ"}
M — это номер версии конфигурации, которую «видит» периферийная база. Это число гарантированно будет меньше нашего числа N (например, там будет стоять 11).
M на число N (в нашем примере меняем 11 на 12). Таким образом, мы сообщаем центральной базе, что периферия якобы уже «знает» о новой конфигурации.1Cv77Chs.dat и запакуйте его обратно в ZIP-архив обмена ПБ.Бывают ситуации, когда обмен заходит в полный тупик: базы рассинхронизировались настолько, что восстановить стандартный обмен стандартными средствами невозможно, а работать нужно срочно. В таком случае распределенную базу данных можно деинициализировать — превратить ее в обычную локальную базу. Это снимет любые ограничения на изменение конфигурации и загрузку сторонних данных.
Проанализируем процесс деинициализации базы данных:
1SDBSET.DBF и его индекс 1SDBSET.CDX (хранят список информационных баз, участвующих в обмене).1SDWNLDS.DBF и его индекс 1SDWNLDS.CDX (история загрузок и выгрузок пакетов).1SUPDTS.DBF и его индекс 1SUPDTS.CDX (таблица регистрации изменений).1SSYSTEM.DBF с помощью DBF-редактора.DBSETUUID. В распределенной базе это поле заполнено длинным 36-значным уникальным идентификатором GUID.1SSYSTEM.DBF.После проведения этой процедуры база становится полностью независимой. При необходимости вы можете заново настроить УРБД и создать новые периферийные базы, если это потребуется в будущем.
Мы подробно рассмотрели особенности работы с компонентой УРБД в «1С 7.7» и изучили три эффективных метода решения проблемы с блокировкой загрузки из-за модификации метаданных. Подведем итоги:
1SUPDTS — самый быстрый и изящный способ, не требующий лишних манипуляций с файлами обмена.Всегда помните золотое правило администратора 1С: перед выполнением любых низкоуровневых операций с базами данных обязательно делайте полную резервную копию!