Стандартний інтерфейс odata. OData та інші веб-орієнтовані API-інтерфейси

Була реалізована можливість автоматично формувати REST інтерфейс OData для всього прикладного рішення. Таким чином, у нас з'явилася можливість надати повний доступ сторонньому додаткудо бази 1С буквально за кілька кліків.

Цей механізмпризначений для вирішення декількох часто зустрічаються задач:

  • Вивантаження/завантаження даних з прикладного рішення;
  • Інтеграція з інтернет-сайтами (інтернет-магазинами);
  • нарощування функціональності прикладного рішення без зміни конфігурації;
  • Інтеграція з іншими корпоративними системами(Іноді і без додаткового програмування).

REST інтерфейс OData можна використовуватиме обміну даними між базами 1С, але оскільки цього вже є інші, зручніші, механізми, то основне призначення REST інтерфейсу OData у інтеграції зі сторонніми системами.

І це дійсно зручно, якщо врахувати, що клієнти OData існують на всіх основних платформах, відповідні бібліотеки можна завантажити.

У цій статті я спробую докладно розповісти, що таке REST інтерфейс OData і як його можна використовувати.

Публікація REST інтерфейсу OData

Для використання інтерфейсу OData його потрібно опублікувати, а для цього нам буде потрібно веб-сервер - Apache 2.2 або IIS (починаючи з версії Apache 2.4). Потім потрібно зайти в меню «Адміністрування»->«Публікація на веб-сервері…».

У вікні заповнюємо потрібні поля і тиснемо «Опублікувати»:

Після цього необхідно визначити склад інтерфейсу OData, тобто. вказати - які об'єкти зміни до нього входять, а які ні (спочатку у складі немає жодного об'єкта).

Зробити це можна приблизно так:

&НаСервері Процедура ВстановитиODataНаСервері() тМасив = Новий Масив;

тМассив.Добавить(Метадані.Довідники.Товари);

Встановити Склад Стандартного Інтерфейсу OData (т Масив); КінецьПроцедури

&На сервері

Процедура ВстановитиODataНа Сервері()

т Масив = Новий Масив;

тМасив. Додати(Метадані. Довідники. Товари) ;


УстановитиСклад СтандартногоІнтерфейсуOData(тМасив) ;

  • КінецьПроцедури
  • Які найважливіші вимоги висуваються до бізнес-додатків? Одними з найголовніших є такі завдання:
Те, як вирішується в 1С перше завдання, було коротко описано в розділі «Кастомізація та підтримка» цієї статті; ми ще повернемося до цієї цікавої теми в одній із майбутніх статей. Сьогодні ж мова йтиме про друге завдання, про інтеграцію.

Інтеграційні завдання

Інтеграційні завдання можуть бути різними. Для вирішення одних досить простого інтерактивного обміну даними, наприклад, для передачі до банку списку співробітників для оформлення зарплатних пластикових карток. Для складніших завдань може бути необхідний повністю автоматизований обмін даними, можливо, із зверненням до бізнес-логіки зовнішньої системи. Є завдання, що мають спеціалізований характер, на зразок інтеграції із зовнішнім обладнанням (наприклад, торговим обладнанням, мобільними сканерамиі т.д.) або з успадкованими або вузькоспеціалізованими системами (наприклад, із системами розпізнавання RFID-міток). Вкрай важливо для кожного завдання вибрати найбільш підходящий механізм інтеграції.

Можливості інтеграції з 1С

Існують різні підходи до реалізації інтеграції з додатками 1С, який із них обрати – залежить від вимог завдання.

Давайте на хвилинку уявимо, що ми маємо інформаційні бази на платформі "1С:Підприємство 8", з даними якої нам потрібно регулярно працювати. Але, на жаль, у нас немає можливості вносити якісь свої правки до їхньої конфігурації. Можливо це (за наявності повноцінної платформи); або безкоштовна "1С: УНФ для України. Мікро"; або через переваги автоматичного оновленняне хочемо знімати підтримку; або обслуговуюча компанія назвала вартість своїх послуг, яка не отримала схвалення у керівництва, а власного "програміста 1С" немає...

І ось у таких умовах вам ставлять завдання з інтеграції цієї бази та певної зовнішньої системи. Що робити та які у нас є варіанти? Можливо в коментарях мене доповнювати, але я поки що бачу рівно 5 шляхів:

  1. Доступ до бази через сімейство COM-об'єктів(V83.ComConnector і раніше). Обмеження: платформа має бути встановлена ​​на Windows.
  2. Безпосередній доступтаблиці бази даних. Ось приклад для СУБД. . Обмеження: заборона безпосереднього доступу до даних у ліцензійній угоді; нестабільність отриманого доступу; Зміна даних може призвести до порушення логічної цілісності бази.
  3. Починаючи з версії платформи 8.3.5 з'явилася можливість надати доступ до даних через автоматичний REST-інтерфейсз урахуванням протоколу OData v.3.0. Обмеження: необхідно встановити веб-сервер та модуль розширення веб-сервера з постачання платформи.
  4. Починаючи з версії платформи 8.3.6, з'явився механізм розширеньщо дозволяє "пристебнути" нову функціональність без внесення змін до основної конфігурації. Серед нової функціональності є цікаві нам WEB- та HTTP-сервіси. Починаючи з версії платформи 8.3.11, стала доступною можливість розширення структури таблиць бази даних (додавання нових реквізитів для зберігання службових даних з метою інтеграції). Обмеження: необхідна наявність програміста, який розробить розширення і стежитиме за його працездатністю під час оновлень; для сервісів необхідно встановити веб-сервер та модуль розширення веб-сервера з постачання платформи.
  5. Можна відмовитись від "миттєвого доступу" і тоді можемо використовувати запуск зовнішніх обробок за допомогою параметра командного рядка/Execute. У такому сценарії можна зробити регулярний запуск за розкладом деякої обробки, яка перевірятиме зовнішній ресурс на наявність інструкцій до виконання та поміщатиме туди результати своєї роботи. Також можна самостійно запускати клієнтський додаток 1С на відпрацювання своїх команд, якщо є доступ до ОС, в якій знаходиться база. Обмеження: необхідна наявність програміста, який створить обробку; наявність тимчасового лага в реакції системи на значення проміжку між запусками у планувальнику або на час старту клієнтської програми.

Таким чином, серед 5 варіантів найшвидшим і найлегшим для адміністратора способом є автоматичний доступ через протокол oData. Цей варіант є кросплатформним.

А ще варіант з протоколом oData менш витратний з погляду розробки зв'язки з базою 1С. Справа в тому, що компанія Microsoft посилено його просуває. Крім випуску OData SDK для розробки під.NET, AJAX, PHP, Java, JavaScript, WebOS та Objective-C, ця компанія впровадила цей протокол у свої популярні продукти: Excel, PowerPoint, SharePoint, MsSQL та інші. Таким чином, вам не потрібно створювати свою версію CommerceML і займатися розбором XML та JSON текстів як на вашій стороні так і на стороні бази 1С, якби ви реалізовували свої власні WEB- та HTTP-сервіси. При використанні OData у вас вже відразу будуть готові бібліотеки для отримання або модифікації даних для застосування у вашій зовнішньої системи, в той час як на стороні бази 1С все буде автоматично.

Хвилина вже минула?

Можемо видихнути - у нас більше немає жодних обмежень і ми можемо робити будь-яку інтеграцію, яку захочемо! Я спеціально обмежив нашу фантазію на початку, щоб болісно довго не перераховувати всі варіанти з відомої книги "Технології інтеграції 1С:Підприємства" ISBN 978-5-9677-1462-7 авторства Гончарова Д.І. і Хрусталева Е.Ю (і більше не витрачати час на перерахування слабких сторін цих варіантів). Можете повірити мені на слово або можете почати дискусію в коментарях, але варіант з OData все одно залишається найпривабливішим.

Для тих, хто зацікавився темою, прошу перейти на офіційний сайт протоколу – www.odata.org. Ще раз звертаю увагу, що незважаючи на те, що актуальна версіяпротоколу вже 4.0 і вона була стандартизована консорціумом OASIS ще 17 березня 2014 року, але в платформі "1С:Підприємство 8", як і раніше, використовується протокол більше ранньої версії 3.0. До речі, не забудьте заглянути в розділ екосистеми протоколу та помилуватися згадкою нашої 1C:Enterprise, яка йде першою у списку:))

Необхідні налаштування

Як я вже згадував, у вас має бути веб-сервер. Починаючи з версії 8.4 у складі серверної частини платформи вже буде свій власний веб-сервер, але поки що нам потрібно користуватися сторонніми - IIS або Apache. Як все налаштувати добре описано у жовтій книжечці для адміністратора. Але якщо ви любите картинки і чужий досвід, то ось смикав у пошуку: , і звичайно ж :) За повноту та актуальність наданих даних у зазначених статтях не ручаюся і взагалі не знайомий з авторами. Якщо виникнуть проблеми, читайте Керівництво Адміністратора від вашої версії платформи - там є все, що вам знадобиться.

Після того, як у вас вже встановлений веб-сервер і він вже не падає при запуску через проблеми з розширенням доступу до 1С (давайте вгадаю - ви поставили 32-розрядний Apache і 64-розрядну платформу), залишилося трохи. У конфігураторі заходимо в меню "Адміністрування" та натискаємо на команду "Публікація на веб-сервері...". У віконці необхідно вказати наступні важливі моменти:

  • Назва вашої бази в полі "Ім'я", по якій веб-сервер надаватиме до неї доступ (якщо не хочете проблем, то не пишіть на кирилиці);
  • Вкажіть веб-сервер, який встановлено на даному комп'ютері(якщо у вас встановлено цілих два веб-сервери, то у списку, що випадає, буде вибір);
  • Шлях до каталогу публікації, до якого має бути доступ у вибраного веб-сервера;
  • І найголовніше - галочка "Публікувати стандартний інтерфейс OData"!

Після натискання на кнопку "Опублікувати" за вказаним у налаштуванні шляху буде створено файл default.vrd (XML-файл, який містить дані, які ви зробили в налаштуваннях публікації), а в конфізі веб-сервера буде додано запис про вашу публікацію з тим ім'ям , що ви вказали. Після публікації веб-сервер варто перевантажити.

Декілька зауважень щодо виконання публікації. Якщо у вас до публікації кілька баз, то для кожної з них має бути свій каталог. Відразу подумайте про користувача, яким збираєтеся отримувати доступ до бази - у нього повинні бути потрібні ролі та ім'я латинськими літерами без спецсимволів (якщо вам у майбутньому хочеться воювати з кодуванням, то можете зробити ім'я російською з пробілами). Якщо ви працюєте на Windows і у вас включено UAC, то перед публікацією конфігуратор слід запускати від імені адміністратора. Якщо ви працюєте на Linux – тримаєтеся, ми у вас віримо! :)

Ось як виглядає робочий default.vrd із публікацією інтерфейсу OData:

Як видно з файлу публікації - веб-серверу абсолютно все одно, де фізично знаходиться інформаційна база, шлях до неї прописується так само, як ви його прописуєте у списку баз початкового вікна. Головне, щоб на одному комп'ютері з веб-сервером було встановлено розширення доступу і місцезнаходження бази було по мережі фізично доступне для служби веб-сервера з правами на зміну. Також можливі проблеми з отриманням ліцензії і потрібно буде покопатися у файлі nethasp.ini, але це все стандартні процедури звичайної установкиплатформи.

Після того, як ви виконали публікацію та перезапустили сервер, можемо перевірити результати у браузері. Для цього потрібно вказати ім'я веб-сервера, далі ім'я бази публікації, далі шлях /odata/standard.odata/ . У вас повинні запросити пароль і ви побачите щось схоже на це:

Щоб продемонструвати можливості технології, що розглядається в статті, я взяв конфігурацію ""Управління торгівлею (базова)", редакція 10.3", в якій встановлений режим сумісності "Версія 8.2.13" і тому всі метадані через REST-інтерфейс доступні відразу, а виклик функції Встановити Склад Стандартного Інтерфейсу OData () для керування доступністю складу заборонено.

Якщо ж у вас є допрацьована торгівля 10.3, якою ви встановили режим сумісності "Версія 8.3.5" або вище, або якщо у вас є більш сучасні конфігурації, то всі метадані будуть приховані і вам потрібно буде скористатися спеціальною обробкою для вказівки видимості необхідних даних. Щоб не витрачати час на створення своєї обробки, можете скористатися моєю роботою, яка підходить як для звичайного так і для керованого інтерфейсів (див. вкладення).

Бурчання...

Якщо чесно, то я не дуже зрозумів цю ідею з налаштованим списком метаданих. Якесь половинчасте рішення. Якщо метою було збільшити безпеку, то чому для даних, що дозволяються, відразу дають повний доступ на редагування і видалення, а не зробити більше тонке налаштуванняправ із можливістю надати лише читання? Можна звичайно вирішити питання прав за допомогою спеціально налаштованої ролі, але це вже зайва модифікація прикладного рішення, і навіть у цьому випадку я не пущу в базу по REST-інтерфейсу нікого, крім серверних сценаріїв свого сайту (back-end), який буде приймати рішення віддавати, а що ні.

Якщо вони хотіли мінімізувати обсяг інформації, що передається, то ще більш сумнівне рішення - метадані дивляться всього кілька разів для вивчення функціональності і далі працюють з даними. Логічно було б робити оптимізації саме в даних? Адже можна було б обмежити список запитуваних об'єктів полів, а особливо актуально обмежити інформацію, що розкривається за параметром $expand, який тягне повністю весь пов'язаний об'єкт, в той час коли нам потрібні з нього всього одне-два поля.

А що далі?

Думаю, що можна вас привітати – у вас все налаштовано та працює! Які ж такі кроки? Все залежить від того, навіщо вам потрібно було організовувати доступ до бази - для обміну інформацією з корпоративним сайтом, для роботи мобільного додатка, для зв'язування з корпоративним програмним забезпеченням.

Якщо потрібно зробити на сайті щось типу кабінету користувача з наданням історії взаєморозрахунків, цін з урахуванням персональних знижок, введення замовлення та іншими плюшками, то до наших послуг є кілька готових бібліотек на офіційному сайті. Є навіть цілий фреймворк OpenUI5 від компанії SAP, який на базі даних, що отримуються за протоколом OData, дозволяє створити повноцінний бізнес-додаток. Загалом роздолля для грамотного JS-програміста.

Застереження про "велосипеди"

Напевно, після прочитання останньої фрази у вас могли спалахнути очі - "До біса, стандартний веб-клієнт 1С! Я з такими можливостями власний інтерфейс до бази створимо з блекджеком і приємною компанією". Але я на вашому місці не поспішав конкурувати на цьому полі з компанією 1С, де досвідчені веб-розробники вже кілька років створюють те, що ми всі бачимо постфактум. Ви дійсно хочете повторити сумну славу проекту Домінікана?

Мені можуть заперечити творці і ризик стоїть витрачених зусиль і вже створені майже готові для комерційної експлуатації продукти. Співробітники Окнософта тут часто люблять хвалитися, що на їхню розробку стоїть черга з клієнтів на роки вперед. І я за них щиро радий – хлопці знайшли свою нішу. Але за їхніми статтями у мене склалося враженням, що їхній комплекс metadata.js - це вебівська аналогія програми "Розширення для кишенькових комп'ютерів" компанії ДИСКо, яка дала можливість звичайним програмістам 1С писати додатки під смартфони. І де ця програма? Такий самий функціонал для розробки мобільних рішень (і навіть ще багатший, і на більшу кількість платформ) сама 1С дала безкоштовно в рамках постачання своєї платформи.

З особистого досвіду. Якоїсь миті після мого зауваження, "що у веб-клієнті 1С так не можна зробити", на моїй колишній фірмі було прийнято рішення створити власний альтернативний веб-інтерфейс. Найняли кілька JavaScript-розробників, взяли за основу для front-end якусь популярну тоді бібліотеку інтерфейсів із гарними гридами та чартами, а для сервера вибрали node.js. Я реалізував для цього проекту SOAP-інтерфейс доступу до даних (HTTP-сервісів тоді ще не було), і ми отримали гарну форму списків замовлень вже за кілька тижнів. Не знаю точно, що там відбувалося у розробці, але після кількох місяців героїчної битви проти тотальної атаки багів проект закрили і з розробниками попрощалися. А ось програмісти компанії 1С в цей час не сиділи склавши руки, а випустили ряд оновлень, після яких користуватися стандартним веб-клієнтом стало трохи приємніше.

Припустимо, що ми не грамотні JS-програмісти, але якийсь списочок повісити на сайт хочемо. Я відкрив статтю з переліком найпопулярніших на сьогоднішній день бібліотек створення таблиць і знайшов у ньому просту бібліотечку jsGrid якраз для нашого випадку. Вивчаємо їхній сайт, беремо приклад їхнього коду з використання OData і вставляємо туди шлях до наших даних.

Щоб бути лінивим і нічого не програмувати для нашого прикладу, мені потрібно запросити повноцінну табличку без необхідності за посиланнями довантажувати строкові уявлення. У типовій УТ10.3 щодо цього вибір не дуже багатий і тому я візьму довідник Контрагенти.

Тепер найцікавіше. А як сформувати рядок запиту на читання потрібних нам даних? Це просто! Дивимося на нашому шляху до кореня OData (для мене це) як правильно називається цей довідник - Catalog_Контрагенти. Далі відкривши у новому вікні адресу http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагентими побачимо вміст всього довідника у форматі XML. Але для нашого прикладу потрібен JSON і тому до рядка потрібно додати параметр:$format=json - вийде http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенти? $format=json . Так, групи нам не цікаві і давайте їх приберемо за допомогою параметра фільтрації:$filter=IsFolder eq false - вийде http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенти? $format=json & $filter=IsFolder eq false . Блок параметрів, як ви вже помітили, починається символом "?", а самі параметри між собою з'єднуються символом "&". Повний списокдоступні параметри та функції див. у документації по платформі.

Отриманий файл покладемо в каталог, який налаштований кореневим у вашому веб-сервері. Це необхідно, щоб "домени" сторінки та запитуваних даних збігалися, інакше отримаєте нескінченний індикатор оновлення та помилку в логах: "No "Access-Control-Allow-Origin" повідомлень є present on the requested resource. Origin "null" is thefore no allowed access. Відповідь had HTTP status code 401. "


Буквально кілька хвилин витраченого часу і в нас вже пристойна табличка, яка навіть автоматично розмічена на сторінки. Трохи незграбно виглядає лише запит аутентифікації і, щоб не вводити щоразу логін та пароль, я їх прописав відразу в рядку доступу. Кінцевий файлик вийшов досить простий і кожен зможе його з легкістю повторити, але про всяк випадок я його теж поміщу у вкладення.

А чи зовсім без програмування?

Сайти, мобільні додатки, шина повідомлень та інші слова для будь-якого айтішника звучать круто, але не знаходять відгуку у серцях високих начальників. Їхній головний робочий інструмент Excel, до якого вони палають ірраціональним коханням навіть за наявності потужної підсистеми звітності з їх баз 1С. І в цей момент ми згадуємо, що саме компанія Microsoft вигадала стандарт OData і впровадила його у свої програми починаючи з Office 2010. В офісних програмах ми можемо як просто переглядати таблиці з даними, так і скористатися механізмами запитів для отримання цікавішої інформації за один раз без необхідності з'єднувати таблиці з різних аркушів.

Наприклад, нас цікавлять боржники. В УТ10 ми їх можемо отримати з віртуальної таблиці залишків регістру накопичення Взаєморозрахунки Сонтрагентами, наклавши фільтр щоб сума боргу була більша за нуль (інакше це аванси). Задавати дату не буду, оскільки мене цікавлять актуальні дані. Для моєї бази це буде наступне посилання: http://localhost/DemoTrdBase/odata/standard.odata/AccumulationRegister_ВзаєморозрахункиСКонтрагентами/Balance?$filter=СумаУпрBalance gt 0

Переглянувши результат, ми можемо помітити, що ми не маємо уявлень для контрагентів, а лише ключі для таблиці довідника контрагентів. Отже, запитуватимемо і ці допоміжні дані. Для цього скористаємося посиланням без фільтрів: http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенти

А тепер проста послідовність кроків:

  1. Відкриваємо Excel (у мене версія 2016; якщо у вас 2010 або 2013, то меню може трохи відрізнятися)
  2. Переходимо навігаційним шляхом: "Дані" / "Створити запит" / "З інших джерел" / "З каналу ODATA".
  3. Вказуємо наше посилання на регістр взаєморозрахунків
  4. На формі авторизації виберемо третій варіант "Базовий" та вкажемо логін/пароль. Натискаємо "Підключення".
  5. У вікні редактора запиту, що відкрилося, замість імені "Запрос1" дамо щось більше для нас цікаве - "Взаєморозрахунки"
  6. У центрі вікна редактора запиту бачимо колонку "Список", де у кожному рядку слово "Record". Ми можемо або скористатися контекстною командою "В таблицю" або натиснути відповідну кнопку в меню "Перетворення" редактора. На запитання дайте відповідь "Ок".
  7. Тепер колонка називається Column1 і поруч з нею з'явилася кнопочка зі стрілками в різні боки. Натисніть на неї. З сервера підтягнеться опис існуючих колонок. Зніміть всі галочки та залиште їх тільки на колонках "Контрагент_Key" та "СумаУпр Balance". Натисніть на "Ок" і з'явиться таблиця з двох обраних колонок з потрібними даними.
  8. За межами нашої уваги залишилися такі виміри як організація, договір та правочин, але вони все одно були запрошені. У результаті ми зараз маємо рядки контрагентів з різними сумами. Їх можна згорнути за допомогою угруповання. Для цього або з меню або контексту викликайте команду "Групувати за". У групувальних полях залиште лише контрагента, а поле із сумою видаліть. Назвіть нову колонку"Обов'язок", в операції виберіть "Сума", а в стовпці вкажіть поле нашої суми. Натисніть "Ок" і в результаті отримаємо трохи менше записів.
  9. Тепер нам слід розшифрувати контрагентів. Для цього у лівій панелі "Запити", де вже є поточний запит "Взаєморозрахунки", викличте контекстне менюта виберіть "Новий запит" / "Інші джерела" / "Канал ODATA". У віконці вкажемо шлях до довідника контрагентів. Далі знову вказуємо логін/пароль авторизації, у попередньому перегляді натискаємо "Ок" і задаємо новому запиту ім'я "Контрагенти".
  10. Повернемося до запиту "Взаєморозрахунки" (клік за назвою на панелі запитів).
  11. Тепер виконуємо поєднання наших двох запитів. Для цього в основному меню редактора викличте "Комбінувати" / "Об'єднати запити". У вікні конструктора поєднання буде наша таблиця взаєморозрахунків. У центрі у вікні виберіть запит "Контрагенти". Вигляд з'єднання залишається той, який за умовчанням (ліве зовнішнє). Далі кліками вибираємо стовпчики для умови об'єднання. Погоджуємося з усім, що нам далі пропонують.
  12. Після об'єднання ми отримали нову колонку "Контрагенти" зі знайомою кнопкою з різноспрямованими стрілочками. Клікаємо по цій кнопці і вибираємо колонки, що нас цікавлять. Для інтересу виберемо "Найменування Повне" та "Parent" (група). Колонка "Parent" також пропонує нам розкритися - виберемо в ній поле "Description" (звичайне найменування довідника).
  13. Зробимо гарно. Першу колонку із ключем контрагента можемо видалити. Колонку групи так і назвемо "Група", колонці з ім'ям контрагента дамо назву "Контрагенти", а колонку боргу перекинемо в кінець таблиці, що отримується.
  14. Тепер можемо натиснути на головну кнопку редактора - "Закрити та завантажити".
  15. Далі можна використовувати завантажену таблицю як дані для зведеної таблиці чи зведеної діаграми. Або при створенні цих нових об'єктів вказуємо як джерело даних наш запит "Взаєморозрахунки".

Але, як кажуть, краще один раз побачити, ніж сто разів почути.Я постарався записати цю послідовність дій на відео. І відразу попереджаю, що у вас при повторі буде трохи не так - буде запрошена авторизація, про що я згадав вище. Просто на момент запису відео, Excel вже запам'ятав мій логін та пароль.

Підсумки

Сподіваюся, що моя стаття була корисною. Я повідомив про існування та переваги нової технологіїплатформи. Також докладно роз'яснив налаштування доступу до інформаційної бази протоколу OData і навів кілька прикладів практичного використання.

Що б не було упереджень, що застосовувати доступ до OData можна виключно для керованого інтерфейсуна останніх версіяхплатформи, як учбовий приклад вибрав демо-базу конфігурації "Управління торгівлею (базова), ред 10.3" як сумісності 8.2. Навіть на базі даних такої конфігурації, всього кількома кліками мишки можна отримати в книзі Excelактуальні дані щодо боргів і так само просто можна було б отримати актуальні залишки на складах, дані з продажу та іншу корисну інформацію.

P.S.Продовження цієї статті, в якій розглянуто операції створення та зміни даних, опубліковано за адресою

Друк (Ctrl+P)

Другу частину можна подивитися

Загальні відомості

У версії платформи 8.3.5.1068 , опублікованій у вересні 2015 року з'явився механізм інтеграції 1С із зовнішніми програмами через технологію REST інтерфейс. Як протокол доступу платформа використовує протокол OData. Це відкритий веб-протокол для запиту та оновлення даних. Він дозволяє оперувати даними, використовуючи як запити HTTP-команди. Отримувати відповіді у версії 8.3.5.1068 можна було лише у форматі Atom/XML . Однак, починаючи з релізу 8.3.8.1652 у серпні 2017 р. з'явився другий варіант отримання даних у форматі JSON (JavaScript Object Notation) . Порівняно з XML він легко читається людьми займає менше місця. Крім цього, всі браузери мають вбудовані засоби для роботи з JSON.

Роботу з протоколом OData на платформі 1С: підприємство можна переглянути у книзі 1С: Посібники розробника у розділі 17 Механізми інтернет-сервісів, параграф 17.2.1 Стандартний інтерфейс OData.Можна також переглянути приклади розширення підтримки протоколу OData ,

Перевага використання REST інтерфейс. полягає в тому, що для отримання доступу до даних системи із зовнішнього застосування не потрібно модифікації коду прикладного рішення (наприклад, якщо прикладне рішення стоїть на підтримці). Для отримання такого доступу необхідно особливим чином опублікувати програму на веб-сервері та вказати, які конфігураційні об'єкти будуть використовуватися таким чином. Після цього сторонні системи можуть звертатися до вашої програми за допомогою запитів HTTP.

Публікація стандартного інтерфейсу OData виконується за допомогою діалогу публікації на веб-сервері (Адміністрування – Публікація на веб-сервері) та описано в книзі 1С:Підприємство 8.3. "Керівництво адміністратора".
Важливо!Для того, щоб об'єкти конфігурації стали доступними через стандартний інтерфейс OData, необхідно це дозволити за допомогою методу глобального контексту УстановитиСклад СтандартногоІнтерфейсуOData().
Механізм встановлення складу об'єктів, доступних за допомогою стандартного інтерфейсу OData, можна виконати у вигляді зовнішньої обробки. Для цього не потрібно модифікувати прикладне рішення.

Для взаємодії із зовнішнім REST- веб-сервер з 1С:Підприємства використовується наявні в платформі засоби роботи з HTTP: об'єкти HTTPЗ'єднання, HTTPЗапит та HTTPВідповідь.

У цьому циклі статтею я показуватиму приклади типових операцій, що використовують відповідний HTTP-метод;

  • Отримання даних – метод GET;
  • Створення об'єкта – метод POST;
  • Оновлення даних: метод PATCH– у цьому випадку можна вказувати лише ті властивості, які потрібно оновити; метод PUT- У цьому випадку необхідно вказувати всі властивості сутності;
  • Видалення даних – метод DELETE.

1. Приклади отримання. HTTP-метод GET

Як сервер виступатиме опублікована на веб-сервері БД з ім'ям WebBuh(Демо-база "Бухгалтерія Підприємства 3.0"). Як формат обміну даних я використовуватиму формат JSON. Докладніше про роботу з JSON написано в документації, доступній . Для отримання даних із сервера HTTP-методом GET потрібно створити об'єктЧитанняJSON для послідовного читання JSON-даних із файлу або рядка. Для організації послідовного запису об'єктів та текстів на сервері HTTP-методом POST PATCH PUT потрібно створити об'єктЗапис JSON.

Зазначимо, для методу DELETE не потрібне JSON. В якості ілюстрації потокового читання і запису JSON при зверненні до REST інтерфейсу я викликатиму наступну функцію користувача загального призначення :

ВикликатиHTTPМетодНаСервері // <Описание функции>&На сервері - Рядок, що містить ім'я HTTP-методу для запиту ("POST". "PATCH", "PUT", "GET", "DELETE" // - об'єкт HTTPЗ'єднання //<АдресРесурса>- Рядок http-ресурсу, до якого буде надіслано запит HTTP.<ОтправляемыеДанные>//- Структура або відповідність, що містять дані, що надсилаються на вказану адресу для обробки // на сервер з використанням зазначеного HTTP-методу "POST" або "PATCH" або "PUT" // Значення, що повертається: // Структура відповіді сервера в залежності від HTTPМетод // ФункціяДзвонити НЕ визначено )// Створення HTTP Запит Заголовки = Новий Відповідність ();Заголовки. ("Content-Type", "application/json"); ЗапитHTTP = Новий HTTPЗапит ( ); АдресаРесурсу, Заголовки// ЗаписJson толку для створення та оновлення даних Якщо HTTPМетод = "POST" або HTTPМетод = "PATCH" або HTTPМетод = "PUT", тоді ЗаписJSON = Новий ЗаписJSON ;ПараметриJSON = Новий ПараметриЗаписиJSON(ПереносСтрокJSON.Авто,"",Істина); Запис JSON., (Параметри JSON); ); // (Параметри JSON);ЗаписатиJSON(ЗаписJSON НадісланіДані(); обов'язкові в цьому випадку РядокТіла =ЗаписJSON.Закрити ЗапитHTTP.ВстановитиТілоІзРядки, (РядокТіла,КодуванняТексту.UTF8 ВикористанняByteOrderMark.Невикористовувати ); КінецьЯкщо; ; // Виклик Методу HTTPЗ'єднанняВідповідьHTTP = HTTPЗ'єднання.ВикликатиHTTPМетод(HTTPМетод, ЗапитHTTP) // Виклик Методу HTTPЗ'єднанняСтруктураВідповіді = Новий Структура;); .Вставити ("КодСтану ",ВідповідьHTTP.КодСтану // Читання JSON тільки для методу GETЯкщо HTTPМетод = "GET"Тоді Спроба Читання JSON = Новий Читання JSON ; ВідповідьСервера =ВідповідьHTTP.ОтриматиТілоЯкСтроку ("UTF-8");Читання JSON. ;"Відповідність =",ПрочитатиJSON(ЧитанняJSON) ; ,Істина);СтруктураВідповіді.Вставити( ВідповідьСервераВідповідність СтруктураВідповіді; .Вставити ("ВідповідьСервераНеРозшифрований // Виклик Методу HTTPЗ'єднання ", Відповідь Сервера); Виняток Повідомити(ОписПомилки())

Повернення Невизначено; КінецьСпроби;Концеслі; Повернення ;КінецьФункції

// Викликати HTTPМетодНа Сервері() Для отримання від сервера у форматі JSON при зверненні до інтерфейсу REST прикладного рішення потрібно в адресі ресурсу вказати $format=json. ; Або вказати MIME тип WebBuh“application/json” у заголовку:" Заголовки = Новий Відповідність (); Заголовки.Вставити("Content-Type",;

"application/json") Адресаресурсу = "

  • Якщо значення другого параметра встановлено Істина, читання об'єкта JSONбуде виконано в Відповідність.Якщо встановлено Брехня, об'єкти будуть зчитуватися в об'єкт типу Структура.
  • При десеріалізації об'єктів JSON у структуру необхідно пам'ятати про вимоги до ключів структури. Якщо при десеріалізації об'єкта буде знайдено ім'я властивості, неприпустиме для ключа структури, буде викликано виняток.

1. 1 Налаштування параметрів HTTP з'єднання

Для організації клієнтської частини взаємодії із зовнішнім REST- веб-сервер, я створив "з нуля" конфігурацію клієнта на базі БСП. На цій конфігурації я створив довідник параметрів підключення (див. Рис 1)

Рис 1 Довідник налаштування параметрів HTTP з'єднання до зовнішньої ІБ через rest інтерфейс

Після натискання кнопки Перевірити відповідь сервера, викликається процедура, якою клієнт спробує отримувати відповідь сервера. Програмний кодпроцедури написано нижче:

&НаКлієнті Процедура ПеревіритиПідключення(Команда) Адреса = Об'єкт.АдресСервера; Користувач =Об'єкт.Користувач ;Пароль = Об'єкт.Пароль; Ім'яБази =<>Об'єкт. Найменування; Порт =?(Об'єкт. Порт 0, Об'єкт. Порт, 80) "; ; ,Істина); HTTPЗ'єднання = Новий HTTPЗ'єднання(Адреса,Порт,Користувач, Пароль); Адресаресурсу = Ім'яБази + "/odata/standard.odata/) $metadata // Виклик Методу HTTPЗ'єднання <> //Виклик функції користувача = В; викликатиHTTPМетодНа Сервері

