В процессе администрирования систем на платформе «1С:Предприятие 8» специалисты часто сталкиваются с ситуациями, когда стандартное автоматическое обновление невозможно или нецелесообразно. Например, когда у компании временно закончилась активная подписка на информационно-технологическое сопровождение (1С:КП / ИТС), но ранее были легально загружены файлы обновлений, или когда требуется перенести базу на другой сервер без потери конфигурационных изменений. Параллельно с этим могут возникать сопутствующие проблемы, такие как сбои адресного классификатора ФИАС/ГАР при миграции данных.
В этой статье мы подробно разберем, как правильно выполнять ручное обновление конфигураций 1С (на примере «1С:Управление торговлей 11.4») с помощью файлов обновлений, проанализируем юридическую сторону этого процесса, а также изучим механизм восстановления поврежденного адресного классификатора через редактирование регистра сведений РегистрСведений.АдресныеОбъекты.
Для успешного проведения ручного обновления конфигурации нам необходимо четко понимать разницу между основными файлами поставок обновлений, которые предоставляет разработчик:
.cf является самодостаточным, и его можно получить либо из полной дистрибутивной поставки, либо выгрузить из уже обновленной копии базы данных..cfu.Если мы не хотим запускать программу установки шаблонов setup.exe на рабочем сервере, чтобы избежать захламления диска или системных каталогов, мы можем извлечь необходимые файлы вручную. Рассмотрим этот алгоритм подробнее:
.cfu..cf обновленной версии, а у нас уже развернута база этой версии, откроем ее в режиме «Конфигуратор», перейдем в меню Конфигурация — Поддержка — Настройка поддержки и нажмем кнопку «Сохранить в файл». Полученный файл можно использовать для обновления других баз.Перед началом любых работ обязательно создадим резервную копию информационной базы. После этого выполним следующие действия:
.cfu (или к файлу конфигурации .cf).Выясним важный правовой нюанс, вызывающий множество споров: имеем ли мы право обновлять конфигурацию, если подписка на ИТС закончилась?
Согласно лицензионной политике фирмы «1С», правообладатель разрешает устанавливать и использовать только те релизы и обновления конфигураций, которые были официально выпущены в период действия вашего договора сопровождения (1С:КП / ИТС). Если обновление вышло до даты окончания вашей подписки, и вы успели его скачать — вы имеете полное юридическое право использовать его для обновления своих баз данных в любое время. Установка обновлений, выпущенных после окончания срока действия ИТС, является нарушением лицензионного соглашения.
Обратим внимание, что современные версии платформы «1С:Предприятие» оснащены встроенными механизмами автоматической проверки легальности полученных обновлений. При обнаружении нелицензионного обновления система начнет выводить предупреждения пользователям.
Часто при некорректном переносе баз, загрузке архивных копий формата .dt или очистке кэша пользователи обнаруживают, что в базе пропала информация о регионах в адресном классификаторе. При этом загрузить новые данные штатными средствами не удается, так как система выдает ошибки или просто не отображает нужные регионы.
Проанализируем причину этой проблемы. В современных конфигурациях адресные сведения хранятся в регистре сведений РегистрСведений.АдресныеОбъекты. При загрузке бэкапа поверх новой чистой базы таблицы базы данных полностью перезаписываются старыми значениями. Если в старой базе ключевая запись о конкретном регионе была повреждена или удалена, классификатор перестает функционировать для этого субъекта РФ.
Для исправления этой ошибки мы можем использовать два метода: программное восстановление записи или ручное исправление регистра.
Посмотрим, как с помощью программного кода в обработке восстановить запись о пропавшем регионе в регистре сведений АдресныеОбъекты. Нам потребуется знать уникальный идентификатор (GUID) региона согласно государственному адресному реестру (ГАР).
// Процедура для восстановления записи региона в адресном классификаторе
Процедура ВосстановитьРегиональныйОбъект(КодСубъекта, ИмяРегиона, ИдентификаторРегиона) Экспорт
// Создаем менеджер записи регистра
МенеджерЗаписи = РегистрыСведений.АдресныеОбъекты.СоздатьМенеджерЗаписи();
// Задаем ключевые измерения для идентификации записи
МенеджерЗаписи.Идентификатор = Новый УникальныйИдентификатор(ИдентификаторРегиона);
// Заполняем ресурсы и дополнительные реквизиты объекта
МенеджерЗаписи.Наименование = ИмяРегиона;
МенеджерЗаписи.ТипОбъекта = "Регион";
МенеджерЗаписи.КодСубъектаРФ = КодСубъекта;
МенеджерЗаписи.ДополнительныеДанные = "Региональный узел классификатора";
Попытка
// Записываем данные с замещением существующих некорректных записей
МенеджерЗаписи.Записать(Истина);
Сообщить("Запись региона успешно добавлена в базу данных: " + ИмяРегиона);
Исключение
ЗаписьЖурналаРегистрации("АдресныйКлассификатор.Ошибка", УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеОшибки());
ВызватьИсключение "Не удалось обновить запись регистра АдресныеОбъекты!";
КонецПопытки;
КонецПроцедуры
Для проверки корректности заполнения адресных сведений мы также можем выполнить простой запрос к базе данных, чтобы убедиться, какие именно регионы сейчас присутствуют в системе:
// Запрос для анализа заполненности регистров классификатора
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АдресныеОбъекты.КодСубъектаРФ КАК КодРегиона,
| АдресныеОбъекты.Наименование КАК НазваниеРегиона,
| АдресныеОбъекты.Идентификатор КАК Идентификатор
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
|ГДЕ
| АдресныеОбъекты.ТипОбъекта = ""Регион""";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщить("Внимание: В регистре адресных объектов отсутствуют корневые записи регионов!");
КонецЕсли;
Если мы не хотим прибегать к программированию и прямому редактированию регистров, воспользуемся безопасным штатным методом исправления классификатора без активного подключения к интернету:
РегистрСведений.АдресныеОбъекты, и адресный ввод снова заработает корректно.Используя предложенные методики, мы сможем эффективно поддерживать работоспособность баз данных 1С, производить точечные ручные обновления конфигураций и оперативно исправлять критические ошибки в структуре адресных классификаторов.