// 8.3 // *КлючДоступа = Заявка принимается ТОЛЬКО от клиентов проработавших с компанией более 2-х месяцев и с оборотом не менее 10 т.р. в месяц. При получении запроса от клиента не удовлетворяющего условиям ответа не последует. // *ИмяСервера = "api.tmparts.ru"; // *ContractCode = Код договора полученный через Contracts // *ShipCode = Код адреса доставки полученный через Shipping. // *Таб = ТаблицаЗначений &НаКлиенте Процедура GETЗапрос(АдреснаяСтрока) времКаталог = ИмяВременногоКаталога(); HTTP = новый HTTPСоединение(ИмяСервера); Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization","Bearer "+КлючДоступа); ЗапросHTTP = Новый HTTPзапрос(АдреснаяСтрока,Заголовки); ИмяВыхода = времКаталог + ""+ новый УникальныйИдентификатор; Ответ = HTTP.Получить(ЗапросHTTP,ИмяВыхода); УдалитьФайлыСервер(ИмяВыхода); КонецПроцедуры &НаСервере Функция ИмяВременногоКаталога() Возврат КаталогВременныхФайлов(); КонецФункции &НаСервере Процедура УдалитьФайлыСервер(ИмяВыхода) УдалитьФайлы(ИмяВыхода); КонецПроцедуры &НаКлиенте // Получить список Брендов с альтернативными наименованиями. Процедура BrandList() нСтруктура = Новый Структура; нСтруктура.Вставить("AltNames",1); // Если 0, то возврат списка всех Брендов, если 1, то возврат списка только тех Брендов, которые имеют Альтернативные наименования. ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/BrandList?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить список Брендов по заданному Номеру (Артикулу) товара. // Используется перед обращением к Ресурсу StockByArticle для уточнения Бренда конкретного номера. Процедура ArticleBrandList() нСтруктура = Новый Структура; нСтруктура.Вставить("Article",Артикул); // Артикул (Номер) товара для которого нужно получить список возможных брендов. Используется для получения Бренда перед обращением к ресурсу StockByArticle. ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/ArticleBrandList?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получение справочника параметров поиска товара (например: Масло моторное, 5W40, 1L и тд.). Используется для получения списка ID параметров // поиска товара (например: [92, 107], что означает 'Категория товара':'Лампа'; 'VOLT':'12v' ) перед обращением к Ресурсу StockByParameters // если нужно выполнить поиск товара по параметрам. Процедура ArticleSearchParameterList() АдреснаяСтрока = "/api/ArticleSearchParameterList"; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить остатки, цены и сроки доставки только по одному Артикулу для конкретного Бренда включая аналоги (замены). // Для получения проценки по конкретному Артикулу для всех возможных брендов без аналогов (замен) необходимо использовать StockByArticleList Процедура StockByArticle() нСтруктура = Новый Структура; нСтруктура.Вставить("Article",Артикул); нСтруктура.Вставить("Brand",Бренд); нСтруктура.Вставить("is_main_warehouse",2); // Если =0 то товар в наличии и под заказ, =1 только основной склад клиента, =2 только товар в наличии ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/StockByArticle?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить остатки, цены и сроки доставки по списку товаров без аналогов (замен). // Для получения проценки аналогов (замен) для конкретного Артикула и Бренда необходимо использовать StockByArticle Процедура StockByArticleList() МассивТоваров = Новый Массив; Для каждого стр Из Таб Цикл СтруктураТоваров = Новый Структура; СтруктураТоваров.Вставить("Brand",СокрЛП(стр.Бренд)); СтруктураТоваров.Вставить("Article",стр.Артикул); МассивТоваров.Добавить(СтруктураТоваров); КонецЦикла; нСтруктура = Новый Структура; нСтруктура.Вставить("is_main_warehouse",2); нСтруктура.Вставить("Brand_Article_List",МассивТоваров); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/StockByArticleList?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить остатки, цены и сроки доставки на список товаров по параметрам поиска без аналогов (замен). // Или получить список аналогов к товару по параметрам поиска если такой товар отсутствует на складе. // Некоторые параметры найденных Ааналогов могут отличаться от заданых. Например: Обьем масла (1Л или 4Л) // или Тип лампы (Светодиод или накаливания). Если найден хоть один товар по параметрам поиска, // то поиск аналогов не идет, независимо от значения параметра {'analog': 0} или {'analog': 1}. Процедура StockByParameters() МассивКодПараметра = Новый Массив; МассивКодПараметра.Добавить(2); МассивКодПараметра.Добавить(45); нСтруктура = Новый Структура; нСтруктура.Вставить("is_main_warehouse",2); нСтруктура.Вставить("analog",0); // Если =1 то в случае если поиск товара по параметрам не дал результата будет выполнен поиск аналогов нСтруктура.Вставить("article_search_parameter_list",МассивКодПараметра); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/StockByParameters?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить список заказов без позиций. Процедура Orders() нСтруктура = Новый Структура; нСтруктура.Вставить("Date1","01.09.2017"); нСтруктура.Вставить("Date2","30.09.2017"); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/Orders?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить позиции к списку заказов. Процедура OrderItems() МассивЗаказов = Новый Массив; Для каждого стр Из Таб Цикл СтруктураИД = Новый Структура; СтруктураИД.Вставить("ID",СокрЛП(стр.ИДзаказ)); МассивЗаказов.Добавить(СтруктураИД); КонецЦикла; нСтруктура = Новый Структура; нСтруктура.Вставить("ID_List",МассивЗаказов); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/OrderItems?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить состояние заказов. Процедура OrderStates() МассивЗаказов = Новый Массив; Для каждого стр Из Таб Цикл СтруктураИД = Новый Структура; СтруктураИД.Вставить("ID",СокрЛП(стр.ИДзаказ)); МассивЗаказов.Добавить(СтруктураИД); КонецЦикла; нСтруктура = Новый Структура; нСтруктура.Вставить("ID_List",МассивЗаказов); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,нСтруктура); JSONparameter = ЗаписьJSON.Закрыть(); АдреснаяСтрока = "/api/OrderStates?JSONparameter="+JSONparameter; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить список договоров для формирования нового заказа. Процедура Contracts() АдреснаяСтрока = "/api/Contracts"; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаКлиенте // Получить список адресов доставки для формирования нового заказа. Процедура Shipping() АдреснаяСтрока = "/api/Shipping"; GETЗапрос(АдреснаяСтрока); КонецПроцедуры &НаСервере Функция ВыполнитьPOSTЗапрос(АдреснаяСтрока, ДанныеЗапроса) HTTP = Новый HTTPСоединение(ИмяСервера); СтруктураРезультат = Новый Структура; СтруктураФайла = УбратьБом(ДанныеЗапроса); Если СтруктураФайла = Неопределено Тогда Возврат СтруктураФайла; КонецЕсли; ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("Content-Type","application/json;charset=UTF-8"); ЗаголовокHTTP.Вставить("Content-Length", СтруктураФайла.РазмерФайлаОтправки); ЗаголовокHTTP.Вставить("Authorization","Bearer " + КлючДоступа); Ответ = HTTP.ОтправитьДляОбработки(СтруктураФайла.ПолныйПутьКФайлуОтправки, АдреснаяСтрока, СтруктураФайла.ПолныйПутьКФайлуОтвета, ЗаголовокHTTP); УдалитьФайлы(СтруктураФайла.ПолныйПутьКФайлуОтправки); Для каждого ЭлементМассива Из СтруктураФайла.МассивФайловДляОбъединения Цикл УдалитьФайлы(ЭлементМассива); КонецЦикла; ФайлОтвета = Новый Файл(СтруктураФайла.ПолныйПутьКФайлуОтвета); Если ФайлОтвета.Существует() Тогда ТекстОтвета = Новый ТекстовыйДокумент(); ТекстОтвета.Прочитать(СтруктураФайла.ПолныйПутьКФайлуОтвета,КодировкаТекста.UTF8); ОтветВВидеСтроки =ТекстОтвета.ПолучитьТекст(); УдалитьФайлы(СтруктураФайла.ПолныйПутьКФайлуОтвета); СтруктураРезультат.Вставить("ТекстОтвета",ОтветВВидеСтроки); Иначе Возврат Неопределено; КонецЕсли; Возврат СтруктураРезультат; КонецФункции &НаСервере Функция УбратьБом(ДанныеЗапроса) Попытка НовСтруктура = Новый Структура; ПапкаВременныхФайлов = КаталогВременныхФайлов(); СлучайноеИмя = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); ПолныйПутьКФайлуЗапроса = ПапкаВременныхФайлов + СлучайноеИмя+".txt"; ПолныйПутьКФайлуОтправки = ПапкаВременныхФайлов + СлучайноеИмя+"out.txt"; ПолныйПутьКФайлуОтвета = ПапкаВременныхФайлов + СлучайноеИмя+"in.txt"; ф = Новый ЗаписьТекста(ПолныйПутьКФайлуЗапроса,КодировкаТекста.ANSI); ф.Закрыть(); ф = Новый ЗаписьТекста(ПолныйПутьКФайлуЗапроса,,,Истина,Символы.ПС); ф.Записать(ДанныеЗапроса); ф.Закрыть(); Файл = Новый Файл(ПолныйПутьКФайлуЗапроса); ИмяФайлаОтправки = Новый Файл(ПолныйПутьКФайлуЗапроса); МассивФайловДляОбъединения = Новый Массив; МассивФайловДляОбъединения.Добавить(ПолныйПутьКФайлуЗапроса); ОбъединитьФайлы(МассивФайловДляОбъединения, ПолныйПутьКФайлуОтправки); ФайлОтправки = Новый Файл(ПолныйПутьКФайлуОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); НовСтруктура.Вставить("МассивФайловДляОбъединения",МассивФайловДляОбъединения); НовСтруктура.Вставить("ПолныйПутьКФайлуОтвета",ПолныйПутьКФайлуОтвета); НовСтруктура.Вставить("ПолныйПутьКФайлуЗапроса",ПолныйПутьКФайлуЗапроса); НовСтруктура.Вставить("ПолныйПутьКФайлуОтправки",ПолныйПутьКФайлуОтправки); НовСтруктура.Вставить("РазмерФайлаОтправки",РазмерФайлаОтправки); Возврат НовСтруктура; Исключение Возврат Неопределено; КонецПопытки; КонецФункции &НаКлиенте // POST Переместить список Заказов в Архив или извлечь из Архива. Процедура OrdersToArchive() зпт = ""; нМассив = ""; Для н = 0 По 1 Цикл нМассив = нМассив + зпт + " |{ |'ID' : '"+ИдЗаказа+"', |'Archive' : '"+н+"' |}"; зпт = ","; КонецЦикла; JSONparameter = """{ |'ID_List':[" + нМассив + " |] |}"""; АдреснаяСтрока = "/api/OrdersToArchive/"; Результат = ВыполнитьPOSTЗапрос(АдреснаяСтрока, JSONparameter); КонецПроцедуры &НаКлиенте // POST Сформировать новый заказ Процедура NewOrder() зпт = ""; нМассив = ""; Для каждого стр Из Таб Цикл нМассив = нМассив + зпт + " |{ |'ID':'"+стр.ИдТовара+"', |'Price':'"+стр.Цена+"', |'Delivery_Period':'"+стр.СрокДоставки+"', |'Quantity':'"+стр.Количество+"', |'Comment':'Test.' |}"; зпт = ","; КонецЦикла; JSONparameter = """{ |'PriceCheck':'1', |'DeliveryCheck':'1', |'QuantityCheck':'1', |'Mode':'1', |'ContractCode':'"+ContractCode+"', |'ShipCode':'"+ShipCode+"', |'Comment':'Test. Тестовый заказ. Не проводить!', |'ID_List':[" + нМассив + " |] |}"""; АдреснаяСтрока = "/api/NewOrder/"; Результат = ВыполнитьPOSTЗапрос(АдреснаяСтрока, JSONparameter); КонецПроцедуры &НаКлиенте // POST // Получить остатки, цены и сроки доставки по списку ID товаров без аналогов (замен). // Для получения проценки аналогов (замен) для конкретного Артикула и Бренда необходимо использовать StockByArticle Процедура StockByArticleIDList() МассивТоваров = Новый Массив; JSONparameter="""{ |'ID_List' : [ |{ |'ID' : '"+ИдЗаказа+"' |} |] |}"""; АдреснаяСтрока = "/api/StockByArticleIDList/"; Результат = ВыполнитьPOSTЗапрос(АдреснаяСтрока, JSONparameter); КонецПроцедуры