Работа с распределенными информационными базами (УРБД) в версии 1С 7.7 требует особого внимания к изменениям структуры метаданных. Типичная ситуация: программист увеличивает длину номера входящего документа (например, в «Поступлении ТМЦ»), после чего стандартная выгрузка в периферийную базу начинает «висеть» часами или даже днями. В этой статье мы подробно разберем, почему это происходит и как восстановить работоспособность системы, не дожидаясь бесконечного завершения процесса.
Проанализируем причину возникновения проблемы. Когда в центральной базе (ЦБ) меняется длина реквизита, система УРБД воспринимает это как глобальное изменение конфигурации. При первой же попытке обмена 1С выполняет две тяжелые операции:
1cv7.md в пакет обмена. В 1С 7.7 этот процесс однопоточный и крайне медленный, особенно при использовании больших конфигураций.ПоступлениеТМЦ) как измененные для всех периферийных узлов. Если в базе накоплены сотни тысяч накладных за несколько лет, таблица регистрации изменений разрастается до колоссальных размеров.Рассмотрим по шагам основные методы решения этой проблемы.
Если вы понимаете, что данных слишком много и они не обязательны для немедленной передачи, можно «обнулить» очередь выгрузки. Для этого нам нужно поработать с таблицей 1cupdts.dbf (или _1CUPDTS, если используется SQL-версия). Эта таблица хранит список всех объектов, которые должны уйти в периферийные базы.
Рассмотрим алгоритм действий для файловой версии базы:
1cupdts.dbf.Важно: После удаления этой таблицы система «забудет» обо всех объектах, которые стояли в очереди на выгрузку. Чтобы актуальные данные все же попали в периферийную базу, после успешного (и теперь уже быстрого) обмена необходимо зайти в центральную базу и перепровести (или просто перезаписать) последние документы. Это создаст новые записи в 1cupdts.dbf только для нужных нам объектов.
Для SQL-версии процедура проще и не требует удаления файлов. Достаточно выполнить SQL-запрос:
TRUNCATE TABLE _1CUPDTS;
Этот метод считается наиболее «чистым» и надежным, так как он исключает попытку передачи тяжелого файла конфигурации через пакеты обмена. Мы вручную приведем структуру периферийной базы (ПБ) к виду центральной базы.
Разберем последовательность действий:
1sdbset.dbf (настройки распределенной базы);1sdwnlds.dbf (информация о загруженных пакетах);1cupdts.dbf (регистрация изменений).ПоступлениеТМЦ точно так же, как это было сделано в ЦБ. Сохраняем изменения.1cv7.md из центральной базы и заменяем им файл в периферийной базе.DistManage.ert) или путем восстановления файлов настроек, если вы знаете, как правильно прописать в них идентификаторы узлов.1SSYSTEM.Выясним причину, по которой 1С понимает, что конфигурации различаются. Это происходит из-за несовпадения счетчиков в поле CURCONFIG таблицы 1SSYSTEM. Если в обеих базах установить одинаковое значение в этом поле, система решит, что обновления не требуются.
Если вы не хотите деинициализировать базу, можно попытаться «обмануть» механизм проверки конфигураций. Проанализируем этот сценарий:
1cv7.md из ЦБ в ПБ вручную.1cupdts.dbf, но имеют специфический тип объекта (обычно это запись с пустым ID или специфическим кодом типа)..zip или .cab) и вручную удалить из него секцию с метаданными или отредактировать заголовок пакета, указав, что конфигурация уже соответствует актуальной версии.Для более тонкой настройки обмена мы рекомендуем использовать специализированные обработки. Посмотрим на пример логики, которую можно реализовать для выборочной очистки регистрации:
// Пример логики для удаления регистрации конкретного типа документа
Процедура ОчиститьРегистрациюПоТипу(ИмяДокумента)
// В 1С 7.7 нет встроенного метода удаления из регистрации по типу
// Поэтому обычно используются внешние компоненты или прямой доступ к DBF
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл(КаталогИБ() + "1cupdts.dbf");
ДБФ.ВыбратьЗаписи();
Пока ДБФ.Следующая() = 1 Цикл
// TYPE - это внутренний ID типа метаданных
Если ДБФ.TYPE = НужныйТип Тогда
ДБФ.Удалить();
КонецЕсли;
КонецЦикла;
ДБФ.Сжать();
ДБФ.ЗакрытьФайл();
КонецПроцедуры
Обратите внимание: Прямая правка файлов .dbf возможна только при отсутствии активных сессий пользователей. Работа с 1CUPDTS напрямую — это мощный инструмент, но он требует понимания внутренней структуры метаданных (нужно знать числовой идентификатор типа документа ПоступлениеТМЦ в вашей конкретной конфигурации).
Чтобы избежать подобных ситуаций в будущем, придерживайтесь следующих правил:
SysLog\1cv7.jnl). Огромные логи могут замедлять работу конфигуратора при подготовке пакета.NEW_STRU. Если размер любой таблицы превысит 2 ГБ, произойдет «тихое» зависание из-за ограничений формата DBF.Подведем итог: если вы столкнулись с тем, что после изменения длины номера обмен «ушел в себя», не ждите чуда. Скорее всего, система пытается обработать сотни тысяч записей. Оптимальным решением будет либо очистка 1cupdts.dbf с последующим перепроведением только нужных документов, либо полная деинициализация периферийной базы с ручным обновлением MD-файла.