При работе в современных конфигурациях 1С (таких как БП 3.0, ERP 2.4, УТ 11) программисты часто сталкиваются с внезапным падением системы при попытке открыть карточку контрагента, партнера или при печати документов. Ошибка локализуется в общем модуле УправлениеКонтактнойИнформациейСлужебный и выглядит следующим образом:
{ОбщийМодуль.УправлениеКонтактнойИнформациейСлужебный.Модуль(2085)}: Ошибка при вызове метода контекста (Создать) Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); по причине: Несоответствие типов (параметр номер '1')
В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим несколько эффективных способов её решения, от простых манипуляций с кэшем до корректной настройки расширений конфигурации.
Давайте проанализируем ситуацию с точки зрения механизмов платформы. Ошибка «Несоответствие типов (параметр номер '1')» в данном контексте означает, что метод Создать() получил на вход значение, которое не является объектом типа ТипОбъектаXDTO.
Разберем строку кода по шагам:
ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация").Неопределено.ФабрикаXDTO.Создать(Неопределено), что и приводит к ошибке, так как первый параметр обязан быть валидным типом XDTO.Это часто происходит в базах, где используются расширения конфигурации. При динамическом обновлении или конфликте метаданных глобальная фабрика XDTO может инициализироваться некорректно для конкретного сеанса или рабочего процесса rphost.
Как показывает практика и опыт многих разработчиков, самым стабильным решением является явное указание пакета XDTO в том расширении, которое влияет на работу с контактной информацией или просто активно используется в системе. Рассмотрим, как это сделать:
КонтактнаяИнформация (или соответствующий пространству имен, указанному в переменной ПространствоИмен в отладчике) и добавим его в расширение.Этот метод заставляет платформу пересчитать связи между типами XDTO в расширении и основной конфигурации, что «возвращает» потерянный тип в глобальную фабрику.
Если добавление пакета не помогает или ошибка повторяется через некоторое время, проанализируем состояние серверного кэша. Часто проблема кроется в некорректных временных файлах сеансовых данных.
Рассмотрим алгоритм полной очистки для серверного варианта:
C:\Program Files\1cv8\srvinfo или C:\Program Files (x86)\1cv8\srvinfo).reg_1541).snccntx (сеансовые данные), хотя в критических случаях можно очистить и их (учтите, что это приведет к завершению всех активных сеансов).Важно: Простой перезапуск рабочего процесса rphost в консоли администрирования также может временно решить проблему, так как создаст новый процесс с «чистой» фабрикой XDTO.
Иногда ошибка проявляется из-за того, что в расширение была затянута форма (например, форма элемента справочника «Контрагенты»), которая обращается к программному интерфейсу БСП. Если после обновления основной конфигурации состав параметров или логика работы с контактной информацией изменилась, расширенная форма может работать со старым контекстом.
Попробуем выполнить следующие действия:
Чтобы точно убедиться, какой именно тип отсутствует, мы можем использовать следующий фрагмент кода в табло отладчика в момент возникновения ошибки:
// Проверим, что возвращает фабрика для конкретного пространства имен
ТипОбъекта = ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация");
Сообщить(Тип(ТипОбъекта)); // Если выведет "Неопределено", значит тип не найден в схемах
Если вы видите, что ПространствоИмен заполнено строкой (например, http://www.v8.1c.ru/aif/contactinfo), а результат функции Тип() все равно Неопределено, это прямое подтверждение проблем с регистрацией пакетов XDTO в текущем сеансе.
Подводя итог, отметим, что данная ошибка чаще всего является следствием бага платформы в механизме взаимодействия расширений и глобальной фабрики XDTO. Наиболее действенным и долгосрочным методом борьбы является заимствование пакета КонтактнаяИнформация в расширение. Если же это не помогает, стоит рассмотреть возможность обновления платформы до последних релизов (8.3.17 и выше), где многие ошибки кэширования XDTO были исправлены разработчиками 1С.