gifts2017

Создание документа через Odata

Опубликовал Дмитрий Стародубцев (belovo3000) в раздел Программирование - Практика программирования

Может, кому пригодится. Пример, как создать документ через Odata, на Инфостарте так и не нашел. Почитал документацию, поэкспериментировал и в итоге смог передать документ Реализация из УТ 10 в УТ 11.

Для работы обработки необходимо выполнить публикацию УТ 11,  для редактирования состава интерфейса можно воспользоваться обработкой http://infostart.ru/public/297325/ .Запустить обработку на УТ 10, заполнить все поля:

  • Сервер публикации - Имя сервера, на котором выполнена публикация;
  • Порт - порт сервера HTTP;
  • Имя публикации - Имя публикации, которое Вы присвоили;
  • Имя пользователя - Имя пользователя, под которым Вы подключаетесь к УТ 11;
  • Пароль - пароль пользователя УТ 11;
  • Док - Передаваемый документ РеализацияТоваровУслуг;

Некоторые строки запроса закомментированы, т.к. они мне не понадобились. Код открыт

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
СозданиеДокументаЧерезOdata.epf
.epf 11,30Kb
05.07.16
14
.epf 11,30Kb 14 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. борян петров (TODD22) 30.06.16 15:26
По производительности этого подхода не подскажешь?
За какое время устанавливается соединение?
Например за сколько по времени передаётся 1 документ?
И например 100 документов в цикле с установленным соединением?

Сейчас передаю документы через web сервис. Передача одного документа 3-6 секунд с установкой соединения. Если в цикле передавать 100 документов с установленным соединением то каждый документ вместе с проведением передаётся за 2.2 секунды в среднем.
2. Дмитрий Стародубцев (belovo3000) 30.06.16 15:37
(1) TODD22, на большом количестве не пробовал, по времени 1 документ также, (правда база на Postgresql), тут просто с самой публикацией заморачиваться не надо.
3. борян петров (TODD22) 30.06.16 16:19
(2) belovo3000, А формат O-data он для локально сети?
Как аналог web сервиса не используют? Вроде выставить с сеть как сервис?
5. борян петров (TODD22) 30.06.16 16:30
(4) belovo3000, Сколько читал так и не понимаю когда надо SOAP использовать, когда REST :)
Надо видимо ещё что то почитать :)
6. Дмитрий Стародубцев (belovo3000) 30.06.16 16:43
(5) TODD22, Ну как-то то же не задумывался, поэксперементировал с Odata, кажеться это проще чем Web-Сервис, (но только для обменов между 1С). Возможно и для сайта тоже хорошо. Во всяком случае вот тут очень интересное решение Offline-first javascript framework OData Rest клиент 1С
7. Евгений Маляров (unpete) 01.07.16 15:57
(1) TODD22,
Передача одного документа 3-6 секунд с установкой соединения
Откуда и куда передаёте? Штатно, установка соединения + авторизация + установка параметров сеанса, должна занимать не более 50-70 миллисекунд. Конечно, от конфигурации сильно зависит. Особенно, от использования RLS и сложности запросов при установке параметров сеанса.
Если надо передать много объектов, их логично сначала завернуть в массив или blob, затем отправлять одним запросом на сервер.
8. борян петров (TODD22) 01.07.16 16:18
(7) unpete, У меня пока что две базы. На одном ПК.
Одна база серверная. 1С сервер установлен на этом же ПК. Вторая файловая на этом же ПК.

Из одной базы передаю в другую 3-4 параметра и таблицу со строками. Их то же не много. Но даже простая функция принимающая на вход два параметра один строка, второй дата.
Отрабатывает за 6-10 секунд. После того как я сделал в передающей конфигурации WS-ссылку. Стало отрабатывать за 3-6 секунд.

Конфигурация типовая Розница 2. Вэб сервис то же типовой у бонусного сервиса. Немного переписан под себя.
Судя по замерам и тд. Дольше всего отрабатывает именно установка соединения. Потому что далее код выполняется быстро.
Даже пробовал весь код выполняемый в функции сервиса закомментировать. Быстрее работать не стало.

Может это из за проверки прав или ещё чего то... Даже и не знаю. В принципе сокращение времени с 6-10 до 3-6 секунд меня устроило. Но конечно хотелось бы 2-3 секунды.
9. Евгений Маляров (unpete) 01.07.16 19:39
(8) TODD22,
Может это из за проверки прав или ещё чего то
Розницу 2 не открывал, но в УТ11, ERP2.1 и КА2.0, права пользователя очень важны. Разница может превышать 10 раз для обычного и полноправного пользователя. Это особенность RLS, для работы которого требуются сложные подготовительные запросы. При работе клиента 1С, это проблем не создаёт, т.к. параметры готовятся один раз при старте приложения, но каждое обращение к web и http сервисам - это полноценный сеанс, в начале которого выполняется такой же серверный код, что и при старте клиентского приложения.
Есть много способов организовать быстрый http интерфейс, реализация может сильно отличаться в зависимости от задачи.
10. Дмитрий Стародубцев (belovo3000) 03.07.16 08:56
(9) unpete, Евгений добрый день. Я знаю что с Odata Вы работаете давно. нигде в описании не мог найти как сделать так чтобы при загрузке проверялась ссылочная целостность. Например передаем номенклатуру в ТЧ документа, а в базе получателе такой номенклатуры нет. На данный момент заходишь в документ и там Объект не найден....?
11. борян петров (TODD22) 03.07.16 15:25
(10) belovo3000,
На данный момент заходишь в документ и там Объект не найден....?

Я у себя сделал так. У меня в базу через вэб сервис передаются документы. НСИ передаётся по идентификатору. Если по идентификатору не найдено то создаётся новый пустой элемент которому назначается этот идентификатор.
И отдельно сделана загрузка НСИ. При загрузке осуществляется поиск по идентификатору и дозаполняется элемент.
12. Дмитрий Стародубцев (belovo3000) 03.07.16 20:45
(11) TODD22, а загрузка всех НСИ или только тех которые не найдены при передаче документа? Если только тех которые не найдены, как источник знает какие именно не найдены?
13. борян петров (TODD22) 04.07.16 05:14
(12) belovo3000, На планах обмена можно сделать. Но с ним заморачиватся было некогда. Сделал просто через проверку ключевых полей. Они по мимо того что могут быть не заполнены, могут и изменится....
Ну а так как в базу в которую я загружаю у меня там то же РИБ. То гружу не все, а только те что в результате проверки надо записать или обновить. А иначе всё это регистрируется в РИБ и по узлам расходится. У меня номенклатуры не много.... 2500 позиций. Обмен НСИ занимаетя несколько минут.

По правильному конечно надо сделать через планы обмена и через регистрацию изменений справочников.
14. aspirator 23 (aspirator23) 09.07.16 15:43
(8) TODD22, использую web-сервис. Полный цикл(подключение-запрос-ответ) из интернета на 8.1 - 0,15сек, на 8.2 - 0.5 сек. Запрос простой, таблица для выборки небольшая, rls нет. Для скорости важно поддерживать активным соединение web-сервер - сервер 1с. На клиенте самый долгий - первый запрос. Его нужно актуализировать заранее.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа