При формировании печатных форм договоров, кадровых документов и отчетов пользователи конфигураций 1С:ERP, 1С:Бухгалтерия или 1С:ЗУП могут столкнуться с критической ошибкой: Ошибка при вызове сервиса склонения. Ошибка разбора SOAP сообщения: неверная версия сообщения или WSDL должен содержать элемент definitions: Неверный формат. В результате наименования должностей, подразделений и ФИО сотрудников перестают автоматически склоняться по падежам.
Разберем детально, почему возникает данная проблема и какие существуют способы её устранения как на уровне настроек программы, так и программными средствами 1С.
Проанализируем техническую сторону вопроса. В старых релизах конфигураций 1С (в частности, в ERP 2.2 и библиотеке стандартных подсистем ранних версий) обращение к внешнему сервису склонения строилось на базе протокола SOAP. Механизм использовал объекты WSОпределения и WSПрокси для загрузки схемы WSDL и вызова метода GetXml.
Поставщик внешнего сервиса полностью прекратил поддержку устаревшего протокола SOAP и отключил точку доступа WSDL. При попытке программы прочитать схему по старому адресу сервер возвращает ошибку, так как вместо XML-описания WSDL передается ответ об ошибке или веб-страница. Соответственно, встроенный конструктор WSОпределения падает с исключением.
Рассмотрим основной и самый надежный способ решения проблемы для типовых конфигураций. Фирма «1С» в актуальных версиях Библиотеки Стандартных Подсистем (БСП) и прикладных решений (ERP 2.4/2.5, КА, ЗУП, БП) полностью переработала подсистему Склонение представлений объектов.
Если конфигурация существенно доработана и оперативно выполнить обновление невозможно, разберем программное решение. Заменим устаревший вызов 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.Закрыть();
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Склонение", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;
Посмотрим на штатные возможности современных версий платформы 1С:Предприятие (начиная с релиза 8.3.13). В платформу встроен метод глобального контекста ПолучитьСклоненияСтроки(), который производит морфологический разбор локально, без отправки данных во внешние веб-сервисы.
// Получение склонений строки встроенными средствами платформы
ПараметрыСклонения = "Падеж = Дательный";
Склонения = ПолучитьСклоненияСтроки("Генеральный директор", ПараметрыСклонения);
Если Склонения.Количество() > 0 Тогда
РезультатВДательном = Склонения[0]; // "Генеральному директору"
КонецЕсли;
Преимущества данного подхода:
Выясним, как устранить ошибки при формировании документов без доработки кода. В типовых решениях 1С предусмотрен регистр сведений СклоненияПредставленийОбъектов.