8.х WEB Rest Api, заказы.

Тема в разделе ""1C:Web-Сервер"", создана пользователем Saldor, 10 сен 2016.

  1. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Не подскажите. Вот есть заказы holodilnik.od.ua/api/order, не кините что-нибудь готовое(код, обработку), дабы это в 1с завести по REST HTTP. Со стороны сайта все готово для обмена по REST.
    Последнее редактирование: 10 сен 2016
  2. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Вот, как переделать под мой случай, ниже описанный код.


    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
     
        ПолеВвода = "";
     
        ОтветСервера = ОтправитьЗапросНаWebСервер();
     
        //Вывод ответа сервера на форму
        Если ОтветСервера <> Неопределено Тогда
            Для Каждого Элемент Из ОтветСервера[0] Цикл
                ПолеВвода = ПолеВвода + Элемент.Ключ + " : " + Элемент.Значение + Символы.ПС;
            КонецЦикла;
            ПолеВвода = Лев(ПолеВвода, СтрДлина(ПолеВвода) - 1); // удаление "лишнего" переноса строки
        КонецЕсли;
     
    КонецПроцедуры
    
    Функция ОтправитьЗапросНаWebСервер()
     
        //Задаем параметры подключения к серверу
        ИмяФункцииНаСервере = "Order_GetList";
        ТипВозвращаемогоЗначения = "json";
        АдресСервера = "holodilnik.od.ua/api/order";
        Логин = "";
        Пароль = ""; 
     
        РесурсНаСервере = "api/?f=" + ИмяФункцииНаСервере + "&out=" + ТипВозвращаемогоЗначения;
     
        Соединение = Новый HTTPСоединение(АдресСервера,, Логин, Пароль);
     
        ЗаголовокHTTP = Новый Соответствие();
        ЗаголовокHTTP.Вставить("Content-Type", "text/plain");
     
        //Задаем параметры, передаваемые на сервер
        Структура = Новый Структура;
        Структура.Вставить("arOrder", Новый Структура);
        Структура.Вставить("arFilter", Новый Структура("USER_LOGIN", "sale@linemedia.ru"));
        Структура.Вставить("arGroupBy", Новый Структура);
        Структура.Вставить("arNavStartParams", Новый Структура);
        Структура.Вставить("arSelectFields", Новый Структура);
     
        ПередаваемыеПараметры = Новый Структура;
        ПередаваемыеПараметры.Вставить("arg", Структура);
     
        //Переводим параметы в JSON
        СтрокаJSON = JSON(ПередаваемыеПараметры); 
     
        //Создаем два временных текстовых файла
        ФайлЗапрос = ПолучитьИмяВременногоФайла("txt");
        ФайлОтвет = ПолучитьИмяВременногоФайла("txt");
     
        //Записываем строку JSON в текстовый файл
        Запись = Новый ЗаписьТекста(ФайлЗапрос, КодировкаТекста.ANSI);
        Запись.Записать(СтрокаJSON);
        Запись.Закрыть();
     
        //Делаем запрос к серверу
        Попытка
            Соединение.ОтправитьДляОбработки(ФайлЗапрос, РесурсНаСервере, ФайлОтвет, ЗаголовокHTTP);
        Исключение
           Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
            Возврат Неопределено;
        КонецПопытки;
     
        //Обработка ответа от сервера
        ТекстовыйДокумент = Новый ТекстовыйДокумент;
        ТекстовыйДокумент.Прочитать(ФайлОтвет);
        СтрокаОтвета = ТекстовыйДокумент.ПолучитьСтроку(1);
        Результат = UnJSON(СтрокаОтвета);
     
        //Удаление временных файлов
        УдалитьФайлы(ФайлЗапрос);
        УдалитьФайлы(ФайлОтвет);
     
        Возврат Результат;
     
    КонецФункции
    
    
    
    //***********************************************************************************************************************
    //Функции JSON
    
    Функция JSON(Значение)
        Разделитель="";
     
        ТипЗн=ТипЗнч(Значение);
        РазделительСтрок = "";
        //РазделительСтрок = Символы.ПС;
    
        Если ТипЗн=Тип("Строка") Тогда
            Стр=""""+Экранировать(Значение)+""""
    
        ИначеЕсли ТипЗн=Тип("Число") ИЛИ ТипЗнч(Значение)=Тип("Булево") Тогда
            Стр=XMLСтрока(Значение)
    
        ИначеЕсли ТипЗн=Тип("Дата") Тогда
            Стр=""""+?(ЗначениеЗаполнено(Значение),XMLСтрока(Значение),"")+""""
    
        ИначеЕсли ТипЗн=Тип("Структура") ИЛИ ТипЗн=Тип("Соответствие") Тогда
            Стр="{";
            Для Каждого Параметр Из Значение Цикл
                Стр=Стр+Разделитель+РазделительСтрок+""""+Параметр.Ключ+""":"+JSON(Параметр.Значение);
                Разделитель=","
            КонецЦикла;
            Стр=Стр+РазделительСтрок+"}";
    
        ИначеЕсли ТипЗн=Тип("Массив") Тогда
            Стр="[";
            Для Каждого Элемент Из Значение Цикл
                Стр=Стр+Разделитель+РазделительСтрок+JSON(Элемент);
                Разделитель=","
            КонецЦикла;
            Стр=Стр+РазделительСтрок+"]";
    
        ИначеЕсли ТипЗн=Тип("ТаблицаЗначений") Тогда
            Колонки=Значение.Колонки;
            Массив=Новый Массив;
            Для Каждого СтрокаТЗ Из Значение Цикл
                Структура=Новый Структура;
                Для Каждого Колонка Из Колонки Цикл
                    Структура.Вставить(Колонка.Имя,СтрокаТЗ[Колонка.Имя])
                КонецЦикла;
                Массив.Добавить(Структура);
            КонецЦикла;
            Стр=JSON(Массив)
    
        ИначеЕсли Значение=Неопределено Тогда
            Стр="null"
    
        Иначе
            Стр=""""+Экранировать(Значение)+""""
        КонецЕсли;
    
        Возврат Стр
    КонецФункции
    
    Функция UnJSON(СтрJSON)
        Перем Значение;
        Если ПолучитьЗначениеJSON(СтрJSON,Значение)=0 Тогда
            Возврат Значение
        КонецЕсли;
        Возврат Неопределено
    КонецФункции
    
    Функция Экранировать(Стр)
        Х=СтрЗаменить(Стр,"\","\\");
        Х=СтрЗаменить(Х,"""","\""");
        Х=СтрЗаменить(Х,"/","\/");
        Х=СтрЗаменить(Х,Символ(8),"\b");
        Х=СтрЗаменить(Х,Символы.ПФ,"\f");
        Х=СтрЗаменить(Х,Символы.ПС,"\n");
        Х=СтрЗаменить(Х,Символы.ВК,"\r");
        Х=СтрЗаменить(Х,Символы.ВТаб,"\t");
        Возврат Х
    КонецФункции
    
    Функция ПолучитьЗначениеJSON(СтрJSON,Значение,Позиция=1,Ключ="")
    
        Перем Кавычка;
    
        ЗначениеВСтроке="";
        Кавычек=0;
        Комментарий=Ложь;
        Строка=Ложь;
    
        Пока Позиция<=СтрДлина(СтрJSON) Цикл
            ХХ=Сред(СтрJSON,Позиция,2);
            Х=Лев(ХХ,1);
            Позиция=Позиция+1;
    
            Если Х>" " ИЛИ Строка Тогда
    
                Если Комментарий Тогда
                    Если ХХ="*/" Тогда
                        Комментарий=Ложь;
                        Позиция=Позиция+1;
                    КонецЕсли;
    
                ИначеЕсли Х="\" Тогда
                    Позиция=Позиция+1;
                    ХХ=ВРег(ХХ);
                    Если ХХ="\""" Тогда ЗначениеВСтроке=ЗначениеВСтроке+""""
                    ИначеЕсли ХХ="\\" Тогда ЗначениеВСтроке=ЗначениеВСтроке+"\"
                    ИначеЕсли ХХ="\/" Тогда ЗначениеВСтроке=ЗначениеВСтроке+"/"
                    ИначеЕсли ХХ="\B" Тогда ЗначениеВСтроке=ЗначениеВСтроке+Символ(8)
                    ИначеЕсли ХХ="\F" Тогда ЗначениеВСтроке=ЗначениеВСтроке+Символы.ПФ
                    ИначеЕсли ХХ="\N" Тогда ЗначениеВСтроке=ЗначениеВСтроке+Символы.ПС
                    ИначеЕсли ХХ="\R" Тогда ЗначениеВСтроке=ЗначениеВСтроке+Символы.ВК
                    ИначеЕсли ХХ="\T" Тогда ЗначениеВСтроке=ЗначениеВСтроке+Символы.ВТаб
                    ИначеЕсли ХХ="\U" Тогда
                        ЗначениеВСтроке=ЗначениеВСтроке+Символ(Hex2Число(Сред(СтрJSON,Позиция,4)));
                        Позиция=Позиция+4
                    КонецЕсли;
    
                ИначеЕсли Строка Тогда
                 
                    Если Х=Кавычка Тогда
                        Строка=Ложь;
                        Кавычек=Кавычек+1;
                    Иначе
                        ЗначениеВСтроке=ЗначениеВСтроке+Х;
                    КонецЕсли;
    
                ИначеЕсли ХХ="/*" Тогда
                    Комментарий=Истина;
                    Позиция=Позиция+1;
    
                ИначеЕсли Найти("""'{}[]:,",Х)>0 Тогда
                    Если Х="""" ИЛИ Х="'" Тогда
                        Строка=Истина;
                        Кавычка=Х;
                        Кавычек=Кавычек+1;
    
                    ИначеЕсли Х="{" Тогда
                        Объект=Новый Соответствие;
                        Пока Истина Цикл
                     
                            Ключ="";
                            Режим=ПолучитьЗначениеJSON(СтрJSON,Значение,Позиция,Ключ);
                            Если Режим=0 Тогда
                                Объект.Вставить(Ключ,Значение);
                            ИначеЕсли Режим=1 Тогда
                                Объект.Вставить(Ключ,Значение);
                                Прервать
                            ИначеЕсли Режим=3 Тогда
                                Прервать
                            КонецЕсли;
                        КонецЦикла;
                        Значение=Объект;
                        Возврат 0
    
                    ИначеЕсли Х="[" Тогда
                        Массив=Новый Массив;
                        Пока Истина Цикл
                            Режим=ПолучитьЗначениеJSON(СтрJSON,Значение,Позиция);
                            Если Режим=0 Тогда
                                Массив.Добавить(Значение);
                            ИначеЕсли Режим=1 Тогда
                                Массив.Добавить(Значение);
                                Прервать
                            ИначеЕсли Режим=3 Тогда
                                Прервать
                            КонецЕсли;
                        КонецЦикла;
                        Значение=Массив;
                        Возврат 0
    
                    ИначеЕсли Х="]" ИЛИ Х="}" Тогда
                        Если ЗначениеВСтроке="" И Кавычек=0 Тогда
                            Возврат 3
                        Иначе
                            Значение=ПолучитьЗначениеИзСтроки(ЗначениеВСтроке,Кавычек);
                            Возврат 1
                        КонецЕсли;
    
                    ИначеЕсли Х=":" Тогда
                        Ключ=ЗначениеВСтроке;
                        Возврат ПолучитьЗначениеJSON(СтрJSON,Значение,Позиция);
    
                    Иначе                 
                        Прервать
                    КонецЕсли;
    
                Иначе
                    ЗначениеВСтроке=ЗначениеВСтроке+Х;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    
        Если Кавычек>0 Тогда
            Значение = ЗначениеВСтроке;
        Иначе
            Если ЗначениеВСтроке="" Тогда
                Возврат 2
            Иначе
                Значение = ЗначениеБезКавычек(ЗначениеВСтроке)
            КонецЕсли;
        КонецЕсли;
        Возврат 0
    КонецФункции
    
    Функция Hex2Число(Hex)
        Стр=ВРег(СокрЛП(Hex));
        Dec=0;
        Для Х=1 По СтрДлина(Стр) Цикл
            Dec=Dec+Найти("123456789ABCDEF",Сред(Стр,Х,1))*Pow(16,СтрДлина(Стр)-Х)
        КонецЦикла;
        Возврат Dec
    КонецФункции
    
    Функция ПолучитьЗначениеИзСтроки(ЗначениеВСтроке,Кавычек)
        Если Кавычек>0 Тогда
            Возврат ЗначениеВСтроке
        ИначеЕсли ЗначениеВСтроке="" Тогда
            Возврат Неопределено
        КонецЕсли;
        Возврат ЗначениеБезКавычек(ЗначениеВСтроке)
    КонецФункции
    
    Функция ЗначениеБезКавычек(ЗначениеВСтроке)
     
        Стр=ВРег(ЗначениеВСтроке);
        Если Стр="TRUE" Тогда Возврат Истина
        ИначеЕсли Стр="FALSE" Тогда Возврат Ложь
        ИначеЕсли Стр="NULL" Тогда Возврат Неопределено
        КонецЕсли;
    
        Экспонента=Ложь;
        ХХ=" ";
        Для Индекс=1 По СтрДлина(Стр) Цикл
            Х=Сред(Стр,Индекс,1);
            Если Найти("0123456789.+-",Х) Тогда
                ХХ=ХХ+Х
            ИначеЕсли Х="E" Тогда
                Экспонента=Истина;
                УУ=XMLЗначение(Тип("Число"),ХХ);
                ХХ=" ";
            Иначе
                Возврат ЗначениеВСтроке
            КонецЕсли;
        КонецЦикла;
    
        ХХ=XMLЗначение(Тип("Число"),ХХ);
        Если Экспонента Тогда
            ХХ=УУ*Pow(10,ХХ)
        КонецЕсли;
    
        Возврат ХХ
    КонецФункции
    
    //Функции JSON
    //***********************************************************************************************************************
    Последнее редактирование модератором: 12 сен 2016
  3. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Вот, что-то накопал, но ошибки, ошибки, помогите разобраться.

    Код:
    &НаСервере
    Процедура РазобратьXMLФабрикаXDTOПакетXDTO()
    
    ЧтениеТекста = Новый ЧтениеТекста ("c:\MP\data.xml",КодировкаТекста. UTF8);
    СтрокаXML = Чтениетекста. Прочитать ();
    СтрокаXML = СТРЗаменить (СтрокаXML,"<Приходы",""<Приходы);
    
    xmlns=""http://ocalhost/testXML"" ");
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку (СтрокаXML);
    
    РезультатРазборки = НовыйМассив;
    ТипПриходXDTO = ФабрикаXDTO.Тип
    
    ("localhost/testxml","Приходы");
    ПриходыXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходXDTO);
    
    Для Каждого ПриходныйОрдерXDTO ИЗ ПриходыXDTP.ПриходныйОрдер
    
    Цикл
    ДокументПриходныйОрдер = Новый Стркутура
    
    ("Номер, Дата, Поставщик, Состав");
    
    ДокументПриходныйОрдер. Номер = ПриходныйОрдерXDTO.Номер;
    ДокументПриходныйОрдер. Дата = ПриходныйОрдерXDTO.Дата;
    ДокументПриходныйОрдер. Поставщик = ПриходныйОрдерXDTO.Поставщик;
    
    ДокументПриходныйОрдер. Состав = Новый Массив;
    Для каждого СтрокаСоставXDTO из
    
    ПриходныйОрдерXDTO.Состав. СтрокаСостава Цикл
    СтрокаСоставаСтруктура = Новый Структура
    
    ("Номенклатура, Количество");
    СтрокаСоставаСтруктура. Номенклатура =
    
    СтрокаСоставаXdto.Номенклатура;
    СтрокаСоставаСтруктура. Количество =
    
    СтрокаСоставаXDTO.Количество;
    ДокументПриходныйОрдер. Состав. Добавить (СтрокаСоставаСтруктура);
    КонецЦикла;
    
    РезультатРазборки. Добавить (ДокументПриходныйОрдер);
    
    КонецЦикла;
    
    Тест = РезультатРазборки;
    
    КонецПроцедуры
    
    
    Вот, что пишет в служебных сообщениях:

    {Обработка. Обработка1.МодульОбъекта (8,9)}: Ожидается символ ';'
    xmlns=""<<?>>http://localhost/testXML"" "); (Проверка: Сервер)
    {Обработка. Обработка1.МодульОбъекта (8,13)}: Неопознанный оператор
    xmlns=""<<?>>http://localhost/testXML"" "); (Проверка: Сервер)
    {Обработка. Обработка1.МодульОбъекта (22,37)}: Тип не определен (Стркутура)
    ДокументПриходныйОрдер = Новый <<?>>Стркутура (Проверка: Сервер)
    Последнее редактирование: 20 сен 2016
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    xmlns=""localhost/testXML"" ");
    что значит эта строка?
  5. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Да,там еще http:// перед строкой, просто форум почему-то не пропустил данный пост. Вот сейчас подправил код, вот так сейчас у меня отображается в 1с.
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ну это сути не меняет.. там какието двойные кавычки и закрывающая скобка хз к чему относящаяся.
    Saldor нравится это.
  7. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Все, работает.
  8. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    И не подскажите, данная обработка по api может забирать заказы с сайта например с мойсайт.ру\api\order, если ее конечно дописат, заменить забирание приходных кассовых ордеров например как в этой обработке?
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Каждый сайт имеет собственное api.
    Без доработки скорее всего не сможет ничего забирать. Она рассчитана на работу с api, реализованном именно на сайте holodilnik.od.ua. Другой сайт будет иметь другой api.
  10. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    А вот если RSS агрегатор переделать из http://its.1c.ru/db/metod8dev/content/3790/hdoc?
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Какая разница что переделывать обработку или агрегатор этот (суть та же обработка)?
    Весь вопрос в api, т.е. в наборе ресурсов к уоторым идет обращение на сайте. Этот набор уникален для каждого сайта. Это и есть api. И в каком формате-структуре возвращает ответ.
  12. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Ну, вон же предпоследний лиситинг должен-же подойти, только запускаю из 1с ничего не происходит ;(. И в листинге разбор XML и по ссылке в первом топике тоже xml.
  13. TopicStarter Overlay
    Saldor
    Offline

    Saldor Опытный в 1С

    Регистрация:
    4 ноя 2015
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    binotel.ua/files/library/binotel-api-2.9.2-samples.zip вот еще api с сайта, не поможите со стороны 1c связку сделать?
    Последнее редактирование модератором: 5 окт 2016
Похожие темы
  1. shurup56
    Ответов:
    7
    Просмотров:
    1.004
  2. ТатьянаСВ
    Ответов:
    2
    Просмотров:
    754
  3. Skillyr
    Ответов:
    3
    Просмотров:
    563
  4. Saldor
    Ответов:
    3
    Просмотров:
    140
Загрузка...

Поделиться этой страницей