Почему перестало работать склонение должностей через веб-сервис в 1С и как это исправить?

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

При формировании печатных форм договоров, кадровых документов и отчетов пользователи конфигураций 1С:ERP, 1С:Бухгалтерия или 1С:ЗУП могут столкнуться с критической ошибкой: Ошибка при вызове сервиса склонения. Ошибка разбора SOAP сообщения: неверная версия сообщения или WSDL должен содержать элемент definitions: Неверный формат. В результате наименования должностей, подразделений и ФИО сотрудников перестают автоматически склоняться по падежам.

Разберем детально, почему возникает данная проблема и какие существуют способы её устранения как на уровне настроек программы, так и программными средствами 1С.

Причина возникновения ошибки

Проанализируем техническую сторону вопроса. В старых релизах конфигураций 1С (в частности, в ERP 2.2 и библиотеке стандартных подсистем ранних версий) обращение к внешнему сервису склонения строилось на базе протокола SOAP. Механизм использовал объекты WSОпределения и WSПрокси для загрузки схемы WSDL и вызова метода GetXml.

Поставщик внешнего сервиса полностью прекратил поддержку устаревшего протокола SOAP и отключил точку доступа WSDL. При попытке программы прочитать схему по старому адресу сервер возвращает ошибку, так как вместо XML-описания WSDL передается ответ об ошибке или веб-страница. Соответственно, встроенный конструктор WSОпределения падает с исключением.

Способ 1. Обновление конфигурации или подсистемы БСП

Рассмотрим основной и самый надежный способ решения проблемы для типовых конфигураций. Фирма «1С» в актуальных версиях Библиотеки Стандартных Подсистем (БСП) и прикладных решений (ERP 2.4/2.5, КА, ЗУП, БП) полностью переработала подсистему Склонение представлений объектов.

  1. Выполним обновление конфигурации до актуального релиза.
  2. В новых релизах подсистема склонения переведена на современный REST API, использующий HTTP-запросы в формате JSON, что исключает зависимость от устаревшего WSDL-файла.

Способ 2. Доработка механизма через HTTP-соединение

Если конфигурация существенно доработана и оперативно выполнить обновление невозможно, разберем программное решение. Заменим устаревший вызов SOAP на прямой вызов REST API с помощью объекта HTTPСоединение.

Переопределим логику в общем модуле СклонениеПредставленийОбъектов или вынесем её в отдельное расширение конфигурации:


// Пример выполнения запроса к сервису склонения через HTTP
Сервер = "apertium.org"; // Или другой актуальный сервис склонения
HTTPСоединение = Новый HTTPСоединение(Сервер, 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL());

ТекстЗапроса = "/api/v1/morpher?text=" + КодироватьСтроку(ИсходныйТекст, СпособКодированияСтроки.КодировкаURL);
HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");

Попытка
    HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
    Если HTTPОтвет.КодСостояния = 200 Тогда
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку());
        РезультатСклонения = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
    КонецЕсли;
Исключение
    ЗаписьЖурналаРегистрации("Склонение", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;

Способ 3. Использование встроенного метода платформы 1С

Посмотрим на штатные возможности современных версий платформы 1С:Предприятие (начиная с релиза 8.3.13). В платформу встроен метод глобального контекста ПолучитьСклоненияСтроки(), который производит морфологический разбор локально, без отправки данных во внешние веб-сервисы.


// Получение склонений строки встроенными средствами платформы
ПараметрыСклонения = "Падеж = Дательный";
Склонения = ПолучитьСклоненияСтроки("Генеральный директор", ПараметрыСклонения);

Если Склонения.Количество() > 0 Тогда
    РезультатВДательном = Склонения[0]; // "Генеральному директору"
КонецЕсли;

Преимущества данного подхода:

  1. Автономность: работа не зависит от наличия подключения к интернету и доступности сторонних серверов.
  2. Бесплатность: отсутствуют лимиты на количество запросов в сутки.
  3. Скорость: локальный вызов в разы быстрее сетевого обращения.

Способ 4. Ручной ввод и кэширование склонений

Выясним, как устранить ошибки при формировании документов без доработки кода. В типовых решениях 1С предусмотрен регистр сведений СклоненияПредставленийОбъектов.

  1. Откроем карточку проблемной должности, физического лица или подразделения.
  2. Перейдем по ссылке склонений (кнопка Склонения или ссылка рядом с наименованием).
  3. Заполним вручную падежные формы (родительный, дательный, винительный, творительный, предложный).
  4. Сохраним изменения. При дальнейшей печати документов система сначала проверяет сохраненные данные в регистре и не обращается к внешнему веб-сервису.
← На главную