При работе в программе «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с досадной программной ошибкой при попытке создать или отредактировать карточку контрагента. После заполнения данных и нажатия кнопки «Записать» система выдает критическое оповещение: «Поле объекта не обнаружено (areaType)». Эта проблема блокирует работу с новыми партнерами и вызывает массу вопросов, особенно учитывая, что конфигурация может быть полностью типовой и обновленной.
В этой статье мы подробно разберем, почему возникает данная ошибка, как она связана с географическим переименованием регионов России и какие шаги необходимо предпринять программисту или администратору для её устранения.
Проанализируем техническую сторону вопроса. Ошибка локализована в общем модуле УправлениеКонтактнойИнформациейСлужебный. Суть проблемы заключается в том, что разработчики фирмы «1С» добавили в код специальную процедуру УстановкаТипаКузбассКемеровскойОбласти. Эта процедура призвана корректно обрабатывать официальное переименование Кемеровской области в «Кемеровская область — Кузбасс».
Рассмотрим фрагмент проблемного кода:
Процедура УстановкаТипаКузбассКемеровскойОбласти(КонтактнаяИнформацияПоПолям) Экспорт
Если СтрСравнить(КонтактнаяИнформацияПоПолям.area, "Кемеровская область - Кузбасс") = 0 Тогда
КонтактнаяИнформацияПоПолям.area = "Кемеровская область -";
КонтактнаяИнформацияПоПолям.areaType = "Кузбасс";
КонецЕсли;
КонецПроцедуры
Проблема здесь в том, что в современных версиях подсистемы управления контактной информацией объект КонтактнаяИнформацияПоПолям (который обычно является структурой или объектом XDTO) не всегда содержит свойство areaType. Когда программа пытается программно присвоить значение несуществующему полю через точку, происходит аварийная остановка выполнения кода.
Многие пользователи замечают странную закономерность: ошибка «вылетает» преимущественно при записи контрагентов, чей ИНН начинается на «42». Проанализируем ситуацию и выясним, почему это происходит. В конфигурации заложена логика автоматической проверки и форматирования адресов. Если система определяет, что организация относится к Кемеровской области (что и идентифицируется по первым цифрам ИНН), она принудительно запускает алгоритмы нормализации адреса согласно ФИАС (ГАР). Именно в этот момент вызывается злополучная процедура, которая ищет поле areaType.
Интересно, что ошибка может возникнуть даже в том случае, если условие СтрСравнить является ложным. Это связано с тем, что в некоторых релизах само обращение к свойству для сравнения уже может вызывать исключение, если структура объекта была изменена в ходе обновления платформы или метаданных.
Фирма «1С» оперативно выпускает исправления для таких критических багов. Если ваша база подключена к интернет-поддержке, вы можете решить проблему без внесения изменений в код вручную. Проделаем следующие шаги:
EF_00_00366601).После установки патча и перезапуска сеанса 1С проблема должна исчезнуть, так как патч подменяет ошибочный код на корректный, содержащий проверку наличия свойства.
Если ваша база работает на устаревшем релизе (например, ниже 3.0.96), наиболее правильным стратегическим решением будет полноценное обновление. Рассмотрим версии, в которых данная проблема была официально устранена разработчиками:
Обновление конфигурации позволяет не только исправить ошибку с areaType, но и актуализировать классификаторы ФИАС, что критично для корректной сдачи отчетности.
Если по каким-то причинам обновление или установка патча невозможны (например, база сильно доработана или закрыта от интернета), разберем способ исправления через механизм расширений. Это позволит сохранить базу на поддержке.
Нам необходимо создать расширение и добавить в него общий модуль УправлениеКонтактнойИнформациейСлужебный. Затем применим метод &Вместо для процедуры УстановкаТипаКузбассКемеровскойОбласти.
Пример безопасного кода, который следует внедрить в расширение:
&Вместо("УстановкаТипаКузбассКемеровскойОбласти")
Процедура Ипр_УстановкаТипаКузбассКемеровскойОбласти(КонтактнаяИнформацияПоПолям)
// Проверяем наличие свойства перед обращением
Если КонтактнаяИнформацияПоПолям.Свойство("area") Тогда
Если СтрСравнить(КонтактнаяИнформацияПоПолям.area, "Кемеровская область - Кузбасс") = 0 Тогда
КонтактнаяИнформацияПоПолям.area = "Кемеровская область -";
// Безопасно устанавливаем значение, только если поле существует
Если КонтактнаяИнформацияПоПолям.Свойство("areaType") Тогда
КонтактнаяИнформацияПоПолям.areaType = "Кузбасс";
Иначе
// Если поля нет, можно добавить его в структуру, если это Структура
Попытка
КонтактнаяИнформацияПоПолям.Вставить("areaType", "Кузбасс");
Исключение
// Игнорируем, если объект не поддерживает вставку
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важное примечание: При создании расширения обязательно снимите галочку «Безопасный режим» и «Защита от опасных действий», иначе расширение может не иметь прав на изменение служебных структур контактной информации.
Проанализируем ситуацию с адресным классификатором. Иногда ошибка провоцируется тем, что в базе загружены данные старого формата ФИАС, в то время как программный код уже ожидает новый формат ГАР. Мы рекомендуем:
Подведем итог. Ошибка с полем areaType является чисто технической недоработкой в коде типового решения, возникшей из-за конфликта между логикой переименования Кузбасса и внутренней структурой хранения адресов. Использование патчей или обновление до актуального релиза — самый быстрый и надежный способ вернуть систему в рабочее состояние.