diff --git a/HTTPServices.cfe b/HTTPServices.cfe new file mode 100644 index 0000000..8832316 Binary files /dev/null and b/HTTPServices.cfe differ diff --git a/src/HTTPServices/AccumulationRegisters/ОплатаСчетовПокупателями.xml b/src/HTTPServices/AccumulationRegisters/ОплатаСчетовПокупателями.xml new file mode 100644 index 0000000..98f3eea --- /dev/null +++ b/src/HTTPServices/AccumulationRegisters/ОплатаСчетовПокупателями.xml @@ -0,0 +1,105 @@ + + + + + + 6c72f4be-3f13-45cb-94c8-5bfd2fc185c0 + 8c91e54e-dad6-4957-b03f-de41960d6ef8 + + + f5ce07e9-5f3f-404d-9eca-f255459af970 + 925c2f30-26f9-4155-a875-70467e093c4b + + + bdfd0f16-4493-4e55-b327-a8ed368c387e + 1263aace-04c6-4aa4-9336-c8047bb3d972 + + + a3f934fe-6f5f-4190-a22d-7ff79e952ed0 + 1e8d85f4-7778-4ac9-b5e6-ee1dd3aaad47 + + + 96a081b5-d915-4c71-af41-fd9c616eb857 + d5cee097-854c-43ec-bd0b-1883f39e20ff + + + 99eb7dea-f6e2-4a95-8456-89ff375ecb99 + e5d0b6b6-54b9-470b-805d-aeb15ed31ad7 + + + + ОплатаСчетовПокупателями + + Adopted + 8e90ac11-805d-438c-b32a-facebade49b7 + Turnovers + + + + + + Сумма + + Adopted + 13d2dd1d-c68f-4c24-9be4-f865d15c01d7 + + xs:decimal + + 15 + 2 + Nonnegative + + + + + + + + Заявка + + Adopted + 00ef2eb1-460a-4797-895b-86e096fa1bc3 + + cfg:DocumentRef.Заявка + + + + + + + Счет + + Adopted + 7588f7db-3fe5-4ae7-8096-856b4cff78ee + + cfg:DocumentRef.СчетНаОплатуПокупателю + + + + + + + Контрагент + + Adopted + e8194c0b-3910-432e-a22e-ea01cbd572b4 + + cfg:CatalogRef.Контрагенты + + + + + + + Договор + + Adopted + 789600ae-6177-445e-a532-a8c442ef715d + + cfg:CatalogRef.ДоговорыКонтрагентов + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Catalogs/ВидыСостоянийДокументов.xml b/src/HTTPServices/Catalogs/ВидыСостоянийДокументов.xml new file mode 100644 index 0000000..4830f60 --- /dev/null +++ b/src/HTTPServices/Catalogs/ВидыСостоянийДокументов.xml @@ -0,0 +1,34 @@ + + + + + + cb361177-b21c-4ab1-a6a5-9e3c8d1fd760 + 27a16c9e-fe03-46b0-be9b-106874ad49f8 + + + 0c3011a3-7912-436e-babc-d4425acd9579 + 6602194a-7535-4cef-ba7e-ef01d50eba1d + + + bb53fe48-9c2b-43a7-a999-a84e4ee6fc32 + ce5ac7d3-fea0-45cb-85c1-239d33419a8a + + + 9da09cf3-5f57-42fe-93b4-ef1c9317aeaf + 0986cc05-6272-4d22-9f7f-57b1e56576c2 + + + 3f5b7603-14c1-4c2f-9c89-95940f65405c + d000f8da-fbe1-4276-b359-d55c380eacf3 + + + + ВидыСостоянийДокументов + + Adopted + 2e8c8a8a-ddd2-448c-aa77-c03c0eeda546 + + + + \ No newline at end of file diff --git a/src/HTTPServices/Catalogs/ДоговорыКонтрагентов.xml b/src/HTTPServices/Catalogs/ДоговорыКонтрагентов.xml new file mode 100644 index 0000000..21fd431 --- /dev/null +++ b/src/HTTPServices/Catalogs/ДоговорыКонтрагентов.xml @@ -0,0 +1,34 @@ + + + + + + cf2c4510-e89b-4193-ab3f-8fd9ba5ae1ad + 358f946d-2059-4301-ae2c-8906e6d175b7 + + + dea403b5-3ed2-4b46-8747-283b13c4b694 + 5ea939cd-3090-4a75-a5fb-d3ff5b3ebd2a + + + 92ae3764-7183-4974-a28a-b84aae955db7 + 5f802291-9dec-4e4f-a529-71628530e9f4 + + + 2e5788f5-9e88-4a32-bab5-b3c43aecbe95 + 400f1893-6e0c-4413-a74c-1d1c7ad2af81 + + + d3231d83-a172-4eb5-8825-9e518def13d0 + b49bf44b-74ac-4255-9989-3765ed40a7bf + + + + ДоговорыКонтрагентов + + Adopted + b9e5871f-258c-4beb-bed7-481bf362ae45 + + + + \ No newline at end of file diff --git a/src/HTTPServices/Catalogs/КонтактныеЛица.xml b/src/HTTPServices/Catalogs/КонтактныеЛица.xml new file mode 100644 index 0000000..090d24e --- /dev/null +++ b/src/HTTPServices/Catalogs/КонтактныеЛица.xml @@ -0,0 +1,34 @@ + + + + + + b026c9a0-f67f-47b4-9c92-8b827c5308aa + 82fb1cc8-01fb-4f04-b306-c94e6eb1418b + + + c888905e-3760-4e0e-99d0-f762fbaa0254 + 8b17266c-b9d8-4747-adca-f346425150b9 + + + da2c622c-474f-49c9-9ded-8a585845df83 + cdab6d79-f3e9-4a49-8d8c-3eb3a634d983 + + + 857dde7c-9ed2-4d97-8f88-9c64425bdc6c + b0787fff-0f9d-429f-99d9-e2748b2e37bd + + + d4ab5202-fb9c-4160-bf07-16739d5ace22 + 815a8a3d-99eb-4208-8ce8-e1e41b6fcfc1 + + + + КонтактныеЛица + + Adopted + 2281dd81-7741-48df-8ab3-c7e314f7c359 + + + + \ No newline at end of file diff --git a/src/HTTPServices/Catalogs/Контрагенты.xml b/src/HTTPServices/Catalogs/Контрагенты.xml new file mode 100644 index 0000000..bdf4eb5 --- /dev/null +++ b/src/HTTPServices/Catalogs/Контрагенты.xml @@ -0,0 +1,95 @@ + + + + + + ff9c73e3-d721-4d68-b87d-0213ab967f8b + d7380155-7ff3-4d9c-87f1-c63579a7c459 + + + a9d72f83-9fde-46e7-8437-0b376ab0a30f + cefb908c-00f7-4d76-ab30-fb47e682b0b7 + + + 54bd62fb-6758-46c2-b0e2-3b4992b02c7f + 15678ab3-7f8a-423e-8732-6082ef2472e8 + + + b1a47bd2-953e-43f7-bc94-83dc42698758 + 528f9de9-4435-4cc5-954b-36a89d493eeb + + + cbf10534-d33c-4e9d-892b-2fc8c9e921e2 + 0eb500d1-518d-414a-9851-b585805f4d53 + + + + Контрагенты + + Adopted + 51b9a2d4-bd53-4f40-824e-e3b4e323279e + + + + + + НаименованиеСокращенное + + Adopted + 01f8d118-20c1-4624-bf18-f79cb42b3b76 + + xs:string + + 160 + Variable + + + + + + + + ИНН + + Adopted + 0cecf59e-c7cc-4803-a3fb-387554cb4307 + + xs:string + + 50 + Variable + + + + + + + + НаименованиеПолное + + Adopted + 128e969b-e420-4894-9c2e-e10e63963d75 + + xs:string + + 1000 + Variable + + + + + + + + ЮридическоеФизическоеЛицо + + Adopted + 56ba8e3c-152e-472e-978c-1c8a27110815 + + cfg:EnumRef.ЮридическоеФизическоеЛицо + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP.xml b/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP.xml new file mode 100644 index 0000000..5460364 --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP.xml @@ -0,0 +1,23 @@ + + + + + HS_ОбработкаМетодовHTTP + + + ru + Обработка методов HTTP + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP/Ext/Module.bsl b/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP/Ext/Module.bsl new file mode 100644 index 0000000..663c612 --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбработкаМетодовHTTP/Ext/Module.bsl @@ -0,0 +1,240 @@ +#Область МетодыPost + +//Функция экспортная, специально чтобы можно было отлаживать как по HTTP(https://its.1c.ru/db/metod8dev#content:5756:hdoc) +//Так и через внешнюю обработку +Функция HS_ОбработкаМетодовPOST(СтруктураВхПараметров) Экспорт + //структура ответа. Собственна нужна для формирования ответа + СтруктураОтвет = Новый Структура("ДанныеОтвета,Отработало,ТекстОшибки,КодОтвета","",Истина,"",200); + + //Переправляем на нужный метод +#Область ПримерыЧасть3 +//Получаем список заданий за период (БСП) + Если ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьСписокЗаданийЗаПериод") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьСписокЗаданийЗаПериод(СтруктураОтвет,СтруктураВхПараметров); +#КонецОбласти +//Получаем количество элементов + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьКоличествоЭлементовВариантЗапрос") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьКоличествоЭлементовВариантЗапрос(СтруктураОтвет,СтруктураВхПараметров); + +//Порционно получаем элементы в формате JSON + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьПорциюЭлементовВариантЗапроса") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьПорциюЭлементовВариантЗапроса(СтруктураОтвет,СтруктураВхПараметров); + + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("StatusDoc") Тогда + HS_ОбработкаУниверсальныхМетодов.ПолучитьДанныеПоСпискуНомеровДокументов(СтруктураОтвет,СтруктураВхПараметров); + ИначеЕсли Врег(СтруктураВхПараметров.ИмяМетода) = ВРег("ListZakazFromINN") Тогда + HS_ОбработкаУниверсальныхМетодов.ПолучитьСписокЗаказовПоИННКонтрагента(СтруктураОтвет,СтруктураВхПараметров); + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,501,"Отсутствует Метод " + ?(СтруктураВхПараметров.ИмяМетода=Неопределено,"",СтруктураВхПараметров.ИмяМетода),ложь,""); + КонецЕсли; + + Возврат СтруктураОтвет; +КонецФункции + +#КонецОбласти + +#Область МетодыGet + +//Функция экспортная, специально чтобы можно было отлаживать как по HTTP(https://its.1c.ru/db/metod8dev#content:5756:hdoc) +//Так и через внешнюю обработку +Функция HS_ОбработкаМетодовGET(СтруктураВхПараметров) Экспорт + //структура ответа. Собственна нужна для формирования ответа + СтруктураОтвет = Новый Структура("ДанныеОтвета,Отработало,ТекстОшибки,КодОтвета","",Истина,"",200); + + //Операцию нужно выполнить используя БСП:Базовая функциональность\Длительные операции++ +#Область ПримерыЧасть3 + ВФоне = СтруктураВхПараметров.ПараметрыЗапроса.Получить("BTask"); + Если не ВФоне = Неопределено Тогда + ВФоне = Булево(ВФоне); + Если ВФоне = Истина Тогда + УникальныйИдентификатор = Новый УникальныйИдентификатор; + + //Уникальный адрес результата + АдресРезультата = СтруктураВхПараметров.ИмяМетода+"_"+Строка(УникальныйИдентификатор); + + //Подгатавливаем параметры для Длительной операции + ПараметрыЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыЗапуска.НаименованиеФоновогоЗадания = "Выполнение_" + АдресРезультата; + ПараметрыЗапуска.ОжидатьЗавершение = Ложь; + ПараметрыЗапуска.КлючФоновогоЗадания = УникальныйИдентификатор; + ПараметрыЗапуска.ЗапуститьВФоне = Истина; + + //Добавляем адрес в структуру + СтруктураВхПараметров.Вставить("АдресРезультата",АдресРезультата); + + //Запускаем метод в фоне + РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне( + "HS_АсинхронныеОперации.ФЗ_ВыполнитьМетод_ДлительнаяОперация", + СтруктураВхПараметров, + ПараметрыЗапуска); + + //Проверяем что задание запустилось + Если РезультатФоновогоЗадания.Статус = "Ошибка" Тогда + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Ошибка при формировании: "+Строка(РезультатФоновогоЗадания.КраткоеПредставлениеОшибки),Ложь,""); + Возврат СтруктураОтвет; + КонецЕсли; + + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + + АдресСсылки = СтруктураВхПараметров.БазовыйURL + "/V1/ФоновоеЗаданиеПроверить?" + + "Result_Key=" + АдресРезультата + "&" + + "Task_Key=" + Строка(ФоновоеЗаданиеИдентификатор); + + //Формируем html ответ + СтруктураОтвет.ДанныеОтвета = " + | + | Задание отправлено на выполнение!
+ |

Идентификатор фонового задания = " + Строка(ФоновоеЗаданиеИдентификатор) + "
+ | Адрес хранилища результата = " + АдресРезультата + "

+ |

Ссылка на получение результата

+ | + |"; + + Возврат СтруктураОтвет; + КонецЕсли; + КонецЕсли; +#КонецОбласти + //Операцию нужно выполнить используя БСП:Базовая функциональность\Длительные операции-- + +#Область ПримерыЧасть1 + //Переправляем на нужный метод + Если ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("Список") Тогда + + ПолучитьСписок(СтруктураОтвет,СтруктураВхПараметров); + + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("Документ") Тогда + + ПолучитьДокумент(СтруктураОтвет,СтруктураВхПараметров); + +#КонецОбласти +#Область ПримерыЧасть2 +//Получаем доступные остатки по складу в формате JSON (ERP, УТ, КА) + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ОстаткиИДоступностьТоваровПоСкладу") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьОстаткиИДоступностьТоваровПоСкладу(СтруктураОтвет,СтруктураВхПараметров); +#КонецОбласти +#Область ПримерыЧасть3 +//Получаем список заданий за период (БСП) + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьСписокЗаданийЗаПериод") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьСписокЗаданийЗаПериод(СтруктураОтвет,СтруктураВхПараметров); + +//Проверяем фоновое задание. Если Выполнено забираем результат + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ФоновоеЗаданиеПроверить") Тогда + + ПроверитьФоновоеЗадание(СтруктураОтвет,СтруктураВхПараметров); + +#КонецОбласти + +//Получаем количество элементов + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьКоличествоЭлементовВариантЗапрос") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьКоличествоЭлементовВариантЗапрос(СтруктураОтвет,СтруктураВхПараметров); + +//Порционно получаем элементы в формате JSON + ИначеЕсли ВРег(СтруктураВхПараметров.ИмяМетода) = ВРег("ПолучитьПорциюЭлементовВариантЗапроса") Тогда + + HS_ОбработкаУниверсальныхМетодов.ПолучитьПорциюЭлементовВариантЗапроса(СтруктураОтвет,СтруктураВхПараметров); + + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,501,"Отсутствует Метод " + ?(СтруктураВхПараметров.ИмяМетода=Неопределено,"",СтруктураВхПараметров.ИмяМетода),Ложь,""); + КонецЕсли; + Возврат СтруктураОтвет; +КонецФункции + +#Область Методы +#Область ПримерыЧасть1 +Процедура ПолучитьСписок(СтруктураОтвет,СтруктураВхПараметров) + Результат = "Расходная накладная, 1, 01.01.2014 + |Расходная накладная, 2, 01.01.2014"; + СтруктураОтвет.ДанныеОтвета = Результат; +КонецПроцедуры + +Процедура ПолучитьДокумент(СтруктураОтвет,СтруктураВхПараметров) + //ПраметрыЗапроса - number + ПарНомер = СтруктураВхПараметров.ПараметрыЗапроса.Получить("number"); + + Номер = Число(?(ПарНомер=Неопределено,0,ПарНомер)); + Если Номер > 2 Тогда + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Отсутствует документ с номером: " + Номер,ложь,""); + Иначе + Если Номер = 1 Тогда + Результат = "Расходная накладная, 1, 01.01.2014"; + Иначе + Результат = "Расходная накладная, 2, 01.01.2014"; + КонецЕсли; + СтруктураОтвет.ДанныеОтвета = Результат; + КонецЕсли; +КонецПроцедуры +#КонецОбласти +#Область ПримерыЧасть3 +Процедура ПроверитьФоновоеЗадание(СтруктураОтвет,СтруктураВхПараметров) + перФоновоеЗаданиеИдентификатор = СтруктураВхПараметров.ПараметрыЗапроса.Получить("Task_Key"); + АдресРезультата = СтруктураВхПараметров.ПараметрыЗапроса.Получить("Result_Key"); + + //Проверяем фоновое задание + Если перФоновоеЗаданиеИдентификатор = Неопределено Тогда + Задание = HS_ОбщиеПроцедурыИФункции.НайтиЗадание(Неопределено); + Иначе + //Получаем Уникальный идентификатор задания + ФоновоеЗаданиеИдентификатор = Новый УникальныйИдентификатор(перФоновоеЗаданиеИдентификатор); + + Задание = HS_ОбщиеПроцедурыИФункции.НайтиЗадание(ФоновоеЗаданиеИдентификатор); + КонецЕсли; + + //При отсутствии адреса результата прерываем + Если АдресРезультата = Неопределено Тогда + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Отсутствует параметр ""Result_Key""",Ложь,""); + Возврат; + КонецЕсли; + + Если Не Задание.Выполняется Тогда + Попытка + НайденнаяСсылка = Справочники.HS_ХранилищеРезультатов.НайтиПоРеквизиту("АдресРезультата",АдресРезультата); + + Если НайденнаяСсылка = Справочники.HS_ХранилищеРезультатов.ПустаяСсылка() Тогда + //Можно вынести в отдельную функцию + АдресСсылки = СтруктураВхПараметров.БазовыйURL + "/V1/ФоновоеЗаданиеПроверить?" + + "Result_Key=" + АдресРезультата + ?(ЗначениеЗаполнено(перФоновоеЗаданиеИдентификатор), + "&Task_Key=" + перФоновоеЗаданиеИдентификатор,""); + + //Формируем html ответ + СтруктураОтвет.ДанныеОтвета = " + | + | Задание еще выполняется, попробуйте получить результат позже!
+ |

Идентификатор фонового задания = " + перФоновоеЗаданиеИдентификатор + "
+ | Адрес хранилища результата = " + АдресРезультата + "

+ |

Ссылка на получение результата

+ | + |"; + Иначе + СтруктураОтвет = НайденнаяСсылка.Результат.Получить(); + КонецЕсли; + + Исключение + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Ошибка при формировании: "+ОписаниеОшибки(),Ложь,""); + КонецПопытки; + Иначе + //Задание еще в процессе + АдресСсылки = СтруктураВхПараметров.БазовыйURL + "/V1/ФоновоеЗаданиеПроверить?" + + "Result_Key=" + АдресРезультата + ?(ЗначениеЗаполнено(перФоновоеЗаданиеИдентификатор), + "&Task_Key=" + перФоновоеЗаданиеИдентификатор,""); + + //Формируем html ответ + СтруктураОтвет.ДанныеОтвета = " + | + | Задание еще выполняется, попробуйте получить результат позже!
+ |

Идентификатор фонового задания = " + перФоновоеЗаданиеИдентификатор + "
+ | Адрес хранилища результата = " + АдресРезультата + "

+ |

Ссылка на получение результата

+ | + |"; + КонецЕсли; +КонецПроцедуры +#КонецОбласти +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов.xml b/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов.xml new file mode 100644 index 0000000..141ce07 --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов.xml @@ -0,0 +1,23 @@ + + + + + HS_ОбработкаУниверсальныхМетодов + + + ru + Обработка универсальных методов + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов/Ext/Module.bsl b/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов/Ext/Module.bsl new file mode 100644 index 0000000..0f92e0a --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбработкаУниверсальныхМетодов/Ext/Module.bsl @@ -0,0 +1,795 @@ +#Область Методы +//Пример из Части 2. Метод написан под ERP, будет работать в УТ и КА +#Область ПримерыЧасть2 +Процедура ПолучитьОстаткиИДоступностьТоваровПоСкладу(СтруктураОтвет,СтруктураВхПараметров) Экспорт + //ПраметрыЗапроса - number + Склад_Key = СтруктураВхПараметров.ПараметрыЗапроса.Получить("Ref_Key"); + + Если не Склад_Key = Неопределено Тогда + //Получаем Склад + Попытка + Склад = XMLЗначение(Тип("СправочникСсылка.Склады"), Склад_Key); + Исключение + Склад = Неопределено; + КонецПопытки; + + Если ЗначениеЗаполнено(Склад) Тогда + //Получаем схему компоновки и вариант отчета + //СхемаКомпоновки = Отчеты.ОстаткиИДоступностьТоваров.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); + //ВариантНастроеки = СхемаКомпоновки.ВариантыНастроек.Найти("ОстаткиИДоступностьТоваров"); + СхемаКомпоновки = Отчеты.HS_ХранилищеМакетов.ПолучитьМакет("СКД_ОстаткиИДоступностьТоваров_HTTP"); + ВариантНастроеки = СхемаКомпоновки.ВариантыНастроек.Найти("ОстаткиИДоступностьТоваровНеТаблица"); + НастройкиКомпоновки = ВариантНастроеки.Настройки; + + //Взято из модуля отчета.ОстаткиИДоступностьТоваров "ПриКомпоновкеРезультата"++ + ТекстЗапроса = СхемаКомпоновки.НаборыДанных.Основной.Запрос; + + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "&ТекстЗапросаВесНоменклатуры", + Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("Набор.Номенклатура.ЕдиницаИзмерения", "Набор.Номенклатура")); + + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "&ТекстЗапросаОбъемНоменклатуры", + Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("Набор.Номенклатура.ЕдиницаИзмерения", "Набор.Номенклатура")); + + СхемаКомпоновки.НаборыДанных.Основной.Запрос = ТекстЗапроса; + //Взято из модуля отчета.ОстаткиИДоступностьТоваров "ПриКомпоновкеРезультата"-- + + ПрараметрОтбора = НастройкиКомпоновки.Отбор.Элементы; + СкладПолеКомпоновки = Новый ПолеКомпоновкиДанных("Склад"); + Для Каждого СтрокаОтбора из ПрараметрОтбора Цикл + Если СтрокаОтбора.ЛевоеЗначение = СкладПолеКомпоновки Тогда + СтрокаОтбора.Использование = Истина; + СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + СтрокаОтбора.ПравоеЗначение = Склад; + КонецЕсли; + КонецЦикла; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ДеревоЗначений = Новый ДеревоЗначений; + ПроцессорВывода.УстановитьОбъект(ДеревоЗначений); + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + //Обходим дерево и формируем РезультатОтвет + РезультатОтвет = Новый Массив; + Для Каждого ВерхнийУровеньДерева Из ДеревоЗначений.Строки Цикл + Для Каждого ПодчиненныйУровеньДерева Из ВерхнийУровеньДерева.Строки Цикл + Если ЗначениеЗаполнено(ПодчиненныйУровеньДерева.Номенклатура) + И ТипЗнч(ПодчиненныйУровеньДерева.Номенклатура) = Тип("СправочникСсылка.Номенклатура") + Тогда + РезультатОтвет.Добавить(Новый Структура("ИмяЗначение,Артикул,Guid,ДоступноСейчас,Остаток", + ПодчиненныйУровеньДерева.Номенклатура.Наименование + + ?(ЗначениеЗаполнено(ПодчиненныйУровеньДерева.Характеристика), + ","+Строка(ПодчиненныйУровеньДерева.Характеристика),""), + ПодчиненныйУровеньДерева.НоменклатураАртикул, + XMLСтрока(ПодчиненныйУровеньДерева.Номенклатура), + ПодчиненныйУровеньДерева.ДоступноСейчас, + ПодчиненныйУровеньДерева.ВНаличии)); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + //РезультатОтвет в JSON + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + СтруктураОтвет.ДанныеОтвета = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,РезультатОтвет); + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Не заполнен или неверно заполнен параметр ""Ref_Key""",ложь,""); + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Отсутствует параметр ""Ref_Key""",ложь,""); + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьДанныеПоСпискуНомеровДокументов(СтруктураОтвет,СтруктураВхПараметров) Экспорт + //ВидДокументов - получаем для идентификации того, что будем искать изначально + //Должен принимать вид Schet или Zakaz + + //ЗаписьЖурналаРегистрации("HTTP-Service",,,СтруктураВхПараметров,"ВАЖНОЕ",); + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтруктураВхПараметров.ТелоЗапроса); + СтруктураJSON = ПрочитатьJSON(ЧтениеJSON); + + ВидКонтрагента = СтруктураJSON.urfiz;//принимаем данные по клиенту, если urfiz = ur то юр.лицо; + + //СтрокаСпискаНомеровДокументов - Строка с номерами документов, разделенными запятыми без пробелов. + //Только цифры и кирилические символы в верхнем регистре. + СтрокаСпискаНомеровДокументов = СтруктураJSON.strNumDoc; //СтруктураВхПараметров.ПараметрыЗапроса.Получить("StrDocNumbers"); + СтрокаСпискаНомеровДокументов = Врег(СтрЗаменить(СтрокаСпискаНомеровДокументов," ","")); //Убираем все пробелы и переводим в верхний регистр + МассивНомеровДокументов = СтрРазделить(СтрокаСпискаНомеровДокументов,",",ЛОЖЬ); + + ИННКонтрагента = СтруктураJSON.INN; + + Если НЕ ВидКонтрагента = Неопределено Тогда + Если ВидКонтрагента = "ur" Тогда //отрабатываем с ИНН по Юр.Лицу + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СчетНаОплатуПокупателю.ЗаявкаОснование КАК ЗаявкаОснование + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю + |ГДЕ + | СчетНаОплатуПокупателю.Номер В(&МассивНомеров) + | И СчетНаОплатуПокупателю.Контрагент.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо) + | И СчетНаОплатуПокупателю.Контрагент.ИНН = &ИННКонтрагента"; + Запрос.УстановитьПараметр("МассивНомеров",МассивНомеровДокументов); + Запрос.УстановитьПараметр("ИННКонтрагента",ИННКонтрагента); + Выполнение = Запрос.Выполнить(); + ТЗВыгрузка = Выполнение.Выгрузить(); + Запрос = ""; + + //Здесь получаем ТЗ Заявок. Теперь нужно из ТЗ выдернуть Номера Заявок и добавить эти номера к МассивуНомеровДокументов + Для каждого СтрокаТЗ Из ТЗВыгрузка Цикл + МассивНомеровДокументов.Добавить(СтрокаТЗ.ЗаявкаОснование.Номер); + КонецЦикла; + + //Все Номера Счетов Отработали. + //Теперь можно просто собрать данные по заявкам. + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ЗаказКлиента.Ссылка КАК Заявка, + | ВЫБОР + | КОГДА ЗаказКлиента.Контрагент.НаименованиеСокращенное = NULL + | ИЛИ ЗаказКлиента.Контрагент.НаименованиеСокращенное = """" + | ТОГДА ЗаказКлиента.Контрагент.НаименованиеПолное + | ИНАЧЕ ЗаказКлиента.Контрагент.НаименованиеСокращенное + | КОНЕЦ КАК Контрагент, + | ВЫБОР + | КОГДА НЕ СостоянияДокументов.Состояние ЕСТЬ NULL + | ТОГДА СостоянияДокументов.Состояние.Представление + | ИНАЧЕ ""Без статуса"" + | КОНЕЦ КАК Статус + |ПОМЕСТИТЬ Заявки + |ИЗ + | Документ.ЗаказКлиента КАК ЗаказКлиента + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументов КАК СостоянияДокументов + | ПО ЗаказКлиента.Ссылка = СостоянияДокументов.Документ + |ГДЕ + | ЗаказКлиента.Номер В(&МассивНомеров) + | И ЗаказКлиента.Контрагент.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо) + | И ЗаказКлиента.Контрагент.ИНН = &ИННКонтрагента + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СчетНаОплатуПокупателю.Ссылка КАК Счет, + | ВЫБОР + | КОГДА ОплатаСчетовПокупателями.Сумма > 0 + | ТОГДА ""Оплата есть"" + | ИНАЧЕ ""Оплаты нет"" + | КОНЕЦ КАК НаличиеОплаты, + | ЕСТЬNULL(ОплатаСчетовПокупателями.Сумма, 0) КАК СуммаОплаты, + | СчетНаОплатуПокупателю.ЗаявкаОснование КАК ЗаявкаОснование + |ПОМЕСТИТЬ Счета + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовПокупателями КАК ОплатаСчетовПокупателями + | ПО СчетНаОплатуПокупателю.Ссылка = ОплатаСчетовПокупателями.Счет + |ГДЕ + | СчетНаОплатуПокупателю.ЗаявкаОснование В + | (ВЫБРАТЬ + | Заявки.Заявка КАК ЗаказКлиента + | ИЗ + | Заявки КАК Заявки) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Заявки.Контрагент КАК Контрагент, + | Заявки.Заявка КАК Заявка, + | Заявки.Статус КАК Статус, + | Счета.Счет КАК Счет, + | Счета.НаличиеОплаты КАК НаличиеОплаты, + | Счета.СуммаОплаты КАК Оплата + |ИЗ + | Заявки КАК Заявки + | ЛЕВОЕ СОЕДИНЕНИЕ Счета КАК Счета + | ПО Заявки.Заявка = Счета.ЗаявкаОснование"; + Запрос.УстановитьПараметр("МассивНомеров",МассивНомеровДокументов); + Запрос.УстановитьПараметр("ИННКонтрагента",ИННКонтрагента); + Выполнение = Запрос.Выполнить(); + ТЗЗапроса = Выполнение.Выгрузить(); + + Если НЕ ТЗЗапроса.Количество()=0 Тогда + ИтоговаяТЗ = Новый ТаблицаЗначений; + ИтоговаяТЗ.Колонки.Добавить("Контрагент"); + ИтоговаяТЗ.Колонки.Добавить("Счет"); + ИтоговаяТЗ.Колонки.Добавить("Наличие_оплаты"); + ИтоговаяТЗ.Колонки.Добавить("Заявка"); + ИтоговаяТЗ.Колонки.Добавить("Статус"); + //ИтоговаяТЗ.Колонки.Добавить("Сумма_оплаты"); + + Для каждого СтрТЗ Из ТЗЗапроса Цикл + НовСтрИтоговойТЗ = ИтоговаяТЗ.Добавить(); + НовСтрИтоговойТЗ["Контрагент"] = СтрТЗ.Контрагент; + Если ЗначениеЗаполнено(СтрТЗ.Заявка) Тогда + НомерЗаявки = СокрЛП(Строка(СтрТЗ.Заявка.Номер)); + ДатаЗаявки = Строка(Формат(СтрТЗ.Заявка.Дата,"ДФ=dd.MM.yyyy; ДЛФ=D; ДП='Нет даты'")); + НовСтрИтоговойТЗ["Заявка"] = Строка("№ " + НомерЗаявки + " от " + ДатаЗаявки); + Иначе + НовСтрИтоговойТЗ["Заявка"] = СтрТЗ.Заявка; + КонецЕсли; + Если ЗначениеЗаполнено(СтрТЗ.Счет) Тогда + НомерСчета = СокрЛП(Строка(СтрТЗ.Счет.Номер)); + ДатаСчета = Строка(Формат(СтрТЗ.Счет.Дата,"ДФ=dd.MM.yyyy; ДЛФ=D; ДП='Нет даты'")); + НовСтрИтоговойТЗ["Счет"] = Строка("№ " + НомерСчета + " от " + ДатаСчета); + Иначе + НовСтрИтоговойТЗ["Счет"] = ?(ЗначениеЗаполнено(СтрТЗ.Счет),СтрТЗ.Счет,"Счет не оформлен"); + КонецЕсли; + + НовСтрИтоговойТЗ["Статус"] = СтрТЗ.Статус; + НовСтрИтоговойТЗ["Наличие_оплаты"] = ?(ЗначениеЗаполнено(СтрТЗ.НаличиеОплаты),СтрТЗ.НаличиеОплаты,"Оплаты нет"); + //НовСтрИтоговойТЗ["Сумма_оплаты"] = Формат(СтрТЗ.Оплата,"ЧЦ=12; ЧДЦ=2; ЧРД=,; ЧН=Пусто"); + //НовСтрИтоговойТЗ[""] = ; + КонецЦикла; + Иначе + ИтоговаяТЗ = Новый ТаблицаЗначений; + ИтоговаяТЗ.Колонки.Добавить("Результат"); + + НовСтрИтоговойТЗ = ИтоговаяТЗ.Добавить(); + НовСтрИтоговойТЗ.Результат = "По вашему запросу ничего не найдено."; + КонецЕсли; + + РезультатЗапроса = HS_ОбщиеПроцедурыИФункции.ПреобразоватьТаблицуЗначенийВМассивСтруктур(ИтоговаяТЗ); + + //РезультатОтвет в JSON + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + СтруктураОтвет.ДанныеОтвета = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,РезультатЗапроса); + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + ИначеЕсли ВидКонтрагента = "fiz" Тогда //работаем по физику, инн не важен, условие только Контрагент - Физ.Лицо + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СчетНаОплатуПокупателю.ЗаявкаОснование КАК ЗаявкаОснование + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю + |ГДЕ + | СчетНаОплатуПокупателю.Номер В(&МассивНомеров) + | И СчетНаОплатуПокупателю.Контрагент.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо)"; + Запрос.УстановитьПараметр("МассивНомеров",МассивНомеровДокументов); + Выполнение = Запрос.Выполнить(); + ТЗВыгрузка = Выполнение.Выгрузить(); + Запрос = ""; + + //Здесь получаем ТЗ Заявок. Теперь нужно из ТЗ выдернуть Номера Заявок и добавить эти номера к МассивуНомеровДокументов + Для каждого СтрокаТЗ Из ТЗВыгрузка Цикл + МассивНомеровДокументов.Добавить(СтрокаТЗ.ЗаявкаОснование.Номер); + КонецЦикла; + + //Все Номера Счетов Отработали. + //Теперь можно просто собрать данные по заявкам. + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ЗаказКлиента.Ссылка КАК Заявка, + | ""Физическое лицо"" КАК Контрагент, + | ВЫБОР + | КОГДА НЕ СостоянияДокументов.Состояние ЕСТЬ NULL + | ТОГДА СостоянияДокументов.Состояние.Представление + | ИНАЧЕ ""Без статуса"" + | КОНЕЦ КАК Статус + |ПОМЕСТИТЬ Заявки + |ИЗ + | Документ.ЗаказКлиента КАК ЗаказКлиента + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументов КАК СостоянияДокументов + | ПО ЗаказКлиента.Ссылка = СостоянияДокументов.Документ + |ГДЕ + | ЗаказКлиента.Номер В(&МассивНомеров) + | И ЗаказКлиента.Контрагент.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СчетНаОплатуПокупателю.Ссылка КАК Счет, + | ВЫБОР + | КОГДА ОплатаСчетовПокупателями.Сумма > 0 + | ТОГДА ""Оплата есть"" + | ИНАЧЕ ""Оплаты нет"" + | КОНЕЦ КАК НаличиеОплаты, + | ЕСТЬNULL(ОплатаСчетовПокупателями.Сумма, 0) КАК СуммаОплаты, + | СчетНаОплатуПокупателю.ЗаявкаОснование КАК ЗаявкаОснование + |ПОМЕСТИТЬ Счета + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовПокупателями КАК ОплатаСчетовПокупателями + | ПО СчетНаОплатуПокупателю.Ссылка = ОплатаСчетовПокупателями.Счет + |ГДЕ + | СчетНаОплатуПокупателю.ЗаявкаОснование В + | (ВЫБРАТЬ + | Заявки.Заявка КАК ЗаказКлиента + | ИЗ + | Заявки КАК Заявки) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Заявки.Контрагент КАК Контрагент, + | Заявки.Заявка КАК Заявка, + | Заявки.Статус КАК Статус, + | Счета.Счет КАК Счет, + | Счета.НаличиеОплаты КАК НаличиеОплаты, + | Счета.СуммаОплаты КАК СуммаОплаты + |ИЗ + | Заявки КАК Заявки + | ЛЕВОЕ СОЕДИНЕНИЕ Счета КАК Счета + | ПО Заявки.Заявка = Счета.ЗаявкаОснование"; + Запрос.УстановитьПараметр("МассивНомеров",МассивНомеровДокументов); + Выполнение = Запрос.Выполнить(); + ТЗЗапроса = Выполнение.Выгрузить(); + + Если НЕ ТЗЗапроса.Количество()=0 Тогда + ИтоговаяТЗ = Новый ТаблицаЗначений; + ИтоговаяТЗ.Колонки.Добавить("Контрагент"); + ИтоговаяТЗ.Колонки.Добавить("Счет"); + ИтоговаяТЗ.Колонки.Добавить("Наличие_оплаты"); + ИтоговаяТЗ.Колонки.Добавить("Заявка"); + ИтоговаяТЗ.Колонки.Добавить("Статус"); + //ИтоговаяТЗ.Колонки.Добавить("Сумма_оплаты"); + + Для каждого СтрТЗ Из ТЗЗапроса Цикл + НовСтрИтоговойТЗ = ИтоговаяТЗ.Добавить(); + НовСтрИтоговойТЗ["Контрагент"] = СтрТЗ.Контрагент; + Если ЗначениеЗаполнено(СтрТЗ.Заявка) Тогда + НомерЗаявки = СокрЛП(Строка(СтрТЗ.Заявка.Номер)); + ДатаЗаявки = Строка(Формат(СтрТЗ.Заявка.Дата,"ДФ=dd.MM.yyyy; ДЛФ=D; ДП='Нет даты'")); + НовСтрИтоговойТЗ["Заявка"] = Строка("№ " + НомерЗаявки + " от " + ДатаЗаявки); + Иначе + НовСтрИтоговойТЗ["Заявка"] = СтрТЗ.Заявка; + КонецЕсли; + Если ЗначениеЗаполнено(СтрТЗ.Счет) Тогда + НомерСчета = СокрЛП(Строка(СтрТЗ.Счет.Номер)); + ДатаСчета = Строка(Формат(СтрТЗ.Счет.Дата,"ДФ=dd.MM.yyyy; ДЛФ=D; ДП='Нет даты'")); + НовСтрИтоговойТЗ["Счет"] = Строка("№ " + НомерСчета + " от " + ДатаСчета); + Иначе + НовСтрИтоговойТЗ["Счет"] = ?(ЗначениеЗаполнено(СтрТЗ.Счет),СтрТЗ.Счет,"Счет не оформлен"); + КонецЕсли; + + НовСтрИтоговойТЗ["Статус"] = СтрТЗ.Статус; + НовСтрИтоговойТЗ["Наличие_оплаты"] = ?(ЗначениеЗаполнено(СтрТЗ.НаличиеОплаты),СтрТЗ.НаличиеОплаты,"Оплаты нет"); + //НовСтрИтоговойТЗ["Сумма_оплаты"] = Формат(СтрТЗ.Оплата,"ЧЦ=12; ЧДЦ=2; ЧРД=,; ЧН=Пусто"); + //НовСтрИтоговойТЗ[""] = ; + КонецЦикла; + Иначе + ИтоговаяТЗ = Новый ТаблицаЗначений; + ИтоговаяТЗ.Колонки.Добавить("Результат"); + + НовСтрИтоговойТЗ = ИтоговаяТЗ.Добавить(); + НовСтрИтоговойТЗ.Результат = "По вашему запросу ничего не найдено."; + КонецЕсли; + + РезультатЗапроса = HS_ОбщиеПроцедурыИФункции.ПреобразоватьТаблицуЗначенийВМассивСтруктур(ИтоговаяТЗ); + + //РезультатОтвет в JSON + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + СтруктураОтвет.ДанныеОтвета = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,РезультатЗапроса); + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Не заполнен или неверно заполнен параметр ""urfiz""",ложь,""); + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Не указан параметр ""urfiz""",ложь,""); + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьСписокЗаказовПоИННКонтрагента(СтруктураОтвет,СтруктураВхПараметров) Экспорт + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтруктураВхПараметров.ТелоЗапроса); + СтруктураJSON = ПрочитатьJSON(ЧтениеJSON); + + ИННКонтрагента = СокрЛП(СтруктураJSON.INNContragent); + + Если НЕ ИННКонтрагента = Неопределено И СтрДлина(ИННКонтрагента)<>0 Тогда + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ЗаказКлиента.Представление КАК Заявка, + | ВЫБОР + | КОГДА ЗаказКлиента.Контрагент.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо) + | ТОГДА ВЫБОР + | КОГДА ЗаказКлиента.Контрагент.НаименованиеСокращенное = NULL + | ИЛИ ЗаказКлиента.Контрагент.НаименованиеСокращенное = """" + | ТОГДА ЗаказКлиента.Контрагент.НаименованиеПолное + | ИНАЧЕ ЗаказКлиента.Контрагент.НаименованиеСокращенное + | КОНЕЦ + | ИНАЧЕ ""Физическое лицо"" + | КОНЕЦ КАК Контрагент, + | ВЫБОР + | КОГДА НЕ СостоянияДокументов.Состояние ЕСТЬ NULL + | ТОГДА СостоянияДокументов.Состояние.Представление + | ИНАЧЕ ""Без статуса"" + | КОНЕЦ КАК СтатусЗаявки, + | ЗаказКлиента.Ссылка КАК ЗаявкаЗаказ + |ПОМЕСТИТЬ Заявки + |ИЗ + | Документ.ЗаказКлиента КАК ЗаказКлиента + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументов КАК СостоянияДокументов + | ПО ЗаказКлиента.Ссылка = СостоянияДокументов.Документ + |ГДЕ + | ЗаказКлиента.Контрагент.ИНН = &ИННКонтрагента + | И ЗаказКлиента.Проведен = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СчетНаОплатуПокупателю.Представление КАК Счет, + | ВЫБОР + | КОГДА ОплатаСчетовПокупателями.Сумма > 0 + | ТОГДА ""Оплата есть"" + | ИНАЧЕ ""Оплаты нет"" + | КОНЕЦ КАК НаличиеОплаты, + | ЕСТЬNULL(ОплатаСчетовПокупателями.Сумма, 0) КАК СуммаОплаты, + | СчетНаОплатуПокупателю.ЗаявкаОснование КАК ЗаявкаОснование + |ПОМЕСТИТЬ Счета + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовПокупателями КАК ОплатаСчетовПокупателями + | ПО СчетНаОплатуПокупателю.Ссылка = ОплатаСчетовПокупателями.Счет + |ГДЕ + | СчетНаОплатуПокупателю.ЗаявкаОснование В + | (ВЫБРАТЬ + | Заявки.ЗаявкаЗаказ КАК ЗаказКлиента + | ИЗ + | Заявки КАК Заявки) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Заявки.Контрагент КАК Контрагент, + | Заявки.Заявка КАК Заявка, + | Заявки.СтатусЗаявки КАК СтатусЗаявки, + | ЕСТЬNULL(Счета.Счет, """") КАК Счет, + | ЕСТЬNULL(Счета.НаличиеОплаты, ""Оплаты нет"") КАК НаличиеОплаты, + | ЕСТЬNULL(Счета.СуммаОплаты, 0) КАК СуммаОплаты + |ИЗ + | Заявки КАК Заявки + | ЛЕВОЕ СОЕДИНЕНИЕ Счета КАК Счета + | ПО Заявки.ЗаявкаЗаказ = Счета.ЗаявкаОснование"; + Запрос.УстановитьПараметр("ИННКонтрагента",ИННКонтрагента); + Выполнение = Запрос.Выполнить(); + + РезультатЗапроса = HS_ОбщиеПроцедурыИФункции.ПреобразоватьТаблицуЗначенийВМассивСтруктур(Выполнение.Выгрузить()); + + //РезультатОтвет в JSON + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + СтруктураОтвет.ДанныеОтвета = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,РезультатЗапроса); + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет,400,"Не указан параметр ""INNContragent""",ложь,""); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//Пример из Части 3. Метод написан под Демо БСП, следовательно будет работать в конфигурациях с БСП +#Область ПримерыЧасть3 +Процедура ПолучитьСписокЗаданийЗаПериод(СтруктураОтвет,СтруктураВхПараметров) Экспорт + //Проверяем входящие параметры + Если ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("GET") Тогда + + перНачалоПериода = СтруктураВхПараметров.ПараметрыЗапроса.Получить("StartPeriod"); + НачалоПериода = ?(перНачалоПериода = Неопределено, + Неопределено,HS_ОбщиеПроцедурыИФункции.ПолучитьДатуВремяИзСтроки(перНачалоПериода)); + + перКонецПериода = СтруктураВхПараметров.ПараметрыЗапроса.Получить("EndPeriod"); + КонецПериода = ?(перКонецПериода = Неопределено, + Неопределено,HS_ОбщиеПроцедурыИФункции.ПолучитьДатуВремяИзСтроки(перКонецПериода)); + + ИначеЕсли ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("POST") Тогда + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтруктураВхПараметров.ТелоЗапроса); + + Попытка + ТелоЗапросаJSON = ПрочитатьJSON(ЧтениеJSON); + Исключение + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Не удалось получить данные!",Ложь,""); + КонецПопытки; + + Если СтруктураОтвет.Отработало Тогда + Если ТипЗнч(ТелоЗапросаJSON) = Тип("Структура") Тогда + + НачалоПериода = ?(ТелоЗапросаJSON.Свойство("StartPeriod"), + HS_ОбщиеПроцедурыИФункции.ПолучитьДатуВремяИзСтроки(ТелоЗапросаJSON.StartPeriod),Неопределено); + + КонецПериода = ?(ТелоЗапросаJSON.Свойство("EndPeriod"), + HS_ОбщиеПроцедурыИФункции.ПолучитьДатуВремяИзСтроки(ТелоЗапросаJSON.EndPeriod),Неопределено); + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Передана не структура!",Ложь,""); + КонецЕсли; + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 501,"Метод: "+СтруктураВхПараметров.МетодЗапроса+" не поддерживается!",Ложь,""); + КонецЕсли; + + //Проверяем была ли ошибка + Если СтруктураОтвет.Отработало Тогда + //Получаем схему компоновки и вариант отчета + СхемаКомпоновки = Отчеты.Задания.ПолучитьМакет("Макет"); + ВариантНастроеки = СхемаКомпоновки.ВариантыНастроек.Найти("СписокЗаданий"); + НастройкиКомпоновки = ВариантНастроеки.Настройки; + + //Взято из модуля отчета.Задания "ПриКомпоновкеРезультата"++ + ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); + СрокИсполнения = СхемаКомпоновки.НаборыДанных[0].Поля.Найти("СрокИсполнения"); + СрокИсполнения.Оформление.УстановитьЗначениеПараметра("Формат", ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D")); + //Взято из модуля отчета.Задания "ПриКомпоновкеРезультата"-- + + Параметр = НастройкиКомпоновки.ПараметрыДанных.Элементы.Найти("Период"); + Если Параметр <> Неопределено Тогда + Параметр.Использование = ?(ЗначениеЗаполнено(НачалоПериода) + ИЛИ ЗначениеЗаполнено(КонецПериода),Истина,Ложь); + + ПериодВрем = Новый СтандартныйПериод; + Если ЗначениеЗаполнено(НачалоПериода) Тогда + ПериодВрем.ДатаНачала = НачалоДня(НачалоПериода); + КонецЕсли; + Если ЗначениеЗаполнено(КонецПериода) Тогда + ПериодВрем.ДатаОкончания = КонецДня(КонецПериода); + КонецЕсли; + Если Параметр.Использование Тогда + Параметр.Значение = ПериодВрем; + КонецЕсли; + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ТЗ = Новый ТаблицаЗначений; + ПроцессорВывода.УстановитьОбъект(ТЗ); + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + //Обходим ТЗ и формируем РезультатОтвет + РезультатОтвет = Новый Массив; + Для Каждого СтрокаТЗ Из ТЗ Цикл + Если ЗначениеЗаполнено(СтрокаТЗ.Ссылка) + И ТипЗнч(СтрокаТЗ.Ссылка) = Тип("БизнесПроцессСсылка.Задание") + Тогда + РезультатОтвет.Добавить(Новый Структура("Задание,Guid,Автор,Дата,Выполнено", + СтрокаТЗ.Ссылка.Наименование, + XMLСтрока(СтрокаТЗ.Ссылка), + СтрокаТЗ.Автор.Наименование, + СтрокаТЗ.Дата, + СтрокаТЗ.Выполнено)); + КонецЕсли; + + КонецЦикла; + + //РезультатОтвет в JSON + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + СтруктураОтвет.ДанныеОтвета = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,РезультатОтвет); + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + + КонецЕсли; +КонецПроцедуры +#КонецОбласти + +#Область ПримерыЧасть4 +//Пример из Части 4. Метод написан получения количество элементов по типу объекта +Процедура ПолучитьКоличествоЭлементовВариантЗапрос(СтруктураОтвет,СтруктураВхПараметров) Экспорт + //Проверяем входящие параметры + Если ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("GET") Тогда + + перНаименованиеОбъекта = СтруктураВхПараметров.ПараметрыЗапроса.Получить("ItemName"); + НаименованиеОбъекта = ?(перНаименованиеОбъекта = Неопределено,"",перНаименованиеОбъекта); + + перПорция = СтруктураВхПараметров.ПараметрыЗапроса.Получить("top"); + Порция = ?(перПорция = Неопределено,0,Число(перПорция)); + + ИначеЕсли ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("POST") Тогда + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтруктураВхПараметров.ТелоЗапроса); + + Попытка + ТелоЗапросаJSON = ПрочитатьJSON(ЧтениеJSON); + Исключение + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Не удалось получить данные!",Ложь,""); + КонецПопытки; + + Если СтруктураОтвет.Отработало Тогда + Если ТипЗнч(ТелоЗапросаJSON) = Тип("Структура") Тогда + + НаименованиеОбъекта = ?(ТелоЗапросаJSON.Свойство("ItemName"),ТелоЗапросаJSON.ItemName,""); + Порция = ?(ТелоЗапросаJSON.Свойство("top"),ТелоЗапросаJSON.top,0); + + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Передана не структура!",Ложь,""); + КонецЕсли; + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 501,"Метод: "+СтруктураВхПараметров.МетодЗапроса+" не поддерживается!",Ложь,""); + КонецЕсли; + + //Проверяем была ли ошибка + Если СтруктураОтвет.Отработало Тогда + Если Не ПустаяСтрока(НаименованиеОбъекта) + И Порция > 0 Тогда + + //Готовим структуру для дальнейшей работы + СтруктураЗапроса = Новый Структура("МетодЗапроса,ПараметрыЗапроса,ДатаЗапроса,НаименованиеОбъекта,Порция", + ВРег("ПолучитьКоличествоЭлементовВариантЗапрос"), + ВРег(НаименованиеОбъекта)+"_"+Формат(Порция, "ЧДЦ=0; ЧН=0; ЧГ="), + ТекущаяДатаСеанса(), + НаименованиеОбъекта, + Порция); + + //Проверяем был ли ранее подобный запрос. Считаем, что данные актуальны в дня. + //Тоесть на следующий день данные будут неактуальны + HS_ОбщиеПроцедурыИФункции.ПолучитьИлиЗаписатьДанныеПредыдущегоЗапроса(СтруктураЗапроса,СтруктураОтвет); + + Если СтруктураОтвет.Отработало Тогда + //Готовим ответ + КоличествоЭлементов = ?(СтруктураЗапроса.РезультатОтвет.Свойство("КоличествоЭлементов"), + СтруктураЗапроса.РезультатОтвет.КоличествоЭлементов, + 0); + + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + РезультатОтветJSON = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,КоличествоЭлементов); + + СтруктураОтвет.ДанныеОтвета = РезультатОтветJSON; + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,?(Порция=0,"top=0","Объект: """+НаименованиеОбъекта+""" не найден!"),Ложь,""); + КонецЕсли; + КонецЕсли; +КонецПроцедуры +//Пример из Части 4. Метод написан получения порции +Процедура ПолучитьПорциюЭлементовВариантЗапроса(СтруктураОтвет,СтруктураВхПараметров) Экспорт + //Проверяем входящие параметры + Если ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("GET") Тогда + + перНаименованиеОбъекта = СтруктураВхПараметров.ПараметрыЗапроса.Получить("ItemName"); + НаименованиеОбъекта = ?(перНаименованиеОбъекта = Неопределено,"",перНаименованиеОбъекта); + + перПорция = СтруктураВхПараметров.ПараметрыЗапроса.Получить("top"); + Порция = ?(перПорция = Неопределено,0,Число(перПорция)); + + перСтраница = СтруктураВхПараметров.ПараметрыЗапроса.Получить("page"); + текСтраница = ?(перСтраница = Неопределено,0,Число(перСтраница)); + + + ИначеЕсли ВРег(СтруктураВхПараметров.МетодЗапроса) = ВРег("POST") Тогда + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(СтруктураВхПараметров.ТелоЗапроса); + + Попытка + ТелоЗапросаJSON = ПрочитатьJSON(ЧтениеJSON); + Исключение + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Не удалось получить данные!",Ложь,""); + КонецПопытки; + + Если СтруктураОтвет.Отработало Тогда + Если ТипЗнч(ТелоЗапросаJSON) = Тип("Структура") Тогда + + НаименованиеОбъекта = ?(ТелоЗапросаJSON.Свойство("ItemName"),ТелоЗапросаJSON.ItemName,""); + Порция = ?(ТелоЗапросаJSON.Свойство("top"),ТелоЗапросаJSON.top,0); + текСтраница = ?(ТелоЗапросаJSON.Свойство("page"),ТелоЗапросаJSON.page,0); + + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Передана не структура!",Ложь,""); + КонецЕсли; + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 501,"Метод: "+СтруктураВхПараметров.МетодЗапроса+" не поддерживается!",Ложь,""); + КонецЕсли; + + //Проверяем была ли ошибка + Если СтруктураОтвет.Отработало Тогда + Если Не ПустаяСтрока(НаименованиеОбъекта) + И Порция > 0 + И текСтраница >= 0 Тогда + + //Готовим структуру для дальнейшей работы + СтруктураЗапроса = Новый Структура("МетодЗапроса,ПараметрыЗапроса,ДатаЗапроса,НаименованиеОбъекта,Порция,Страница", + ВРег("ПолучитьКоличествоЭлементовВариантЗапрос"), + ВРег(НаименованиеОбъекта)+"_"+Формат(Порция, "ЧДЦ=0; ЧН=0; ЧГ="), + ТекущаяДатаСеанса(), + НаименованиеОбъекта, + Порция, + текСтраница); + + //Проверяем был ли ранее подобный запрос. Считаем, что данные актуальны в дня. + //Тоесть на следующий день данные будут неактуальны + HS_ОбщиеПроцедурыИФункции.ПолучитьИлиЗаписатьДанныеПредыдущегоЗапроса(СтруктураЗапроса,СтруктураОтвет); + + Если СтруктураОтвет.Отработало Тогда + //Готовим ответ + МассивПоследних = ?(СтруктураЗапроса.РезультатОтвет.Свойство("МассивПоследних"), + СтруктураЗапроса.РезультатОтвет.МассивПоследних, + Новый Массив); + + РезультатОтвет = Новый Массив; + Если МассивПоследних.Количество() > 0 + И МассивПоследних.Количество() >= текСтраница Тогда + //Проверяем справочник Иерархический или нет + перЕстьГруппы = ?(МассивПоследних[0].Метаданные().Иерархический,Истина,Ложь); + + //Получаем нужную порцию + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ "+Формат(Порция, "ЧДЦ=0; ЧН=0; ЧГ=")+" + | Ссылка КАК Ссылка, + | ПометкаУдаления КАК DeletionMark, + | Код КАК Code, + | Наименование КАК Description + | //[ЕстьГруппы]//, ЭтоГруппа КАК IsFolder + |ИЗ + | [ИмяТаблицы] ГДЕ Ссылка > &Ссылка УПОРЯДОЧИТЬ ПО Ссылка"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", НаименованиеОбъекта); + Если перЕстьГруппы Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//[ЕстьГруппы]//", ""); + КонецЕсли; + + Запрос.УстановитьПараметр("Ссылка",МассивПоследних[текСтраница]); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + текЭлМасс = Новый Структура; + текЭлМасс.Вставить("Ref_Key", XMLСтрока(ВыборкаДетальныеЗаписи.Ссылка)); + текЭлМасс.Вставить("Description", ВыборкаДетальныеЗаписи.Description); + текЭлМасс.Вставить("Code", ВыборкаДетальныеЗаписи.Code); + текЭлМасс.Вставить("DeletionMark", ВыборкаДетальныеЗаписи.DeletionMark); + Если перЕстьГруппы Тогда + текЭлМасс.Вставить("IsFolder", ВыборкаДетальныеЗаписи.IsFolder); + КонецЕсли; + + РезультатОтвет.Добавить(текЭлМасс); + КонецЦикла; + КонецЕсли; + + стрРезультатОтвет = Новый Структура("value",РезультатОтвет); + + ВхПараметры = HS_ОбщиеПроцедурыИФункции.СтандартныеПараметрыJSON(); + //Делаем красивый вывод данных (Эстетика чисто для глаза) + ВхПараметры.ПереносСтрок = ПереносСтрокJSON.Авто; + + РезультатОтветJSON = HS_ОбщиеПроцедурыИФункции.ЗаписатьДанныеВJSON(ВхПараметры,стрРезультатОтвет); + + СтруктураОтвет.ДанныеОтвета = РезультатОтветJSON; + + СтруктураОтвет.Вставить("ФорматОтвета",HS_ОбщиеПроцедурыИФункции.ФорматОтветаJSON()); + КонецЕсли; + Иначе + HS_ОбщиеПроцедурыИФункции.ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,?(Порция=0,"top=0 или page<0","Объект: """+НаименованиеОбъекта+""" не найден!"),Ложь,""); + КонецЕсли; + КонецЕсли; +КонецПроцедуры +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции.xml b/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции.xml new file mode 100644 index 0000000..a2dbbf1 --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции.xml @@ -0,0 +1,23 @@ + + + + + HS_ОбщиеПроцедурыИФункции + + + ru + Общие процедуры и функции + + + + false + false + true + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции/Ext/Module.bsl b/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции/Ext/Module.bsl new file mode 100644 index 0000000..0a5ebbc --- /dev/null +++ b/src/HTTPServices/CommonModules/HS_ОбщиеПроцедурыИФункции/Ext/Module.bsl @@ -0,0 +1,375 @@ +//Заполняем структуру ответа +Процедура ЗаполнитьСтруктуруОтвета(СтруктураОтвет,КодОтвета,ТекстОшибки,Отработало,ДанныеОтвета) Экспорт + СтруктураОтвет.КодОтвета = КодОтвета; + СтруктураОтвет.ТекстОшибки = ТекстОшибки; + СтруктураОтвет.Отработало = Отработало; + СтруктураОтвет.ДанныеОтвета = ДанныеОтвета; +КонецПроцедуры + +Функция БазаФайловая() + СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); + // в зависимости от того файловый это вариант БД или нет, по-разному отображается путь в БД + ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "FILE="); + Если ПозицияПоиска = 1 тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; +КонецФункции + +#Область ВспомогательныеПроцедурыФункцииМетодов +//Считываем или создаем элемент справочника HS_ХранилищеРезультатов +//Вспомогательная процедура методов: ПолучитьПорциюЭлементовВариантЗапроса, ПолучитьКоличествоЭлементовВариантЗапрос +Процедура ПолучитьИлиЗаписатьДанныеПредыдущегоЗапроса(СтруктураЗапроса,СтруктураОтвет) Экспорт + НайденнаяСсылка = ПолучитьПредыдущийЗапрос(СтруктураЗапроса); + Если Не ЗначениеЗаполнено(НайденнаяСсылка) Тогда + + КоличествоЭлементов = ПолучитьКоличествоЭлементов(СтруктураЗапроса.НаименованиеОбъекта); + Если КоличествоЭлементов = -1 Тогда + ЗаполнитьСтруктуруОтвета(СтруктураОтвет, + 400,"Объект: """+СтруктураЗапроса.НаименованиеОбъекта+""" не найден!",Ложь,""); + Иначе + МассивПоследних = Новый Массив; + МассивПоследних.Добавить(ПустаяСсылкаПоНаименованиеОбъекта(СтруктураЗапроса.НаименованиеОбъекта)); + Если КоличествоЭлементов = 0 Тогда + КоличествоСтраниц = 0; + Иначе + //Получаем количество страниц + перДоОкругления = КоличествоЭлементов/СтруктураЗапроса.Порция; + КоличествоСтраниц = Окр(перДоОкругления+0.5,0,РежимОкругления.Окр15как20); + + //Заполняем МассивПоследних ссылок + ПродолжаемЗаполнять = Истина; + ПромежуточнаяСтруктура = Новый Структура("Продолжаем,Ссылка",Истина,Неопределено); + Пока ПродолжаемЗаполнять Цикл + ПромежуточнаяСтруктура = + ПолучитьПоследнийЭлементПорции(ПромежуточнаяСтруктура,СтруктураЗапроса.НаименованиеОбъекта,СтруктураЗапроса.Порция); + + ПродолжаемЗаполнять = ПромежуточнаяСтруктура.Продолжаем; + + Если ПродолжаемЗаполнять Тогда + МассивПоследних.Добавить(ПромежуточнаяСтруктура.Ссылка); + КонецЕсли; + КонецЦикла; + + + КонецЕсли; + + РезультатОтвет = Новый Структура("КоличествоЭлементов,МассивПоследних", + КоличествоЭлементов, + МассивПоследних); + + ТекущийОбъект = Справочники.HS_ХранилищеРезультатов.СоздатьЭлемент(); + ТекущийОбъект.МетодЗапроса = СтруктураЗапроса.МетодЗапроса; + ТекущийОбъект.ПараметрыЗапроса = СтруктураЗапроса.ПараметрыЗапроса; + ТекущийОбъект.ДатаЗапроса = СтруктураЗапроса.ДатаЗапроса; + + ТекущийОбъект.УстановитьНовыйКод(); + + ТекущийОбъект.Результат = Новый ХранилищеЗначения(РезультатОтвет, Новый СжатиеДанных(9)); + + ТекущийОбъект.ОбменДанными.Загрузка = Истина; + ТекущийОбъект.Записать(); + КонецЕсли; + + Иначе + + РезультатОтвет = НайденнаяСсылка.Результат.Получить(); + + КонецЕсли; + + СтруктураЗапроса.Вставить("РезультатОтвет",РезультатОтвет) +КонецПроцедуры +#КонецОбласти + + +#Область РаботаСДанными +//Получаем дату из входных параметров +Функция ПолучитьДатуВремяИзСтроки(ДатаВремя) Экспорт + + Результат = Неопределено; + ДатаВремя = СтрЗаменить(ДатаВремя, "-", ""); + ДатаВремя = СтрЗаменить(ДатаВремя, ":", ""); + Если СтрДлина(ДатаВремя) - Найти(ДатаВремя, " ") = 5 Тогда // время в формате Ч:ММ:СС + ДатаВремя = СтрЗаменить(ДатаВремя, " ", "0"); + ИначеЕсли Найти(ДатаВремя, "T") > 0 Тогда //время в формате ГГГГММДДTЧЧММСС + ДатаВремя = СтрЗаменить(ДатаВремя, "T", ""); + Иначе // время в формате ЧЧ:ММ:СС + ДатаВремя = СтрЗаменить(ДатаВремя, " ", ""); + КонецЕсли; + + ОписаниеТипа = Новый ОписаниеТипов("Дата"); + Результат = ОписаниеТипа.ПривестиЗначение(ДатаВремя); // дата и время в виде "ГГГГММДДЧЧММСС" + Если Не ЗначениеЗаполнено(Результат) Тогда + Результат = ОписаниеТипа.ПривестиЗначение(Лев(ДатаВремя, 8)); // только дата "ГГГГММДД" + КонецЕсли; + + Возврат Результат; + +КонецФункции +//Получаем ПустуюСсылку +Функция ПустаяСсылкаПоНаименованиеОбъекта(НаименованиеОбъекта) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ЗНАЧЕНИЕ("+НаименованиеОбъекта+".ПустаяСсылка) как Ссылка"; + + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции +//Получаем ссылку на Справочник.HS_ХранилищеРезультатов по заданной структуре +Функция ПолучитьПредыдущийЗапрос(СтруктураЗапроса) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | HS_ХранилищеРезультатов.Ссылка КАК Ссылка + |ИЗ + | Справочник.HS_ХранилищеРезультатов КАК HS_ХранилищеРезультатов + |ГДЕ + | НЕ HS_ХранилищеРезультатов.ПометкаУдаления + | И HS_ХранилищеРезультатов.МетодЗапроса = &МетодЗапроса + | И HS_ХранилищеРезультатов.ПараметрыЗапроса = &ПараметрыЗапроса + | И HS_ХранилищеРезультатов.ДатаЗапроса МЕЖДУ &ДатаЗапросаН И &ДатаЗапросаК"; + + Запрос.УстановитьПараметр("ДатаЗапросаК", КонецДня(СтруктураЗапроса.ДатаЗапроса)); + Запрос.УстановитьПараметр("ДатаЗапросаН", НачалоДня(СтруктураЗапроса.ДатаЗапроса)); + Запрос.УстановитьПараметр("МетодЗапроса", СтруктураЗапроса.МетодЗапроса); + Запрос.УстановитьПараметр("ПараметрыЗапроса", СтруктураЗапроса.ПараметрыЗапроса); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Следующий() Тогда + Возврат ВыборкаДетальныеЗаписи.Ссылка; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции +//Получить количество элементов запросом +Функция ПолучитьКоличествоЭлементов(НаименованиеОбъекта) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | [ИмяТаблицы] + |"; + Если НЕ ПустаяСтрока(НаименованиеОбъекта) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", НаименованиеОбъекта); + Иначе + Возврат -1; + КонецЕсли; + + Попытка + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + Иначе + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Если ВыборкаДетальныеЗаписи.Следующий() Тогда + Возврат ВыборкаДетальныеЗаписи.Количество; + КонецЕсли; + КонецЕсли; + Исключение + Возврат -1; + КонецПопытки; +КонецФункции +//Если в порции 1000 элементов, то мы получим 1000-й +Функция ПолучитьПоследнийЭлементПорции(ВхСтруктура,НаименованиеОбъекта,Порция) Экспорт + //ПромежуточнаяСтруктура = Новый Структура("Продолжаем,Ссылка",Истина,Неопределено); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ "+Формат(Порция, "ЧДЦ=0; ЧН=0; ЧГ=")+" + | Ссылка КАК Ссылка + |ПОМЕСТИТЬ ВременнаяТаблица + |ИЗ + | [ИмяТаблицы] + |ГДЕ + | Ссылка > &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВременнаяТаблица.Ссылка КАК Ссылка + |ИЗ + | ВременнаяТаблица КАК ВременнаяТаблица + |ГДЕ + | НЕ ВременнаяТаблица.Ссылка В + | (ВЫБРАТЬ ПЕРВЫЕ "+ Формат(Порция-1, "ЧДЦ=0; ЧН=0; ЧГ=")+" + | тз.Ссылка + | ИЗ + | ВременнаяТаблица КАК тз)"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяТаблицы]", НаименованиеОбъекта); + Если ВхСтруктура.Ссылка = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Ссылка", "ЗНАЧЕНИЕ("+НаименованиеОбъекта+".ПустаяСсылка)"); + Иначе + Запрос.УстановитьПараметр("Ссылка", ВхСтруктура.Ссылка); + КонецЕсли; + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + ВхСтруктура.Продолжаем = Ложь; + Иначе + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Если ВыборкаДетальныеЗаписи.Следующий() Тогда + ВхСтруктура.Продолжаем = Истина; + ВхСтруктура.Ссылка = ВыборкаДетальныеЗаписи.Ссылка; + Иначе + ВхСтруктура.Продолжаем = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат ВхСтруктура; + +КонецФункции + +Функция ПреобразоватьТаблицуЗначенийВМассивСтруктур(п_ТЗ) Экспорт + + Массив = Новый Массив(); + + СтруктураСтрокой = ""; + НужнаЗапятая = Ложь; + + Для Каждого Колонка Из п_ТЗ.Колонки Цикл + + Если НужнаЗапятая Тогда + СтруктураСтрокой = СтруктураСтрокой + ","; + КонецЕсли; + + СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя; + НужнаЗапятая = Истина; + + КонецЦикла; + + Для Каждого Строка Из п_ТЗ Цикл + + НоваяСтрока = Новый Структура(СтруктураСтрокой); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + + Массив.Добавить(НоваяСтрока); + + КонецЦикла; + + Возврат Массив; + +КонецФункции + +#КонецОбласти + +#Область СерилизацияДесирилизация +Функция ЗаписатьДанныеВJSON(ВхПараметры,РезультатОтвет) Экспорт + ПараметрыJSON = Новый ПараметрыЗаписиJSON(ВхПараметры.ПереносСтрок, + ВхПараметры.СимволОтступа, + ВхПараметры.ИспользоватьДвойныеКавычки, + ВхПараметры.ЭкранированиеСимволов, + ВхПараметры.ЭкранироватьУгловыеСкобки, + ВхПараметры.ЭкранироватьАмперсанд, + ВхПараметры.ЭкранироватьОдинарныеКавычки, + ВхПараметры.ЭкранироватьРазделителиСтрок, + ВхПараметры.ЭкранироватьСлешь); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.ПроверятьСтруктуру = Истина; + ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); + Попытка + ЗаписатьJSON(ЗаписьJSON, РезультатОтвет); + Результат = ЗаписьJSON.Закрыть(); + Исключение + Результат = ""; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +Функция СтандартныеПараметрыJSON() Экспорт + ПараметрыJSON = Новый Структура; + ПараметрыJSON.Вставить("ПереносСтрок",ПереносСтрокJSON.Нет); + ПараметрыJSON.Вставить("СимволОтступа"," "); + ПараметрыJSON.Вставить("ИспользоватьДвойныеКавычки",Истина); + ПараметрыJSON.Вставить("ЭкранированиеСимволов",ЭкранированиеСимволовJSON.Нет); + ПараметрыJSON.Вставить("ЭкранироватьУгловыеСкобки",Ложь); + ПараметрыJSON.Вставить("ЭкранироватьАмперсанд",Ложь); + ПараметрыJSON.Вставить("ЭкранироватьОдинарныеКавычки",Ложь); + ПараметрыJSON.Вставить("ЭкранироватьРазделителиСтрок",Ложь); + ПараметрыJSON.Вставить("ЭкранироватьСлешь",Ложь); + + Возврат ПараметрыJSON; + +КонецФункции +#КонецОбласти + +#Область ФорматыОтвета +Процедура ВозвращаемНужныйФорматОтвета(Ответ,СтруктураОтвет) Экспорт + + Если СтруктураОтвет.Свойство("ФорматОтвета") Тогда + ФорматОтвета = СтруктураОтвет.ФорматОтвета; + Иначе + ФорматОтвета = ""; + КонецЕсли; + + Если ВРег(ФорматОтвета) = Врег(ФорматОтветаJSON()) Тогда + Ответ.Заголовки.Вставить("Content-Type","application/json; charset=utf-8"); + Иначе + Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8"); + КонецЕсли; +КонецПроцедуры + +Функция ФорматОтветаJSON() Экспорт + Возврат "JSON"; +КонецФункции +#КонецОбласти + +#Область РаботаСФоновымиЗаданиями +Функция НайтиЗадание(Идентификатор) Экспорт + // Считывает состояние фонового задания по переданному идентификатору. + // + // Параметры: + // Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания. + // + // Возвращаемое значение: + // Неопределено - Задание не найдено. + // Структура - Сведения о задании. + // * Выполняется - Булево - Истина когда фоновое задание еще выполняется. + // * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок. + // * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки. + // + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено); + Если Идентификатор = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если Задание = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Результат.Выполняется = Истина; + Иначе + Результат.Выполняется = Ложь; + Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Результат.Успех = Истина; + Иначе + Результат.Успех = Ложь; + Результат.Ошибка = Задание.ИнформацияОбОшибке; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/src/HTTPServices/ConfigDumpInfo.xml b/src/HTTPServices/ConfigDumpInfo.xml new file mode 100644 index 0000000..97a5616 --- /dev/null +++ b/src/HTTPServices/ConfigDumpInfo.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Configuration.xml b/src/HTTPServices/Configuration.xml new file mode 100644 index 0000000..83be8d2 --- /dev/null +++ b/src/HTTPServices/Configuration.xml @@ -0,0 +1,83 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + ef0d805a-3847-4325-95bf-af7fdcaa8a01 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 615f1330-d148-44bc-81e1-d389e9534f40 + + + e3687481-0a87-462c-a166-9f34594f9bba + 9d7d7a29-ce18-4327-8f0b-b8df2dbbd874 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + ca6af699-2199-42ec-bb6e-99f983b52a6d + + + 51f2d5d8-ea4d-4064-8892-82951750031e + d26202dc-649d-4c29-84aa-8808df2f5766 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + aa2cb56c-2f15-40a1-9784-2c51145f0955 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + d898cfc2-b545-41a8-9812-66ebf3c9c613 + + + + HTTPServices + + + ru + HTTP Service + + + + AddOn + Adopted + true + HS_ + Version8_3_13 + ManagedApplication + + PlatformApplication + + Russian + ZheLeZ0 + 0.0.0.01 + Language.Русский + + + + + + TaxiEnableVersion8_2 + + + Русский + HS_ОбработкаМетодовHTTP + HS_ОбщиеПроцедурыИФункции + HS_ОбработкаУниверсальныхМетодов + HS_CSM_API + HS_ПолучитьКонтрагентаПоИНН + ВладелецСостоянияДокумента + Контрагенты + КонтактныеЛица + ДоговорыКонтрагентов + ВидыСостоянийДокументов + ЗаказКлиента + СчетНаОплатуПокупателю + Заявка + ЮридическоеФизическоеЛицо + СостоянияДокументов + ОплатаСчетовПокупателями + + + \ No newline at end of file diff --git a/src/HTTPServices/DefinedTypes/ВладелецСостоянияДокумента.xml b/src/HTTPServices/DefinedTypes/ВладелецСостоянияДокумента.xml new file mode 100644 index 0000000..68f3ce7 --- /dev/null +++ b/src/HTTPServices/DefinedTypes/ВладелецСостоянияДокумента.xml @@ -0,0 +1,17 @@ + + + + + + 623cdbde-d542-4321-9ef8-9979f4cf1996 + a5e9bc2b-6f5e-4195-9f39-c688e2d061cf + + + + ВладелецСостоянияДокумента + + Adopted + 3861957d-a588-4af9-a8b7-a411a11a8ece + + + \ No newline at end of file diff --git a/src/HTTPServices/Documents/ЗаказКлиента.xml b/src/HTTPServices/Documents/ЗаказКлиента.xml new file mode 100644 index 0000000..7c1cdb3 --- /dev/null +++ b/src/HTTPServices/Documents/ЗаказКлиента.xml @@ -0,0 +1,48 @@ + + + + + + 1fc2fe80-b1fd-4c54-8933-7337bed7622c + 121adbc6-315a-44ce-86d5-dbb3bbcf8b34 + + + 99682e32-8f08-4415-8945-18f2cfb2c698 + 22ea2404-6f88-4e1c-a3d0-a9fb672244c4 + + + 17784b97-8952-4269-8127-eec82314d5c0 + c53cc267-54b3-4213-9857-70e9b9005429 + + + 1a17ee1b-1965-4a51-9e28-8cc90ecb0c56 + 728516be-3e4f-478e-b34a-32d5e84f04d6 + + + 1fd43968-a80b-40a6-aac3-b75775b086a7 + 376cb175-3063-40d3-9010-65aa205a61bc + + + + ЗаказКлиента + + Adopted + d54e9a32-b5b5-4e5d-856e-f937a589dec9 + + + + + + + Контрагент + + Adopted + b379ea5a-d702-4929-99b7-a388c4e0f842 + + cfg:CatalogRef.Контрагенты + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Documents/Заявка.xml b/src/HTTPServices/Documents/Заявка.xml new file mode 100644 index 0000000..746b087 --- /dev/null +++ b/src/HTTPServices/Documents/Заявка.xml @@ -0,0 +1,35 @@ + + + + + + 875c13c4-f9e2-43a6-921c-6f2db25866c9 + 51a8277d-9f17-45ef-97a1-d3db60cd017c + + + 8f8429b6-5e4f-4588-a591-d6ea043dcad0 + c228c381-5793-4d23-b479-fa814b7b965d + + + 09faca81-eb5c-4f5a-a390-e78a0dd46d4d + a19f0a8d-e757-4d0a-95cc-458b763359ca + + + 272168a9-4966-4504-a6c4-9a0ca061beb8 + 524d114c-697d-4840-8688-120700773f3f + + + adf20928-a602-438c-9181-379d3146d4ff + 18e552f1-bd14-48c6-ada4-1f469461adfe + + + + Заявка + + Adopted + eab53d5f-9cb7-4e46-909c-277a2cc4086f + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Documents/СчетНаОплатуПокупателю.xml b/src/HTTPServices/Documents/СчетНаОплатуПокупателю.xml new file mode 100644 index 0000000..e47bc93 --- /dev/null +++ b/src/HTTPServices/Documents/СчетНаОплатуПокупателю.xml @@ -0,0 +1,60 @@ + + + + + + 53f32b88-5fd6-4a3c-abba-8af925bbe948 + 36395368-2cb8-46be-ab56-e5d06f82aae6 + + + 13d17769-1e97-4e5c-aec4-70653e0e67cb + aec00980-02f1-4529-a043-c48b1de57dcf + + + 1eeb11a4-2f77-4b0f-813c-0ce8fc0a79ee + 53658bbc-ac29-499e-a470-72e256043bcb + + + 448cd624-6a37-459b-a517-3a2b84623def + 38fab049-9da3-495c-bdf6-4cdea52816e7 + + + 0a8bcd54-22c7-4250-b32e-97503943de3c + ff5c52f7-7366-4482-aac8-9a80e56e6ecb + + + + СчетНаОплатуПокупателю + + Adopted + 459ebe0d-2cf6-494c-914a-64b8956306fe + + + + + + + Контрагент + + Adopted + 39147772-977f-4479-be80-ef84677e1718 + + cfg:CatalogRef.Контрагенты + + + + + + + ЗаявкаОснование + + Adopted + c0105859-1a24-4564-b27a-8b76dd76d218 + + cfg:AnyRef + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Enums/ЮридическоеФизическоеЛицо.xml b/src/HTTPServices/Enums/ЮридическоеФизическоеЛицо.xml new file mode 100644 index 0000000..00e5a55 --- /dev/null +++ b/src/HTTPServices/Enums/ЮридическоеФизическоеЛицо.xml @@ -0,0 +1,45 @@ + + + + + + b03a3038-53f0-49e2-8f18-eb91bc3ca579 + cb714364-2bb4-442e-b339-5598f7d9ade4 + + + dda68179-8676-490d-90d5-53bd7cdad290 + 474e1cf6-2c6f-4e96-a88e-7c0f9e874547 + + + a2100e67-6819-46e7-b64e-5d4cfe458219 + 3246b09b-86c7-47a2-98ce-744fea156c3a + + + + ЮридическоеФизическоеЛицо + + Adopted + 8c0047ed-e38e-494c-9c23-096db84ac345 + + + + + + ЮридическоеЛицо + + Adopted + e88926ba-5730-4b05-bf70-311b35a06afc + + + + + + ФизическоеЛицо + + Adopted + bd634b28-d5b7-4ac7-aac9-2ff113f90e9e + + + + + \ No newline at end of file diff --git a/src/HTTPServices/HTTPServices/HS_CSM_API.xml b/src/HTTPServices/HTTPServices/HS_CSM_API.xml new file mode 100644 index 0000000..1cc6a75 --- /dev/null +++ b/src/HTTPServices/HTTPServices/HS_CSM_API.xml @@ -0,0 +1,49 @@ + + + + + HS_CSM_API + + + ru + CSM API + + + API интерфейс для получения информации на сайт прямыми запросами + CSM-API + AutoUse + 20 + + + + + CSM_API + + + ru + CSM API + + + + + + + + + POST + + + ru + POST + + + + POST + CSM_API_POST + + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/HTTPServices/HS_CSM_API/Ext/Module.bsl b/src/HTTPServices/HTTPServices/HS_CSM_API/Ext/Module.bsl new file mode 100644 index 0000000..8886a81 --- /dev/null +++ b/src/HTTPServices/HTTPServices/HS_CSM_API/Ext/Module.bsl @@ -0,0 +1,30 @@ + +Функция CSM_API_POST(Запрос) + СтруктураВхПараметров = Новый Структура; + //Получаем имя метода + перИмяМетода = Запрос.ПараметрыURL["ИмяМетода"]; + //Помещаем имя метода в структуру + СтруктураВхПараметров.Вставить("ИмяМетода",перИмяМетода); + + //Метод запроса + СтруктураВхПараметров.Вставить("МетодЗапроса",Запрос.HTTPМетод); + + //Тело запроса + ЗапросОтКлиента = Запрос.ПолучитьТелоКакСтроку(); + СтруктураВхПараметров.Вставить("ТелоЗапроса",ЗапросОтКлиента); + + //Передаем входящие параметры (Модуль для метода POST) + СтруктураОтвет = HS_ОбработкаМетодовHTTP.HS_ОбработкаМетодовPOST(СтруктураВхПараметров); + + Ответ = Новый HTTPСервисОтвет(СтруктураОтвет.КодОтвета); + Если СтруктураОтвет.Отработало Тогда + Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ДанныеОтвета,КодировкаТекста.UTF8); + Иначе + Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ТекстОшибки,КодировкаТекста.UTF8); + КонецЕсли; + + //В зависимости от формата меняем "Content-Type" + HS_ОбщиеПроцедурыИФункции.ВозвращаемНужныйФорматОтвета(Ответ,СтруктураОтвет); + + Возврат Ответ; +КонецФункции diff --git a/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН.xml b/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН.xml new file mode 100644 index 0000000..18318c0 --- /dev/null +++ b/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН.xml @@ -0,0 +1,49 @@ + + + + + HS_ПолучитьКонтрагентаПоИНН + + + ru + HS получить контрагента по ИНН + + + + ContFromINN + AutoUse + 20 + + + + + ContFromINN + + + ru + Cont from INN + + + + + + + + + POST + + + ru + POST + + + + POST + ContFromINN_POST + + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН/Ext/Module.bsl b/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН/Ext/Module.bsl new file mode 100644 index 0000000..2c221f4 --- /dev/null +++ b/src/HTTPServices/HTTPServices/HS_ПолучитьКонтрагентаПоИНН/Ext/Module.bsl @@ -0,0 +1,30 @@ + +Функция ContFromINN_POST(Запрос) + СтруктураВхПараметров = Новый Структура; + //Получаем имя метода + перИмяМетода = Запрос.ПараметрыURL["ИмяМетода"]; + //Помещаем имя метода в структуру + СтруктураВхПараметров.Вставить("ИмяМетода",перИмяМетода); + + //Метод запроса + СтруктураВхПараметров.Вставить("МетодЗапроса",Запрос.HTTPМетод); + + //Тело запроса + ЗапросОтКлиента = Запрос.ПолучитьТелоКакСтроку(); + СтруктураВхПараметров.Вставить("ТелоЗапроса",ЗапросОтКлиента); + + //Передаем входящие параметры (Модуль для метода POST) + СтруктураОтвет = HS_ОбработкаМетодовHTTP.HS_ОбработкаМетодовPOST(СтруктураВхПараметров); + + Ответ = Новый HTTPСервисОтвет(СтруктураОтвет.КодОтвета); + Если СтруктураОтвет.Отработало Тогда + Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ДанныеОтвета,КодировкаТекста.UTF8); + Иначе + Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ТекстОшибки,КодировкаТекста.UTF8); + КонецЕсли; + + //В зависимости от формата меняем "Content-Type" + HS_ОбщиеПроцедурыИФункции.ВозвращаемНужныйФорматОтвета(Ответ,СтруктураОтвет); + + Возврат Ответ; +КонецФункции diff --git a/src/HTTPServices/InformationRegisters/СостоянияДокументов.xml b/src/HTTPServices/InformationRegisters/СостоянияДокументов.xml new file mode 100644 index 0000000..db7e812 --- /dev/null +++ b/src/HTTPServices/InformationRegisters/СостоянияДокументов.xml @@ -0,0 +1,84 @@ + + + + + + 2cbfd297-691a-411c-9615-4c85ed3844a0 + d41f8ae2-8b7d-4e27-ae96-685329e33cc5 + + + 136d6574-034e-4bbd-9983-8c1a13ebc64d + 977e61e4-d19b-4f91-90c3-7fe35715147f + + + 1fbb3c2f-340d-4f35-8507-c3524d6bfe5f + 641ad8a9-b123-4472-866e-42f1e279e830 + + + ed1611e2-7cd0-4d84-8849-a9df97072bf2 + bb5d1d03-d9f6-486a-a74e-27d5a05714a6 + + + e17f64a3-4631-4950-b435-61faca15de96 + 38929359-c0c8-4094-954a-6b39ada009f4 + + + 2f032c61-1087-48da-b05e-3bf088ccc7bb + 38903448-09b9-4163-a865-1777a61ba447 + + + b3d6e851-9dca-41ac-aa8d-277a707e0d19 + be71de9d-78a0-435c-824e-b34c726f0bcf + + + + СостоянияДокументов + + Adopted + ac764ded-add7-4c91-99bb-788fb1883dad + Nonperiodical + Independent + + + + + + Состояние + + Adopted + b9cc309d-1af2-4cbf-8f1c-28da9102b2b1 + + cfg:CatalogRef.ВидыСостоянийДокументов + + + + + + + ДатаУстановкиСостояния + + Adopted + cb537565-2fcc-4356-8388-845a3103b8ea + + xs:dateTime + + DateTime + + + + + + + + Документ + + Adopted + 76ff0a9e-630e-4589-86a9-8b4c0f670eb3 + + cfg:DefinedType.ВладелецСостоянияДокумента + + + + + + \ No newline at end of file diff --git a/src/HTTPServices/Languages/Русский.xml b/src/HTTPServices/Languages/Русский.xml new file mode 100644 index 0000000..a717c46 --- /dev/null +++ b/src/HTTPServices/Languages/Русский.xml @@ -0,0 +1,13 @@ + + + + + + Русский + + Adopted + 27b83b64-c15f-4ab2-95af-13baf11f9fe4 + ru + + + \ No newline at end of file