1С и MongoDB: дружба начинается с RESTHeart'а

Публикация № 642927 03.07.17

Интеграция - Внешние источники данных

MongoDB REST RESTHeart

Краткое описание того, как подружить MongoDB и 1С: Предприятие используя один из предлагаемых на официальном сайте RESTFul сервисов - RESTHeart.

Введение

Для начала давайте поймем, что же такое NoSQL и зачем это нужно. Если упрощенно, то это концепция, отличная от традиционных известных нам реляционных баз.

  1. Эти СУБД, как правило, не поддерживают ANSI SQL. Конечно есть ODBC драйверы, которые пытаются переложить SQL запрос на язык СУБД, но это не совсем то.
  2. Структура базы не регламентирована. Внутри каждой базы может быть произвольное число коллекций (таблиц) с произвольным числом документов (записей) произвольной структуры. То есть таблицы в NoSQL базах имеют произвольную структуру.
  3. Нет транзакций в привычном нам понимании этого слова. Можно гарантированно изменить один документ, но для согласованного изменения нескольких документов в разных коллекциях придется прибегнуть к ухищрениям.
  4. Более разнообразные методы распределения данных. Возможность одновременного использования шардинга и репликации. Вы можете как распределять копию всех данных, так и частично распределять данные по серверам, увеличивая производительность чтения данных.

Более подробно можно прочитать тут — https://habrahabr.ru/post/152477/.

Обычное применение таких СУБД – высоконагруженные системы обрабатывающие большой объем информации с произвольной структурой. Можно ли применять такие СУБД в обычной жизни? Конечно можно и нужно, но каждый раз мы должны отдавать себе отчет, что для каждой конкретной задачи нужно применять наиболее подходящий для этого инструмент. Например, для хранения данных структуры базы 1С NoSQL не подходит, т.к. нам нужны транзакции и у нас фиксированная структура. А вот для хранения журнала регистрации (пример хранения журнала регистрации в MongoDB — //infostart.ru/public/558101), файлов (пример хранения файлов в MongoDB — //infostart.ru/public/624829/), какой-то произвольной не регламентированной по структуре информации мы вполне можем использовать базу вроде MongoDB, т.к. транзакции нам не нужны, но нужна высокая скорость и хранение больших объемов.

RESTHeart

REST – это регламент взаимодействия с сетевым приложением, когда все инструкции для приложения мы передаем через HTTP запросы. RESTHeart представляет собой веб сервер, написанный на Java, который принимает REST команды и трансформирует их в команды MongoDB. В традиционном HTTP есть два запроса: GET для получения данных и POST для их модификации. Но для REST их число пришлось расширить: PUT, DELETE, PATCH.

Структура данных в запросе выглядит следующим образом:

/DataBase/Collection/DocID?Parameters, где

  • DataBase – имя базы данных,
  • Collection – имя коллекции,
  • DocID – идентификатор документа
  • Parameters – дополнительные параметры

Примеры запросов

Тип запроса Текст запроса Описание
GET /DB/Col Получение всех документов из коллекции Colбазы DB
GET /DB/Col/id Получение документа с идентификатором id из коллекции Col из базы DB
GET /DB/Col?filter="{‘name’:’Alex’}" Получение всех документов из коллекции Colиз базы DB у которых свойство name = Alex
PUT /DB/Col Создание коллекции Col в базе DB
POST /DB/Col {"address": "Red square", "city": "Moscow"} Создание в коллекции Col базы DB документа со свойствами address = Red square и city = Moscow
DELETE /DB/Col/id Удаление документа с идентификатором id из коллекции Col из базы DB

Логика довольно проста и понятна. Теперь разберемся с тем, как нам установить этот сервер.

  • Скачаем и установим СУБД MongoDB с сайта https://www.mongodb.com/. Базовая версия – бесплатна.
  • Скачаем оболочку для работы с MongoDB – RoboMongo с сайта https://robomongo.org/. Она так же бесплатна.
  • Создадим на диске С каталог Data\Db, это каталог для баз по умолчанию, чтобы не разбираться с параметрами запуска MongoDB.
  • Запустим сервер СУБД командой mongod.exe Это запустит сервер без авторизации под полными правами.
  • Запустим RoboMongo и подключимся к локальному серверу. Наш сервер будет запущен на localhost или 127.0.0.1 на стандартном порту 27017.
  • Создадим на сервере базу FileBase и коллекцию в ней – FileTable.
  • Создадим пользователя, для работы с базой. Для этого запустим shell в RoboMongo. Важно создать пользователя именно через shell, иначе его нельзя будет использовать при авторизации (видимо глюк приложения).
use admin

db.createUser({user: “admin”,pwd: “pwd”,roles:[“root”]})
  • Теперь прервем приложение mongod.exe и запустим его заново командой «mongod.exe —auth», теперь наша база работает с использованием авторизации и без учетных данных мы к ней не подключимся.
  • Скачиваем и устанавливаем Java SE с сайта Oracle.
  • Скачиваем сервер RESTHeart с официального сайта http://restheart.org/. Данный продукт – бесплатен.
  • Настраиваем RESTHeart сервер, для этого отредактируем файл security.yml. В секции users зададим пользователя, под которым будем заходить в базу. Для простоты будем использовать административную учетную запись.
users:

  — userid: admin

      password: pwd

      roles: [admins]
  • Продолжим настройку и отредактируем файл restheart.yml. Отредактируем секцию с указанием протокола и порта для подключения, оставим только стандартный протокол http
https-listener: false

https-host: 0.0.0.0

https-port: 4443

 

http-listener: true

http-host: 0.0.0.0

http-port: 8080

 

ajp-listener: false

ajp-host: 0.0.0.0

ajp-port: 8009
  • Отредактируем mongo-uri строку в restheart.yml
mongo-uri: mongodb://admin:pwd@127.0.0.1/?authSource=admin
  • Наш сервер готов к работе, запустим его командой «java -server -jar restheart.jar etc/restheart.yml»

Теперь наша связка RESTHeart и MongoDB готова и ждет наших команд.

Вот пример кода 1С для нашего сервера RESTHeart который создает документ с идентификатором Объект.ID. Функция ХэшАвторизации – это строка вида «admin:pwd» закодированная в Base64.

HTTPСоединение 	= Новый HTTPСоединение("127.0.0.1", 8080, "admin", "pwd",,	10);
ЧтениеJSON = Новый ЧтениеJSON;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаголовокЗапроса = Новый Соответствие;
ЗаголовокЗапроса.Вставить("Content-Type", "application/json");
ЗаголовокЗапроса.Вставить("Authorization", "Basic " + ХэшАвторизации("admin", "pwd"));
	
HTTPЗапрос = Новый HTTPЗапрос("/FileBase/FileTable/" + Объект.ID + "?id_type=STRING", ЗаголовокЗапроса);
Ответ = HTTPСоединение.ВызватьHTTPМетод("PUT", HTTPЗапрос);

Вот собственно и все. Если у вас есть желание сделать данную связь более безопасной или сложной – то на приведенных сайтах можете изучить инструкцию и поработать с настройками, задача этой статьи – дать вам возможность быстрого старта.

Если вас интересует пример реализации хранения файлов и изображений из базы 1С в MongoDB, то можете рассмотреть мою публикацию //infostart.ru/public/624829/, в ней реализован такой функционал. Во вложении к данной публикации я разместил файлы настроек RESTHeart, с которыми у меня на локальной машине все работало.

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

Наименование Файл Версия Размер
1С и MongoDB: дружба начинается с RESTHeart'а:

.zip 5,66Kb
8
.zip 5,66Kb 8 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. capone 24 03.07.17 16:50 Сейчас в теме
Люто и беспощадно))
2. Fox-trot 148 01.08.17 14:23 Сейчас в теме
а в чем преимущество такого подхода?
не проще ли хранить все как есть на диске?
3. Silenser 571 01.08.17 22:25 Сейчас в теме
(2)Не проще. Посмотрите комментарии в моей старой публикации, этот вопрос там обсуждался.
4. user679689_redbull4561 11.09.17 14:16 Сейчас в теме
(3) Делаю тестовую доработку по вышей статье. Возвращается код состояния 401

Отсюда вопрос

ЗаголовокЗапроса.Вставить("Authorization", "Basic " + ХэшАвторизации("admin", "pwd"));


Ключ "Authorization" является обязательным и по нему идет авторизация при обработке данных?
Можете разметить процедуру ХэшАвторизации?
5. Silenser 571 11.09.17 14:59 Сейчас в теме
(4)ИмяФайла = ПолучитьИмяВременногоФайла();
врТекст = Новый ТекстовыйДокумент;
врТекст.УстановитьТекст(ВашЛогин + ":" + ВашПароль);
врТекст.Записать(ИмяФайла, КодировкаТекста.ANSI);
Данные = Новый ДвоичныеДанные(ИмяФайла);
ТоЧтоВамНужно = Base64Строка(Данные);
6. user679689_redbull4561 12.09.17 09:34 Сейчас в теме
(5) Спасибо вроде получилось, но начал выдавать ошибку.

Ошибка работы с Интернет: Failure when receiving data from the peer

Я так понимаю это уже из-за настроек самого сервера?
7. Silenser 571 12.09.17 11:26 Сейчас в теме
(6)Я с такой не сталкивался. Возможно сообщение не совсем соответствует истине и система не может получить какие-то дополнительные данные, например, из-за ограничений шлюза или файрвола.
8. dablack 05.10.17 00:07 Сейчас в теме
Вместо roboMongo советую использовать studio3t
есть бесплатная версия и гораздо удобнее работать в т.ч. и запросы писать.
9. Pryanishnikov_Vladimir 06.08.21 15:08 Сейчас в теме
А как чтото поместить в документ? Нужно добавить к PUT запросу тело в JSON? Кто-нибудь может привести пример записи данных в документ?
10. Silenser 571 11.08.21 09:23 Сейчас в теме
(9) есть пример реализации хранения файлов во внешней СУБД, например тут https://infostart.ru/public/624829/ и тут https://infostart.ru/public/944348/
Оставьте свое сообщение

См. также

Обмен большими данными между клиентом и сервером

Внешние источники данных Платформа 1С v8.3 Абонемент ($m)

В статье рассматривается вопрос передачи больших объемов данных, превышающих теоретический лимит сеансовых данных (4Гб за вызов) (они же временное хранилище) как с клиента на сервер, так и в обратном направлении.

1 стартмани

27.08.2019    18808    logos    32    

113

АИТП. Простой, событийно-управляемый обмен данными

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

В статье, на примере обмена с ЗУП 3.1, демонстрируется механизм событийно-управляемого взаимодействия конфигурации АИТП с прикладными решениями на платформе 1С:Предприятие.

1 стартмани

04.07.2019    5757    blackhole321    0    

9

Интеграция 1С с Битрикс CRM через REST API

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

На фоне неутихающего обострения «бизнеса» по внедрению СРМ-систем остро встают вопросы обмена данными с уже существующими системами. В статье рассматривается выгрузка контактов, товаров и сделок из 1С в Битрикс CRM через REST API, приложена обработка для тестирования.

1 стартмани

28.06.2019    46124    muzipov    11    

27

Аутентификация на внешних сервисах посредством OAuth

Информационная безопасность Внешние источники данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пример подключения к сервисам Google из 1С с помощью протокола OAuth и получения данных с внешнего сервиса.

1 стартмани

03.04.2019    33699    binx    134    

106

Универсальное расширение 1С для Google Таблиц и Документов

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Эта статья для тех, кто использует G Suite и 1С. Готовое решение для выгрузки отчетов и печатных форм из баз 1С в Google Диск в формате Google Таблиц и Google Документов. Информация по его внедрению. Описание создания и настройки проекта в GCP.

1 стартмани

31.01.2019    24570    Maria18    39    

111

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Опять про sFTP и вообще

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Памятка для разработчика по работе с FTP, FTPs и sFTP.

1 стартмани

23.05.2018    28974    leongl    30    

45

Практикум по созданию обменов данными через протокол oData «за полдня»

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Про oData и 1С было довольно много написано, однако же описания работы и с чтением, и с записью данных через JSON я так и не встретил ни на этом ресурсе ни на других. Попробую раскрыть эту тему.

1 стартмани

20.03.2018    29072    timm00    64    

111

Практика доступа в базу 1С через протокол oData. Изменение данных

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Продолжаем знакомство с протоколом oData и в данной статье мы рассмотрим такие вопросы, как минимально необходимый багаж теоретических знаний, необходимый для работы, способы изменения доступных данных, а также с какими ограничениями можем при этом столкнуться. Осторожно, будет много скриншотов!

1 стартмани

30.12.2017    44326    Dementor    40    

157

Инструкция по настройке загрузки из ФСС электронных листков нетрудоспособности ЭЛН в документ 1С Начисление по больничному листу

Внешние источники данных Зарплата Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Зарплата и Управление Персоналом 2.5 1С:Управление производственным предприятием Россия Бухгалтерский учет ФОМС, ЕФС Абонемент ($m)

Клиент (страхователь) работает в программе "1С Зарплата и управление персоналом ред.2.5" сдает отчетность через Контур или СБИС и не собирается подключать 1С-Отчетность, при этом хочет загружать электронные больничные в программу 1С Зарплата. Подобная ситуация может быть и для других конфигураций в которых есть документ "Начисление по больничному листу", например Комплексная автоматизация 1.1, Управление производственным предприятием 1.3.

1 стартмани

28.11.2017    205520    rusmil    136    

80

Google OAuth и мобильное приложение

Мобильная разработка Внешние источники данных WEB-интеграция Платформа 1С v8.3 Мобильная платформа Конфигурации 1cv8 Абонемент ($m)

Об аутентификации для работы с сервисами google из мобильного или настольного приложения

1 стартмани

29.08.2017    12446    stveans@gmail.com    3    

11

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Набор подсистем "Умные таблицы"

Инструментарий разработчика Платформа 1С v8.3 Беларусь Россия Казахстан Абонемент ($m)

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    46906    119    Silenser    34    

75

Что такое HMAC и JWT и как это использовать в 1С

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Лёгкая статья про стандарты HMAC и JWT с небольшой теорией и исходным кодом.

1 стартмани

20.04.2017    26800    keypax    56    

122

Журнал регистрации в MongoDB

Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Хранение "журнала регистрации" в nosql базе. 1) Java-api 2) MongoDB 3) доработать конфу в нужных местах

1 стартмани

27.10.2016    19363    12    sockor    4    

19

Прозрачная интеграция 1С8.2 с 1С7.7 (Внешние источники, OLE)

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Внешние источники данных Платформа 1С v8.3 Абонемент ($m)

Прозрачная интеграция 1С8.2 с 1С7.7 через внешние источники и OLE. Данные из 1С7.7 читаем посредством внешних источников, изменения данных передаем в 1С7.7 по OLE путем отправки xml.

1 стартмани

09.01.2014    24559    sdf1979    16    

15

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

В курсе обобщен опыт работы аналитика на проектах в течение пяти лет, в нескольких фирмах. Подходы к написанию документов унифицированы и по возможности не привязаны к конфигурациям 1С.

3 500 рублей

Получение информации об экспортных свойствах и методах объектов 1С через COM.

Разработка внешних компонент Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как из тела COM-объекта или внешней компоненты определить состав свойств и методов объектов 1С агрегатных типов? Все ответы здесь.

1 стартмани

03.09.2013    15342    gislink    5    

37

Импорт документов из других программ или конфигураций

Обмен между базами 1C Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальная функция поиска документа по маске GUID и создание нового документа при неудаче

1 стартмани

11.07.2013    6948    inv7    4    

8

Подключение к 1С 7.7 через внешний источник данных, работа со справочниками 7.7 (на примере справочника клиенты)

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подключение к 1С 77 через внешний источник данных, работа со справочниками 77 (на примере справочника клиенты). Вывод иерархической структуры справочника. В прикрепленном файле пошаговая инструкция с картинками.

1 стартмани

24.01.2013    22025    sdf1979    12    

39

Добавление фотографий из 1с в ActiveDirectory

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расскажу Вам о том как я добавляла фотографию из 1с (справочника физические лица) в карточку пользователя ActiveDirectory

1 стартмани

28.09.2012    18566    Nas'ka    7    

38

Практический пример настройки обмена с казначейством в БГУ

Внешние источники данных Платформа 1С v8.3 1С:Бухгалтерия государственного учреждения Россия Бюджетный учет Абонемент ($m)

Материалов для бюджетников, всегда не хватает, особенно с практическими примерами. Попробую описать процесс настройки с нуля обмена с ОФК/УФК на примере выгрузки документа «Заявки на кассовый расход» из БГУ и импорта в СЭД.

1 стартмани

13.04.2012    71872    Vestr    17    

50

Работа с 1С:Аналитика Промо

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

4500 рублей

Синхронизация с сервером 1С во внешнем соединении

Внешние источники данных Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Позволяет установить время удаленного SQL-сервера на компьютере при выполнении обмена через Внешнее соединение

1 стартмани

27.09.2011    14075    sml    6    

12