Добрый день! Есть пакеты 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";
ПоказатьНо не работает. Не понимаю что делать надо.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
(4) Я не зря просил посмотреть, что показывает отладчик.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) насколько понял суть проблемы:
необходимо еще как минимум сделать
intCode и MatNr точно int и string соответственно?
Имя типа материала как бы намекает, что там список должен быть, оно точно объектного, а не списочного типа?
необходимо еще как минимум сделать
объектXdto.material(или как там имя свойства в котором оно хранится) = МатериалXdto;
intCode и MatNr точно int и string соответственно?
Имя типа материала как бы намекает, что там список должен быть, оно точно объектного, а не списочного типа?
Вопрос № 1: где выполняется код - на клиенте или на сервере?
Вопрос № 2: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO = Фабрика.Создать(МатериалТип); ?
Вопрос № 3: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO.MATNR = Выборка.Артикул+"NF"; ?
Судя по тому, что в Вашем коде больше ничего нет, Вы ещё не знаете, что будете дальше делать с созданным объектом...
PS во вложении вместо xsd-схем неинформативная картинка.
Вопрос № 2: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO = Фабрика.Создать(МатериалТип); ?
Вопрос № 3: что видно в отладчике в переменной МатериалXDTO после выполнения оператора МатериалXDTO.MATNR = Выборка.Артикул+"NF"; ?
Судя по тому, что в Вашем коде больше ничего нет, Вы ещё не знаете, что будете дальше делать с созданным объектом...
PS во вложении вместо xsd-схем неинформативная картинка.
(3)
Сервер
Тут я понял. При объявлении свойства нужно указать
Затем заполняю объект
И в последней строке ошибка, поле MATERIAL недоступно для записи.
Во вложении схема
Вопрос № 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 недоступно для записи.
Во вложении схема
Прикрепленные файлы:
(6) Вообще-то нет.
У автора темы пакет XDTO находится в WS-ссылке, подключенной к внешнему адресу, а не в конфигурации.
Схему в этом случае можно попытаться вытянуть браузером через описание (по адресу "http://" + Узел.URL + "?wsdl") - и далее отслеживать по тексту директивы Import.
У автора темы пакет XDTO находится в WS-ссылке, подключенной к внешнему адресу, а не в конфигурации.
Схему в этом случае можно попытаться вытянуть браузером через описание (по адресу "http://" + Узел.URL + "?wsdl") - и далее отслеживать по тексту директивы Import.
(4) Я не зря просил посмотреть, что показывает отладчик.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
Высказываю предположение, что элемент MATERIAL имеет по схеме максимальную кратность(верхнюю границу), большую 1.
В таком случае в XDTO-объекте этот элемент будет не ОбъектXDTO, а СписокXDTO и надо будет использовать для DT_MaterialList.MATERIAL соответствующий метод (Добавить), а не простое присваивание.
(9) У меня в практике были случаи, когда WS-прокси цеплялся к стороннему SOAP-сервису и фабрика XDTO создавалась "на лету" - вот тогда нужен был отладчик.
Вижу на картинке в ответе (4), что WS-ссылка создана в конфигурации. Соответственно, можно смотреть свойства элементов и типов (в том числе и кратность) в конфигураторе.
Вижу на картинке в ответе (4), что WS-ссылка создана в конфигурации. Соответственно, можно смотреть свойства элементов и типов (в том числе и кратность) в конфигураторе.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот