Выгрузка документов с помощью HTTP-сервиса

1. user1C99 07.03.25 14:42 Сейчас в теме
Добрый день!
Прошу помощи у более опытных коллег по работе с 1С, а именно по HTTP-сервисам.
Задача передо мной стоит такая, что из одной базы необходимо выгружать документы с табличной частью в другую базу с помощью HTTP-сервиса.
Создал HTTP-сервис в базе источнике. В этом сервисе добавил два метода GET и POST.

Функция ВыгрузкаЗаказКлиентаPOST(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	СтрокаJSON = ОбменСервер.ПолучитьЗаказКлиентаСТЧ();
	Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
	Возврат Ответ;
КонецФункции

Функция ВыгрузкаЗаказКлиентаGET(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	СтрокаJSON = ОбменСервер.ПолучитьЗаказКлиента();
	Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
	Возврат Ответ;
КонецФункции
Показать


В общем модуле ОбменСервер написал две функции:
Функция ПолучитьЗаказКлиента() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НКЗаказКлиентаТовары.Ссылка.Номер КАК НомерДокумента,
		|	НКЗаказКлиентаТовары.Ссылка.Дата КАК ДатаДокумента,
		|	НКЗаказКлиентаТовары.Ссылка.Контрагент.Наименование КАК КонтрагентНаименование,
		|	НКЗаказКлиентаТовары.Ссылка.Склад.Наименование КАК СкладНаименование,
		|	НКЗаказКлиентаТовары.Номенклатура.Наименование КАК НоменклатураНаименование,
		|	НКЗаказКлиентаТовары.ЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод,
		|	НКЗаказКлиентаТовары.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
		|	НКЗаказКлиентаТовары.Количество КАК Количество,
		|	НКЗаказКлиентаТовары.Ссылка.Контрагент.ИНН КАК КонтрагентИНН
		|ИЗ
		|	РегистрСведений.Синхронизация КАК Синхронизация
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК НКЗаказКлиентаТовары
		|		ПО Синхронизация.ЗаказКлиента.Ссылка = НКЗаказКлиентаТовары.Ссылка";

	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	Массив = Новый Массив;
	Пока Выборка.Следующий() Цикл
		Структура = Новый Структура("НомерДокумента, ДатаДокумента, КонтрагентНаименование, КонтрагентИНН, СкладНаименование, 
										|НоменклатураНаименование, ЕдиницаИзмеренияКод, ЕдиницаИзмеренияНаименование, Количество");
		ЗаполнитьЗначенияСвойств(Структура, Выборка);
		Массив.Добавить(Структура);	
	КонецЦикла;	
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Массив);
	
	СтрокаJSON = ЗаписьJSON.Закрыть();
	Возврат СтрокаJSON;

КонецФункции

Функция ПолучитьЗаказКлиентаСТЧ() Экспорт 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТЧЗаказКлиента.Номер КАК Номер,
		|	ТЧЗаказКлиента.Дата КАК Дата,
		|	ТЧЗаказКлиента.Контрагент.ИНН КАК КонтрагентИНН,
		|	ТЧЗаказКлиента.Контрагент.Наименование КАК КонтрагентНаименование,
		|	ТЧЗаказКлиента.Склад.Наименование КАК СкладНаименование,
		|	ТЧЗаказКлиента.Товары.(
		|		Номенклатура.Наименование КАК НоменклатураНаименование,
		|		Количество КАК Количество
		|	) КАК Товары
		|ИЗ
		|	РегистрСведений.Синхронизация КАК Синхронизация
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ТЧЗаказКлиента
		|		ПО Синхронизация.ЗаказКлиента = ТЧЗаказКлиента.Ссылка";
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	
	Массив = Новый Массив;
	Для каждого Стр Из РезультатЗапроса Цикл 
		
		Структура = Новый Структура("Номер, Дата, КонтрагентНаименование, КонтрагентИНН, СкладНаименование"); 
		ЗаполнитьЗначенияСвойств(Структура, СТР);
		Массив.Добавить(Структура);
		мТч = Новый Массив;
		Для Каждого ТЧ Из РезультатЗапроса.Товары Цикл
	                
		КонецЦикла;	
		
	КонецЦикла;	
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Массив);
	
	СтрокаJSON = ЗаписьJSON.Закрыть();
	Возврат СтрокаJSON;

	
КонецФункции
Показать


При проверке работы функции GET получаю такую информацию:

[
{
"НомерДокумента": "00000000001",
"ДатаДокумента": "2025-02-14T19:08:34",
"КонтрагентНаименование": "Контрагент",
"КонтрагентИНН": "ИНН",
"СкладНаименование": "Склад готовой продукции №3",
"НоменклатураНаименование": "Шамот ША-5",
"ЕдиницаИзмеренияКод": 168,
"ЕдиницаИзмеренияНаименование": "т",
"Количество": 32
},
{
"НомерДокумента": "00000000001",
"ДатаДокумента": "2025-02-14T19:08:34",
"КонтрагентНаименование": "Контрагент",
"КонтрагентИНН": "ИНН",
"СкладНаименование": "Склад готовой продукции №3",
"НоменклатураНаименование": "Шамот ША-5",
"ЕдиницаИзмеренияКод": 168,
"ЕдиницаИзмеренияНаименование": "т",
"Количество": 33
},
{
"НомерДокумента": "00000000002",
"ДатаДокумента": "2025-03-03T08:42:29",
"КонтрагентНаименование": "Контрагент",
"КонтрагентИНН": "ИНН",
"СкладНаименование": "Склад готовой продукции №3",
"НоменклатураНаименование": "Шамот ША-5",
"ЕдиницаИзмеренияКод": 168,
"ЕдиницаИзмеренияНаименование": "т",
"Количество": 32
},
{
"НомерДокумента": "00000000002",
"ДатаДокумента": "2025-03-03T08:42:29",
"КонтрагентНаименование": "Контрагент",
"КонтрагентИНН": "ИНН",
"СкладНаименование": "Склад готовой продукции №3",
"НоменклатураНаименование": "Заполнитель шамотный 6-0 мм",
"ЕдиницаИзмеренияКод": 168,
"ЕдиницаИзмеренияНаименование": "т",
"Количество": 33
}
]

А вот при проверке функции POST ругается на конструкцию РезультатЗапроса.Товары.

Подскажите, пожалуйста, как мне вывести информацию с помощью метода POST, чтобы табличная часть группировалась по номеру документа. Или можно как-то в методе GET это сделать?
Спасибо за любую помощь
По теме из базы знаний
Найденные решения
5. starik-2005 3171 07.03.25 17:39 Сейчас в теме
Для Каждого ТЧ Из  Стр.Товары Цикл...
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 119 07.03.25 15:08 Сейчас в теме
(1) Из Стр.Товары.Выгрузить().
Хоть бы посмотрели по отладчику, что-ли.
3. user1C99 07.03.25 15:27 Сейчас в теме
(2) При таком варианте появляется сообщение: Метод объекта не обнаружен (Выгрузить)
4. glek 119 07.03.25 16:17 Сейчас в теме
(3) В результате запроса (а это таблица значений) нет и не может быть реквизита Товары. Он есть у строки табличной части. Скорее всего товары - это результат запроса. А вот как с этим работать - решайте сами.
В конце концов, как же вы все разрабатываете без отладчика то?
starik-2005; +1 Ответить
7. user1C99 10.03.25 07:41 Сейчас в теме
(4) Фактически, я разрабатываю мало, львиная доля моей работы заключается в консультировании, написании внешних обработок и отчетов (простых). Поэтому и могу в очевидных вещах растеряться.
Но инфостарт же на то и создан, чтобы такие как я могли найти помощь или получить дельный совет, от более опытных коллег)))
8. user2107191 10.03.25 08:05 Сейчас в теме
(7)
Но инфостарт же на то и создан
Да ладно!?!?! А Доржи-то и не в курсе!
5. starik-2005 3171 07.03.25 17:39 Сейчас в теме
Для Каждого ТЧ Из  Стр.Товары Цикл...
6. user1C99 10.03.25 07:39 Сейчас в теме
(5) Спасибо. Что-то я затупил.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот