Настройка Open Data Protocol (OData) и нюансы работы

21.08.24

Интеграция - WEB-интеграция

Настройка Open Data Protocol (OData): изменение и удаление данных.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
НастройкаИнтерфейса_oData
.epf 9,94Kb ver:1.0.0.3
23
23 Скачать (2 SM) Купить за 2 150 руб.

Описание

Расскажу о некоторых нюансах работы с протоколом Open Data Protocol (OData). --> Самое интересное в конце статьи.

Чтобы начать работать с OData в 1С, нужно:

1) Установить на сервер 1С веб-сервер, любой (Apache, IIS, Ngnix).

2) При установке программы 1С на сервере 1С нужно также установить модули расширения веб-сервера.

3) Опубликовать базу на веб сервере, в Конфигураторе - Администрирование - Публикация на веб сервере

4) Запустить обработку, прикрепил ниже (скачать), и включить объекты Метаданных базы, с какими можно работать через OData, в состав объектов Стандартного Интерфейса OData.

5) в Конфигураторе - создать Роль для настройки Прав Пользователей, если такой нет в базе.

6) Назначить Права Пользователей, в Конфигураторе - Администрирование - Пользователи

5) Далее, выполнять запросы к объектам базы 1С. Это можно делать в строке браузера, а можно из кода 1С (и любых других языков программирования, поддерживающих OData )

 

Если для работы с HTTP-сервисом программисту 1С нужно придумывать архитектуру REST API, т.е. какие запросы возможны, то при работе с OData эта REST API уже реализована на уровне Платформы 1С. 

 

Нюансы работы с OData

 

Как выполнять запросы на получение данных рассказано здесь.

Расскажу по обновление и удаление данных в 1С, с помощью OData.

Если сравнивать HTTP-сервис и OData, то код 1С написания HTTP запроса очень похож.

При изменении и удалении для OData нужно указывать заголовки:

ЗаголовокHTTP = Новый Соответствие(); 	
ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");
ЗаголовокHTTP.Вставить("If-Match", ВерсияДанных);
ЗаголовокHTTP.Вставить("1C_OData-DataLoadMode", Истина);

где для заголовка "If-Match" указывается версия данных DataVersion объекта изменения или удаления.

А далее

HTTPЗапрос = Новый HTTPЗапрос(Адрес, ЗаголовокHTTP); 
ОтветHTTP = Соединение.Удалить(HTTPЗапрос);  // удаление данных, DELETE
// или
ОтветHTTP = Соединение.Изменить(HTTPЗапрос);    // обновление данных PATCH

Зачем нужно указывать залоговок "If-Match"?

Ответ: При чтении данных вы запрашиваете с сервера 1С нужные вам данные и версию данных, DataVersion.

А при записи данных, нужно проверить, что никто другой не изменил данные, пока вы смотрели на результат.

Для этого и используют Версию данных, DataVersion. Если кто-то другой изменит данные, DataVersion изменится.

Поэтому, когда мы напишем запрос на изменение или удаление данных, при его выполнении, происходит сверка DataVersion которое вы передаёте в заголовке, с тем значением, которое в базе 1С.

Если версии совпадают, значит данные (между чтением данных из базы и их записью в базу 1С) никто не менял.

И можно записать изменения или удаление в базу.

Зачем нужно указывать залоговок "1C_OData-DataLoadMode"?

Ответ: Если необходимо эмулировать запись, выполняемую во время работы механизма обмена данными

(свойство ОбменДанными.Загрузка = Истина)

 

Когда вы работаете в программе 1С Предприятие в режиме: Тонкого, Толстого или Веб-клиента, программа накладывает Объектные блокировки:

Пессимистическая - когда вы начинаете изменять, например Документ или Справочник, вверху формы вы можете заметить появление звёздочки (Модифицированность = Истина)

Оптимистическая - при записи данных в базу, платформой происходит сверка DataVersion данных,  которые вы помещаете в базу с версией данных, которые уже есть в базе.

 

Обратите внимание

При работе с данными через OData никаких объектных блокировок не накладывается, поэтом вам нужно самим делать то, что Платформа для: Тонкого, Толстого или Веб-клиента - делает по-умолчанию, без вашего участия.

Т.е. следить за версией данных, DataVersion, которые вы изменяете или удаляете.

 

При удалении данных с помощью OData не поддерживается ссылочная целостность.

Например, есть Справочник Номенклатура и для каждой номенклатуры указывается Единица измерения.

При удалении используемой Единицы измерения, в Справочнике Номенклатура появятся битые ссылки (что очень плохо).

 

 

 

 

 

 

 

 

 

 

 

Если вы назначили Пользователю права в Роли, где возможно удаление данных. При помощи OData данные удаляются физически из базы, т.е. не ставится Пометка Удаления = Истина у записи. Поэтому не создавайте Ролей с возможностью удаления данных из базы, а давайте возможность изменять данные. Например, чтобы Пользователь с помощью OData выставлял DeletionMark = true, что эквивалентно: ПометкаУдаления = Истина.

DeletionMark = true        // это английский синтаксис

ПометкаУдаления = Истина  //   это русский синтаксис

 

Тестировал обработку на платформах 1С:Предприятие 8.3 (8.3.12.1685, 8.3.20.1674, 8.3.23.1865).

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.18.64

odata удалить delete. update apache iis web изменить настройка включить обновить оpen data protocol пример example редактировать ссылка битая

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17986    18    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20134    13    19    

18

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14551    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1701    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 328 28.02.22 07:23 Сейчас в теме
Как-то ожидалось больше нюансов...
Обработка настройки состава объектов, доступных через oData, давно уже в составе БСП.
2. Vovan58 64 21.10.22 14:34 Сейчас в теме
Вот один нюанс есть - nginx - катит только как кеширующий, опубликовать 1С на нем не представляется возможным.
А вот и второй : если не указать 1C_OData-DataLoadMode то и вполне огребете код состояния 500
3. user2086748 15.05.24 23:26 Сейчас в теме
При подключении выдается ошибка. В чем может быть проблема?
Прикрепленные файлы:
4. user-z99999 71 20.05.24 09:23 Сейчас в теме
(3)
Напишите название конфигурации и версию.
5. Shurkec 24.05.24 17:24 Сейчас в теме
Помогите плиз. В обработку в базе-источнике перед вызовом http-запроса вставляю такой код:
ЗаголовокЗапросаHTTP = Новый Соответствие;
ЗаголовокЗапросаHTTP.Вставить("1C_OData-DataLoadMode", Истина);
Как и рекомендуется в этой статье, с ожиданием получить ОбменДанными.Загрузка равным Истина. Но при отладке в базе-приемнике видно, что ОбменДанными.Загрузка всегда равно Ложь. Всегда! Ну и соответственно идут не нужные мне проверки. Что может быть? В чем причина? Почему не работает? Хотя везде и всюду рекомендуют выставлять этот параметр.
6. user-z99999 71 27.05.24 09:11 Сейчас в теме
(5)
Проверь права в источнике у пользователя.
В приёмнике поставь точку остановки, посмотри значения заголовков, которые передаются.
7. Shurkec 27.05.24 09:47 Сейчас в теме
А в каком месте смотреть значения заголовков? Я смотрю процедуру "ПередЗаписью" и через отладку вижу, что все другие данные (для справочника) передаются.
Оставьте свое сообщение