/
ValMa
/
TestRep
Обзор
Документация
Войти
/
ValMa
/
TestRep
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/HTTPServices/Website/Ext/Module.bsl
542 строки
24 KB
ValMa
Первый коммит
15 окт 2025, 19:24
15 окт 2025, 19:24
caceea4
Код
Авторство
О чём код?
Функция ПроверкаРаботыПроверитьРаботу(Запрос) // http://localhost/UNF/hs/website/health // шаблон: /health Ответ = Новый HTTPСервисОтвет(200); Ответ.УстановитьТелоИзСтроки("I am OK."); Возврат Ответ; КонецФункции //Получение данных о заказе (Контрагент, Список товаров и т.д.) Функция ЗаказыПолучитьЗаказыЗаПериод(Запрос) Ответ = Новый HTTPСервисОтвет(200); // http://localhost/UNF/hs/website/order/period/20220407/20220410 // шаблон: /order/period/{begindate}/{enddate} НачальнаяДатаСтрокой = Запрос.ПараметрыURL.Получить("begindate"); // Запрос.ПараметрыURL["begindate"]; КонечнаяДатаСтрокой = Запрос.ПараметрыURL.Получить("enddate"); Если ЗначениеЗаполнено(НачальнаяДатаСтрокой) И ЗначениеЗаполнено(КонечнаяДатаСтрокой) Тогда НачальнаяДата = Дата(НачальнаяДатаСтрокой); КонечнаяДата = Дата(КонечнаяДатаСтрокой); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателяЗапасы.Ссылка КАК Документ, | УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ЗаказПокупателяЗапасы.Ссылка) КАК ДокументID, | ЗаказПокупателяЗапасы.Ссылка.Номер КАК ДокументНомер, | ЗаказПокупателяЗапасы.Ссылка.Дата КАК ДокументДата, | ЗаказПокупателяЗапасы.Ссылка.Контрагент КАК ДокументКонтрагент, | ЗаказПокупателяЗапасы.Ссылка.СостояниеЗаказа КАК ДокументСостояниеЗаказа, | ЗаказПокупателяЗапасы.Ссылка.СуммаДокумента КАК ДокументСуммаДокумента, | ЗаказПокупателяЗапасы.Номенклатура КАК Номенклатура, | ЗаказПокупателяЗапасы.Количество КАК Количество, | ЗаказПокупателяЗапасы.Цена КАК Цена, | ЗаказПокупателяЗапасы.Сумма КАК Сумма |ИЗ | Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы |ГДЕ | ЗаказПокупателяЗапасы.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания | И ЗаказПокупателяЗапасы.Ссылка.Проведен | И НЕ ЗаказПокупателяЗапасы.Ссылка.ПометкаУдаления |ИТОГИ ПО | Документ"; Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(НачальнаяДата)); Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(КонечнаяДата)); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Ответ = Новый HTTPСервисОтвет(404); // Ответ.КодСостояния = 404 Ответ.УстановитьТелоИзСтроки("За выбранный период заказов не найдено."); Возврат Ответ; КонецЕсли; ДанныеОтвета = Новый Массив(); ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСсылка.Следующий() Цикл СтруктураСтроки = Новый Структура(); Для каждого ОчереднаяКолонка Из РезультатЗапроса.Колонки Цикл Если СтрНайти(ОчереднаяКолонка.Имя, "Документ") = 0 Тогда Продолжить; КонецЕсли; СтруктураСтроки.Вставить(ОчереднаяКолонка.Имя, Строка(ВыборкаСсылка[ОчереднаяКолонка.Имя])); КонецЦикла; МассивТовары = Новый Массив(); ВыборкаДетальныеЗаписи = ВыборкаСсылка.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СтруктураТовары = Новый Структура(); Для каждого ОчереднаяКолонка Из РезультатЗапроса.Колонки Цикл Если СтрНайти(ОчереднаяКолонка.Имя, "Документ") > 0 Тогда Продолжить; КонецЕсли; СтруктураТовары.Вставить(ОчереднаяКолонка.Имя, Строка(ВыборкаДетальныеЗаписи[ОчереднаяКолонка.Имя])); КонецЦикла; МассивТовары.Добавить(СтруктураТовары); КонецЦикла; СтруктураСтроки.Вставить("Товары", МассивТовары); ДанныеОтвета.Добавить(СтруктураСтроки); КонецЦикла; ЗаписьJSON = Новый ЗаписьJSON(); ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета); ТелоСтрокой = ЗаписьJSON.Закрыть(); Ответ.УстановитьТелоИзСтроки(ТелоСтрокой); Ответ.Заголовки.Вставить("Content-Type", "application/json"); Иначе Ответ = Новый HTTPСервисОтвет(421); Ответ.УстановитьТелоИзСтроки("Неверно указаны границы периода в запросе."); КонецЕсли; Возврат Ответ; КонецФункции // Подбор номенклатуры по части Наименования. // Сервис должен выдавать найденную номенклатуру по части введенного на сайте наименования, // сайт должен иметь возможность самостоятельно ограничивать количество // необходимых позиций номенклатуры отвечающих критериям поиска. Функция НоменклатураПолучитьНоменклатуруПоЧастиИмени(Запрос) Ответ = Новый HTTPСервисОтвет(200); // http://localhost/UNF/hs/website/sku/Фасад?fields=код,наименование,артикул&quantity=3 // /sku/{partofname} ЧастьИмени = Запрос.ПараметрыURL.Получить("partofname"); Если ЗначениеЗаполнено(ЧастьИмени) Тогда Колонки = Запрос.ПараметрыЗапроса.Получить("fields"); Если Колонки = Неопределено Тогда СекцияВыбрать = "*"; Иначе МассивКолонок = СтрРазделить(Колонки, ","); СекцияВыбрать = ""; Для каждого ОчереднаяКолонка Из МассивКолонок Цикл СекцияВыбрать = СекцияВыбрать + ?(ЗначениеЗаполнено(СекцияВыбрать), ", | Номенклатура." + ОчереднаяКолонка + " КАК " + ОчереднаяКолонка, "Номенклатура." + ОчереднаяКолонка + " КАК " + ОчереднаяКолонка); КонецЦикла; КонецЕсли; КоличествоЗаписей = Запрос.ПараметрыЗапроса.Получить("quantity"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | &ИмяПоля КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ПометкаУдаления | И НЕ Номенклатура.ЭтоГруппа | И Номенклатура.Наименование ПОДОБНО &ЧастьИмени"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяПоля КАК Ссылка", СекцияВыбрать); Если ЗначениеЗаполнено(КоличествоЗаписей) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ " + КоличествоЗаписей); КонецЕсли; Запрос.УстановитьПараметр("ЧастьИмени", "%" + ЧастьИмени + "%"); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); ДанныеОтвета = Новый Массив(); Пока Выборка.Следующий() Цикл СтруктураСтроки = Новый Структура(); Для каждого ОчереднаяКолонка Из РезультатЗапроса.Колонки Цикл СтруктураСтроки.Вставить(ОчереднаяКолонка.Имя, Строка(Выборка[ОчереднаяКолонка.Имя])); КонецЦикла; ДанныеОтвета.Добавить(СтруктураСтроки); КонецЦикла; ЗаписьJSON = Новый ЗаписьJSON(); ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета); ТелоСтрокой = ЗаписьJSON.Закрыть(); Ответ.УстановитьТелоИзСтроки(ТелоСтрокой); Ответ.Заголовки.Вставить("Content-Type", "application/json"); Иначе Ответ = Новый HTTPСервисОтвет(421); Ответ.УстановитьТелоИзСтроки("Не указана строка поиска номенклатуры в запросе."); КонецЕсли; Возврат Ответ; КонецФункции // Postman: // http://localhost/UNF/hs/website/order/period/20220407/20220410 //[ // { // "Документ": "Заказ покупателя 34 от 07.04.2022 ", // "ДокументID": "9efcb2c5-13a6-11e7-95e2-bcaec5b897eb", // "ДокументНомер": "АСФР-000034", // "ДокументДата": "07.04.2022 0:00:00", // "ДокументКонтрагент": "Линёв Владимир Сергеевич", // "ДокументСостояниеЗаказа": "Обсуждение КП", // "ДокументСуммаДокумента": "419 419,5", // "Товары": [ // { // "Номенклатура": "Варочная панель", // "Количество": "1", // "Цена": "14 000", // "Сумма": "12 600" // }, // { // "Номенклатура": "Вытяжка", // "Количество": "1", // "Цена": "14 100", // "Сумма": "12 690" // }, // { // "Номенклатура": "Духовой шкаф", // "Количество": "1", // "Цена": "18 800", // "Сумма": "16 920" // }, // { // "Номенклатура": "Холодильник", // "Количество": "1", // "Цена": "25 700", // "Сумма": "23 130" // }, // { // "Номенклатура": "Гелькоут", // "Количество": "8", // "Цена": "3 700", // "Сумма": "26 640" // }, // { // "Номенклатура": "Пенал 2-х дв. 600х1400х600", // "Количество": "2", // "Цена": "17 710", // "Сумма": "31 878" // }, // { // "Номенклатура": "Стол 2/30 600х800х500", // "Количество": "1", // "Цена": "16 250", // "Сумма": "14 625" // }, // { // "Номенклатура": "Шкаф 60 600х700х300", // "Количество": "5", // "Цена": "18 300", // "Сумма": "82 350" // }, // { // "Номенклатура": "Шкаф у60х60 600х700х600", // "Количество": "6", // "Цена": "16 630", // "Сумма": "89 802" // }, // { // "Номенклатура": "Облицовка жидким камнем", // "Количество": "1", // "Цена": "8 600", // "Сумма": "7 740" // }, // { // "Номенклатура": "Сборка модулей на производстве", // "Количество": "15", // "Цена": "200", // "Сумма": "2 700" // }, // { // "Номенклатура": "Мойка", // "Количество": "1", // "Цена": "10 800", // "Сумма": "9 600" // }, // { // "Номенклатура": "Смеситель", // "Количество": "1", // "Цена": "13 520", // "Сумма": "12 084" // }, // { // "Номенклатура": "Фасад 300х700", // "Количество": "5", // "Цена": "2 160", // "Сумма": "9 682,5" // }, // { // "Номенклатура": "Фасад 600х600", // "Количество": "3", // "Цена": "3 600", // "Сумма": "9 682,5" // }, // { // "Номенклатура": "Фасад 600х700", // "Количество": "5", // "Цена": "4 140", // "Сумма": "18 557,5" // }, // { // "Номенклатура": "Опора", // "Количество": "20", // "Цена": "240", // "Сумма": "4 320" // }, // { // "Номенклатура": "Ручка", // "Количество": "16", // "Цена": "1 520", // "Сумма": "21 888" // }, // { // "Номенклатура": "Варочная панель", // "Количество": "1", // "Цена": "14 000", // "Сумма": "12 600" // }, // { // "Номенклатура": "Вытяжка", // "Количество": "1", // "Цена": "14 100", // "Сумма": "12 690" // }, // { // "Номенклатура": "Духовой шкаф", // "Количество": "1", // "Цена": "18 800", // "Сумма": "16 920" // }, // { // "Номенклатура": "Холодильник", // "Количество": "1", // "Цена": "25 700", // "Сумма": "23 130" // }, // { // "Номенклатура": "Гелькоут", // "Количество": "8", // "Цена": "3 700", // "Сумма": "26 640" // }, // { // "Номенклатура": "Пенал 2-х дв. 600х1400х600", // "Количество": "2", // "Цена": "17 710", // "Сумма": "31 878" // }, // { // "Номенклатура": "Стол 2/30 600х800х500", // "Количество": "1", // "Цена": "16 250", // "Сумма": "14 625" // }, // { // "Номенклатура": "Шкаф 60 600х700х300", // "Количество": "5", // "Цена": "18 300", // "Сумма": "82 350" // }, // { // "Номенклатура": "Шкаф у60х60 600х700х600", // "Количество": "6", // "Цена": "16 630", // "Сумма": "89 802" // }, // { // "Номенклатура": "Облицовка жидким камнем", // "Количество": "1", // "Цена": "8 600", // "Сумма": "7 740" // }, // { // "Номенклатура": "Сборка модулей на производстве", // "Количество": "15", // "Цена": "200", // "Сумма": "2 700" // }, // { // "Номенклатура": "Мойка", // "Количество": "1", // "Цена": "13 200", // "Сумма": "12 000" // }, // { // "Номенклатура": "Смеситель", // "Количество": "1", // "Цена": "15 200", // "Сумма": "13 764" // }, // { // "Номенклатура": "Фасад 300х700", // "Количество": "5", // "Цена": "2 310", // "Сумма": "10 432,5" // }, // { // "Номенклатура": "Фасад 600х600", // "Количество": "3", // "Цена": "3 850", // "Сумма": "10 432,5" // }, // { // "Номенклатура": "Фасад 600х700", // "Количество": "5", // "Цена": "4 430", // "Сумма": "20 007,5" // }, // { // "Номенклатура": "Опора", // "Количество": "20", // "Цена": "240", // "Сумма": "4 320" // }, // { // "Номенклатура": "Ручка", // "Количество": "16", // "Цена": "1 520", // "Сумма": "21 888" // } // ] // }, // { // "Документ": "Заказ покупателя 36 от 10.04.2022 ", // "ДокументID": "f15147db-3a2e-11e8-8781-b06ebf31a92f", // "ДокументНомер": "АСФР-000036", // "ДокументДата": "10.04.2022 12:00:01", // "ДокументКонтрагент": "Смирнов Александр Владиславович", // "ДокументСостояниеЗаказа": "В производстве", // "ДокументСуммаДокумента": "43 197,5", // "Товары": [ // { // "Номенклатура": "Холодильник", // "Количество": "1", // "Цена": "25 700", // "Сумма": "24 415" // }, // { // "Номенклатура": "Варочная панель", // "Количество": "1", // "Цена": "10 150", // "Сумма": "9 642,5" // }, // { // "Номенклатура": "Вытяжка", // "Количество": "1", // "Цена": "14 100", // "Сумма": "13 395" // }, // { // "Номенклатура": "Холодильник", // "Количество": "1", // "Цена": "20 800", // "Сумма": "19 760" // }, // { // "Номенклатура": "Варочная панель", // "Количество": "1", // "Цена": "10 150", // "Сумма": "9 642,5" // }, // { // "Номенклатура": "Вытяжка", // "Количество": "1", // "Цена": "14 100", // "Сумма": "13 395" // } // ] // } //] // http://localhost/UNF/hs/website/sku/Фасад?fields=код,наименование,артикул&quantity=3 //[ // { // "код": "ФР-00000037", // "наименование": "Фасад 600х600", // "артикул": "601" // }, // { // "код": "ФР-00000038", // "наименование": "Фасад 600х800", // "артикул": "602" // }, // { // "код": "ФР-00000039", // "наименование": "Фасад 300х700", // "артикул": "603" // } //] // http://localhost/UNF/hs/website/sku/600х?fields=Код,Наименование,Артикул,ЕдиницаИзмерения&quantity=5 //[ // { // "Код": "ФР-00000014", // "Наименование": "Мебельная деталь 600х600", // "Артикул": "206", // "ЕдиницаИзмерения": "шт" // }, // { // "Код": "ФР-00000015", // "Наименование": "Мебельная деталь 600х700", // "Артикул": "207", // "ЕдиницаИзмерения": "шт" // }, // { // "Код": "ФР-00000016", // "Наименование": "Мебельная деталь 600х800", // "Артикул": "208", // "ЕдиницаИзмерения": "шт" // }, // { // "Код": "ФР-00000017", // "Наименование": "Мебельная деталь 600х1400", // "Артикул": "209", // "ЕдиницаИзмерения": "шт" // }, // { // "Код": "ФР-00000032", // "Наименование": "Пенал 2-х дв. 600х1400х600", // "Артикул": "45-101", // "ЕдиницаИзмерения": "шт" // } //]