Новый wsпрокси конструктор не найден
Предлагаемая разработка предоставляет программистам 1С функцию склонения по падежам слов и словосочетаний на русском и украинском языках, а также функцию формирования прописи чисел в заданном падеже. Программа умеет склонять фамилии, имена и отчества, а также должности, названия отделов и юридических лиц (на украинском пока только ФИО). Указание пола не требуется. Наоборот, программа автоматически определяет и выдает грамматический род словосочетания, по которому определяется пол лица. Алгоритм демонстрирует высокое качество склонения, а для случаев, когда программа все же ошибается, предусмотрен сервис оперативного исправления ошибок. Программа реализована в виде веб-сервиса, доступного бесплатно всем желающим (до 1000 запросов в сутки). Для вызова функции склонения из 1С 8.2 достаточно 3 строчек кода, при этом не нужно включать в конфигурацию никаких дополнительных DLL. Пример обработки на языке 1С прилагается.
Реализуемые функции
Например, на входе:
ведущий инженер-программист III категории |
И. | ведущий инженер-программист III категории | ведущие инженеры-программисты III категории |
Р. | ведущего инженера-программиста III категории | ведущих инженеров-программистов III категории |
Д. | ведущему инженеру-программисту III категории | ведущим инженерам-программистам III категории |
В. | ведущего инженера-программиста III категории | ведущих инженеров-программистов III категории |
Т. | ведущим инженером-программистом III категории | ведущими инженерами-программистами III категории |
П. | о ведущем инженере-программисте III категории | о ведущих инженерах-программистах III категории |
Род: мужской |
Число поддерживаемых типов слово сочетаний не ограничено фамилиями и должностями. Программа умеет склонять также названия подразделений, юридических лиц, географические названия и многое другое. Высокое качество склонения обеспечивается использованием словарей, в частности, «Словаря имен собственных» Ф.Л. Агеенко на 38 000 единиц. За 9 лет работы над «Морфером» было составлено более 27 000 примеров склонения для русского и более 11 000 для украинского языка. База примеров постоянно пополняется и используется для контроля качества продукта.
Веб-сервис также реализует функцию прописи чисел и денежных сумм в произвольном падеже, позволяющую формировать такие фразы как: «в течение 7 (Семи) календарных дней» («21 календарного дня»), «в размере 1000 (Одной тысячи) рублей» («десяти тысяч рублей») и т.п. Склонение единицы измерения также осуществляется автоматически. Нет необходимости указывать заранее все падежные формы ("рубль", "рубля", "рублей").
Быстрый старт: склонение должности
Программа для склонения должности будет выглядеть так:
Для украинского языка функция склонения называется СклонятьУкраинский:
Украинская версия пока лучше всего справляется с фамилиями, именами и отчествами. Работа над другими типами словосочетаний ведется.
Для улучшения качества склонения можно передавать признаки.
На данный момент доступны след. признаки: name, feminine, masculine, neuter, animate, inanimate, common, plural.
Функция построения прописи числа в любом падеже
Функция ПрописьРусский (ПрописьУкраинский) решает две родственные задачи: получение прописи числа (тысяча сто двадцать пять) и согласование единицы измерения с предшествующим числом (1 попугай, 2 попугая, 5 попугаев). Пример:
Функция принимает два аргумента:
n – целое положительное число.
unit – единица измерения – слово или словосочетание в именительном падеже единственного числа: «рубль», «доллар США», «календарный день», «новое письмо» и т.п. Если слово употребляется только во множественном числе, то указывается форма именительного падежа множественного числа: «сутки», «брюки», «ножницы».
Результат, возвращаемый функцией Прописьрусский, содержит два набора падежных форм: один для числа (n), другой для единицы измерения (unit). Комбинируя соответствующие падежные формы n и unit, можно получить вывод «суммы прописью» на любой вкус:
Комбинировать имеет смысл только соответствующие падежные формы n и unit – именительный с именительным, родительный с родительным и т.д. Например, для получения фразы "в размере N рублей (долларов, евро. )", берем родительный падеж (Р): в размере + двухсот тридцати пяти + рублей.
Склонение прилагательных по родам
Функция СклонятьПрилагательноеПоРодам склоняет данное ей прилагательное, преобразуя его из мужского рода в женский, средний и во множественное число:
Авторизация
Для получения доступа к тегам род, откуда, куда, где, а так же снять ограничение на кол-во запросов в сутки, нужно купить подписку на сайте Морфер.Авторизация("ваш токен");
Обработка ошибок
В данном случае ошибка возникла из-за того, что склоняемая строка не содержит ни одного русского слова. Другой возможный случай – когда склоняемая строка содержит количественное числительное («тридцать три коровы»). Такие словосочетания программа не обрабатывает, выдается ошибка.
Совместимость и устранение неполадок
Модуль выпускается в двух вариантах для 8.3.16 и 8.2. Версии отличаются только тем, что версия 8.3.16 использует встроенный десериализатор JSON.
Оперативное исправление ошибок склонения
Склонение как языковой феномен изобилует неоднозначностями, особенно в области имен собственных. В городе Москва или в городе Москве? В республике Корея или в республике Корее? В Тушино или в Тушине? Обладатели «диковинных» фамилий часто не любят, чтобы их склоняли. Скажем, если у человека фамилия Груздь, он будет требовать, чтобы его фамилию не склоняли, часто вопреки правилам русского языка и всеобщему мнению. Но если он ваш начальник, то неизвестно еще, кто останется Груздём, если вы позволите себе просклонять его в договоре.
Не секрет, что алгоритм автоматического склонения тоже может ошибаться – не знать какого-либо слова или запутаться в сложной синтаксической структуре. Что делать, если машина склоняет не так, как надо, а документ должен быть на столе у начальника через 10 минут? Хорошо, если система позволяет вручную исправлять документ после его выдачи. Но исправлять фамилию начальника в каждом приказе тоже не дело. Традиционное решение этой проблемы (если руки дойдут до его реализации) – хранение падежных форм в таблице-справочнике, которая заполняется вручную.
Установка веб-сервиса в вашей локальной сети
Многие пользователи веб-сервиса высказывали желание иметь «такой же сервис, только у себя», т.е. иметь возможность развернуть веб-сервис в своей локальной сети. Это решило бы проблему с использованием веб-сервиса на рабочих местах, где нет доступа к Интернету, а также проблему с законом «О защите персональных данных», требующим обеспечения конфиденциальности таких данных.
В ответ на эти пожелания был создан вариант веб-сервиса, допускающий установку на сервере в локальной сети предприятия или непосредственно на машине пользователя, если пользователь один. Новый продукт получил название «Морфер.Сервер». Он реализует те же функции, что и общедоступный веб-сервис, включая функцию поддержания пользовательского словаря, и работает в сотни раз быстрее из-за того, что локальная сеть быстрее Интернета.
Для переключения с «глобального» на «локальный» сервис достаточно изменить код следующим образом:
Здесь comp001 – это сетевое имя компьютера, где установлен веб-сервис. Во второй строчке изменять ничего не нужно.
* Количество плюсов и минусов дано на момент публикации.
В «Морфере» учтены многие пожелания к системам подобного рода, а именно:
Кроме того, отличительными особенностями «Морфера» являются:
- Простой API: склонение всех типов словосочетаний производится одной функцией. Нет необходимости указывать тип словосочетания (ФИО, должность, подразделение. )
- Не требуется указание пола. Наоборот, программа автоматически определяет и выдает грамматический род словосочетания, по которому однозначно определяется пол лица.
- Высокое качество склонения, достигаемое использованием комбинированного подхода – алгоритмы для кодирования правил и словари для учета исключений. «Морфер» вобрал в себя несколько многотысячных словарей, годы кропотливой работы, учета замечаний и пожеланий пользователей.
Жду новых ваших пожеланий и замечаний. Именно они мотивируют меня развивать продукт дальше.
Стало любопытно что за сайт и какое отношение он имеет к 1С?
Собственно почему я полез туда, есть такая функция в глобальнике
Функция ЕстьДоступКВебCервису()
Состояние(НСтр("ru = 'Ожидание ответа с веб-сервера Web-ИТС'"));
ИмяWSОпределения = ИнтернетПоддержкаПользователейКлиентСервер.ИмяWSОпределения();
ИмяURIСервиса = ИнтернетПоддержкаПользователейКлиентСервер.ИмяURIСервиса();
ОпределениеWS = Новый WSОпределения(ИмяWSОпределения);
Сервис = ОпределениеWS.Сервисы.Получить(0);
ИмяСервиса = Сервис.Имя;
ТочкаПодключения = Сервис.ТочкиПодключения.Получить(0).Имя;
КлиентWS = Новый WSПрокси(ОпределениеWS, ИмяURIСервиса, ИмяСервиса, ТочкаПодключения);
// Выполнение метода "isReady" WEB-Сервиса.
ОтветСервера = КлиентWS.isReady();
И вот тут он выпадает в исключения и
ОткрытьФорму("ОбщаяФорма.ИнтернетПоддержкаПользователейОшибкаДоступаКИнтернету");
Хотя инет есть и например страницка конфигурации из самой программы открывается
Вот и понять хочу в чём проблема и кто виноват
Т.е. когда я пытаюсь получить уникальный идентификатор он мне выдает что нет инете
История особенно замечательна.
(11) И на сайте я был, откуда я по твоему телефон узнал бы?
(15) Ты не поверишь, но в типовой 1С они оттуда пытаются получить "уникальный идентификатор" для обмена
(19) ну несовсем оттуда
видать походу сервак у них лежал, сейчас заработало
Правда счастье так и не наступило. Теперь по кнопки получить он видит интернет, просит ввести рег номер, . и все после этого ничего не происходит, ни ошибок ни присвоение номера. вообще ничего
хотя в ЖР есть запись
authUrlPassword
bp
IDCertificateED
identifierTaxcomED
IDOrganizationED
login
password
regnumber
regNumForTaxcom
session_id
taxcomUserId
taxcomUserLogin
taxcomUserRegnumbers
userId
variantBPED
ну и соответственно различные значения
(37) ну имена выше. по одной записи каждого имени, половина из них без привязок к пользователю и безнес процессу
У 4-х стоит область видимости taxcomStart
IDCertificateED
identifierTaxcomED
IDOrganizationED
variantBPED
СтруктураСтартовыхПараметровЭДО = Новый Структура;
СтруктураСтартовыхПараметровЭДО.Вставить("IDCertificateED" , ПоместитьВоВременноеХранилище(СертификатЭЦП));
СтруктураСтартовыхПараметровЭДО.Вставить("IDOrganizationED" , ПоместитьВоВременноеХранилище(Организация));
СтруктураСтартовыхПараметровЭДО.Вставить("variantBPED" , ПоместитьВоВременноеХранилище(ВариантБизнесПроцесса));
СтруктураСтартовыхПараметровЭДО.Вставить("identifierTaxcomED", ПоместитьВоВременноеХранилище(ИдентификаторОрганизации));
Процедура СохранитьСтартовыеПараметры(СтруктураСтартовыхПараметров, ОбластьВидимости) Экспорт
Для каждого ЭлементСтруктуры Из СтруктураСтартовыхПараметров Цикл
Запись = РегистрыСведений.ПараметрыИнтернетПоддержкиПользователей.СоздатьМенеджерЗаписи();
Запись.Имя = ЭлементСтруктуры.Ключ;
Запись.Значение = ЗначениеВСтрокуВнутр(ПолучитьИзВременногоХранилища(ЭлементСтруктуры.Значение));
Запись.Пользователь = "00000000-0000-0000-0000-000000000000";
Запись.ОбластьВидимости = ОбластьВидимости;
Запись.Записать();
(41) Оператор говорит, что его 1С должна выдавать. Пока что нет
Жду звонка от такскома, обещали в обед связаться с 1С, потом мне позвонить
Создал обработку из которой вызываю web сервис.
На платформе 8.3.8 работает.
На платформе 8.3.5 не запускается. При попытке выполнить(и даже открыть обработку в режиме предприятия) выводится ошибка "Конструктор не найден" на строку Прокси = Новый WSПрокси(. );
Что можно сделать?
Причину нашёл в конструкторе было много параметров указано. При чём в 8.3.8 с этими параметрами работает. А в 8.3.5 нет.
WSПрокси.По умолчанию
WSПрокси (WSProxy)
На основании определения веб-сервиса
Синтаксис:
Тип: WSОпределения.
Определение веб-сервисов, на основе которого создается данный прокси.
(обязательный)
Тип: Строка.
URI пространства имен веб-сервиса, с которым связывается данный прокси.
(обязательный)
Тип: Строка.
Имя веб-сервиса, с которым связывается данный прокси.
(обязательный)
Тип: Строка.
Имя точки подключения веб-сервиса, с которой связывается данный прокси.
(необязательный)
Тип: Число.
Таймаут соединения и операций, осуществляемых объектом WSПрокси, в секундах. 0 - не устанавливать таймаут.
Значение по умолчанию: 0.
(необязательный)
Создает прокси на основе определения веб-сервиса и связывает его с точкой подключения веб-сервиса.
--------------------------------------------------------------------------------
WSПрокси.По умолчанию
WSПрокси (WSProxy)
На основании определения веб-сервиса
Синтаксис:
Тип: WSОпределения.
Определение веб-сервисов, на основе которого создается данный прокси.
(обязательный)
Тип: Строка.
URI пространства имен веб-сервиса, с которым связывается данный прокси.
(обязательный)
Тип: Строка.
Имя веб-сервиса, с которым связывается данный прокси.
(обязательный)
Тип: Строка.
Имя точки подключения веб-сервиса, с которой связывается данный прокси.
(необязательный)
Тип: Число.
Таймаут соединения и операций, осуществляемых объектом WSПрокси, в секундах. 0 - не устанавливать таймаут.
Значение по умолчанию: 0.
(необязательный)
Тип: Строка.
Позволяет указать фактический адрес сервиса.
Если параметр не задан или задана пустая строка, то адрес сервиса выбирается из Местоположение.
Значение по умолчанию: Неопределено.
(необязательный)
Тип: Булево.
Включает использование авторизации NTLM или Negotiate на сервере.
Значение по умолчанию: Ложь.
Описание:
Создает прокси на основе определения веб-сервиса и связывает его с точкой подключения веб-сервиса.
--------------------------------------------------------------------------------
Добрго времени!
Подскажите, как привильно сделать синхронизацию контрагентов между 1С и сайтом используя веб-сервисы. При создании контрагента на сайте - он должен быть передан в 1С и наоборот, при создании в 1С - передать на сайт. Конфигурация самописная(эмитирует торговлю)
Далее оздал обработку и привзал к событию нажтия кнопки вышеуказанную функцию.
Ввылетает ошибка:
: Ошибка при вызове метода контекста (Obmen)
РезультатОбмена = ПроксиСервер.Obmen();
по причине:
Ошибка вызова операции сервиса: :WebService:Obmen()
по причине:
Ошибка SOAP сервера: Неизвестная ошибка. : Значение не является значением объектного типа (Добавить)
по причине:
: Значение не является значением объектного типа (Добавить)
Что не хватает? Как реализовать обратный обмен из сайта в 1С?? Нужно ли создвать специальную web-обработку для этих целей на языке PHP?
(3) Manticor, проверьте отладчиком, правильно ли у вас заполняются свойства "Код" и "Номенклатура"в строке
(4) VBod, кстати не могу войти в отладчик - как будто на сервер пытаюсь зайти в серверном фарианте)), у меня на форме кнопка, на ней такая процедура
КонецПроцедуры // ()
обмен уже приводил выше. Как отладку включить?))
(7) Manticor, а обработка вызова Web-Сервиса у вас расположена в той же базе, где и сам Web-Сервис что-ли?
(9) Manticor, а что бы запустить отладчик, нужно в каталоге публикации вашего сервиса на Apache открыть файл default.vrd и перед строкой
Затем в конфигураторе, в меню "Отладка" > "Подключение" > "Автоматическое подключение" установить флажок напротив пункта "Web-Сервисы". После этого можно ставить точку останова в вашей процедуре Obmen и вызывать сервис обработкой из другой базы.
Только учтите, что редактировать файл default.vrd нужно уже после публикации Web-Сервиса, т.к. при публикации он заменяется на создаваемый Apache по умолчанию.
(11) VBod, (10) VBod, сделал все как Вы и сказали, создал чистую базу, туда перенес обработку.
Единтсвенное - убрал аутентификацию, поскольку вроде с ней не работает).
В итоге код такой:
Но зато заработал после добавлени функции отладки первоначальный код - отладчик выполняет функцию obmen, однако после вызова выводится ошибка:
(12) Manticor, как-то странно, как у вас мог заработать отладчик, если на строке получения прокси, пишет что сервис не найден?
Можете показать, что у вас в настройках публикации на веб-сервере и на закладках "Операции" и "Прочее" в настройках самого веб-сервиса?
(14) Manticor, в веб-сервисе на закладке "Прочее" в "URI пространства имен" установите значение "http://www.sample-package.org".
И в коде у вас должно быть так:
(15) VBod, попробовал сделать так. Поставил аутентификацию - также как и было.
(17) VBod, спасибо большое Вам, вроде без ошибок работает, тоесть сейчас при выполнении РезультатыИмпорта имеет такие данные(скрин приложил).
Что еще нужно сделать(добавить) для полноценной синхронизации контрагентов между 1С и сайтом и наоборот??
Сейчас на выходе у нас лишь объект XDTO.
(18) Manticor, ну теперь доделывайте передачу остальных реквизитов, которые вам нужны и делайте на сайте вызов этого веб-сервиса. Неплохо бы сделать, что бы в ответ веб-сервис возвращал данные с подтверждением удачной загрузки или ошибку в случае неудачной, что позволит в случае ошибки отправлять данные повторно. Продумайте предварительную проверку (перед загрузкой), существования контрагента, это позволит избежать дублей. Затем пишите веб-сервис на сайте, для передачи контрагентов из 1С на сайт. Плюс читайте (5) и (6).
Вот с сайта в 1С как раз лучше выгружать используя Web-Сервис созданный в 1С. Т.е. вы сейчас создаете в 1С Web-сервис, который будет не передавать контрагентов на сайт, а наоборот принимать их с сайта. Это удобнее т.к. на сайте вы можете привязать вызов этого Web-сервиса к событию создания контрагента, таким образом создание контрагента в 1С у вас будет происходить практически синхронно вместе с его созданием на сайте.
(1) Manticor, а вот на сайте уже нужно будет разработать еще один Web-Сервис на PHP, который будет создавать контрагентов. Затем при создании контрагента в 1С, нужно будет вызвать этот Web-Сервис и в параметрах передавать ему данные нового контрагента. Только не забудьте учесть, что в 1С, контрагент может быть как создан, так и удален или его данные могут быть изменены, поэтому нужно учесть возможность удаления и изменения контрагентов на сайте, если они изменяются или удаляются в 1С.
Лучше создайте пустую базу и там разместите обработку вызывающую ваш Web-Сервис. И вызывайте его лучше не через статическую WS-Ссылку, а динамически:
&НаСервере
Процедура ИмпортВебСервис()
Определения = Новый WSОпределения("http://109.195.230.156/test/ws/WebService?wsdl");
Прокси = Новый WSПрокси(Определения, "http://www.my.org", "WebService", "WebServiceSoap");
РезультатыИмпорта = Прокси.Obmen();
КонецПроцедуры
При исполнении получаю:Метод объекта не обнаружен (Obmen)
На сервисе операция obmen есть
Только лучше создайте новую тему, что бы не писать здесь. А мне можете кинуть ссылку в личку. Если смогу, постараюсь помочь.
Знаю, что на хабре не очень-то жалуют многострадальную 1С. Хотя, с выходом платформы 8.3 (с клиентами под Linux), ее стали любить несколько больше. Кстати, так же, совсем недавно интерфейс одной из основных разработок 1С – конфигурация Управление производственным предприятием – был полностью переведен на английский язык. Много раз я встречал вопросы о том, почему здесь не пишут об 1С. Ответ на них довольно очевиден – существует множество специализированных ресурсов, где можно оперативно обсудить все вопросы и что-то почитать.
Есть все основания полагать, что эта статья здесь не выживет, но я все же рискну, потому что в 1С есть некоторые интересные вещи, о которых стоит рассказать.
С некоторых пор в 1С 8.х появилась возможность использования веб-сервисов: 1С может выступать как поставщиком, так и потребителем. В этой статье я покажу, как использовать 1С в качестве потребителя на примере получения курсов валют с сервера ЦБР.
Веб-сервис
Конфигурирование
Для разработки я взял 1С 8.2 (8.2.15.317 в моем случае) и создал пустую конфигурацию. Для использования внешних веб-сервисов предусмотрен объект WS-ссылки, но использовать его не обязательно, к сервису можно обращаться динамически из кода. Я буду использовать первый вариант, а затем покажу, как можно использовать второй. В конфигурации создал обработку и назвал ее «ЗагрузкаКурсовВалютЦБР». Добавил форму (управляемую) и сделал ее основной. На форме я создал реквизиты и разместил элементы управления так, как показано на рисунке.
1С на основании полученного описания автоматически создаст визуальную карту веб-сервиса. Можно увидеть название веб-сервиса, посмотреть какие у него доступны операции а так же используемые типы данных.
Конфигурирование на этом почти закончено, осталось сделать пару штрихов для того, чтобы наше приложение выглядело более эстетично. Кликнем правой кнопкой мыши по корню конфигурации и вызовем меню «Открыть командный интерфейс рабочего стола». В появившемся окне необходимо снять флаг «Видимость» напротив обработки «Загрузка курсов валют ЦБР». Нажмем кнопку Ок. Далее еще правый клик по корню конфигурации и вызовем меню «Открыть рабочую область рабочего стола», там сделаем настройку как на рисунке:
Эти настройки позволят нам отобразить форму обработки прямо на рабочем столе (имеется ввиду рабочий стол программы 1С) в режиме 1С Предприятие.
Программирование
Теперь осталось наполнить смыслом нашу обработку: заставить ее получать курсы валют и отображать в таблице на форме. В режиме редактирования формы необходимо добавить новую команду формы, назовем ее ЗагрузитьВалюты. Эту команду необходимо связать с кнопкой, расположенной на форме. Действие для команды заполним следующим кодом (прим. автора: ничего себе, на хабре есть подсветка кода 1С, правда она работает не корректно):
Здесь сначала проверяется, заполнена ли дата (если не заполнена, то сообщаем об этом пользователю и больше ничего не делаем). Затем очищается таблица, расположенная на форме и вызывается процедура ЗагрузитьКурсыВалют(), в которую передается дата.
Код процедуры ЗагрузитьКурсыВалют(), пояснения данны в комментариях к коду:
Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:
Чтобы проверить результат, нам нужно ввести дату, на которую хотим получить курсы валют и нажать на кнопку «Загрузить валюты». В случае успешного запроса, таблица на форме заполнится значениями курсов:
Напоследок хочу показать, как можно обратиться динамически к внешнему веб-сервису, то есть без добавления объекта WS-ссылка. Таким образом, мы можем использовать такие веб-сервисы из внешних обработок без привязки к конфигурации.
В процедуре ЗагрузитьКурсыВалют() строку
необходимо заменить двумя следующими строками
Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.
Как видно, использовать внешние веб-сервисы из 1С в целом довольно просто (хотя и есть некоторая сложность в понимании определения типов, у меня в том числе).
Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать.
Читайте также: