При работе с компонентой «Управление распределенными информационными базами» (УРБД) в среде 1С:Предприятие 7.7 (например, в конфигурации «Торговля и Склад 7.7») администраторы и разработчики нередко сталкиваются с ситуацией: значение константы изменено в центральной базе (ЦБ), обмен прошел без видимых ошибок, однако в периферийной информационной базе (ПБ) значение константы остается прежним. Попытки решить проблему «в лоб» через прямое копирование файлов баз данных DBF могут привести к необратимому повреждению данных. Разберем детально внутреннее устройство хранения констант, выясним причины сбоя миграции и рассмотрим безопасные способы восстановления корректного обмена.
Для понимания причин сбоя проанализируем, как платформа 1С 7.7 хранит константы и как механизм УРБД отслеживает их модификацию:
1SCONST.DBF: В 1С 7.7 абсолютно все константы (как простые, так и периодические), а также периодические реквизиты всех справочников и длинные строковые значения (неограниченной длины) хранятся в единой таблице 1SCONST.DBF. Для непериодических констант в поле OBJID устанавливается значение 0, поле ID содержит внутренний идентификатор метаданных константы, а в поле DATE записывается фиксированная дата (1753-01-01). Для периодических констант и реквизитов каждая запись содержит реальную дату вступления значения в силу.1SUPDTS.DBF: Механизм УРБД фиксирует любые изменения объектов через таблицу регистрации изменений. Когда пользователь штатно изменяет значение константы в режиме «1С:Предприятие», ядро системы формирует запись в 1SUPDTS.DBF с кодом объекта и кодом узла-получателя. При выгрузке данных эти записи считываются, упаковываются в архив обмена, после чего отметка об изменении очищается.1SCONST.DBF вручную?Иногда возникает соблазн скопировать файл 1SCONST.DBF из центральной базы в периферийную напрямую. Делать это на рабочей базе категорически запрещено по следующим причинам:
1SCONST.DBF содержит десятки тысяч строк с историей цен, курсов валют, периодических реквизитов договоров и контрагентов. Если на удаленной точке вводились документы или менялись локальные периодические реквизиты, прямая замена файла сотрет всю локальную историю и приведет к расхождению итогов и регистров.OBJID). При рассинхронизации ссылок подмена файла приведет к тому, что реквизиты одних элементов справочников отобразятся у совершенно других.Выясним основные факторы, блокирующие передачу значений констант:
Не мигрирует или Место создания и центральная база, изменения из центра на периферию передаваться не будут.<Объект не найден>.1SUPDTS.DBF, и пакет обмена сформирован пустым.Разберем последовательность действий для гарантированной передачи констант на удаленные узлы.
Откроем конфигурацию в режиме Конфигуратор и выполним следующие действия:
Чтобы заставить платформу повторно зарегистрировать константу в таблице 1SUPDTS.DBF, выполним ее перезапись штатным способом через внешнюю обработку или встроенный язык.
Для непериодической константы используем следующий код:
// Принудительная перезапись для регистрации изменений в УРБД
ТекЗнач = Константа.ПрефиксАвтонумерации;
Константа.ПрефиксАвтонумерации = ТекЗнач;
Предупреждение("Константа успешно перезаписана для регистрации в УРБД!");
Для периодической константы обязательно передаем целевую дату:
// Перезапись периодической константы на нужную дату
РабочаяДата = ТекущаяДата();
ЗначениеКонстанты = Константа.ОсновнаяФирма.Получить(РабочаяДата);
Константа.ОсновнаяФирма.Установить(РабочаяДата, ЗначениеКонстанты);
Сообщить("Периодическая константа зарегистрирована на дату: " + Строка(РабочаяДата));
Проанализируем файл обмена, чтобы убедиться, что данные физически включены в выгрузку:
Если константа по-прежнему не выгружается, возможно повреждение индексных файлов таблицы регистрации изменений. Выполним профилактику:
Конфигуратор и откроем пункт меню Администрирование -> Тестирование и исправление ИБ.