|
1c 8 организация api | ☑ | ||
---|---|---|---|---|
0
Gera1t
11.12.23
✎
09:06
|
Здравствуйте!
Помогите пожалуйста советом. Задача такая: Есть 1с УНФ. Есть самописная программа с web интерфейсом, не знаю на каком языке написанная. В самописной программе создают заказы, потом обрабатывают их там же, в процессе обработки изменяется состояние заказа. Нужно из самописной программы выгружать данные в 1С. Изначально реализовали это через файлы, самописная программы выгружает файлы в формате json при создании заказа, 1С мониторит каталог и раз в минуту загружает заказы из файлов. Сейчас требуется отказаться от обмена через файл и перейти на обмен через api. Самым логичным было бы что бы на стороне самописной программы подняли api и 1С так же по расписанию забирала от туда данные. НО в самописной программе не хотят писать api и предлагают такой вариант: api будет в 1С. когда заказ создан, программа стучиться через http и передает параметры как в http сервисе и заказ создается. Подскажите пожалуйста реально ли такое реализовать? Сколько параметров можно передавать через запрос на http сервис? Или если этот вариант бред сумашедшего подскажите как лучше реализовать эту задачу? |
|||
1
Табуретко
11.12.23
✎
09:09
|
(0) по com не предлагать?
|
|||
2
Волшебник
11.12.23
✎
09:12
|
да, реально.
Любой объём данных |
|||
3
Gera1t
11.12.23
✎
09:12
|
(1) я думал com устаревшее решение и сейчас не используется
|
|||
4
Gera1t
11.12.23
✎
09:13
|
(2) спасибо!
|
|||
5
Кир Пластелинин
11.12.23
✎
09:13
|
(0) а что собственно смущает?
|
|||
6
Fedor-1971
11.12.23
✎
09:16
|
(5) Как я понимаю, смущают вопросы авторизации на стороне 1С
|
|||
7
Fedor-1971
11.12.23
✎
09:18
|
6+ решения различные, как через токен так и через передачу данных авторизации в параметрах HTTP запроса
|
|||
8
Кир Пластелинин
11.12.23
✎
09:20
|
(6) хм. мб не проснулся еще, но ни слова не увидел про авторизацию в стартовом сообщений
|
|||
9
Gera1t
11.12.23
✎
09:20
|
я думаю сделать это через http-сервис.
Создать отдельного пользователя для этой цели. В http запрос передаются параметры с методом, например create , документ создается и записывается в реестр созданных. |
|||
10
Gera1t
11.12.23
✎
09:22
|
параметров должно быть всего 4 или 5.
Главный вопрос был в том, что нужно через http запрос передавать несколько параметров. Делал всегда только с 1 параметром и думал, что больше 1 передать нельзя |
|||
11
Fedor-1971
11.12.23
✎
09:24
|
(10) в теле запроса отправь JSON = файловому
на стороне 1С обработай и тебе без гемора и сможешь легко переключаться в вариантах файл/HTTP-сервис |
|||
12
Кир Пластелинин
11.12.23
✎
09:26
|
(9) да совсем не обязательно передавать параметры с методом. вот прям в лоб http-сервис на стороне 1с с постовым методом и именем, например, orders. в теле передавать в json или массив заказов, или данные конкретного заказа. более интересным будет вопрос - если на стороне 1с заказ не будет создан, то каким образом обрабатывать данную ситуацию? можно возвращать после загрузки в ответе http-код ошибки, можно возвращать guid`ы загруженных заказов (или незагруженных). тут многое зависит от возможностей отправляющей стороны. и вариантов можно целую кучку накидать
|
|||
13
Gera1t
11.12.23
✎
09:27
|
(11) т.е. просто в запросе например: Create?json=jsonfile
где jsonfile это запрос? |
|||
14
Fedor-1971
11.12.23
✎
09:34
|
(8) Это один из первых вопросов при работе внешних систем с 1С
1. Разработка и реализация протокола обмена (типа у ТС уже есть, осталось его пропихнуть через API) 2. Наступаем на грабли авторизации - принимаем решение как построим, через временный токен (например, на сеанс и передачей его в параметр HTTP сервиса, по факту адрес обработчика будет разный для каждого сеанса), либо передаём шифрованную base64 пару Пользователь Пароль в autorisation (тут лучше пошарить по инету как корректно пройти авторизацию БД 1С) |
|||
15
Fedor-1971
11.12.23
✎
09:35
|
(13) Ща, найду пример
|
|||
16
Кир Пластелинин
11.12.23
✎
09:37
|
(14) ну а на сколько в данном случае эта внешняя система является "внешней"? если она живет в том же контуре, то к чему эти усложнения на данном этапе?
|
|||
17
Fedor-1971
11.12.23
✎
09:43
|
Вот, примерно так:
{ "ТипИнформации":"ОтправкаПлатПорученийБух1С8", //что делаем "УНП_Организация_ДО":"Значение", //это проверка, что тебе прислали заявки для твоей конторы "Документы": [ { "УИД_Заявка_ДО":"Значение", //тут тебе передадут ИД заявки для поиска в 1С, т.е. если облажались и переотправят ты тупо найдёшь существующую заявки и поправишь оную "ДатаПлатежа": Значение, "НомерЗаявки": Значение, // остальные параметры для создания заявки }, ..... //следующая заявка ] } Результат загрузки в бухгалтерию: { "ТипИнформации":"ЗагруженыПлатПорученияБух1С8", "Документы": [ {"УИД_Заявка_ДО":"Значение", "Статус":"Значение", // например Создан, Обновлен, Отклонен "Информация":"Значение" // тут прочая информация о загрузке }, ..... ] } |
|||
18
Fedor-1971
11.12.23
✎
09:52
|
Отправка из 1С выглядит так:
инфОписание = новый ЗаписьJSON; инфОписание.УстановитьСтроку(); инфОписание.ЗаписатьНачалоОбъекта(); инфОписание.ЗаписатьИмяСвойства("ТипИнформации"); инфОписание.ЗаписатьЗначение("ОтправкаПлатПорученийБух1С8"); инфОписание.ЗаписатьИмяСвойства("УНП_Организация"); инфОписание.ЗаписатьЗначение(СокрЛП(параметрыСоединения.ИНН)); //тут просто формируем JSON по протоколу обмена ЗаполнитьДокументыДляЗапроса(инфОписание, парПроверка); инфОписание.ЗаписатьКонецОбъекта(); стрJSON = инфОписание.Закрыть(); // готова информация HTTPСоединение = Новый HTTPСоединение(параметрыСоединения.ПутьБД, , параметрыСоединения.Логин, параметрыСоединения.Пароль, , , , ); ЗапросHTTP = Новый HTTPЗапрос("InsertPlat"); //вот это название опубликованного HTTP сервиса ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json; charset=utf-8"); ЗапросHTTP.УстановитьТелоИзСтроки(стрJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Ответ = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP); текстОтв = Ответ.ПолучитьТелоКакСтроку("UTF-8"); Если Ответ.КодСостояния = 200 тогда ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(текстОтв); СоставОтвета = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); локОтвет = ПоказатьСостояниеДокументов(СоставОтвета); //разбираешь что тебе ответили Иначе Сообщить(текстОтв); //послали НА или В - таки ошибки авторизации или ещё что не слава Богу КонецЕсли; |
|||
19
Fedor-1971
11.12.23
✎
09:54
|
18+ есть возможность импорта из структуры или массива (пошарь за модуль работы с ВЕБ для 1С)
|
|||
20
Valdis2007
11.12.23
✎
09:56
|
(0) "Или если этот вариант бред сумашедшего подскажите как лучше реализовать эту задачу?"...Если делать по "взрослому", с подтверждениями, и гарантией доставки, то через ESB
|
|||
21
Fedor-1971
11.12.23
✎
10:00
|
Приём на стороне 1С:
Сообщение = Запрос.ПолучитьТелоКакСтроку("UTF-8"); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Сообщение); СоставЗапроса = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); // Прочитали тело запроса Ответ = Новый HTTPСервисОтвет(200); Если СоставЗапроса["ТипИнформации"] = Неопределено ИЛИ СоставЗапроса["Документы"] = Неопределено ИЛИ СоставЗапроса["УНП_Организация"] = Неопределено тогда Ответ.КодСостояния = 400; Ответ.УстановитьТелоИзСтроки("Ошибка формата запроса данных"); Иначе Если НЕ СоставЗапроса["ТипИнформации"] = "ОтправкаПлатПорученийБух1С8" тогда Ответ.КодСостояния = 405; Ответ.УстановитьТелоИзСтроки("Запрошенный метод не поддерживается"); Иначе // тут прошли минимальные проверки состава запроса текстРезультата = игсОбменИнформациейДО.СоздатьППизДО("нов", СокрЛП(СоставЗапроса["УНП_Организация"]), СоставЗапроса["Документы"], Ответ.КодСостояния); // тут уже обработали твои заявки и отправляем результат обратно Ответ.УстановитьТелоИзСтроки(текстРезультата); КонецЕсли; КонецЕсли; Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "text/plain; charset=utf-8"); Ответ.Заголовки = Заголовки; Возврат Ответ; |
|||
22
Fedor-1971
11.12.23
✎
10:02
|
(16) Да без разницы, рядом установлена или на другом конце света, вопрос авторизации решать придётся
|
|||
23
Gera1t
11.12.23
✎
10:02
|
Большое спасибо!
|
|||
24
Fedor-1971
11.12.23
✎
10:11
|
(23) На здоровье.
Чисто для информации: если канал связи не очень, то порешай вопрос небольших порций информации в обмене (например, не более 10 заказов или чего там) |
|||
25
Lazy Stranger
11.12.23
✎
12:37
|
Из сообщения в (0) непонятно зачем, собственно отказываться от существующего файлового обмена? Программисту, конечно, не вредно потренироваться в изучении всего перечисленного, а вот в чем радость заказчику от переделки того что и так работает, хоть и через устаревшие технологии?
|
|||
26
Gera1t
11.12.23
✎
16:51
|
(25) Самописной программой с web интерфейсом занимается сторонний разработчик, инициатива идет от него.
А мне просто интересно разобраться в чем то новом |
|||
27
Звездец
11.12.23
✎
16:52
|
(26) ну так пусть напишет ТЗ. По ТЗ проще разбираться
|
|||
28
Звездец
11.12.23
✎
16:55
|
а так если обмен достаточно простой, то есть odata, и может удастся ничего не дописывать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |