Обмен 1С Битрикс. Выгрузка габаритов, веса, длины, ширины, высоты без доработок на стороне сайта
Вечная проблема с Длиной, Шириной и Высотой – при выгрузке на сайт. Можно сделать всё на стороне сайта, но хочется, чтобы данные поля сразу попадали в выгрузку без «напильника» и т.п.
Управление торговлей, редакция 11 (11.5.10.84)
Версия расширения обмена 8.1.0.6
Вроде как в расширении обмена 8.1.0.6 и в последней версии модуля 7.0.2.11 появились данные поля (Длина, Ширина, Высота) для указания соответствий, возможно, и ранее.
Габариты можно задавать через индивидуальные упаковки, но это не удобно (предварительно их включив в разделе НСИ и Администрирование – Настройка НСИ и разделов – Номенклатура – Упаковки номенклатуры)
Далее в настройках подключения к сайту в области Режим обмена данных - Выгрузка информации о номенклатуре - Настроить - указываем соответствие, то в файле для обмена все отлично подставляется
Если мы хотим указать подстановку значений через «Свой алгоритм» - чтобы бы там не указывали, все-равно в файле для обмена в данных полях (Длина, Ширина, Высота) ничего кроме нулей не отображается, хотя значения доп. реквизитов передаются и если указывать для Вес, то всё в файл подставляется и свой алгоритм и другие значения.
Создание доп. реквизитов – создаем значение число Для подстановки в «Cвой алгоритм» используем имя для разработчиков, так как оно будет уникальным. По аналогии делаем для ширины и высоты.
В данный код подставляем своё имя для разработчика.
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = [МенеджерВременныхТаблиц];
Запрос.Текст = "ВЫБРАТЬ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Значение
|ИЗ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму
|ГДЕ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Номенклатура = &Номенклатура
| И ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Свойство = &Свойство";
Запрос.УстановитьПараметр("Номенклатура", [Номенклатура]);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДлинаМм_b89d07cabab84208b037af0ef21b0002"));
ВыполненныйЗапрос = запрос.Выполнить();
Если ВыполненныйЗапрос.Пустой() Тогда
[Результат] = "";
Иначе
Выборка = ВыполненныйЗапрос.Выбрать();
Пока Выборка.Следующий() Цикл
[Результат] = СтрЗаменить(Строка(Выборка.Значение),Символы.НПП,"");
Прервать;
КонецЦикла;
КонецЕсли;
Здесь [Результат] = СтрЗаменить (Строка (Выборка.Значение), Символы.НПП,""); убираем лишние символы, в частности разделитель тысячных ( иначе будет ошибка Значение: '1 150' не соответствует простому типу: {urn:1C.ru:commerceml_3}РазмерТип )
Запрос.МенеджерВременныхТаблиц = [МенеджерВременныхТаблиц];
Запрос.Текст = "ВЫБРАТЬ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Значение
|ИЗ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму
|ГДЕ
| ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Номенклатура = &Номенклатура
| И ВТ_ЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму.Свойство = &Свойство";
Запрос.УстановитьПараметр("Номенклатура", [Номенклатура]);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ДлинаМм_b89d07cabab84208b037af0ef21b0002"));
ВыполненныйЗапрос = запрос.Выполнить();
Если ВыполненныйЗапрос.Пустой() Тогда
[Результат] = "";
Иначе
Выборка = ВыполненныйЗапрос.Выбрать();
Пока Выборка.Следующий() Цикл
[Результат] = СтрЗаменить(Строка(Выборка.Значение),Символы.НПП,"");
Прервать;
КонецЦикла;
КонецЕсли;
Указываем данный код, меняя названия для разработчика, в настройках для подключения к сайту
Если смотреть расширение 8.1.0.6, то в нём в ОбменСБитриксУправлениеСайтомУТ ОбщийМодуль.БУС_ВыгрузкаСервер.Модуль в данных строках 4493-4495, указан данный код, который независимо от того, что мы указали в «Свой алгоритм» для Длина, Ширина, Высота принудительно устанавливает значения
//ТоварXDTO.Высота = ВыборкаТовара.ВысотаБ;
//ТоварXDTO.Ширина = ВыборкаТовара.ШиринаБ;
//ТоварXDTO.Длина = ВыборкаТовара.ГлубинаБ;
После комментирования данных строчек всё работает исправно и габариты проставляются из доп. реквизитов по «Свой алгоритм»
После обращения на форуме, данный баг убрали в последующих версиях расширения.
- Комментарии
Загрузка комментариев...