("GET", HTTPЗ'єднання,АдресРесурсу; Якщо
Невизначено Тоді ЗагальногоПризначенняКлієнтСервер.ПовідомитиКористувачу("Код стану "+СтруктураВідповіді.КодСтану)Концеслі; КінецьПроцедури
Ціль цієї процедури – Це
перевірка роботи сервісу та =Чи правильно користувач ввів параметри з'єднання. Для цього достатньо виконати GET-запит:+ HTTPЗ'єднання.ВикликатиHTTPМетод( “;
"GET"
, ЗапитHTTP);
з використанням адреси ресурсу: АдресаресурсуІм'яБази
/odata/standard.odata/ Перевірити роботи сервісу можна також у браузері з використанням URL http://host/WebBuh/odata/standard.odata. Внаслідок такого запиту виходить лише список сутностей. Для отриманняповного опису
стандартного інтерфейсу OData (список доступних сутностей, їх атрибутів та функцій у вигляді XML- документа.) необхідно виконати GET-запит з використанням параметра$metadata.

  • 100-199 - Інформаційні відповіді, що показують, що запит клієнта прийнятий та обробляється.
  • 200-299 – означають, що запит клієнта успішно опрацьовано.
  • 300-399 означає, що запит не виконано і клієнту потрібно вжити деяких дій задоволення запиту.
  • 400-499 – інформує про помилки на стороні клієнтської програми. Ці коди можуть означати, що від клієнта вимагається додаткова інформація.
  • 500-599 – інформує про помилку на стороні сервера, показує, що сервер зіткнувся з помилкою і, ймовірно, не зможе виконати запит клієнта.

1.2 Пошук об'єкта за ідентифікатором

Наступна функція призначена для пошуку довідника або документа з унікального ідентифікатора на сервері. Якщо об'єкт знайдено, функція повертає рядкове значення ідентифікатора (Ref_Key) , інакше повертає НЕ визначено.У функцію передаються такі параметри:

  • HTTPЗ'єднання – Об'єкт типу HTTPЗ'єднання
  • Ім'яПублікації – Ім'я опублікованої бази бази даних сервера
  • Елемент – ідентифікатор сутності об'єкта, наприклад, Catalog_Організаціїабо Document_- довідник Організації.
  • Ідентифікатор – Ідентифікатор об'єкта, який потрібно шукати на сервері, наприклад, Організація.УнікальнийІдентифікатор()
&На Сервері Функція ПошукОб'єктПоGUID (HTTPЗ'єднання,Ім'яПублікації,Елемент,УнікальнийІдентифікатор) GUID = Рядок(УнікальнийІдентифікатор); // Перетворимо в рядок Адресаресурсу = + Елемент+ "(guid""+ GUID+ "")?$format=json" ; ,Істина); = ВHTTPЗ'єднання(Адреса,Порт,Користувач, Пароль)("GET" , Адресаресурсу = Ім'яБази + "/odata/standard.odata/) $metadata ,Істина); .КодСтану >= 400 Тоді //Загального призначенняКлієнтСервер.Повідомити Користувачеві(Елемент+ "Помилка" +СтруктураВідповіді.КодСтану+ //ЗагальногоПризначенняКлієнтСервер.ПовідомитиКористувачу(СтруктураВідповіді.ВідповідьСервераНеРозшифрований); Повернення невизначене; КінецьЯкщо ; Відповідність = СтруктураВідповіді. ВідповідьСервер а; Масив = Відповідність["value"]; Якщо Масив = Невизначено Тоді Повернення Відповідність ["Ref_Key"] Інакше Повернення Масив ["Ref_Key"];

КінецьЯкщо; КінецьФункції Параметр

Адресаресурсу використовується для звернення до REST-сервісу. Для перевірки роботи сервісу можна вказати ресурс у браузері таким чином

  • http://(АдресВебСервера)/(Ім'яПублікації)/odata/standard.odata/(Елемент)?(Параметри)де
  • АдресаВебСервера– Адреса веб-сервера, на якому опубліковано сервіс, наприклад Localhost Ім'яПублікації– ім'я
  • HTTPЗ'єднання.ВикликатиHTTPМетод( інформаційної бази
  • зазначене під час публікації рішення – Ознака звернення до стандартного інтерфейсу OData
  • Елемент- Параметри ресурсу. Використовуються, наприклад, для відбору, прийнятому для HTTP-запитів: ?ключ=значення&ключ2=значение2

1.3 Пошук об'єкта по полям пошуку

Наступна функція користувача призначена для пошуку об'єкта по полях пошуку в тому випадку, коли об'єкт по ідентифікаційний номер. Функція заперечує рядок Ref_Key –ідентифікаційний номер.

&На Сервері Функція П пошукОб'єктПолямПошуку(HTTPЗ'єднання,Ім'яПублікації, Елемент,ПоляПошуку)Умова = "";Для кожного КлючЗначення з ПоляПошуку Цикл Умова = Умова + КлючЗначення.Ключ+ "eq"" + КлючЗначення.+ "" and "; КінецьЦикл; Текст Запиту =Лев(Умова, СтрДліна(Умова)-5); // видаляємо останні 5 символів Адресаресурсу= Ім'яПублікації+ "/odata/standard.odata/" +Елемент+ "?$filter=" + Текст Запиту+ "&$format=json& $select=Ref_Key" ; //Виклик моєї користувальницької функції // Виклик Методу HTTPЗ'єднання= Викликати HTTPМетодНа Сервері( "GET",HTTPЗ'єднання,АдресРесурсу);ВідповідьHTTP.КодСтану // Виклик Методу HTTPЗ'єднання .КодСтану >= 400 Тоді / / Загального призначення Клієнт Сервер. Повідомити Користувачеві (Елемент + "Помилка" + Структура Відповіді. Код Стану); //ЗагальногоПризначенняКлієнтСервер.Повідомити Користувачеві(СтруктураВідповіді.ВідповідьСервераНеРозшифрований); Повернення невизначене; КінецьЯкщо; Відповідність = СтруктураВідповіді. ВідповідьСервер а; Масив = Відповідність["value" ]; Якщо Масив = Невизначено Тоді Повернення Відповідність ["Ref_Key"] Інакше Повернення Масив ["Ref_Key"];

КінецьЯкщо; КінецьФункціїЯк видно з тіла процедури ПпошукОб'єктПолямПошуку, відбір починається з ключового слова$filterна адресу ресурсу. Формальний параметрПоляПошуку –

це відповідність, що містить найменування та значення реквізитів.

  • Зазначимо, що найменування реквізитів часом очевидно. Необхідно запам'ятати, що для довідників:
  • Code – код,
  • Description – Найменування
  • DeletionMark – позначка видалення,
  • IsFolder – ознака групи,
  • Parent_Key – батько.

Якщо реквізит типу посилання, до його імені слід додати суфікс _Key, наприклад Контрагент_Key.

  • Для документів:
  • Number – номер документа,

Date – дата документа.

  • Логічні операції відбору
  • eq - Рівно; /Catalog_Міста?$filter=Найменування eq 'Головний';
  • ne - Не рівне; /Catalog_Міста?$filter=Найменування ne 'Перм'; gt – більше;/Catalog_Товари?$filter=
  • Ціна gt 10;
  • ge - Більше або одно; /Catalog_Товари?$filter=Ціна ge 10;
  • lt - менше; /Catalog_Товари?$filter=Ціна lt 10;
  • le - менше або одно; /Catalog_Товари?$filter=Ціна le 10;
  • or - Логічне АБО; /Catalog_ Товари ?$filter= Ціна lt 10 or Ціна gt 100;
  • not - заперечення; /Catalog_ Товари ?$filter=not (Ціна eq 10);

Зазначимо також, що значення фактичного параметра зазначене під час публікації рішення(або сутність)), який я передаю на функцію формується за таким правилом:

ПрефіксІм'я_Ім'яОб'єктКонфігурації_СуфіксІм'я.

За допомогою стандартного інтерфейсу OData можна отримати доступ до таких об'єктів ( ПрефіксІмені):

  • Довідник – Catalog;
  • Документ – Document;
  • Журнал документів – DocumentJournal;
  • Константа – Constant;
  • План обміну – ExchangePlan;
  • План рахунків - ChartOfAccounts
  • План видів розрахунку - ChartOfCalculationTypes;
  • План видів характеристик - ChartOfCharacteristicTypes;
  • Регістр відомостей - InformationRegister;
  • Регістр накопичення – AccumulationRegister;
  • Регістр розрахунку - CalculationRegister;
  • Регістр бухгалтерії - AccountingRegister;
  • Бізнес-процес - BusinessProcess;
  • Завдання – Task.

Ім'яОб'єктаКонфігурації- Властивість «Ім'я» об'єкта конфігурації так, як воно задано в конфігураторі.

СуфіксІмені- необхідний уточнення імені ресурсу, необов'язковий, може приймати такі значения:

  • Ім'я табличної частини об'єкта;
  • Ім'я віртуальної таблиці об'єкта;
  • RowType - рядок табличної частини об'єкта;
  • RecordType – окремий запис регістру.

Параметри звернення до ресурсів

Після формування імені ресурсу слід визначити параметри звернення до ресурсу, наприклад, ?$filter= Значення &$format=json& $select= Ref_Key ,

  • , відбір починається з ключового слова- відбір при отриманні даних
  • $format- вказує формат даних, що повертаються,
  • $select- перерахування властивостей сутності, які потраплять до результату запиту;
  • $metadata- повертає опис стандартного інтерфейсу OData (використовується без вказівки суфікса імені, приклад на одному із зображень вище);
  • $top- обмеження кількості записів, що повертаються;
  • $skip- прибирає з результату запиту вказану кількість записів;
  • $count- Повертає кількість записів у вибірці запиту;
  • $inlinecount=allpage(=none)- додає у результат запиту інформацію про кількість записів
  • $orderby=<Реквизит1>asc,<Реквизит2>desc- Сортування результату запиту
  • alloweOnly- Тільки дозволені (використовується без знака «$»).

1.4 Отримати масив записів регістру відомостей

Подивимося приклад отримання масив записів регістра відомості ПІБ Фізичних Лиць, наприклад історію зміни ПІБ фізичної особи

Ім'яПублікації = "WebBuh";Елемент = "InformationRegister_ФІОФізичних Облич"; Період = Невизначено; Дані ПосилальногоТипу= Нова структура (); Д аніПосилальногоТипу.Вставити ("ФізичнеОбличчя",ФізичнеОбличчя_Key); ДаніНЕСилковогоТипу= Нова структура (); ДаніНЕСилковогоТипу.Вставити ("ФізичнаОбличчя_Type", "StandardODATA.Catalog_ФізичніОсоби") Масив = ОтриматиНабірЗаписиРеєстраВідомостей(HTTPЗ'єднання ,Ім'яПублікації ,Елемент , Період , Вимірювання ПосилальногоТипу, Вимірювання НЕСилковогоТипу)

Тіло функції ОтриматиНабірЗаписиРегістраВідомостей, що викликається в цьому прикладі показано нижче

&На Сервері Функція ОтриматиНабірЗаписиРеєстраВідомостей(HTTPЗ'єднання ,Ім'яПублікації ,Елемент , Період =Невизначено , Вимірювання ПосилальногоТипу= Невизначено, Вимірювання НЕСилковогоТипу= Невизначено) Текст Запиту = "";Якщо період<>Невизначено Тоді Форматований період= Формат (Період "ДФ=yyyy-MM-ddTHH:mm:ss"); Текст Запиту = "Period = datetime""+ ФорматованийПеріод + """ ; КінецьЯкщо; Вимірювання ПосилальногоТипу <>Якщо Вимірювання ПосилальногоТипуНевизначено Тоді Для Кожного КлючЗначення з Цикл Запит = ? (ЗначенняЗаповнено (Текст Запиту), ",","");Текст Запиту = Текст Запиту КлючЗначення.Ключ+ Запитуючи + КлючЗначення.+ "=guid(""+ Вимірювання НЕСилковогоТипу<> //Виклик функції користувача+ "")"; КінецьЦикла; КінецьЯкщо; Якщо Вимірювання НЕСилковогоТипу Для кожного КлючЗначення з Цикл Цикл Запит = ? (ЗначенняЗаповнено Запитая =? (Текст Запиту = Текст Запиту + Запит + До + "=" + КлючЗначення.лючЗначення.Ключ ; КінецьЦикл; КінецьЯкщо; АдресаРесурса= Ім'яПублікації + " /odata/standard.odata/" + "+ Елемент + "("+ Текст Запиту +"; //Виклик моєї користувальницької функції // Виклик Методу HTTPЗ'єднання = загального призначення) ?$format=json // Виклик Методу HTTPЗ'єднання("GET", HTTP З'єднання, Адреса Ресурсу); Якщо.КодСтану >= 400 Тоді / / Загального призначення Клієнт Сервер. Повідомити Користувачеві (Елемент + "Помилка" + Структура Відповіді. Код Стану); //ЗагальногоПризначенняКлієнтСервер.Повідомити Користувачеві(СтруктураВідповіді.ВідповідьСервераНеРозшифрований); 0

Повернення невизначене; КінецьЯкщо;

Відповідність = У 1С:Підприємство, починаючи з версії 8.3.5, платформа автоматично може генерувати інтерфейс REST для всієї конфігурації. Він працює за протоколом OData і дозволяє працювати з довідниками, документами і регістрами через web-сервер. Загалом швидкість отримання даних на кілька порядків швидше, ніж через COM або файли, що не може не тішити.Для

  • різних операцій
  • використовуються різні запити:
  • GET – використовується отримання даних;
  • POST - використовується для створення об'єктів;

PATCH – модифікація наявного об'єкта;

  • Довідник – Catalog;
  • Документ – Document;
  • Журнал документів – DocumentJournal;
  • Константа – Constant;
  • План обміну – ExchangePlan;
  • План рахунків - ChartOfAccounts
  • План видів розрахунку - ChartOfCalculationTypes;
  • План видів характеристик - ChartOfCharacteristicTypes;
  • Регістр відомостей - InformationRegister;
  • Регістр накопичення – AccumulationRegister;
  • Регістр розрахунку - CalculationRegister;
  • Регістр бухгалтерії - AccountingRegister;
  • Бізнес-процес - BusinessProcess;
  • Завдання – Task.

DELETE – видалення об'єкта.

  • Для доступу до різних об'єктів використовуються префікси:
  • Використовуючи протокол ODATA можна використовувати як і вбудовані методи об'єктів, виконуючи POST запити.
  • Для документа – Post() та Unpost();
  • Для завдання – ExecuteTask();
  • Для бізнес-процесу - Start ();
  • Для регістру відомостей – SliceLast() та SliceFirst();<ИмяПерерасчета>Для регістру накопичення та регістра бухгалтерії – Balance(), Turnovers() та BalanceAndTurnovers();<Имя базового регистра расчета>().

Щоб почати працювати з цим інтерфейсом, потрібно його опублікувати. Робиться це через меню конфігуратора "Адміністрація" - "Публікація на веб-сервері", ставимо галку "Публікувати стандартний інтерфейс OData" і натискаємо "Опублікувати".

Після публікації роботу протоколу можна перевірити на http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata. У відповіді ми маємо отримати весь склад опублікованих таблиць. Він має бути схожий на малюнок нижче.


Якщо після публікації REST інтерфейсу склад опублікованих даних порожній, потрібно скористатися методом Встановити Склад Стандартного Інтерфейсу OData. На вході він має 1 параметр типу “масив”. До масиву потрібно додати метадані, які потрібно опублікувати.

Склад = новий Масив;
Склад.Додати(Метадані.Довідники.Контрагенти);
Встановити Склад Стандартного Інтерфейсу OData (Склад);

http://<ИмяСервера>/<ИмяБазы><ИмяСправочника>

При запиті можна використовувати такі параметри:

select – у цьому параметрі вказуємо потрібні поля;

format – задаємо формат, в якому ми хочемо отримати відповідь (XML або JSON), за замовчуванням XML

odata – якщо нам у відповіді не потрібний опис метаданих, то пишемо “odata=nometadata”

filter – тут вказуємо відбори.

Як я і писав вище, ми можемо отримати відповідь у двох форматах XMLабо JSON, за промовчанням використовується XML. Для того щоб отримати дані у форматі JSON потрібно до URL адресоюдодати “?$format=application/json”.

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json

Здебільшого нам потрібно отримувати конкретний елемент довідника, а чи не всі його записи. Для цього використовуємо чарівне слово "filter".

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json&$filter=Ref_Key eq guid’УІД’

Якщо ви звернули увагу, в URL-адресі вказано два параметри $format і $filter, вони можуть розташовуватися в будь-якому порядку, головне щоб перед першим параметром був знак “ ? ", а перед другим" & “. Логіка тут така, ми вказуємо адресу довідника у першій частині, а параметри у другій. Ці частини поділяються знаком “ ? ", а ось самі параметри між собою поділяються знаком " & “. Якщо зобразити схематично, то це виглядає так

АдресаТаблиці ? $Параметр1=ЗначенняПараметра1 & $Параметр2=ЗначенняПараметра2