Как исправить ошибки работы с адресным классификатором ФИАС в 1С:УПП 1.3?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

Переход на новый формат адресного классификатора ФИАС в конфигурации «Управление производственным предприятием» (УПП), начиная с релиза 166.2, вызвал ряд серьезных технических сложностей. Основная причина проблем кроется в смене технологического стека: если раньше адресные данные хранились в виде набора отдельных полей (регион, город, улица), то в новых версиях 1С перешла на хранение адреса в формате JSON внутри поля Значение. Это привело к «поломке» многих типовых механизмов, печатных форм и алгоритмов ввода данных. Проанализируем ситуацию и разберем по шагам, как привести систему в рабочее состояние.

Причины возникновения ошибок и общая стратегия решения

При обновлении на релиз 166.2 и выше пользователи столкнулись с тем, что привычная загрузка через DBF (формат КЛАДР) перестала работать, а при попытке ручного ввода адреса система либо выдает ошибки, либо «наглухо» виснет. Выясним причину: программа пытается обрабатывать данные в новом формате, но в коде типовых модулей были допущены ошибки, не учитывающие пустые значения или различия в структурах старого и нового форматов.

Для исправления ситуации нам потребуется внести изменения в несколько общих модулей и типовую обработку. Рассмотрим подробнее основные этапы восстановления работоспособности.

Исправление зависания при вводе номера дома (Ошибка 00-00404444)

Одной из самых раздражающих ошибок стало зависание системы при заполнении номера дома. Проблема кроется в функции НомерДомаЧислом, которая некорректно обрабатывает пустые строки. Разберем исправление, рекомендованное технической поддержкой.

Необходимо найти в общем модуле АдресныйКлассификаторСлужебный функцию НомерДомаЧислом и заменить строку разделения. Вместо старого кода используем проверку на пустоту:


// В общем модуле АдресныйКлассификаторСлужебный
// Заменяем строку:
// НаборЦифр = СтрРазделить(ИсходнаяСтрока, СимволыДляУдаления, Ложь);
// На безопасный вариант:
НаборЦифр = ?(ПустаяСтрока(ИсходнаяСтрока) И ПустаяСтрока(СимволыДляУдаления), Новый Массив, СтрРазделить(ИсходнаяСтрока, СимволыДляУдаления, Ложь));

Также в этом же модуле в процедуре ДобавитьИнформациюОДоме часто встречается опечатка в имени свойства. Проверьте строку формирования НайденныйФрагментСтроения:


// Было: ... + СокрЛП(ОписаниеДома.Строние));
// Должно быть:
НайденныйФрагментСтроения = Новый ФорматированнаяСтрока(ТекстПроСтроения, Разделитель + НазваниеСтроения + " " + СокрЛП(ОписаниеДома.Строение));

Решение проблемы «Поле объекта не обнаружено (Значение)»

Эта ошибка возникает в обработке РедактированиеКонтактнойИнформации, когда система пытается прочитать адрес, заведенный еще «по-старому», где отсутствует поле Значение (в котором теперь лежит JSON). Чтобы исправить это, нам нужно добавить проверку наличия свойства в структуре. Рассмотрим пример реализации в функции ПолучитьПредставлениеАдреса:


// Вместо прямого обращения: Если ЗначениеЗаполнено(Запись.Значение) Тогда
// Используем безопасное заполнение свойств:
СтруктураПроверки = Новый Структура("Значение", "");
ЗаполнитьЗначенияСвойств(СтруктураПроверки, Запись);
Если ЗначениеЗаполнено(СтруктураПроверки.Значение) Тогда
    // Обработка нового формата
КонецЕсли;

Восстановление заполнения Поле1 – Поле10 для отчетности

Многие пользователи заметили, что после перехода на ФИАС в печатных формах (например, в карточке Т-2 или реестрах ФСС) перестали отображаться адреса. Это происходит потому, что новые релизы пишут данные только в JSON, а старые отчеты и формы продолжают искать данные в ресурсах Поле1, Поле2...Поле10 регистра сведений КонтактнаяИнформация.

