|   |   | 
| 
 | 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, и может удастся ничего не дописывать     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |