Многие пользователи и администраторы систем 1С:Управление производственным предприятием (УПП 1.3) и 1С:Комплексная автоматизация (КА 1.1) сталкиваются с критической ошибкой при попытке автоматически заполнить данные контрагента по ИНН. Система выдает сообщения вида «Код ответа сервера: 500» или «Код ответа сервера: 410». В этой статье мы подробно разберем причины возникновения проблемы и рассмотрим пошаговые алгоритмы её решения: от простых системных манипуляций до глубокой правки программного кода.
Ошибка при вызове конструктора WSОпределения возникает в тот момент, когда платформа 1С пытается обратиться к веб-сервису проверки контрагентов. Рассмотрим, почему это происходит:
getCorporationRequisitesByINN теперь используются иные функции, что вызывает ошибку 500 на стороне сервера из-за некорректного формата запроса.Разберем ситуацию, когда программный код верен, но соединение обрывается на уровне SSL. В папке установленной платформы 1С хранится файл cacert.pem, содержащий список доверенных центров сертификации. Если этот файл устарел, 1С не сможет проверить подлинность сервера 1С:Контрагент.
Выполним следующие шаги:
C:\Program Files (x86)\1cv8\8.3.XX.XXXX\bin\.cacert.pem.Иногда корень проблемы кроется в «слетевших» настройках авторизации. Выясним, все ли в порядке с учетными данными. Проанализируем регистр сведений Параметры интернет поддержки пользователей. В некоторых случаях поле password может оказаться пустым или содержать неактуальные данные.
Проверим записи с областью видимости startup. Пароль в этом регистре часто хранится в открытом виде. Убедимся, что логин и пароль соответствуют вашему личному кабинету на портале 1С:ИТС. Без валидной авторизации сервер будет возвращать ошибку при попытке создания WSПрокси.
Если обновление платформы невозможно или не помогает, придется внести изменения в программный код. Рассмотрим, как адаптировать модуль СервисДанныхЕдиныхГосРеестров или ОбщегоНазначенияПовтИсп под новые требования API.
Нам необходимо изменить базовый URL сервиса и названия методов для поиска юридических лиц и индивидуальных предпринимателей. Посмотрим на пример реализации новых функций для подключения:
Функция ПараметрыСервисаЮридическиеЛица() Экспорт
Результат = Новый Структура;
Результат.Вставить("URL", "https://api.orginfo.1c.ru/ws/corporation/v1?wsdl");
Результат.Вставить("Имя" , "CorpWsImplService");
Результат.Вставить("URIПространстваИмен", "http://corporation.v1.ws.orginfo.1c.ru/");
Результат.Вставить("ИмяТочкиПодключения", "CorpWsImplPort");
Возврат Результат;
КонецФункции
Функция ПараметрыСервисаИндивидуальныеПредприниматели() Экспорт
Результат = Новый Структура;
Результат.Вставить("URL", "https://api.orginfo.1c.ru/ws/entrepreneur/v1?wsdl");
Результат.Вставить("Имя" , "EntrWsImplService");
Результат.Вставить("URIПространстваИмен", "http://entrepreneur.v1.ws.orginfo.1c.ru/");
Результат.Вставить("ИмяТочкиПодключения", "EntrWsImplPort");
Возврат Результат;
КонецФункции
Обратите внимание, что теперь используются разные эндпоинты для организаций и ИП. Разберем процесс вызова метода findCorporationByInn, который пришел на смену старым процедурам:
// В функции РеквизитыЮрЛицаПоИНН(ИНН)
ПараметрыСервиса = ПараметрыСервисаЮридическиеЛица();
Прокси = ОбщегоНазначения.WSПрокси(
ПараметрыСервиса.URL,
ПараметрыСервиса.URIПространстваИмен,
ПараметрыСервиса.Имя,
ПараметрыСервиса.ИмяТочкиПодключения,
Логин, Пароль, 30);
Если Прокси <> Неопределено Тогда
ВходныеПараметры = Прокси.ФабрикаXDTO.Создать(
Прокси.ФабрикаXDTO.Тип(ПараметрыСервиса.URIПространстваИмен, "findCorporationByInn"));
ВходныеПараметры.INN = ИНН;
// Обязательно добавляем параметры конфигурации, иначе сервис может вернуть 500
ВходныеПараметры.additionalParameters = СформироватьДопПараметры(Прокси.ФабрикаXDTO);
Попытка
Ответ = Прокси.findCorporationByInn(ВходныеПараметры);
ОбъектXDTO = Ответ.РеквизитыЮрЛица;
Исключение
// Обработка ошибки
КонецПопытки;
КонецЕсли;
Современные сервисы 1С поддерживают формат адреса ФИАС. Однако старые конфигурации (УПП, КА) рассчитаны на формат КЛАДР. Если принудительно включить поддержку нового формата адреса в запросе, данные могут загрузиться некорректно или выдать ошибку при разборе XDTO.
Проанализируем функцию формирования дополнительных параметров. Рекомендуется закомментировать параметр SupportsAddressFormatV2, чтобы сервер отдавал данные в формате, совместимом со старыми справочниками адресов:
Функция ДополнительныеПараметрыВызова(ФабрикаXDTOСервиса, URI)
ТипДопПараметры = ФабрикаXDTOСервиса.Тип(URI, "AdditionalParameters");
Результат = ФабрикаXDTOСервиса.Создать(ТипДопПараметры);
// Указываем имя конфигурации
ДопПараметр = ФабрикаXDTOСервиса.Создать(ФабрикаXDTOСервиса.Тип(URI, "AdditionalParameter"));
ДопПараметр.name = "ConfigurationName";
ДопПараметр.value = "УправлениеПроизводственнымПредприятием";
Результат.Parameter.Добавить(ДопПараметр);
// НЕ включаем SupportsAddressFormatV2 для старых конфигураций
Возврат Результат;
КонецФункции
Мы рассмотрели три уровня решения проблемы с заполнением данных по ИНН. Если вы используете сильно кастомизированную конфигурацию 1С:УПП 1.3 или 1С:КА 1.1, которая не обновлялась долгое время, наиболее надежным способом будет ручная коррекция общего модуля с подстановкой новых адресов api.orginfo.1c.ru и методов findCorporationByInn / findEntrepreneurByInn. Не забывайте также проверять актуальность файла cacert.pem в каталоге платформы, так как без него даже самый правильный код не сможет преодолеть барьер безопасности SSL-соединения.