Цитата |
---|
Вадим Дымар написал:
Цитата |
---|
Алексей Сипаев написал:
Цитата |
---|
Вадим Дымар написал: Картинка - это Ваши дописки? |
Да, я так решил сделать |
Классно, но это только верхушка айсберга, я так понимаю. Может кусок коды выложите с обработкой уже выгрузки. |
Да даже мой код, который я могу приложить будет ппц каким специфическим и не полным, плюс писался с определенными допущениями (как со стороны сайта, так и со стороны 1с и меня это устраивает, т.к. писался для себя, а не в массы):
Скрытый текст |
---|
Код |
---|
// Сортировка наших свойств будет идти с 10000.
// Назначим всем свойствам сортировку ОДИНАКОВУЮ.
// !!! Если будем делать инкремент, например, по 10
// и в таблице реквизитов как свойств изменим
// порядок следования свойств (поменяем некоторые местами),
// то при выгрузке в битрикс у нас задвоятся все свойства.
БитриксСортировка = 10000;
Для каждого ТекСвойство из тзнСвойств Цикл
Итератор = Итератор + 1;
//БитриксСортировка = БитриксСортировка + 10;
лУчитываетсяВЦене = ?(ЗначениеЗаполнено(ТекСвойство.ВлияетНаЦену), ТекСвойство.ВлияетНаЦену, Ложь);
XDTOСвойство = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСвойствоТип);
// Замена текста нужна для свойств, у которых специфический Ид и начинается не с буквы
XDTOСвойство.Ид = XMLСтрока(СтрЗаменить(ТекСвойство.Идентификатор, "ПРЕФИКС_", ""));
// Сортировку будет применять только для своих свойств.
// Там, где установлен флаг в "ИСТИНА" колонки "ОставлятьСортировкуБитрикса", считаем,
// что это уже существующие свойства и заменять в них ничего не будем, чтобы
// не задублировать свойства или не затереть значения
Если НЕ ТекСвойство.ОставитьСортировкуБитрикса Тогда
XDTOСвойство.БитриксСортировка = XMLСтрока(БитриксСортировка);
Иначе
XDTOСвойство.БитриксТипСвойства = XMLСтрока("E");
XDTOСвойство.БитриксТипСписка = XMLСтрока("L");
//XDTOСвойство.НомерСвязанногоИнфоблока = XMLСтрока(84);
XDTOСвойство.НомерСвязанногоИнфоблока = XMLСтрока(12);
КонецЕсли;
// не нужно заполнять даже пустой строкой это свойство, т.к. в битрикс придет пустой символьный код,
// в противном случае (если не передано), то битрикс сам сгенерирует значение символьного кода
// из наименовая с применением транслитерации
Если ЗначениеЗаполнено(ТекСвойство.СимвольныйКод) Тогда
XDTOСвойство.БитриксКод = XMLСтрока(ТекСвойство.СимвольныйКод);
КонецЕсли;
XDTOСвойство.Наименование = Лев(ТекСвойство.СвойствоНаименование, 250);
XDTOСвойство.Внешний = XMLСтрока(?(ЗначениеЗаполнено(ТекСвойство.ВыгружатьВХИ), ТекСвойство.ВыгружатьВХИ, Ложь));
XDTOСвойство.Информационное = XMLСтрока(НЕ лУчитываетсяВЦене);
ДанныеРеквизита = ПараметрыОбмена.НастройкаРеквизитовТоваровКакСвойства.Найти(ТекСвойство.Идентификатор, "ИдРеквизитаКакСвойство");
ТипРеквизита = ДанныеРеквизита.ОписаниеТипа.Типы()[0];
Тип = Неопределено;
Если ТипРеквизита = Тип("Строка") Тогда
XDTOСвойство.ТипЗначений = "Строка";
ИначеЕсли ТипРеквизита = Тип("Число") Тогда
XDTOСвойство.ТипЗначений = "Число";
ИначеЕсли ТипРеквизита = Тип("Булево") Тогда
XDTOСвойство.ТипЗначений = "Справочник";
XDTOВариантыЗначений = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOВариантыЗначенийТип);
XDTOСправочник = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСправочникТип);
XDTOСправочник.ИдЗначения = "true";
XDTOСправочник.Значение = "Да";
XDTOВариантыЗначений.Справочник.Добавить(XDTOСправочник);
XDTOСправочник = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСправочникТип);
XDTOСправочник.ИдЗначения = "false";
XDTOСправочник.Значение = "Нет";
XDTOВариантыЗначений.Справочник.Добавить(XDTOСправочник);
XDTOСвойство.ВариантыЗначений = XDTOВариантыЗначений;
Иначе // Справочник
XDTOСвойство.ТипЗначений = "Справочник";
XDTOВариантыЗначений = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOВариантыЗначенийТип);
ЗапросЗначенийСвойств.Текст = "ВЫБРАТЬ *
|ИЗ
| ВремЗначенияРеквизитовТоваровКакСвойств КАК ВремЗначенияРеквизитовТоваровКакСвойств
|ГДЕ
| ВремЗначенияРеквизитовТоваровКакСвойств.Свойство = &Свойство";
ЗапросЗначенийСвойств.УстановитьПараметр("Свойство", ТекСвойство.Свойство);
ВыборкаЗначенийСвойств = ЗапросЗначенийСвойств.Выполнить().Выбрать();
Пока ВыборкаЗначенийСвойств.Следующий() Цикл
XDTOСправочник = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСправочникТип);
XDTOСправочник.ИдЗначения = XMLСтрока(ВыборкаЗначенийСвойств.ЗначениеСвойства);
XDTOСправочник.Значение = Лев(ВыборкаЗначенийСвойств.ЗначениеНаименование, 1000);
XDTOВариантыЗначений.Справочник.Добавить(XDTOСправочник);
КонецЦикла;
Если XDTOВариантыЗначений.Справочник.Количество() > 0 тогда
XDTOСвойство.ВариантыЗначений = XDTOВариантыЗначений;
КонецЕсли;
КонецЕсли;
XDTOСвойство.ДляТоваров = XMLСтрока(Истина);
XDTOСвойства.Свойство.Добавить(XDTOСвойство);
КонецЦикла; |
|