Фабрика XDTO

1. Keldellar 20.09.24 16:08 Сейчас в теме
Добрый день! Есть пакеты xdto во вложении. Как мне создать тип MATERIAL для заполнения полей?

Пытался так:

	мОпределения = Новый WSОпределения(Узел.URL + "?wsdl", Узел.Пользователь, Узел.Пароль,, 30, SSL);
	Прокси = Новый WSПрокси(мОпределения, "http://generic.ru/", "MaterialMasterService", "MaterialMasterPort",, 30, SSL);
	Прокси.Пользователь = Узел.Пользователь;
	Прокси.Пароль       = Узел.Пароль;
			
	Фабрика = Прокси.ФабрикаXDTO;

    НоменклатураТип = Фабрика.Тип("http://generic.ru/ERP/WMSMaterialSynchronization","DT_MaterialList");
	МатериалТип = Фабрика.Тип("http://generic.ru/ERP/WMSMaterialSynchronization","MATERIAL");
		ОбъектXDTO = Фабрика.Создать(НоменклатураТип);
		МатериалXDTO = Фабрика.Создать(МатериалТип);
	ОбъектXDTO.INTCODE = 13;
	МатериалXDTO.MATNR = Выборка.Артикул+"NF";

Показать

Но не работает. Не понимаю что делать надо.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. gml 23.09.24 19:49 Сейчас в теме
(4) Я не зря просил посмотреть, что показывает отладчик.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 20.09.24 17:50 Сейчас в теме
(1) насколько понял суть проблемы:
необходимо еще как минимум сделать

объектXdto.material(или как там имя свойства в котором оно хранится) = МатериалXdto;

intCode и MatNr точно int и string соответственно?

Имя типа материала как бы намекает, что там список должен быть, оно точно объектного, а не списочного типа?
3. gml 20.09.24 21:45 Сейчас в теме
Вопрос № 1: где выполняется код - на клиенте или на сервере?
Вопрос № 2: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO = Фабрика.Создать(МатериалТип); ?
Вопрос № 3: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO.MATNR = Выборка.Артикул+"NF"; ?

Судя по тому, что в Вашем коде больше ничего нет, Вы ещё не знаете, что будете дальше делать с созданным объектом...

PS во вложении вместо xsd-схем неинформативная картинка.
4. Keldellar 23.09.24 11:46 Сейчас в теме
(3)
Вопрос № 1: где выполняется код - на клиенте или на сервере?

Сервер

Вопрос № 3: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO.MATNR = Выборка.Артикул+"NF"; ?

Тут я понял. При объявлении свойства нужно указать
   
 НоменклатураТип = Фабрика.Тип("http://generic.ru/ERP/WMSMaterialSynchronization","DT_MaterialList");
 МатериалТип = НоменклатураТип.Свойства.Получить("MATERIAL").Тип;


Затем заполняю объект
	ОбъектXDTO.INTCODE = 13;
	MATERIAL.MATNR = Выборка.Артикул+"NF";
	MATERIAL.DELIND = 0;
	MATERIAL.MATTXT = Выборка.Наименование;
	MATERIAL.BASEUOM = Выборка.БазоваяЕдиницаИзмерения;
	MATERIAL.ARTIC = Выборка.Артикул+"NF";
	MATERIAL.PACMASS = Выборка.Вес;
	MATERIAL.NESTAM = Выборка.ЕдиницаИзмеренияМестКоэффициент;
	MATERIAL.SHLIFE = Выборка.СрокГодности;
	ОбъектXDTO.MATERIAL = MATERIAL;
Показать

И в последней строке ошибка, поле MATERIAL недоступно для записи.

Во вложении схема
Прикрепленные файлы:
5. spacecraft 23.09.24 13:58 Сейчас в теме
6. SlavaKron 23.09.24 19:01 Сейчас в теме
(4)
Во вложении схема
Схему можно выгрузить из конфигуратора.
Прикрепленные файлы:
8. gml 23.09.24 19:55 Сейчас в теме
(6) Вообще-то нет.
У автора темы пакет XDTO находится в WS-ссылке, подключенной к внешнему адресу, а не в конфигурации.
Схему в этом случае можно попытаться вытянуть браузером через описание (по адресу "http://" + Узел.URL + "?wsdl") - и далее отслеживать по тексту директивы Import.
9. user1936660 23.09.24 21:34 Сейчас в теме
(8)
браузером
Кодом. Через фабрику XDTO
7. gml 23.09.24 19:49 Сейчас в теме
(4) Я не зря просил посмотреть, что показывает отладчик.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
10. gml 26.09.24 20:40 Сейчас в теме
(9) У меня в практике были случаи, когда WS-прокси цеплялся к стороннему SOAP-сервису и фабрика XDTO создавалась "на лету" - вот тогда нужен был отладчик.
Вижу на картинке в ответе (4), что WS-ссылка создана в конфигурации. Соответственно, можно смотреть свойства элементов и типов (в том числе и кратность) в конфигураторе.
11. user1936660 26.09.24 22:17 Сейчас в теме
(10)
в конфигураторе
Вместо кликанья по окошкам свойств куда проще смотреть сразу весь файл xsd
Оставьте свое сообщение

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