Создание множественного дополнительного реквизита. Управление торговлей 11
Комментарии
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
По мне "ЗначениеСвойства" в XSD задан "не красиво". Можно было всё в одном месте указать:
Так же можно было доработать доп. реквизит так, что бы он просто принимал "СписокЗначений", а не делать копирование. По моему мнению это получилось "элегантнее".
<xs:element name="ЗначениеСвойства" type="tns:ЗначениеТип" minOccurs="0" maxOccurs="unbounded" />
Так же можно было доработать доп. реквизит так, что бы он просто принимал "СписокЗначений", а не делать копирование. По моему мнению это получилось "элегантнее".
Коллеги, подскажите пожалуйста! как быть если множественных реквизитов несколько? Я в плане видов характеристик создал реквизит МножественныйРеквизит и с помощью него получаю все множественные доп свойства. Перед выгрузкой свойств формирую запрос результатом, которого является список всех множественных свойств и дальше делаю такие же проверки как в этой статье. Прикрепляю файл с кодом. Заработает ли такой код?
Прикрепленные файлы:
Код.txt
Возможно ли вынести функции в расширение и воспользоваться &Вместо("ЗаполнитьДополнительныеРеквизитыВФорме") такой конструкцией, что бы не менять конфигурацию, будет работать?
УИД - это в XML файле экспорта поле <Ид>?
УИД - это в XML файле экспорта поле <Ид>?
Большое спасибо за выложенный материал, очень помог.
Хочу добавить от себя немного, Мне показалось не очень удачным определять множественный реквизит по GUID, в разных базах они разные и код получается не универсальным. Так же нет возможности добавить несколько множественных реквизитов. Для того что бы это исправить я добавил в ПланВидовХарактеристик.ДополнитеотныеРеквизитыИСведения новый реквизит МножественныйРеквизит
Изменения от первоначальной статьи следующие
1) Функция ПолучитьУИДМножественногоСвойства() не нужна
2) В модуле УправлениСвойствами
3) УправлениеСвойствамиСлужебный
4) Форма элемента справочника Номенклатура, так же добавил туда кнопку удаления реквизита.
5) Модуль Б_ОбменССайтомСерверВыгрузкаДанных
Процедура ВыгрузитьСвойстваXDTO
Процедура ВыгрузитьСвойстваНоменклатурыXDTO
Хочу добавить от себя немного, Мне показалось не очень удачным определять множественный реквизит по GUID, в разных базах они разные и код получается не универсальным. Так же нет возможности добавить несколько множественных реквизитов. Для того что бы это исправить я добавил в ПланВидовХарактеристик.ДополнитеотныеРеквизитыИСведения новый реквизит МножественныйРеквизит
Изменения от первоначальной статьи следующие
1) Функция ПолучитьУИДМножественногоСвойства() не нужна
2) В модуле УправлениСвойствами
Если ОписаниеСвойства.Свойство.МножественныйРеквизит Тогда
ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть +"_"+ Строка(СчСвойств);
СчСвойств = СчСвойств + 1;
КонецЕсли;
3) УправлениеСвойствамиСлужебный
// < -- xs
СоответствиеСвойствЭтоПервый = Новый Соответствие;
// xs -- >
// Заполнение значений свойств.
Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
Если ОписаниеСвойства <> Неопределено Тогда
// < -- xs
Если СоответствиеСвойствЭтоПервый.Получить(Строка.Свойство) = Неопределено Тогда
СоответствиеСвойствЭтоПервый.Вставить(Строка.Свойство, Истина);
КонецЕсли;
Если Строка.Свойство.МножественныйРеквизит Тогда
Если СоответствиеСвойствЭтоПервый.Получить(Строка.Свойство) Тогда
СоответствиеСвойствЭтоПервый.Вставить(Строка.Свойство, Ложь);
Иначе
фКэшОписания = ОписаниеСвойства;
ОписаниеСвойства = ОписаниеСвойств.Добавить();
ЗаполнитьЗначенияСвойств(ОписаниеСвойства, фКэшОписания);
КонецЕсли;
КонецЕсли;
// xs -- >
// Поддержка строк неограниченной длины.
Если НЕ ЭтоДополнительноеСведение
И ИспользоватьНеограниченнуюСтроку(
ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода)
И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда
ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
Иначе
ОписаниеСвойства.Значение = Строка.Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать4) Форма элемента справочника Номенклатура, так же добавил туда кнопку удаления реквизита.
&НаСервере
Процедура хот_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
НоваяКоманда = ЭтаФорма.Команды.Добавить("СкопироватьСвойство");
НоваяКоманда.Заголовок = "+";
НоваяКоманда.Действие = "хот_СкопироватьСвойство";
НоваяКоманда = ЭтаФорма.Команды.Добавить("УдалитьСвойство");
НоваяКоманда.Заголовок = "-";
НоваяКоманда.Действие = "хот_УдалитьСвойство";
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если НЕ стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
Продолжить;
КонецЕсли;
Если Элементы.Найти("КнопкаСкопироватьСвойство") = Неопределено Тогда
НоваяКнопка = Элементы.Добавить("КнопкаСкопироватьСвойство", Тип("КнопкаФормы"), Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
НоваяКнопка.ИмяКоманды = "СкопироватьСвойство";
КонецЕсли;
КонецЦикла;
спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
Если спМножественныхСвойств.Количество() > 0 Тогда
НоваяКнопка = Элементы.Добавить("КнопкаУдалитьСвойство", Тип("КнопкаФормы"), Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
НоваяКнопка.ИмяКоманды = "УдалитьСвойство";
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокМножественныхСвойств()
спМножественныхСвойств = Новый СписокЗначений;
вт_Свойства = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Выгрузить();
вт_Свойства.Колонки.Добавить("Счетчик");
вт_Свойства.ЗаполнитьЗначения(1, "Счетчик");
вт_Свойства.Свернуть("Свойство", "Счетчик");
Для Каждого стрСвойство из вт_Свойства Цикл
Если стрСвойство.Счетчик > 1 Тогда
спМножественныхСвойств.Добавить(стрСвойство.Свойство);
конецЕсли
КонецЦикла;
Возврат спМножественныхСвойств;
КонецФункции
&НаСервере
Функция ПолучитьСписокМножественныхСвойствВсе()
спМножественныхСвойств = Новый СписокЗначений;
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если НЕ спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
спМножественныхСвойств.Добавить(стрДополнительногоРеквизита.Свойство);
КонецЕсли;
КонецЦикла;
Возврат спМножественныхСвойств;
КонецФункции
&НаКлиенте
Процедура хот_СкопироватьСвойство()
спМножественныхСвойств = ПолучитьСписокМножественныхСвойствВсе();
Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМеню", ЭтотОбъект);
ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойств, Элементы.КнопкаСкопироватьСвойство);
КонецПроцедуры
&НаКлиенте
Процедура хот_УдалитьСвойство()
//Список свойств, для которых есть несколько значений
спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
спМножественныхСвойствВыбор = Новый СписокЗначений;
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
спМножественныхСвойствВыбор.Добавить(стрДополнительногоРеквизита, СокрЛП(стрДополнительногоРеквизита.Свойство) + " " + СокрЛП(ЭтаФорма[стрДополнительногоРеквизита.ИмяРеквизитаЗначение]));
КонецЦикла;
Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМенюУдалитьСвойство", ЭтотОбъект);
ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойствВыбор, Элементы.КнопкаУдалитьСвойство);
КонецПроцедуры
&НаКлиенте
Процедура хот_ПослеВыбораИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
хот_ДобавитьРеквизиты(ВыбранныйЭлемент.Значение)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура хот_ПослеВыбораИзМенюУдалитьСвойство(ВыбранныйЭлемент, Параметры) Экспорт
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
УдалитьСвойство(ВыбранныйЭлемент.Значение.ИмяРеквизитаЗначение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСвойство(ИмяРеквизитаЗначение)
Элементы.Удалить(Элементы.Найти(ИмяРеквизитаЗначение));
НайденныеСтроки = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизитаЗначение", ИмяРеквизитаЗначение));
Для Каждого стрСвойство Из НайденныеСтроки Цикл
ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Удалить(стрСвойство);
КонецЦикла;
Конецпроцедуры
&НаСервере
Процедура хот_ДобавитьРеквизиты(ДопРеквизит)
ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
Если стрДополнительногоРеквизита.Свойство = ДопРеквизит Тогда
ОписаниеТипа = стрДополнительногоРеквизита.ТипЗначения;
Прервать;
КонецЕсли;
КонецЦикла;
ИмяРеквизита = СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки("ДополнительныйРеквизит_" + Строка(Новый УникальныйИдентификатор));
лСвойство = ДопРеквизит;
лМассив = Новый Массив;
лМассив.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипа,,ДопРеквизит.Наименование, Истина));
ИзменитьРеквизиты(лМассив);
НовЭлемент = Элементы.Вставить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Найти("ГруппаДополнительныеРеквизиты"));
НовЭлемент.ПутьКДанным = ИмяРеквизита;
НовЭлемент.Вид = ВидПоляФормы.ПолеВвода;
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Владелец", лСвойство));
Элементы[ИмяРеквизита].ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
ДобавитьСвойство(ЭтаФорма, ИмяРеквизита, лСвойство);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ДобавитьСвойство(лФорма, ИмяРеквизита, Свойство)
лШаблон = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("Свойство", Свойство));
НовоеСвойство = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
Если лШаблон.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(НовоеСвойство, лШаблон[0]);
НовоеСвойство.ИмяРеквизитаЗначение = ИмяРеквизита;
КонецЕсли;
КонецПроцедуры
Показать5) Модуль Б_ОбменССайтомСерверВыгрузкаДанных
Процедура ВыгрузитьСвойстваXDTO
// < -- xs
XDTOСвойство.Множественное = ТекСвойство.СвойствоНоменклатуры.МножественныйРеквизит;
// xs -- >
Процедура ВыгрузитьСвойстваНоменклатурыXDTO
Процедура ВыгрузитьСвойстваНоменклатурыXDTO(ПараметрыОбмена, Владелец, ВладелецТип, ВыборкаНоменклатуры, МенеджерВременныхТаблиц);
XDTOЗначенияСвойствТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначенияСвойств", Истина, ВладелецТип);
XDTOЗначенияСвойстваТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначенияСвойства");
// < -- xs
XDTOЗначениеСвойства_МножТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначениеСвойства", Истина, XDTOЗначенияСвойстваТип);
// xs -- >
Запрос = Новый Запрос;
запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
запрос.Текст = "ВЫБРАТЬ *
|ИЗ
| ВремЗначенияСвойствТовара КАК ВремЗначенияСвойствТовара
|ГДЕ
| (ВремЗначенияСвойствТовара.Номенклатура = &Номенклатура
|И НЕ ВремЗначенияСвойствТовара.НеВыгружатьВСвойстваТоваров)";
Запрос.УстановитьПараметр("Номенклатура", ВыборкаНоменклатуры.Номенклатура);
Выборка = Запрос.Выполнить();
Если НЕ Выборка.Пустой() тогда
ВыборкаСвойств = Выборка.Выбрать();
XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
// < -- xs
XDTOЗначенияСвойства_Множ = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
// xs -- >
Пока ВыборкаСвойств.Следующий() Цикл
XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
// < -- xs
Если ВыборкаСвойств.Свойство.МножественныйРеквизит Тогда
XDTOЗначениеСвойстваМнож = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначениеСвойства_МножТип);
XDTOЗначениеСвойстваМнож.Значение = XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения);
XDTOЗначенияСвойства_Множ.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
XDTOЗначенияСвойства_Множ.ЗначениеСвойства.Добавить(XDTOЗначениеСвойстваМнож);
XDTOЗначенияСвойства_Множ.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
Продолжить;
КонецЕсли;
// xs -- >
XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);
КонецЦикла;
// < -- xs
XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства_Множ);
// xs -- >
Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
КонецЕсли;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
bad_wag, просьба-вопрос к вам. Можете ли вы сделать настройку данной доработки в нашей базе? Сделали всё по инструкции, в УТ множественный реквизит появился, но в файл обмена с Битриксом этот реквизит не попадает.. УТ (11.4.6.174), Битрикс 7.0.1.21
Сколько это будет стоить?
Сколько это будет стоить?
Статья помогла решить задачу. Спасибо!
Но не отработала процедура "ВыгрузитьСвойстваНоменклатурыXDTO" при условии, что присутствует несколько множественных свойств. Подсмотрел исходники от партнеров с Битрикс. Немного подправил процедуру и файл "СхемаXSDОбмена". Вдруг кому поможет.
Немного другой текст в "СхемаXSDОбмена"
Но не отработала процедура "ВыгрузитьСвойстваНоменклатурыXDTO" при условии, что присутствует несколько множественных свойств. Подсмотрел исходники от партнеров с Битрикс. Немного подправил процедуру и файл "СхемаXSDОбмена". Вдруг кому поможет.
Процедура ВыгрузитьСвойстваНоменклатурыXDTO(ПараметрыОбмена, Владелец, ВладелецТип, ВыборкаНоменклатуры, МенеджерВременныхТаблиц);
XDTOЗначенияСвойствТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначенияСвойств", Истина, ВладелецТип);
XDTOЗначенияСвойстваТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначенияСвойства");
//++все отлично
XDTOЗначенияСвойствМножТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначениеСвойства", Истина, XDTOЗначенияСвойстваТип);
//все отлично++
Запрос = Новый Запрос;
запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
запрос.Текст = "ВЫБРАТЬ *
|ИЗ
| ВремЗначенияСвойствТовара КАК ВремЗначенияСвойствТовара
|ГДЕ
| (ВремЗначенияСвойствТовара.Номенклатура = &Номенклатура
|И НЕ ВремЗначенияСвойствТовара.НеВыгружатьВСвойстваТоваров)";
Запрос.УстановитьПараметр("Номенклатура", ВыборкаНоменклатуры.Номенклатура);
Выборка = Запрос.Выполнить();
//Если НЕ Выборка.Пустой() тогда
// ВыборкаСвойств = Выборка.Выбрать();
// XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
//
// Пока ВыборкаСвойств.Следующий() Цикл
//
// XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
//
// XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
// XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
//
// XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);
//
// КонецЦикла;
// Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
//КонецЕсли;
ТаблицаСвойств = Выборка.Выгрузить();
СвернутьТаблицуПодСписокЗначений(ТаблицаСвойств,"ИдентификаторСвойства","Значение");
Если НЕ ТаблицаСвойств.Количество() = 0 Тогда
XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
Для Каждого ВыборкаСвойств из ТаблицаСвойств Цикл
XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
Если НЕ ВыборкаСвойств.БулевоЗначение тогда
Если НЕ ТипЗнч(ВыборкаСвойств.Значение) = Тип("СписокЗначений") Тогда
XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
Иначе
Для каждого Свойство из ВыборкаСвойств.Значение Цикл
XDTOЗначенияМножСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствМножТип);
XDTOЗначенияМножСвойств.Значение = XMLСтрока(Свойство.Значение);
XDTOЗначенияСвойства.ЗначениеСвойства.Добавить(XDTOЗначенияМножСвойств);
КонецЦикла;
КонецЕсли;
Иначе
XDTOЗначенияСвойства.Значение.Добавить(Строка(ВыборкаСвойств.ИдентификаторЗначения));
КонецЕсли;
XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);
КонецЦикла;
Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
КонецЕсли;
КонецПроцедуры
Процедура СвернутьТаблицуПодСписокЗначений(Таблица,ПолеДляАнализа,ПолеДляСвертки) Экспорт
Если Ложь Тогда Таблица = Новый ТаблицаЗначений; КонецЕсли;
СписокСвойств = Новый Соответствие;
Для каждого Строка из Таблица Цикл
НайденноеСвойство = СписокСвойств.Получить(Строка[ПолеДляАнализа]);
Если НЕ НайденноеСвойство = неопределено Тогда
Если НЕ ТипЗнч(НайденноеСвойство) = Тип("СписокЗначений") Тогда
Список = Новый СписокЗначений;
Список.Добавить(НайденноеСвойство);
Список.Добавить(Строка[ПолеДляСвертки]);
СписокСвойств.Вставить(Строка[ПолеДляАнализа], Список);
Иначе
НайденноеСвойство.Добавить(Строка[ПолеДляСвертки]);
КонецЕсли;
Иначе
СписокСвойств.Вставить(Строка[ПолеДляАнализа], Строка[ПолеДляСвертки]);
КонецЕсли;
КонецЦикла;
КолонкиКопия = Таблица.ВыгрузитьКолонку("Значение");
ОписаниеТипов = Новый ОписаниеТипов(Таблица.Колонки.Значение.ТипЗначения,"СписокЗначений");
ШиринаКопия = Таблица.Колонки.Значение.Ширина;
Таблица.Колонки.Удалить("Значение");
Таблица.Колонки.Добавить("Значение",ОписаниеТипов,"Значение",ШиринаКопия);
Таблица.ЗагрузитьКолонку(КолонкиКопия, "Значение");
Для каждого Свойство из СписокСвойств Цикл
Если ТипЗнч(Свойство.Значение) = Тип("СписокЗначений") Тогда
НайденныеСтроки = Таблица.НайтиСтроки(Новый Структура(ПолеДляАнализа,Свойство.Ключ));
Н = 0;
Для Каждого Строка из НайденныеСтроки Цикл
Н = Н + 1;
Если Н = 1 Тогда
Строка.Значение = Свойство.Значение;
Иначе
Таблица.Удалить(Строка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьНемного другой текст в "СхемаXSDОбмена"
<xs:complexType name="ЗначенияСвойства">
<xs:sequence>
<xs:element name="Ид" type="tns:ИдентификаторГлобальныйТип" />
<xs:element name="Наименование" type="tns:НаименованиеТип" minOccurs="0" />
<xs:element name="Значение" type="tns:ЗначениеТип" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="ЗначениеСвойства" minOccurs="0" maxOccurs="unbounded" >
<xs:complexType>
<xs:sequence>
<xs:element name="Значение" type="tns:ЗначениеТип" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Показать
вы уверены, что Битрикс умеет парсить такую конструкцию?
У меня БУС 21.400.300 не воспринимает такой массив.
<ЗначенияСвойства>
<Ид>e94be4ad-fb60-11eb-80e2-c643fff9747c</Ид>
<Значение>
<Значение>f237f346-fb60-11eb-80e2-c643fff9747c</Значение>
<Значение>f237f347-fb60-11eb-80e2-c643fff9747c</Значение>
<ЗначенияСвойства>
<Значение>f237f346-fb60-11eb-80e2-c643fff9747c</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
<Значение>f237f347-fb60-11eb-80e2-c643fff9747c</Значение>
</ЗначенияСвойства>
</Значение>
</ЗначенияСвойства>
ПоказатьУ меня БУС 21.400.300 не воспринимает такой массив.
Если СтрНайти(XDTOЗначенияСвойства.Ид, УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) > 0 Тогда
XDTOЗначениеСвойстваМнож = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначениеСвойства_МножТип);
XDTOЗначениеСвойстваМнож.Значение = XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения);
XDTOЗначенияСвойства_Множ.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
XDTOЗначенияСвойства_Множ.ЗначениеСвойства.Добавить(XDTOЗначениеСвойстваМнож);
//XDTOЗначенияСвойства_Множ.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
Продолжить;
КонецЕсли;
ПоказатьЗакоменченная строка не нужна - лишнее это...
И, кстати, если нужно полностью очистить множественное значение, нужно обязательно послать пустое значение:
XDTOЗначениеСвойстваМнож = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначениеСвойства_МножТип);
XDTOЗначениеСвойстваМнож.Значение = XMLСтрока("");
Вакансии
Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день