Передача данных из Python в 1С по HTTP

15.05.25

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

Данный пример рассматривает вариант передачи различных типов данных из скрипта Python в 1С 8.

Недавно занимался задачей распознавания номеров ж/д цистерн, ж/д платформ и номеров танк-контейнеров, расположенных на платформах.

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

Первых два блока были реализованы на Python, а интерфейс был выполнен на базе самописной конфигурации 1С 8.3. Одной из подзадач было создание механизма передачи обработанных данных из блока, занимающегося распознаванием, в 1С. Точки распознавания могли располагаться удаленно, не имели прямого доступа к общему дисковому пространству с 1С и работали 24/7 с периодичностью обработки кадра с разрешением 2К в 0,15с. Для передачи данных было решено использовать HTTP, а 1С использовать как HTTP сервер.

Для реализации было сделано следующее:

  • В 1С был создан HTTP сервис.

 

 

  • В HTTP сервис добавлен HTTP метод POST.

 

 

  • Со стороны скрипта Python выполнялся код, похожий на код ниже

import base64
import datetime
import cv2
import requests

curdatetime = datetime.datetime.today()
img = cv2.imread('/home/user/Pictures/P1_1.jpg')
retval, buffer = cv2.imencode('.jpg', img)
bufferserial = base64.b64encode(buffer)
sensor_number =1
jsondata = {'packetname': 'point 1',
            'sensornumber': '%s' % sensornumber,
            'datetime': curdatetime.strftime("%Y%m%d%H%M%S"),
            ' bufferserial ': bufferserial}
API1C = 'http://192.168.1.101/1c/hs/aidata'
res = requests.post(url=API1C, data= jsondata)
if res.status_code != 200:
       print("Error in Send_Json!!!")
else:
       print("Success in Send_Json!!!")

 

Для отправки все данные упаковываются в словарь и приводятся к типу "Строка".

  • Cо стороны 1С принимаются и декодируются пакеты данных.
Функция getaidatapostai(Запрос)
	СтрокаВходящегоЗапроса = Запрос.ПолучитьТелоКакСтроку();
	Если СтрДлина(СтрокаВходящегоЗапроса) > 0 тогда
        СтруктураДанных = ПолучитьСтруктуруИзСтроки(СтрокаВходящегоЗапроса); /*получили данные json в виде структуры*/
        ТекДата         = Дата(СтруктураДанных.datetime);
		ТекСтрока       = Строка(ЗаменитьСлужебныеПоследовательности(СтруктураДанных.packetname));
	    ТекЧисло        = Число(СтруктураДанных.sensornumber);
	    ТекБуферСериал  = СтруктураДанных.bufferserial;
	    // "Чистим" строку и упаковываем данные в хранилище значений, откуда
	    // затем данные можем записать на диск или же отобразить на форме 1С
	    Если СтрДлина(ТекБуферСериал) > 0 тогда
		    ТекБуферСериал = ЗаменитьСлужебныеПоследовательности(ТекБуферСериал);
		    БинарДанные = Base64Значение(ТекБуферСериал);
            ХранилищеБуфераДанных = Новый ХранилищеЗначения(БинарДанные);
        КонецЕсли;
        // данные ТекДата, ТекСтрока, ТекЧисло, ХранилищеБуфераДанных готовы для дальнейшей обработки
		Ответ = Новый HTTPСервисОтвет(200);
    Иначе
	    Ответ = Новый HTTPСервисОтвет(400);
    КонецЕсли;
    Возврат Ответ;
КонецФункции

//Возвращает данные json, в виде структуры 1С с называниями полей структуры, 
//как они были названы в dictionary jsondata скрипта Python
Функция ПолучитьСтруктуруИзСтроки(СтрокаВходящегоЗапроса) 
	МассивДанных =  СтрРазделить(СтрокаВходящегоЗапроса, "&");
	СтруктураJSON = Новый Структура;
	Для Каждого ТекЭлемент из  МассивДанных Цикл
        РасшифровкаТекЭлемента = СтрРазделить(ТекЭлемент, "=");
        СтруктураJSON.Вставить(РасшифровкаТекЭлемента[0],РасшифровкаТекЭлемента[1]);
	КонецЦикла;	
	Возврат СтруктураJSON;
КонецФункции

//Заменяет служебные последовательности в строке бинарных данных и просто строке
//Последовательности подставляются автоматически при отправке POST из под Линукса
Функция ЗаменитьСлужебныеПоследовательности(СтрДляПреобр) 
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%2F","/");	
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%3F","?");	
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%3D","=");	
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%26","&");	
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%2523","#");	
	СтрДляПреобр = СтрЗаменить(СтрДляПреобр,"%2B","+");
	Возврат СтрДляПреобр
КонецФункции

Теперь с "добытыми" данными: ТекСтрока, ТекДата, ТекЧисло и ХранилищеБуфераДанных можно производить действия в 1С, например, заполнить регистр сведений, либо создать какой-нибудь документ или заполнить элемент справочника.

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

Python передача данных в 1С HTTP распознавание ж/д номеров

См. также

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

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    24023    29    49    

42

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    27232    26    1    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    49225    103    106    

73

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10200 руб.

24.06.2021    22070    61    55    

39
Оставьте свое сообщение