Имя: Пароль:
1C
1С v8
Передача номенклатуры между базами через http
0 SeniorJunior
 
05.03.24
18:49
Добрый день! Суть такова... Необходимо передать номенклатуру из одной 1с в другую посредством http.
Код в базе источнике следующий:

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


Подскажите, как эти данные по номенклатуре "запихать" в двоичные данные и передать в базу приемник для их распаковки? Так как размер базы большой использую заголовок multipart/form-data.
1 breezee
 
05.03.24
18:12
(0) а вы без хдто сериализуйте. Хдто - шляпа без задач
2 SeniorJunior
 
05.03.24
18:16
(1) без хдто не получается, не работает
3 Fragster
 
05.03.24
18:31
зачем НовыйСериализаторXDTO  = СериализаторXDTO; ?
4 Fragster
 
05.03.24
18:32
зачем тут двоичные данные?
5 Fragster
 
05.03.24
18:32
зачем тут такой заголовок?
6 Fragster
 
05.03.24
18:32
multipart/form-data.
7 Fragster
 
05.03.24
18:33
просто строку телом post запроса передать и все. на другой стороне чтением json прочитать тело
8 Fragster
 
05.03.24
18:34
лучше в начале json записать "НачалоМассива" и в конце - "КонецМассива"
9 SeniorJunior
 
05.03.24
18:35
(6) Разбивает отправку данных на части, так как база большая решили использовать его. Про двоичные данные подсказал коллега, почему через них сам не особо понял.
10 Fragster
 
05.03.24
18:44
(9) этот заголовок не разбивает отправку данных на части
11 Garykom
 
05.03.24
18:47
(0) включи OData и передать вопрос снимается
остается только получить
12 Fragster
 
05.03.24
18:47
проще разбить данные на части, сделав n запросов по m номенклатур в одном (например по 100 или 1000)
13 Fragster
 
05.03.24
18:47
(11) не всегда можно шарить "передающую" сторону
14 LLeonidov
 
05.03.24
18:49
(0) если у вас 200-1500 позиций то так конечно можно но это очень плохо.
1) Запрос переписать на обход с учетом версии в последнем обмене или использования таблицы изменения номенклатуры + узел обмена.
2) Запрос делить партиями на 100-200 позиций, с сортировкой по ссылке вот эти вот Первые 100 .
3) В запросе чтобы получить все поля номенклатуры достаточно поставить вместо  Номенклатура.Ссылка КАК Ссылка знак *
4) Всю логику из модуля HTTP сервиса вынести в отдельный модуль...
5) Параметр функции у вас запрос, вы в него засовываете запрос к базе..
6) вернуть данные проще простого
Ответ = Новый HTTPСервисОтвет(200); 
Ответ.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрJSON);
Возврат Ответ;
15 Garykom
 
05.03.24
19:25
(13) А как иначе он собирается (0) без шарить?
Ограничить доступ можно правами
16 Fragster
 
06.03.24
11:14
(15) передающая сторона тыкает данными в принимающую, которая расшарена
17 Garykom
 
06.03.24
13:03
(16) заталкивающий интерфейс?
не очень эффективно, нужна очередь для хранения если с первой попытки не прошло

проще сразу на брокеры сообщений переходить
18 Fragster
 
06.03.24
15:59
(17) никто ж не говорит про онлайн. вон, у автора вообще вся номенклатура выгружается, но никто не запрещает и планы обмена прикрутить и снимать с регистрации при успешном заталкивании.
19 Garykom
 
06.03.24
16:52
(18)
передать номенклатуру из одной 1с в другую посредством http
20 Волшебник
 
06.03.24
20:52
Сеньоры уже сказали, что надо делать джуну.
Дальнейшее возилово бессмыслено ибо ветка создана джуном и он там никто и звать его никак.

Прошу сеньоров тоже иногда создавать ветки в стиле "Как можно было бы организовать вот такую хуйню в мегакорпорации". Ну вы поняли...
21 Tarzan_Pasha
 
07.03.24
14:37
а нельзя в base64 закодировать пакет и отправить? а на принимающей стороне раскодировать?
22 rozer76
 
07.03.24
23:16
Еще можно через веб-сервис и ValueStorage