Чтобы восстановить обратную совместимость, проанализируем модуль обработки РедактированиеКонтактнойИнформации. В процедуре ЗаполнитьЗапись необходимо принудительно вернуть заполнение этих полей:


Процедура ЗаполнитьЗапись(Запись)
    // Стандартный код нового релиза
    Запись.Объект = Объект;
    Запись.Тип = Тип;
    Запись.Вид = Вид;
    Запись.Представление = Представление;
    // ...
    
    // Добавляем заполнение старых полей для совместимости с отчетами
    Для а = 1 По 10 Цикл
        Запись["Поле" + Строка(а)] = ЭтотОбъект["Поле" + Строка(а)];
    КонецЦикла;
    
    Запись.ТипДома = ТипДома;
    Запись.ТипКорпуса = ТипКорпуса;
    Запись.ТипКвартиры = ТипКвартиры;
КонецПроцедуры

Важно помнить, что после внесения этого изменения старые адреса, которые уже были перезаписаны в новом формате, придется перевыбрать и сохранить заново, чтобы поля Поле1...10 заполнились данными.

Исправление сортировки в списках контактной информации

В некоторых релизах (например, 166.2) сломалась сортировка в справочниках. Пустые строки контактной информации оказываются наверху, а заполненные — в середине списка. Исправим это в общем модуле УправлениеКонтактнойИнформацией, в процедуре ПрочитатьКонтактнуюИнформацию. Посмотрим на код:


ТабЗн = Запрос.Выполнить().Выгрузить();
// Добавляем принудительную сортировку по представлению
ТабЗн.Сортировать("Представление Убыв"); 

Для Каждого стр Из ТабЗн Цикл
    стр.Представление = СокрП(стр.Представление);
    стр.Комментарий = СокрП(стр.Комментарий);
КонецЦикла;

Проблемы с платформой и типом «ФормаКлиентскогоПриложения»

Если при работе с адресами вы получаете ошибку «Тип не определен (ФормаКлиентскогоПриложения)», это сигнализирует о несовместимости кода с вашей версией платформы 1С:Предприятие. Данный тип появился в более новых версиях платформы (рекомендуется 8.3.18 и выше). Если обновить платформу прямо сейчас невозможно, заменим обращение к типу на более универсальное для обычного приложения:

Вместо Тип("ФормаКлиентскогоПриложения") используем Тип("УправляемаяФорма") или соответствующий аналог, который понимает ваша версия платформы в контексте УПП.

Рекомендации по загрузке классификатора

Посмотрим на практические советы специалистов по самой процедуре перехода:

  1. Полная очистка: Перед загрузкой ФИАС крайне желательно полностью очистить старый классификатор КЛАДР. Это предотвратит конфликты индексов и дублирование записей.
  2. Выбор формата: В окне загрузки убедитесь, что вы выбрали источник «С портала 1С:ИТС» или указали папку с файлами ФИАС (формат XML/JSON в архивах), а не старые DBF-файлы.
  3. Права доступа: Проверьте, что у пользователей, работающих с адресами, добавлена новая роль Добавление и изменение адресных сведений. Без нее работа с ФИАС в новых релизах может блокироваться.
  4. Индексы: Обратите внимание, что в ФИАС индекс жестко привязан к дому. Если вы вводите номер дома вручную, не выбирая его из классификатора, индекс может не заполниться автоматически. Приучайте пользователей выбирать дом из выпадающего списка или через кнопку выбора.

Подводя итог, можно сказать, что переход на ФИАС в УПП требует от администратора и программиста внимательности к деталям. Использование вышеописанных «костылей» и патчей позволяет стабилизировать систему до выхода полностью исправленных релизов от разработчиков (начиная с 1.3.170 и выше многие из этих ошибок были устранены штатно).

← На главную