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

17.12.24

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
НастройкаИнтерфейса_oData
.epf 9,94Kb ver:1.0.0.3
24
24 Скачать (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, 8.3.25.1394).

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

  • 1С:ERP Управление предприятием 2, релизы 2.5.18.64
  • Управление нашей фирмой, редакция 3.0, релизы 3.0.10.126
  • Управление торговлей, редакция 11, релизы 11.4.1.273

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

См. также

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    1561    1    1    

4

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

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

36000 руб.

03.08.2020    18573    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20718    13    19    

18

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    478    2    0    

5

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    92199    184    217    

337
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 330 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 72 20.05.24 09:23 Сейчас в теме
(3)
Напишите название конфигурации и версию.
5. Shurkec 24.05.24 17:24 Сейчас в теме
Помогите плиз. В обработку в базе-источнике перед вызовом http-запроса вставляю такой код:
ЗаголовокЗапросаHTTP = Новый Соответствие;
ЗаголовокЗапросаHTTP.Вставить("1C_OData-DataLoadMode", Истина);
Как и рекомендуется в этой статье, с ожиданием получить ОбменДанными.Загрузка равным Истина. Но при отладке в базе-приемнике видно, что ОбменДанными.Загрузка всегда равно Ложь. Всегда! Ну и соответственно идут не нужные мне проверки. Что может быть? В чем причина? Почему не работает? Хотя везде и всюду рекомендуют выставлять этот параметр.
6. user-z99999 72 27.05.24 09:11 Сейчас в теме
(5)
Проверь права в источнике у пользователя.
В приёмнике поставь точку остановки, посмотри значения заголовков, которые передаются.
7. Shurkec 27.05.24 09:47 Сейчас в теме
А в каком месте смотреть значения заголовков? Я смотрю процедуру "ПередЗаписью" и через отладку вижу, что все другие данные (для справочника) передаются.
Оставьте свое сообщение