При обслуживании распределенных информационных баз (РИБ) или переводе старых конфигураций (таких как «1С:Комплексная автоматизация 1.1» или «1С:Управление производственным предприятием 1.3») на платформу 8.3 администраторы и разработчики нередко сталкиваются с критической ситуацией. В режиме «1С:Предприятие» план счетов неожиданно двоится, у счетов накапливаются десятки пустых строк видов субконто, а после выполнения стандартного тестирования и исправления (ТиИ) счета и вовсе полностью исчезают из пользовательского интерфейса, очищая проводки в проведенных документах.
Разберем детально, почему возникает подобная коллизия, как устроен механизм предопределенных данных в платформе 8.3 и какие шаги необходимо предпринять для восстановления работоспособности базы данных.
Проанализируем поведение платформы при работе с предопределенными объектами. Начиная с версии платформы 8.3, концепция хранения предопределенных элементов справочников и планов счетов претерпела существенные изменения:
ИмяПредопределенныхДанных.UpdateAutomatically (обновлять автоматически), а подчиненные узлы функционируют в режиме DoNotUpdateAutomatically (не обновлять автоматически). Это исключает конфликты: подчиненный узел просто принимает готовые идентификаторы из главного узла через сообщения обмена.ПланыОбмена.УстановитьГлавныйУзел(Неопределено)), база теряет признак периферийной. При следующем старте или первой реструктуризации платформа переключает режим инициализации данных в автоматический.ВидыСубконто у существующих счетов многократно перезаписывается: к исходным строкам добавляются пустые строки или копии видов субконто (вплоть до 10–16 строк на счетах 90 или 91).Если после запуска ТиИ ссылки в документах уже зачистились, наиболее надежным и безопасным путем является возврат к резервной копии, сделанной до сбоя. Рассмотрим правильную последовательность действий при изменении топологии узлов:
Посмотрим на пример пакетной команды запуска конфигуратора с параметром /SetPredefinedDataUpdate:
"C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe" DESIGNER /F "D:\Bases\MyBase" /N "Администратор" /P "Пароль" /SetPredefinedDataUpdate -DoNotUpdateAutomatically
Параметр -DoNotUpdateAutomatically указывает платформе, что при реструктуризации базы создание новых предопределенных записей производиться не должно. Также запрет можно установить программно перед выполнением любых операций реструктуризации:
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(РежимОбновленияПредопределенныхДанных.НеОбновлятьАвтоматически);
Если свежей резервной копии нет, а ТиИ еще не запускалось (или выполнялось на отдельной копии), устранить задвоение можно программным путем. Разберем по шагам алгоритм исправления:
СчетОбъект = ДубликатСчетаСсылка.ПолучитьОбъект();
СчетОбъект.ИмяПредопределенныхДанных = "";
СчетОбъект.Записать();
СчетОбъект = СчетСсылка.ПолучитьОбъект();
// Очищаем некорректно задвоенные строки
Индекс = СчетОбъект.ВидыСубконто.Количество() - 1;
Пока Индекс >= 0 Цикл
СтрокаСубконто = СчетОбъект.ВидыСубконто[Индекс];
Если Не ЗначениеЗаполнено(СтрокаСубконто.ВидСубконто) Тогда
СчетОбъект.ВидыСубконто.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
СчетОбъект.Записать();
Важное предостережение: никогда не запускайте процедуру «Тестирование и исправление» с опцией «Очищать ссылки» на рабочей базе при обнаружении дублей предопределенных данных. Любые диагностические и восстановительные манипуляции следует предварительно тестировать на резервной копии информационной базы.