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