Как исправить ошибку «Поле объекта не обнаружено (CountryCode)» при обновлении 1С:Бухгалтерии с редакции 2.0 на 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Переход со старой редакции «1С:Бухгалтерия предприятия 2.0» на современную «1С:Бухгалтерия предприятия 3.0» — это сложный процесс, сопровождающийся масштабной реструктуризацией данных. Одной из наиболее частых и неприятных проблем, с которой сталкиваются специалисты при обновлении, является критический сбой при выполнении дополнительных процедур обработки данных. Система аварийно завершает работу, выдавая ошибку в модуле интеграции КИ:


{ОбщийМодуль.УправлениеКонтактнойИнформацией.Модуль(4407)}: Поле объекта не обнаружено (CountryCode)
    КодСтраны     = Телефон.CountryCode;

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

Выясняем техническую причину проблемы

Для того чтобы понять природу этой ошибки, нам необходимо рассмотреть, как именно хранится контактная информация в разных редакциях «1С:Бухгалтерии»:

  1. В редакции 2.0: Вся контактная информация (адреса, телефоны, email) хранилась в плоском виде в регистре сведений КонтактнаяИнформация. Поля часто представляли собой простые текстовые строки, не имеющие строгой структуры.
  2. В редакции 3.0: Разработчики перешли на новые стандарты Библиотеки стандартных подсистем (БСП). Теперь контактная информация хранится непосредственно в табличных частях справочников (например, Контрагенты, ФизическиеЛица, Организации). Для хранения используется сложная структура в формате XML или JSON, которая детально описывает каждый элемент контактной информации (код страны, код города, номер, добавочный номер и т.д.).

При первом запуске базы после обновления конфигурации срабатывает специальный отложенный обработчик обновления. Он считывает старые записи из временных таблиц регистра сведений и пытается преобразовать их в структурированный JSON-формат. Для этого вызывается парсер БСП.

Если в исходной базе БП 2.0 пользователи или внешние обмены (например, из «Управление торговлей 10.3») занесли в поле телефона некорректные данные — произвольный текст, примечания (например, «Виталий кладовщик», «бухгалтерия, звонить после 14:00») или нечитаемые символы, то парсер не может распознать эту строку как телефонный номер. В результате создается пустая или поврежденная структура, у которой отсутствует свойство CountryCode (Код страны). Попытка программы обратиться к этому свойству напрямую в строке КодСтраны = Телефон.CountryCode; приводит к аварийному завершению работы обработчика обновления.

---

Способ 1. Очистка некорректных данных в БП 2.0 перед обновлением (Рекомендуемый метод)

Самый надежный и корректный способ решить проблему — исправить исходные данные в базе редакции 2.0 до начала процедуры обновления. Это позволит избежать «мусора» в новой базе и гарантирует успешный переход.

Разберем по шагам, как локализовать и устранить сбойные записи:

  1. Откроем базу «Бухгалтерия предприятия 2.0» в режиме «Предприятие».
  2. Перейдем в меню «Операции» -> «Регистры сведений» и откроем регистр КонтактнаяИнформация.
  3. Установим отбор по колонке Тип со значением Телефон.
  4. Нам необходимо найти записи, в которых содержатся русские или латинские буквы, имена или длинные текстовые комментарии.

Для автоматизации этого процесса мы можем написать простую обработку или выполнить следующий код в консоли кода (или временно добавив его в любую кнопку внешней обработки):


Выборка = РегистрыСведений.КонтактнаяИнформация.Выбрать();
КоличествоПроблемных = 0;
Пока Выборка.Следующий() Цикл
    Если Выборка.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
        ПредставлениеТелефона = Выборка.Представление;
        СодержитБуквы = Ложь;
        
        // Проверяем строку на наличие буквенных символов
        Для Индекс = 1 По СтрДлина(ПредставлениеТелефона) Цикл
            Символ = Сред(ПредставлениеТелефона, Индекс, 1);
            Если Найти("абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz", НРег(Символ)) > 0 Тогда
                СодержитБуквы = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Если СодержитБуквы Тогда
            КоличествоПроблемных = КоличествоПроблемных + 1;
            Сообщить("Проблемная запись у объекта: " + СокрЛП(Выборка.Объект) 
                + " (Тип: " + Выборка.Вид + "). Значение: '" + ПредставлениеТелефона + "'");
        EndIf;
    КонецЕсли;
КонецЦикла;
Сообщить("Всего найдено проблемных номеров: " + КоличествоПроблемных);

После запуска этого скрипта мы получим список всех объектов (контрагентов, физических лиц), у которых контактная информация заполнена некорректно. Нам остается лишь открыть эти объекты в БП 2.0 и очистить либо исправить номера телефонов, удалив из них текстовые примечания. После очистки данных можно повторно запускать обновление на редакцию 3.0 — оно пройдет без ошибок.

---

Способ 2. Обход ошибки с помощью временного изменения кода в Конфигураторе

Если база данных уже находится в процессе обновления на редакцию 3.0, и возвращаться к резервной копии БП 2.0 крайне нежелательно, мы можем временно модифицировать код общего модуля, чтобы программа игнорировала проблемные записи.

Рассмотрим, как правильно применить это решение:

  1. Откроем базу 1С в режиме «Конфигуратор».
  2. Найдем общий модуль УправлениеКонтактнойИнформацией и перейдем к строке 4407 (или воспользуемся глобальным поиском по строке .CountryCode).
  3. Мы увидим следующий фрагмент кода: КодСтраны = Телефон.CountryCode;
  4. Обернем обращение к свойству структуры в безопасный блок Попытка...Исключение. Изменим этот фрагмент кода следующим образом:
    
    Попытка
        КодСтраны = Телефон.CountryCode;
    Исключение
        КодСтраны = "";
    КонецПопытки;
    
  5. Сохраним изменения в конфигурации базы данных (клавиша F7) и запустим базу в режиме «1С:Предприятие».
  6. Дождемся полного и успешного завершения всех отложенных обработчиков обновления.
  7. Важный шаг: После того как база успешно обновилась, обязательно верните конфигурацию к типовому состоянию (уберите изменения кода или обновите конфигурацию из файла поставщика), чтобы в дальнейшем у вас не возникало проблем с установкой типовых обновлений 1С.

---

Способ 3. Использование временного расширения конфигурации

Если ваша конфигурация находится на строгой поддержке и вы не хотите включать возможность изменения («снимать с поддержки») ради исправления одной ошибки, мы можем применить механизм расширений. Это более современный и безопасный способ программирования в среде 1С.

Проанализируем алгоритм создания расширения:

  1. В конфигураторе перейдем в меню «Конфигурация» -> «Расширения конфигурации» и добавим новое расширение. Укажем назначение: Адаптация.
  2. Добавим в расширение общий модуль УправлениеКонтактнойИнформацией.
  3. Создадим в модуле расширения перехватчик для метода, в котором происходит падение (например, воспользуемся аннотацией &Вместо или &ИзменениеИКонтроль).
  4. В коде метода добавим проверку существования свойства у структуры Телефон с помощью функции БСП Свойство или конструкции проверки типа:
    
    &Вместо("ЗаполнитьРеквизитыТелефона") // Имя процедуры может отличаться в зависимости от версии БСП
    Процедура ИмяПроцедуры(Телефон, Реквизиты)
        // Реализуем безопасное чтение свойства
        Если Телефон.Свойство("CountryCode") Тогда
            КодСтраны = Телефон.CountryCode;
        Иначе
            КодСтраны = "";
        КонецЕсли;
        
        // Продолжение логики заполнения...
    КонецПроцедуры
    
  5. Запустим базу данных. После успешного обновления КИ расширение можно просто удалить из списка.

---

Способ 4. Поэтапное обновление через промежуточный релиз

Если вы выполняете обновление напрямую на очень свежий релиз БП 3.0 (где используются последние, наиболее строгие к качеству данных версии БСП), можно попробовать обмануть систему, выполнив переход поэтапно.

Выясним схему этого процесса:

  1. Выполним переход с «Бухгалтерии предприятия 2.0» на относительно старый релиз «Бухгалтерии предприятия 3.0» (например, из веток 3.0.60 или 3.0.64). Парсеры контактной информации в этих версиях БСП были более лояльны к ошибкам заполнения текстовых полей и не требовали обязательного наличия реквизита CountryCode.
  2. Запустим базу в режиме «Предприятие», выполним первый запуск и дождемся окончания всех регламентных процедур обновления данных.
  3. После того как перенос контактной информации в новые структуры будет полностью завершен, обновим полученную базу 3.0 до самого актуального релиза. Переформатированные данные уже будут уложены в правильные таблицы, и критическая ошибка при обновлении конфигурации больше не возникнет.

Мы надеемся, что предложенные нами варианты помогут вам быстро и безболезненно справиться с ошибкой обновления контактной информации и успешно перевести вашу базу данных на современную редакцию 3.0!

← На главную