Проблема с автоматическим заполнением реквизитов контрагента по ИНН — одна из самых частых и неприятных ситуаций в работе бухгалтера и администратора 1С. Ошибка может возникнуть внезапно: еще вчера всё работало, а сегодня программа выдает длинное сообщение об ошибке преобразования XDTO или отказе в вызове метода getCorporationRequisitesByINN. В данной статье мы подробно разберем причины возникновения этой проблемы и рассмотрим все эффективные способы её решения.
Прежде всего, проанализируем текст типичной ошибки. Чаще всего в журнале регистрации или в окне сообщения пользователя мы видим текст следующего содержания: «Ошибка преобразования данных XDTO: Чтение объекта типа... Проверка дополнительного свойства: ПрВерсОКВЭД». Это происходит из-за того, что сервис 1С:Контрагент (получающий данные напрямую из ФНС) обновил структуру передаваемых данных. Если ваша конфигурация 1С или её внутренний кэш хранят старое описание веб-сервиса, программа не понимает, куда записать новые данные (например, версию ОКВЭД), и аварийно завершает процесс.
Также часто встречается ошибка «Не могу установить соединение» или «Превышено время ожидания». Это сигнализирует о проблемах на сетевом уровне: либо сервер 1С не имеет выхода в интернет, либо настройки безопасности блокируют обращение к узлам 1С.
Это самый эффективный и быстрый способ, который помогает в 90% случаев. Программа 1С кэширует описания веб-сервисов (WSDL), чтобы не запрашивать их каждый раз. Если описание на сервере изменилось, а в кэше осталась старая версия — возникнет конфликт. Разберем по шагам, как очистить этот кэш:
Кэш программных интерфейсов.Идентификатор. Чтобы не ошибиться, мы можем просто удалить все записи в этом регистре (это безопасно, программа создаст их заново при первом обращении к сервисам).Этот метод заставляет 1С заново скачать корректную структуру данных XDTO и возобновить работу с сервисом ФНС.
Часто системные администраторы настраивают интернет-доступ только для клиентских машин, забывая о том, что в клиент-серверном варианте (SQL-версия) запрос к веб-сервису выполняет именно сервер приложений 1С:Предприятие. Проанализируем ситуацию: если у пользователя в браузере сайты открываются, но 1С выдает ошибку соединения, значит, сервер заблокирован сетевым экраном или прокси-сервером.
Рассмотрим рекомендации по настройке сети:
USR1CV8), есть права на выход в интернет.inetcfg.xml на сервере или в самой программе через меню «Администрирование — Настройки интернет-поддержки».api.orginfo.1c.ru и login.1c.eu по порту 443.Если вы используете платформу версии 8.3.7 и ниже или работаете в режиме совместимости с этими версиями, вы можете столкнуться с ошибкой безопасности соединения. Это связано с тем, что старые версии платформы не доверяют новым сертификатам безопасности (SSL/TLS). Выясним, как это исправить вручную, если обновление платформы сейчас невозможно:
Нам потребуется файл сертификата издателя DigiCert. Его нужно добавить в файл cacert.pem, который находится в папке bin установленной платформы 1С. Рассмотрим алгоритм действий:
C:\Program Files\1cv8\8.3.X.XXXX\bin).cacert.pem и откроем его обычным текстовым редактором (Блокнот, Notepad++).Важно: этот метод актуален только для очень старых систем. Рекомендуемым решением является перевод базы на платформу 8.3.10 и выше со снятием режима совместимости.
В некоторых случаях, если конфигурация сильно изменена (кастомизирована) и давно не обновлялась, она может обращаться к устаревшей версии порта сервиса. Посмотрим на пример того, как можно программно переключить версию сервиса в общем модуле ДанныеЕдиныхГосРеестров.
Рассмотрим фрагмент кода, где выполняется инициализация прокси:
// В процедуре создания прокси можно изменить определение порта
// Вместо старой версии (например, Impl5 или Impl6)
// Пробуем использовать актуальную версию Impl7 или Impl8
АдресСервиса = "https://api.orginfo.1c.ru/rest/v1/getCorporationRequisitesByINN";
Определения = Новый WSОпределения(ИмяФайлаWSDL, ИмяПользователя, Пароль);
Прокси = Новый WSПрокси(Определения, "http://orginfo.1c.ru/v1", "RequisitesWebServiceEndpointImpl7Service", "RequisitesWebServiceEndpointImpl7Port");
Проанализируем этот пример: замена Impl6 на Impl7 (или Impl8 в зависимости от актуальности API) часто решает проблему «зависания» или отказа сервера принимать запрос.
Не стоит забывать и об организационных причинах. Сервис «1С:Контрагент» имеет лимиты на количество обращений. Например, по подписке ИТС:ПРОФ доступно 7200 заполнений в год. Выясним, как проверить остаток:
Если лимит исчерпан, программа может выдавать неочевидную ошибку вроде Role [autoComplete, all] not configured. В этом случае поможет только продление лицензии или приобретение дополнительного пакета сервисов.
Подводя итог, можно сказать, что в большинстве случаев проблема решается простой очисткой регистра кэша. Если же это не помогло, следует последовательно проверить настройки сетевого доступа сервера и актуальность вашей платформы 1С. Помните, что регулярное обновление типовых конфигураций избавляет от необходимости вручную править программный код и файлы сертификатов.