Также прилагаю пример мобильного приложения для работы с данным сервисом (получает номенклатуру и остатки на складе). Сервис очень быстро разворачивается и масштабируется под ваши задачи.
Введение
Доброго дня! Данный сервис получился действительно удобным и активно используется нашей командой в различных системах учета.
Основное его преимущество, как я считаю, это доработка без изменения конфигурации. Однажды добавив сервис в конфигурацию, вы больше его не изменяете, а дорабатываете внешнюю обработку, в которой и находятся обработчики http-запросов.
Кратко принцип работы
Итак, мы добавили наш сервис в конфигурацию и перед нами стоит задача получать в мобильном приложении (или в любом другом)
номенклатуру из нашей базы. Используемый формат запросов это JSON.
Приложение клиент должно отправлять JSON вида:
{
"method":"GetGoods",
"params":{
"code":"12345"
}
}
То есть это структура со свойством "method" и свойством "params". Когда наш сервис получит этот запрос он запустит функцию во внешней обработке с именем "GetGoods" и передаст ей в качестве параметра структуру "params".
В функции "GetGoods" у нас будет запрос, который получает номенклатуру. Таким образом, по большому счету, для получения требуемых данных мы реализуем только функцию (во внешней обработке) указанную в запросе и формируем в ней запрос во выборке данных.
К примеру функция GetGoods:
Функция GetGoods(Параметры)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ref,
| Номенклатура.ЭтоГруппа КАК IsGroup,
| Номенклатура.Наименование КАК Name,
| Номенклатура.Код КАК Code
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа";
Рез = Запрос.Выполнить().Выгрузить();
МассивСтруктур = ТаблицаЗначенийВМассивСтруктур(Рез);
Возврат МассивСтруктур;
КонецФункции
В такой реализации функции наш http-сервис вернет ответ со следующим JSON:
[
{
"Ref":"f93e112a-c83a-11e2-8026-0015e9b8c48d",
"IsGroup":false,
"Name":"Бутылка ",
"Code":"ЦУ-00000053"
},
{
"Ref":"f93e112c-c83a-11e2-8026-0015e9b8c48d",
"IsGroup":false,
"Name":"Ящик ",
"Code":"ЦУ-00000054"
},
...
Т.е. это будет массив структур с полями запроса.
Еще один большой плюс данной разработки это отладка без участия приложения клиента.
Допустим мы решили, что будем отправлять какой-то запрос и реализовали для него функцию в обработке,
теперь нам нужно проверить, что же вернет http-сервис.
Открываем нашу внешнюю обработку (в которой мы уже реализовали функцию),
вставляем наш запрос, и, вуаля, получаем данные ответа в JSON:
Ну вот. Все просто и доступно) Пользуйтесь)
Кстати, в загрузках есть пример мобильного приложения, которое получает номенклатуру и остатки из нашей базы (в примере используется УТ 11).
Дополнительная информация
Внешняя обработка сервиса должна быть добавлена в базу ("Дополнительные отчеты и обработки")
Сервис работает на конфигурациях с управляемыми формами. Использовался с УТ 11, Розница 2, Бухгалтерия 3.
Если есть потребность для конфигураций на обычных формах, пишите в комментариях — сделаем.
Последний раз тестировался на платформе (8.3.13.1513), но работает и на более ранних версиях.
В файлах поставки:
Конфигурация с http-сервисом, внешняя обработка.
Дополнительно для скачивания: пример мобильного приложения для работы с данным сервисом.
(1) Возможно) но поможет ли odata если нужно получить результаты сложного запроса с вложенными запросами и с соедиениями?
(1) вот именно, что это пример. Только это не очередной велосипед типа «odata», а реализация удаленного вызова процедур RPC, если более конкретно, то JSON-RPC. И реализовать можно что угодно, хоть получение данных (как вернуть номенклатуру с остатками и несколькими видами цен с помощью odata, особенно если сторонняя система требует формат json с определенной структурой?), так и запись данных и/или их доп обработку.
(2)
Не поможет. Я к тому и говорю…
Вы демострируете пример который не требует вашего решения! Простым языком «Вы не продали мне ручку»!
(3)
Я правильно понимаю что вы классифицируете odata — велосипедом?
А вот такую задачу полтора года назад я кстати делал по odata.
Еще раз повторю. Демонстрация обработки это как продажа. Нужно показать ее сильные стороны, показать сложный пример который она решает. А не стрелять из базуки по мухам.
Вот и все что я хотел вам донести в первом сообщении.
(4) oData это конечно круто, но если работать из под андроид, retrofit, как пример, ничего не знает об этом протоколе. А довольно таки удобная библиотека.
+ сервисов еще в том, что логика обработки данных на стороне сервиса скрыта и может быть любой формы сложности, а не быть ограниченной рамками спецификации конкретного протокола.
Поэтому не надо смешивать людей и коней в кучу 🙂
(3) да сравнивать протокол odata с мощью платформы 1С как то странно 🙂
odata решает вопросы интеграции сторонних систем, которые ничего не знают об 1С. Это ее преимущество. Возможность удаленно не только получать данные, но еще и удаленно их менять. А для решения обмена данными между мобильными устройствами и сервером, HTTP-сервис имеет значительные преимущества, т.к. позволяет подготовить данные в нужном виде и нужного объема.
(6) о каких сторонних системах идёт речь? Может ли программист 1с посмотреть как происходит процесс на их стороне?
Или что он должен знать и чего не должен знать?
(5)
А ограничение в объеме данных на стороне Веб-сервера не действует?
Вы суть того, что я написал не уловили.
Давайте так… Чтобы продавать мерседесы, нужно продавать мерседесы, а не демонстрировать Автоваз и говорить что мерседес это круто.
тоже самое я вот тут написал
и вот тут
П.С. Я не против данного решения, я против такой демонстрации.
В своей работе сам использую http-сервисы, люблю их и продвигаю! Можете по моим публикациям увидеть мою к ним любовь ;))
В данный момент сам пишу универсальное решение(поспособствовала хорошая халтурка), только оно будет не через доп обработки(хотя и эту подсистему я очень люблю).
Доп обработки привязаны к БСП, а это с одной стороны плюс, а с другой минус.
(7) например, Power BI
да в принципе, о любой системе, будь то какой нибудь интернет-магазин или учетная система.
Программисту 1С вообще ничего не надо знать, он дает лишь описание объектов и как с ними работать.
(8) что то я вашей логики не улавливаю про объемы данных.
Что то, что то, работает только при наличии WEB-сервера. Как раз HTTP сервис и позволит вам сделать данные более компактными, в отличии от odata.
Предложенное решение довольно таки интересное. И суть не во внешней обработке, а в том, что на вход подаешь метод, а на выходе результат. Причем, результат можно получить используя всю мощь 1С.
odata — это вообще отдельная тема
(10)Про объем данных ->HTTP Сервисы: Путь к своему сервису. Часть 4
а сильная сторона, то что я могу, как программист 1С, получить все.
А вот через odata далеко не все и в том виде, в котором мне надо.
а у odata одна сильная сторона, там не нужен программист 1С 🙂 и сам протокол позволяет манипулировать данными на стороне самой 1С.
Что автор должен вам показать из примера, что бы вас впечатлило? Сама возможность управлять процессом, это уже одна из сильных сторон )
(11) ну и что? если есть технического ограничение на объемы передаваемых данных, кто мне запрещает выполнить 10 последовательных запросов, а не 1?
Мы говорим с вами о разных вещах. У Apache немного другие настройки.
(9) т.е. в этом случае вопрос зачем вообще они нужны не обсуждается?
(14) кто они и что значит нужны?
я уже объяснил, ODATA и HTTP-сервис используют разную парадигму. Это как палец с пятой точкой сравнивать.
(13)
Мы начиная с вашего (5) комментария говорим о разных вещах…
Я пытаюсь донести, что ДЕМОНСТРАЦИЯ плохая.
И поверьте я прекрасно понимаю какие плюсы и минусы в данном решении.
Для небольших проектиков оно очень даже сгодится, для серьезных вещей сыровато.
например, я из Power BI могу получить данные из любого справочника или регистра. Мне ничего не надо знать про 1С, кроме как называется объект в системе к которому я обращаюсь и как составить правильный запрос ODATA
(17) что там сырого?
работает да и работает. А надо будет допилить, так напильник всегда под рукой. Это же для программиста решение, а не для конечного пользователя.
(17) взяли затулили один веб сервис, а реализацию сам себе пиши во внешних обработках такую какую хочешь. Как по мне так не плохо. Мне из скринов, все устроило, все понравилось и я лично понял зачем мне это надо.
(18)Исходя из своего опыта могу сказать, что там пилить и пилить… Но для небольших задачек сгодится.
Не вижу смысла все описывать…
(20) ну так автор же и не предлагает это использовать в промышленных маштабах 🙂
(19)
Я о том и говорю Вы поняли, я понял. А почему?
Потому, что опыт есть.
Вас это решение устраивает полностью. Качайте и пользуйтесь.
Меня не устраивает, у меня задачи серьезнее и на данный момент более серьезный инструмент уже наработал.
Минусы перечислять не буду, но плюсы есть не спорю.
(22) так я ж не спорю 🙂 под каждую задачу свое решение
(21)Вы издеваетесь?
Я еще раз говорю, что пример с выборкой номенклатуры — это ОЧЕНЬ ПЛОХОЙ ПРИМЕР, так как такую вещь можно сделать более простым способом нежели предложенная обработка.
И только — это мне не нравится в таких решениях, коих на инфостарт выкладывают регулярно.
П.С. ВОПРОС ИСЧЕРПАН!!!
(24) а что он должен был вам предложить? 🙂
ну блин, это же ресурс для программистов.
А вы что, в своих фантазиях дальше выборки номенклатуры ограничены? Если вы понимаете разницу между одата и хтпп сервисом и принципами обработки информации, то сами можете догадаться, что засунуть во внешнюю обработку можно любой алгоритм, даже самый извращенный, который не снился разработчикам одаты )
и не надо так нервничать )
+ человек оформил публикацию согласно правилам инфостарта 🙂
(25)
Мне лично ничего. Но если в аргументах идет сложная выборка, дак ее и надо было показывать в демонстрации. Логично?
В том то и дело что не только для программистов…
Я не люблю переливать из пустого в порожнее
(27) ну конечно, когда мы с вам о разных вещах говорим.
Мне достаточно простого примера, что бы понять основную идею — вынести во внешние обработки логику, вам же надо показать пример с 1000 строк кода.
Вы, конкретно, придираетесь к демонстрации, а не к сути решения.
И это решение сугубо для программиста, т.к. конечный пользователь с ним ничего не сможет сделать.
(28)Вы допускаете, что программист освоил OData, но не освоил http-сервисы?
Или он вообще не освоил не то не другое…
Я лично допускаю такие вещи, так как провожу собеседования.
(29)я допускаю, когда программист может вообще не знать, что такое OData и http-сервисы 🙂
если он с ними никогда не работал.
но суть вопроса я не полностью уловил.
Если мне дают что то в руки, то что я не знаю, я сначала изучаю предмет, а потом начинаю с ним работать.
Не понимаю, как можно работать с черным ящиком
(30)
Если мне дают что то в руки, то что я не знаю, я сначала изучаю предмет, а потом начинаю с ним работать.
Не понимаю, как можно работать с черным ящиком
Вот вы уже на правильном пути, осталось чуть чуть и вы мои слова произнесете.
Будут они возиться с этим черным ящиком?
(31) я бы таких лодырей на работу не брал бы
я скачал конфигурацию, за 5 минут разобрался как работает.
Кстати, код очень аккуратный
причем, достаточно все просто написано, без пафоса, с использованием Вычислить () 🙂
Если взять напильничек, то в принципе идея не плохая
(32)
А кто сказал, что они лодыри?
Просто работали там где это было не нужно, ну и прокачивали что то другое.
Кстати, код очень аккуратный
Как они поймут, что им нужна эта разработка?
(34) вы такие вопросы задаете. это вообще то их проблемы. Для меня такие вопросы дикость. Я когда ищу инструмент для решения вопроса, пишу его или сам или, если не хватает квалификации (например, в Android) ищу нужную библиотеку.
А потом читаю и эксперементирую. Тем более, если это бесплатная библиотека. А тут вам бесплатно, да еще и руководство по использованию предоставь 🙂
странные у вас программисты работают
(35)Вот этим отличается программист от продавана.
Но лучше когда программист умеет себя продать!
Продажа ручки, просто и наглядно
(36) согласен.
Но я все же исповедую из опыта другую концепцию — разделение труда.
Программист должен хорошо программировать, а продаван должен продавать.
В мире отличном от 1С все так и организовано. Есть тупо кодеры, есть менеджеры проектов, есть дизайнеры. А в 1С все в куче, поэтому многие решения кривые 🙂
(35) в этом то и проблема. Вопрос это уже половина ответа. Не продать решение имеющегося вопроса это значит не выполнить свою половину работы.
(38) автор публикации ничего не продает, а дает возможность пользоваться своим решением.
А вы для себя сами принимаете решение, использовать его в своих задачах или нет.
Я смотрю такие решения в поисках не стандартных подходов.
противоречия одни )))
(40) Вы вырвали слова из контекста.
Http-сервис для обмена данными в формате JSON. Обработчики этого сервиса находятся во внешней обработке, что позволяет дорабатывать его без изменения конфигурации.
(40) если сделать расширение, то все будет гуд… я кстати, сначала подумал, что это расширение, ан нет 🙂
но это же не беда сделать самому ,правда? )
в примере не хватает планов обмена и процедуры фонового обмена. Для масштабирования это было-бы полезно.
(41) я не вырвал. я конкретно процитировал противоречие
(42) а потом вы еще постарайтесь его опубликовать))))
(45) не пробывал, поэтому не знаю 🙂
кстати спасибо, как то думал с расширением. но если есть такие проблемы…
(45)В чем проблемы с публикацией http-сервиса в расширении?
Вот один из примеров, проблем не наблюдал ->Мобильный клиент + HTTP Сервис + Расширение конфигурации