Как исправить ошибку заполнения реквизитов по ИНН в 1С:Управление торговлей 10.3 при смене API и проблемах с сертификатами?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Сервис 1С:Контрагент является незаменимым инструментом для автоматизации ввода данных, однако пользователи устаревших конфигураций, таких как Управление торговлей 10.3, часто сталкиваются с техническими сбоями. Основные причины проблем в последнее время — это изменение протоколов безопасности, обновление адресных схем API и переход на российские сертификаты шифрования. В этой статье мы подробно разберем, как восстановить работоспособность сервиса, если он перестал заполнять данные по ИНН.

Разберем причину сбоя: переход на API v1

Первое, с чего стоит начать анализ ситуации, — это проверка адреса веб-сервиса, к которому обращается ваша программа. Фирма 1С обновила API сервиса «1С:Контрагент». Ранее широко использовалась версия v7, но теперь актуальной является версия v1. Несмотря на индекс, это более современный и унифицированный интерфейс. Если ваш программный код все еще пытается достучаться до v7, вы получите ошибку или пустой ответ.

Проанализируем необходимые изменения в коде. Вам нужно найти место инициализации WSОпределения и WSПрокси (обычно это общий модуль ДанныеЕдиныхГосРеестров или внешняя обработка). Обновите параметры подключения согласно следующим данным:


// Новые параметры для подключения к сервису
АдресСервиса = "https://api.orgregister.1c.ru/ws/corporation/v1?wsdl";
ПространствоИмен = "http://ws.corporation.company1c.com/";
ИмяСервиса = "CorpWsImplService";
ИмяТочкиПодключения = "CorpWsImplPort";
Метод = "findCorporationByInn";

Обратите внимание, что метод findCorporationByInn теперь возвращает данные в обновленной структуре XDTO. Рассмотрим подробнее, как это влияет на обработку ответа в следующих разделах.

Решаем проблему «Удаленный узел не прошел проверку»

Самая частая ошибка, с которой сталкиваются администраторы и программисты на платформах ниже 8.3.22, звучит так: «Ошибка работы с Интернет: Удаленный узел не прошел проверку». Это означает, что платформа 1С не может проверить подлинность SSL-сертификата сервера 1С:Контрагент.

Выясним причину: это происходит из-за перехода сервисов 1С на сертификаты, выданные российскими удостоверяющими центрами (Минцифры), о которых старые версии платформы ничего не знают. Список доверенных центров хранится в файле cacert.pem внутри каталога платформы.

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

  1. Скачайте актуальную версию платформы 1С (рекомендуется 8.3.22 и выше) на любой компьютер.
  2. Перейдите в каталог установленной новой платформы: C:\Program Files\1cv8\{НомерВерсии}\bin\.
  3. Найдите файл с именем cacert.pem и скопируйте его.
  4. Перейдите в каталог той платформы, на которой работает ваша база (например, 8.3.16.XXXX), и замените старый файл cacert.pem на новый.
  5. Если вы используете клиент-серверный вариант, замену необходимо произвести на сервере 1С:Предприятия. Для Linux-серверов путь обычно выглядит так: /opt/1cv8/x86_64/{версия}/bin/cacert.pem.

После этой манипуляции платформа начнет доверять сертификатам Минцифры, и ошибка «Удаленный узел не прошел проверку» должна исчезнуть.

Проанализируем ситуацию с TLS 1.2

Помимо сертификатов, важную роль играет протокол шифрования. Современные сервера API 1С блокируют соединения по устаревшим протоколам TLS 1.0 и 1.1 из соображений безопасности. Если ваша операционная система (например, Windows Server 2008 R2 или Windows 7) не настроена на работу с TLS 1.2, замена файла cacert.pem не поможет.

В этом случае необходимо убедиться, что в ОС установлены соответствующие обновления безопасности (например, KB3140245 для Windows 7) и в реестре включена поддержка TLS 1.2. Проверить это можно, попробовав открыть адрес https://api.orgregister.1c.ru через Internet Explorer. Если страница не открывается с ошибкой протокола — проблема в настройках ОС.

Исправляем ошибки XDTO в старых конфигурациях УТ 10.3

Даже если соединение установлено, вы можете столкнуться с ошибкой при попытке создать объекты для хранения адреса. Рассмотрим пример из практики: ошибка «Несоответствие типов (параметр номер '1')» при вызове ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "АдресРФ")).

Проанализируем ситуацию: в старых редакциях УТ 10.3 (например, версия 10.3.35 и ниже) в дереве метаданных может отсутствовать пакет XDTO КонтактнаяИнформация (или ContactInfo), либо его схема безнадежно устарела. Современный API возвращает адрес в формате ФИАС (с использованием GUID), в то время как старая конфигурация ожидает текстовые поля или структуру КЛАДР.

Чтобы решить эту проблему, у нас есть два пути:

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

Посмотрим на пример кода для обработки адреса

При использовании нового API v1, важно правильно обращаться к пространству имен. Если в вашей обработке используется жесткая привязка к старым URL, код будет выдавать ошибку несоответствия типов. Рассмотрим, как правильно определить пространство имен для контактной информации:


Функция ПространствоИменКонтактнойИнформации()
    // Для актуальных конфигураций используется этот URI
    Возврат "http://www.v8.1c.ru/ssl/contactinfo";
КонецФункции

// Пример создания объекта адреса
ТипАдресРФ = ФабрикаXDTO.Тип(ПространствоИменКонтактнойИнформации(), "АдресРФ");
АдресОбъект = ФабрикаXDTO.Создать(ТипАдресРФ);

Если после добавления пакета XDTO ошибка сохраняется, убедитесь, что в коде не перепутаны локальные имена типов. В новых схемах часто используются типы Address вместо Адрес или требуются дополнительные вложенные объекты для представления муниципальной структуры адреса.

Рекомендация: использование внешних обработок

Для старых баз УТ 10.3 мы рекомендуем не вносить изменения напрямую в общий модуль ДанныеЕдиныхГосРеестров, а использовать внешнюю обработку «Заполнение реквизитов по ИНН». Фирма 1С часто выпускает обновленные версии этой обработки в составе дистрибутивов обновлений конфигурации.

Преимущество этого подхода в том, что внешняя обработка может содержать в себе все необходимые механизмы обхода ограничений старых платформ, и её обновление не требует снятия конфигурации с поддержки. Кроме того, в коде внешних обработок часто реализована возможность игнорирования ошибок SSL, что позволяет сервису работать даже на проблемных конфигурациях серверов (хотя это и снижает безопасность соединения).

Подводя итог, восстановление работы сервиса 1С:Контрагент в старой доброй УТ 10.3 — задача комплексная. Она требует как обновления системных файлов платформы (cacert.pem), так и корректировки программного кода под новые стандарты API. Пройдя по всем шагам, описанным выше, вы обеспечите стабильную работу системы и избавите пользователей от ручного ввода данных контрагентов.

← На главную