|
Работа с XDTO. Списки | ☑ | ||
---|---|---|---|---|
0
kinazarov
23.06.16
✎
14:20
|
День добрый.
Вопрос по CML. Версия CML 2.07. Есть у меня корректно созданный объект XDTO у которого одно из свойств определяется так <ЗначенияРеквизитов> <ЗначениеРеквизита> <Наименование>ВидНоменклатуры</Наименование> <Значение>Товар</Значение> </ЗначениеРеквизита> <ЗначениеРеквизита> <Наименование>ТипНоменклатуры</Наименование> <Значение>Товар</Значение> </ЗначениеРеквизита> .... </ЗначенияРеквизитов> У объекта который я создал есть свойство "ЗначенияРеквизитов". В импортированной схеме у меня есть тип "ЗначениеРеквизита" Как мне: 1. Создать СписокXDTO с типом "ЗначениеРеквизита"? Это при том что по схеме ЗначениеРеквизита - и так список. 2. Как добавить в свойство "ЗначенияРеквизитов" созданного мной документа списочное субсвойство "ЗначениеРеквизита"? Должно получиться так: http://c2n.me/3zvrbrV |
|||
1
totparen
23.06.16
✎
14:53
|
Что означает "корректно созданный объект XDTO" ?
Как вы его создали? |
|||
2
kinazarov
23.06.16
✎
16:00
|
Вот так:
Функция cml_сгенерироватьОбъектCML(НаименованиеТипаОбъекта) ОбъектТип=ФабрикаXDTO.Тип("urn:1C.ru:commerceml_2",НаименованиеТипаОбъекта); Возврат ФабрикаXDTO.Создать(ОбъектТип); КонецФункции Документ=cml_сгенерироватьОбъектCML("Документ"); |
|||
3
totparen
23.06.16
✎
16:12
|
Создать новый объект ХДТО ЗначениеРеквизита и добавить его в "ЗначенияРеквизитов". ЗначенияРеквизитов станет списком ХДТО автоматом.
|
|||
4
kinazarov
23.06.16
✎
16:41
|
Ошибка при установке значения атрибута контекста (ЗначенияРеквизитов)
Документ.ЗначенияРеквизитов=cml_сгенерироватьОбъектCML("ЗначениеРеквизита"); по причине: Несоответствие типов XDTO: Тип '{urn:1C.ru:commerceml_2}ЗначениеРеквизита' не соответствует типу '' Тип свойства не соответствует типу значения |
|||
5
totparen
23.06.16
✎
17:35
|
(4) Что за муть?!
Посмотрите методы у СпискаХДТО. Что-то типа Документ.ЗначенияРеквизитов. Добавить(cml_сгенерироватьОбъектCML("ЗначениеРеквизита")); |
|||
6
kinazarov
23.06.16
✎
17:45
|
Кое-как получилось. Позже если будет настроение напишу детально что и как делал.
|
|||
7
kinazarov
24.06.16
✎
12:09
|
Пока без деталей и объяснений кусок кода
Функция cml_сгенерироватьОбъектCML(ТипОбъекта,Значение=Неопределено) Если ТипЗнч(ТипОбъекта)=Тип("Строка") Тогда ОбъектТип=ФабрикаXDTO.Тип("urn:1C.ru:commerceml_2",ТипОбъекта); Если ЗначениеЗаполнено(Значение)Тогда Возврат ФабрикаXDTO.Создать(ОбъектТип,Значение); Иначе Возврат ФабрикаXDTO.Создать(ОбъектТип); КонецЕсли; ИначеЕсли ТипЗнч(ТипОбъекта)=Тип("СвойствоXDTO") Тогда Возврат ФабрикаXDTO.Создать(ТипОбъекта.Тип); КонецЕсли; КонецФункции Процедура cml_ЗаполнитьСложноеСвойство(ДокументXDTO,НаименованиеСвойства) ДокументXDTO[НаименованиеСвойства]=cml_сгенерироватьОбъектCML(ДокументXDTO.Свойства().Получить(НаименованиеСвойства)); КонецПроцедуры Документ=cml_сгенерироватьОбъектCML("Документ"); Документ.Ид=СокрЛП(ДокументСсылка.Номер); Документ.Номер=СокрЛП(ДокументСсылка.Номер); Документ.Дата=cml_Конвертировать_Дата(ДокументСсылка.Дата,ЧастиДаты.Дата); Документ.Время=cml_Конвертировать_Дата(ДокументСсылка.Дата,ЧастиДаты.Время); Документ.ХозОперация="Заказ товара"; Документ.Роль="Продавец"; Документ.Валюта=cml_сгенерироватьОбъектCML("ВалютаТип",ДокументСсылка.ВалютаДокумента.Наименование); Документ.Курс="1"; Документ.Сумма=cml_суммаСтрокой(ДокументСсылка.СуммаДокумента); cml_ЗаполнитьСложноеСвойство(Документ,"Контрагенты"); Контрагент=cml_сгенерироватьОбъектCML("Документ"); Схема отсюда http://v8.1c.ru/edi/edi_stnd/90/CML207.XSD |
|||
8
kinazarov
24.06.16
✎
12:16
|
В последней строке ошибся, нужно так:
Контрагент=cml_сгенерироватьОбъектCML("Контрагент");//тип перепутал в прошлом посте Контрагент.Ид=Строка(ДокументСсылка.Контрагент.УникальныйИдентификатор()); Контрагент.Наименование(СокрЛП(ДокументСсылка.Контрагент.Наименование)); Контрагент.ПолноеНаименование(СокрЛП(ДокументСсылка.Контрагент.НаименованиеПолное)); Контрагент.Роль="Покупатель"; |
|||
9
kinazarov
24.06.16
✎
12:17
|
Для тех кто не врубилсмя - "ЗначенияРеквизитов" и "Контрагенты" одинаково формируются.
|
|||
10
kinazarov
24.06.16
✎
12:18
|
Ну и в созданный список
Документ.Контрагенты.Добавить(Контрагент); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |