Как организовать общение между базой данных 1с и django?
Доброго времени суток!
Поступила задача организовать общение между интернет-магазином, который спроектирован на python/django, и 1с базой. Цель - раз в сутки 1с должна делать обращение к БД интернет-магазина, найти товары по 6-значному коду (значения этого поля всегда одинаковы как в django, так и в 1с), свериться и 1с должна отдать значения остатков для каждого товара в БД интернет-магазина.
На данный момент есть база данных интернет-магазина, которая конечно же по своей структуре отличается от базы данных 1с.
Вопрос заключается в следующем: каким образом подойти к решению данной задачи и какие варианты существуют вообще в принципе? Вдруг кто-то сталкивался с похожими задачами и решал их, поделитесь, пожалуйста, своими решениями.
В общем случае задачу обмена 1С с сайтом можно решить так.
На стороне 1С:
1. Создаем ПланОбмена и включаем в состав плана обмена объекты, изменения которых требуется выгружать на сайт
2. Создаем РегламентноеЗадание, которое раз в сутки или чаще запускает процесс обмена данными с сайтом
3. Пишем код на 1С, который забирает из ПланаОбмена новые зарегистрированные изменения, сереализует их в заданный формат - XML или JSON, и отправляет на сервер сайта через HTTPS-запрос.
4. После успешной выгрузки данных на сайт получаем от сайта номер квитанции, которая ранее была отправлена на сайт. По номеру квитанции снимает с регистрации изменения на плане обмена, т.к. они подтверждены сайтом как принятые.
На стороне сайта:
1. Реализуем REST API для взаимодействия с 1С - чтобы 1С могла через HTTPS-запросы отправлять и получать данные.
2. Реализуем таблицу для хранения квитанций для ПланаОбмена 1С
3. Реализуем парсинг полученных данных из XML или JSON
4. Реализуем запись в базу полученных данных
PS На стороне 1С можно обойтись и без ПлановОбмена и выгружать данные выборкой запросом
Соответственно можно обойтись и без квитанций, т.к. это сущность для ПланаОбмена
Можно выгружать по одному объекту и снимать его с регистрации в ПланеОбмена сразу после 200 от сайта.
При такой постановке вопроса сложностей вообще нуль. Со стороны django делаете api отдающий данные по остаткам по соответствующему адресу. Со стороны 1С делаете get или post запрос и обрабатываете полученный результат.
Соединение = Новый HTTPСоединение("djangobasepath.com", 80 );
Ответ = Соединение.Получить(Новый HTTPЗапрос("/v8exchange/get"));
Данные = Ответ.ПолучитьТелоКакСтроку());
Далее читаете данные. Если это JSON - Переводите в JSON, примеров полно. И записываете в базу 1С.
Спасибо за подсказку!
Но общение немного в другую сторону должно происходить. 1с дает информацию об остатках и должна происходить перезапись в django на основе полученной инфы от 1с.
И да, данные желательно в json передавать.
Павел Эхо, Полагаю тогда надо поправить вопрос. Из предложения
Цель - раз в сутки 1с должна делать обращение к БД интернет-магазина, найти товары по 6-значному коду (значения этого поля всегда одинаковы как в django, так и в 1с), свериться и перезаписать остатки для каждой позиции.
кажется что 1С должна перезаписать остатки у себя. Но в любом случае механизм тот же. Просто вы делаете post запрос из 1С к django, передавая данные остатков, а код в джанго обрабатывает этот запрос и сохраняет к себе в базу.
Дмитрий, Спасибо! Я поправил вопрос, а то он действительно был составлен не самым удачным образом. Логика понятна и, вроде как, это не так уж и сложно.
1С может взаимодействовать со сторонними системами посредством WEB- или HTTP-сервисов. Так же сюда можно отнести организацию обмена через файл (который, например, лежит на FTP).
Тут только остается понять, кто является инициатором вызова. Либо сайт опрашивает 1С, либо 1С по расписанию (регламентное задание) опрашивает сайт.