Настройка распределенной информационной базы (РИБ) в типовых конфигурациях «1С» обычно проходит быстро и безболезненно. Однако, как только в конфигурацию «1С:Управление торговлей 11» вносятся доработки — добавляются новые документы, справочники или регистры, — стандартный механизм обмена данными может начать выдавать труднообъяснимые ошибки. В этой статье мы подробно разберем, как правильно интегрировать нетиповые объекты в механизмы РИБ на базе Библиотеки стандартных подсистем (БСП), как бороться с ошибками файлового транспорта и как управлять статусом главного узла подчиненной базы.
Первая проблема, с которой часто сталкиваются разработчики при инициализации РИБ, — это иллюзия бесконечного зависания процесса создания начального образа. Прогресс-бар на экране может замереть на 0% или на промежуточном этапе, создавая впечатление, что система зависла.
Проанализируем эту ситуацию. На самом деле платформа «1С:Предприятие» в этот момент производит ресурсоемкую выгрузку конфигурации и регистрацию первоначального пакета данных. Визуальный индикатор (прогресс-бар) в режиме управляемого приложения часто не обновляет свой статус во время выполнения длительных серверных транзакций. Вместо принудительного завершения процесса через диспетчер задач рекомендуется выполнить следующие действия:
Очень часто при попытке синхронизации в каталоге обмена возникает пугающая ошибка: «В каталоге обмена информацией не был обнаружен файл сообщения с данными... Имя файла сообщения обмена: "Message*_ЛН_ЦБ.xml" или "Message*_ЛН_ЦБ.zip"».
Выясним причину появления символа * в имени файла. Это не ошибка генерации имени, а стандартная маска поиска файлов, используемая Библиотекой стандартных подсистем. БСП ищет в папке любые подходящие файлы обмена по шаблону, чтобы корректно обработать многотомные архивы (например, если файл обмена был разбит на части). Если система выдает эту ошибку, это означает, что физический файл обмена в каталоге отсутствует, либо у пользователя, под которым запущен сеанс «1С» (или служба сервера «1С:Предприятие»), отсутствуют права доступа (чтение и запись) к данному сетевому ресурсу или локальной папке.
Посмотрим на пример формирования шаблона имени файла обмена в общем модуле системы:
Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя, ЭтоИсходящееСообщение)
ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]";
Если СтрДлина(КодУзлаОтправителя) = 36 И ЭтоИсходящееСообщение Тогда
ПрефиксИБИсточника = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить();
Если ЗначениеЗаполнено(ПрефиксИБИсточника) Тогда
ШаблонИмени = "[Prefix]_[ПрефиксИБИсточника]_[УзелОтправитель]_[УзелПолучатель]";
КонецЕсли;
КонецЕсли;
ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message");
ШаблонИмени = СтрЗаменить(ШаблонИмени, "[ПрефиксИБИсточника]", ПрефиксИБИсточника);
ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя);
ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя);
Возврат ШаблонИмени;
КонецФункции
Для исправления этой ошибки выполним следующие шаги:
ragent на сервере «1С».Если в конфигурацию были добавлены собственные справочники или документы, просто включить их в состав плана обмена (например, Полный) на уровне метаданных в конфигураторе недостаточно. В БСП регистрация изменений регулируется подписками на события и правилами регистрации.
Рассмотрим по шагам, что необходимо сделать для корректного включения новых объектов в обмен:
Разрешить (или настроим правила, если используется выборочная регистрация).ПолныйРегистрация — для справочников и других условно-постоянных данных;ПолныйРегистрацияДокументов — для проведения регистрации документов при их записи;ПолныйРегистрацияНаборов — для регистров сведений и регистров накопления;ПолныйРегистрацияУдаления — для фиксации удаления объектов и передачи этой информации в подчиненный узел./C ЗапускОбновленияИнформационнойБазы.После выполнения этих действий выполним тестовую запись любого измененного объекта. Чтобы проверить, попали ли данные в очередь обмена, воспользуемся типовой обработкой «Регистрация изменений для обмена».
Иногда при попытке непосредственного удаления помеченных документов или элементов справочников в периферийной базе данных возникает системная ошибка, транзакция откатывается, а на экран выводится сообщение о невозможности записи заданий формирования книги покупок/продаж или иных регламентных регистров.
Разберем природу этого явления. При удалении первичных документов платформа пытается автоматически очистить связанные с ними движения или записи в технологических регистрах сведений (таких как ЗаданияКФормированиюЗаписейКнигиПокупок). Однако в подчиненных узлах РИБ на данные регистры часто накладывается запрет изменения, поскольку все расчеты по НДС и партионному учету должны производиться централизованно в головном офисе.
Рекомендация: Все операции по безвозвратному удалению объектов (физическому стиранию из базы данных) настоятельно рекомендуется производить исключительно в центральном узле РИБ. В подчиненных узлах пользователи должны лишь помечать объекты на удаление. После синхронизации эти пометки перенесутся в центр, там будет произведено удаление, и информация об удалении (через подписку регистрации удаления) естественным образом сотрет эти объекты в периферийной базе при следующем сеансе обмена.
В процессе работы с РИБ часто возникает техническая необходимость временно превратить периферийную базу в автономную (например, для удаления зависших объектов, тестирования доработок или очистки данных) или, наоборот, принудительно связать чистую базу с главным узлом.
Проанализируем ситуацию: попытка выполнить эти операции при активных сеансах пользователей или открытом конфигураторе вызовет ошибку блокировки базы данных. Снять признак подчиненности можно программно, используя метод ПланыОбмена.УстановитьГлавныйУзел().
Посмотрим на пример внешней обработки, которая отключает признак главного узла:
&НаСервере
Процедура ВыполнитьНаСервере()
// Передаем Неопределено, чтобы сделать базу автономной
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПрижатие(Команда)
ВыполнитьНаСервере();
ПоказатьПредупреждение(, "Связь с главным узлом успешно разорвана!");
КонецПроцедуры
Для выполнения этого кода необходимо соблюсти критически важные условия:
Если вам требуется выполнить сброс главного узла без написания обработок, воспользуйтесь стандартным ключом запуска платформы «1С» через командную строку. Для этого закройте все сеансы базы и выполните следующую команду в консоли операционной системы:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "ПутьКВашейБазе" /ResetMasterNode
Этот способ мгновенно и безопасно отключает привязку к главному узлу на уровне заголовка базы данных.
Обратите внимание: начиная с версии платформы 8.3.12+, если в конфигурации установлены расширения, переданные из главного узла РИБ, попытка программно отключить главный узел вызовет ошибку. Перед выполнением сброса зайдите в управление расширениями и временно отключите признак их использования в распределенной базе данных.