Переход на новый формат адресного классификатора ФИАС в конфигурации «Управление производственным предприятием» (УПП), начиная с релиза 166.2, вызвал ряд серьезных технических сложностей. Основная причина проблем кроется в смене технологического стека: если раньше адресные данные хранились в виде набора отдельных полей (регион, город, улица), то в новых версиях 1С перешла на хранение адреса в формате JSON внутри поля Значение. Это привело к «поломке» многих типовых механизмов, печатных форм и алгоритмов ввода данных. Проанализируем ситуацию и разберем по шагам, как привести систему в рабочее состояние.
При обновлении на релиз 166.2 и выше пользователи столкнулись с тем, что привычная загрузка через DBF (формат КЛАДР) перестала работать, а при попытке ручного ввода адреса система либо выдает ошибки, либо «наглухо» виснет. Выясним причину: программа пытается обрабатывать данные в новом формате, но в коде типовых модулей были допущены ошибки, не учитывающие пустые значения или различия в структурах старого и нового форматов.
Для исправления ситуации нам потребуется внести изменения в несколько общих модулей и типовую обработку. Рассмотрим подробнее основные этапы восстановления работоспособности.
Одной из самых раздражающих ошибок стало зависание системы при заполнении номера дома. Проблема кроется в функции НомерДомаЧислом, которая некорректно обрабатывает пустые строки. Разберем исправление, рекомендованное технической поддержкой.
Необходимо найти в общем модуле АдресныйКлассификаторСлужебный функцию НомерДомаЧислом и заменить строку разделения. Вместо старого кода используем проверку на пустоту:
// В общем модуле АдресныйКлассификаторСлужебный
// Заменяем строку:
// НаборЦифр = СтрРазделить(ИсходнаяСтрока, СимволыДляУдаления, Ложь);
// На безопасный вариант:
НаборЦифр = ?(ПустаяСтрока(ИсходнаяСтрока) И ПустаяСтрока(СимволыДляУдаления), Новый Массив, СтрРазделить(ИсходнаяСтрока, СимволыДляУдаления, Ложь));
Также в этом же модуле в процедуре ДобавитьИнформациюОДоме часто встречается опечатка в имени свойства. Проверьте строку формирования НайденныйФрагментСтроения:
// Было: ... + СокрЛП(ОписаниеДома.Строние));
// Должно быть:
НайденныйФрагментСтроения = Новый ФорматированнаяСтрока(ТекстПроСтроения, Разделитель + НазваниеСтроения + " " + СокрЛП(ОписаниеДома.Строение));
Эта ошибка возникает в обработке РедактированиеКонтактнойИнформации, когда система пытается прочитать адрес, заведенный еще «по-старому», где отсутствует поле Значение (в котором теперь лежит JSON). Чтобы исправить это, нам нужно добавить проверку наличия свойства в структуре. Рассмотрим пример реализации в функции ПолучитьПредставлениеАдреса:
// Вместо прямого обращения: Если ЗначениеЗаполнено(Запись.Значение) Тогда
// Используем безопасное заполнение свойств:
СтруктураПроверки = Новый Структура("Значение", "");
ЗаполнитьЗначенияСвойств(СтруктураПроверки, Запись);
Если ЗначениеЗаполнено(СтруктураПроверки.Значение) Тогда
// Обработка нового формата
КонецЕсли;
Многие пользователи заметили, что после перехода на ФИАС в печатных формах (например, в карточке Т-2 или реестрах ФСС) перестали отображаться адреса. Это происходит потому, что новые релизы пишут данные только в JSON, а старые отчеты и формы продолжают искать данные в ресурсах Поле1, Поле2...Поле10 регистра сведений КонтактнаяИнформация.
Чтобы восстановить обратную совместимость, проанализируем модуль обработки РедактированиеКонтактнойИнформации. В процедуре ЗаполнитьЗапись необходимо принудительно вернуть заполнение этих полей:
Процедура ЗаполнитьЗапись(Запись)
// Стандартный код нового релиза
Запись.Объект = Объект;
Запись.Тип = Тип;
Запись.Вид = Вид;
Запись.Представление = Представление;
// ...
// Добавляем заполнение старых полей для совместимости с отчетами
Для а = 1 По 10 Цикл
Запись["Поле" + Строка(а)] = ЭтотОбъект["Поле" + Строка(а)];
КонецЦикла;
Запись.ТипДома = ТипДома;
Запись.ТипКорпуса = ТипКорпуса;
Запись.ТипКвартиры = ТипКвартиры;
КонецПроцедуры
Важно помнить, что после внесения этого изменения старые адреса, которые уже были перезаписаны в новом формате, придется перевыбрать и сохранить заново, чтобы поля Поле1...10 заполнились данными.
В некоторых релизах (например, 166.2) сломалась сортировка в справочниках. Пустые строки контактной информации оказываются наверху, а заполненные — в середине списка. Исправим это в общем модуле УправлениеКонтактнойИнформацией, в процедуре ПрочитатьКонтактнуюИнформацию. Посмотрим на код:
ТабЗн = Запрос.Выполнить().Выгрузить();
// Добавляем принудительную сортировку по представлению
ТабЗн.Сортировать("Представление Убыв");
Для Каждого стр Из ТабЗн Цикл
стр.Представление = СокрП(стр.Представление);
стр.Комментарий = СокрП(стр.Комментарий);
КонецЦикла;
Если при работе с адресами вы получаете ошибку «Тип не определен (ФормаКлиентскогоПриложения)», это сигнализирует о несовместимости кода с вашей версией платформы 1С:Предприятие. Данный тип появился в более новых версиях платформы (рекомендуется 8.3.18 и выше). Если обновить платформу прямо сейчас невозможно, заменим обращение к типу на более универсальное для обычного приложения:
Вместо Тип("ФормаКлиентскогоПриложения") используем Тип("УправляемаяФорма") или соответствующий аналог, который понимает ваша версия платформы в контексте УПП.
Посмотрим на практические советы специалистов по самой процедуре перехода:
Добавление и изменение адресных сведений. Без нее работа с ФИАС в новых релизах может блокироваться.Подводя итог, можно сказать, что переход на ФИАС в УПП требует от администратора и программиста внимательности к деталям. Использование вышеописанных «костылей» и патчей позволяет стабилизировать систему до выхода полностью исправленных релизов от разработчиков (начиная с 1.3.170 и выше многие из этих ошибок были устранены штатно).