[mSklad] 1.0.7 импорт характеристик (CommerceML 2)

Разбирем новую версию на примерах.
Начну с главного нововведения, импорт характеристик. В компоненте добавилась новая вкладка «Настройка импорта свойств»:

По умолчанию добавлены сразу несколько дефолтных связей, которые нельзя удалить, но можно изменить или деактивировать.
Здесь мы настраиваем какие характеристики товаров нам нужно импортировать.
Добавляем новую связь или редактируем существующую.

Поля:
- «источник» — наименование поля характеристики из файлов import.xml и offers.xml, должно 1в1 совпадать
- «тип поля» — тип поля куда сохраняем полученные данные(возможные значения «поле msProduct» или «tv»)
- «цель» — наименование поля товара (должно совпадать с названием колонки в базе данных) или наименование тв параметра
- чекбокс «активный» — использовать или нет связь при импорте
Новые настройки компонента
- Добавление к псевдониму id товара (msklad_alias_with_id) — решает проблему с однаковыми псевдонимами, дописывая id товара
- Создавать tv (msklad_create_properties_tv) — автоматически создаст и заполнит tv параметры для всех возможных характеристик товаров
- Импортировать все цены (msklad_import_all_prices) — необходим когда в выгрузке offers.xml больше одной цены, настраивается через связи
- Tv параметр цены с учетом характеристики (msklad_price_by_feature_tv) — tv параметр куда будут выгружены цены предложений одного товара в соответсвии с характеристикой
- Публиковать товар если есть в наличии (msklad_publish_by_quantity) — публикует или отменяет публикацию в зависимости отналичия
- Сохранять все свойства товара в одно tv (msklad_save_properties_to_tv) — tv параметр типа текст куда будут выгружаться все полученные характеристики в JSON формате
Первоначальная настройка для работы с CommerceML 2
Желательно перед установкой компонента иметь уже созданную и пустую «Категорию с товарами» компонента miniShop2, тогда при установке моего компонента он автоматически настроится на нее.
В настройках системы, по компоненту мы должны увидить следущее

Необходимо чтобы были заполнены следующие настройки «Id категории каталога (msklad_catalog_root_id)», «Шаблон по умолчанию для новых категорий (msklad_template_category_default)» и «Шаблон по умолчанию для новых товаров (msklad_template_product_default)»
Затем настраиваем синхронизацию
Переходим в компонент и открываем вкладку «Реквизиты синхронизации»

Переписываем параметры в 1с или сервис. Логин и пароль можно задать самостоятельно, через системные настройки.
В 1с «Администрирование» -> «Синхронизация данных» -> «Узлы обмена с сайтами»




Для правильной работы синхронизации, чтобы не было перебоев во время работы, желательно в сестемных настройках параметр «Лимит выполнения» (msklad_time_limit) сделать на пару секунд меньше чем лимит выполнения скриптов на сайте.
Важно!
Если не срабатывает авторизация, для FastCGI создайте файл .htaccess в папке /assets/components/msklad/ и добавьте в него следующие строки:RewriteCond %{HTTP:Authorization} !^$
RewriteRule ^(.*)$ $1?http_auth=%{HTTP:Authorization} [QSA]Примеры
Можно сделать первоначальную синхронизацию с сервисом, чтоб на сайт загрузились файлы import.xml и offers.xml для удобства дальнейшей настройки
Вариант 1 — автоматическое добавление характеристик
В системных настройках включаем параметр «Создавать tv»Производим импорт, и наблюдаем созданные связи и новые tv параметры

В данном случае tv параметр «Размер» явно лишний, так как в miniShop2 уже есть соответсвующее поле, перенастраиваем следующим образом:

Характеристику «Производитель» тоже желательно перенастроить в соответствии с полем miniShop2 vendor, но дополнительно отключим дефолтные связи «Изготовитель» и «Бренд», вот так:

Удаляем ненужные tv и запускаем синхронизацию.
Вариант 2 — добавляем характеристики
Все аналогично предыдущему варианту, но не включаем параметр «Создавать tv» при первой синхронизации.После первого импорта смотрим файл assets/components/msklad/1c_temp/import.xml
Свойства могут быть как отдельным справочником в теге <Свойства>
<Свойства>
<Свойство>
<Ид>76221</Ид>
<Наименование>Количество скрепок</Наименование>
<ДляТоваров>1</ДляТоваров>
<ТипЗначений>Строка</ТипЗначений>
</Свойство>
<Свойство>
<Ид>76223</Ид>
<Наименование>Размер</Наименование>
<ДляТоваров>1</ДляТоваров>
<ТипЗначений>Строка</ТипЗначений>
</Свойство>
</Свойства>тогда для связи характеристик берем значение из поля "<Наименование>" и копируем его в «Источник».Так и непосредственно в теге товара:
<Товар>
<Ид>000</Ид>
<Наименование>Скрепки стальные </Наименование>
<БазоваяЕдиница Код="9" НаименованиеПолное="упаковка" МеждународноеСокращение="PCE">упак.</БазоваяЕдиница>
<Артикул>0000</Артикул>
<Группы>
<Ид>00000</Ид>
</Группы>
<Описание>Доп описание</Описание>
<ЗначенияСвойств>
<ЗначенияСвойства>
<Наименование>Количество скрепок</Наименование>
<Значение>35</Значение>
</ЗначенияСвойства>
</ЗначенияСвойств>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>Полное наименование</Наименование>
<Значение>Скрепки стальные </Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>Количество скрепок</Наименование>
<Значение>25</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>В этом случае характеристики импортируются из тегов <ЗначенияСвойств> и <ЗначенияРеквизитов> (дубли объединяются), берем значение из поля "<Наименование>" и копируем его в «Источник».Вариант 3 — импорт характеристик в одно поле
Создаем новый tv параметр и назначаем его шаблону товара.

В системные настройки, в параметр «Сохранять все свойства товара в одно tv» (msklad_save_properties_to_tv) прописываем название созданного tv.
Запускаем импорт и смотрим что получилось.

Используйте по своему усмотрению.
Вариант 4 — импорт цены определенного типа или нескольких цен товара
Бывают ситуации когда нужно импортировать только определенный тип цены, а по умолчанию импортируется только первая цена.После первого импорта смотрим файл assets/components/msklad/1c_temp/offers.xml
<ТипыЦен>
<ТипЦены>
<Ид>111111</Ид>
<Наименование>Оптовая</Наименование>
<Валюта>RUR</Валюта>
<Налог>
<Наименование>НДС</Наименование>
<УчтеноВСумме>true</УчтеноВСумме>
</Налог>
</ТипЦены>
<ТипЦены>
<Ид>2222222</Ид>
<Наименование>Розничная</Наименование>
<Валюта>RUR</Валюта>
<Налог>
<Наименование>НДС</Наименование>
<УчтеноВСумме>true</УчтеноВСумме>
</Налог>
</ТипЦены>
</ТипыЦен>
<Предложения>
<Предложение>
<Ид>aaaaaaaa</Ид>
<Наименование>Скрепки стальные</Наименование>
<БазоваяЕдиница Код="9" НаименованиеПолное="упаковка" МеждународноеСокращение="PCE">упак.</БазоваяЕдиница>
<Цены>
<Цена>
<Представление>175 RUR за шт.</Представление>
<ИдТипаЦены>111111</ИдТипаЦены>
<ЦенаЗаЕдиницу>175</ЦенаЗаЕдиницу>
<Валюта>RUR</Валюта>
<Единица>шт.</Единица>
<Коэффициент>1</Коэффициент>
</Цена>
<Цена>
<Представление>182.5 RUR за шт.</Представление>
<ИдТипаЦены>2222222</ИдТипаЦены>
<ЦенаЗаЕдиницу>182.5</ЦенаЗаЕдиницу>
<Валюта>RUR</Валюта>
<Единица>шт.</Единица>
<Коэффициент>1</Коэффициент>
</Цена>
</Цены>
<Количество>12</Количество>
</Предложение>Нас интересует только розничная цена, для ее импорта делаем следующее:- включаем системную настройку Импортировать все цены (msklad_import_all_prices)
- переходим на вкладку «Настройка импорта свойств» в компоненте
- добавляем новую связь

Вариант 5 — импорт цен/наличия для нескольких торговых предложений одного товара
Если в системе установлен и настроен компонент msOptionsPrice, то цены автоматически выгрузятся в него в соответсвии с размерами. Необходимо наличие связи источник «Размер», тип «поле miniShop», цель «size».Если компонента msOptionsPrice нет, то цены выгрузятся в tv параметр указанный в системной настройка «msklad_price_by_feature_tv» формате 110х120==95||200х200==176||300х300==257, при незаполненной настройке цены не выгружаются.
Наличие в соответствии с характеристикой выгружается при настроенной связи с источником «Количество» в аналогичном формате — 110х120==15||200х200==2||300х300==0.
Плагины
Теперь можно использовать собственные плагины во время синхронизации. Добавлены события «mskladOnProductImport» и «mskladOnProductOffers».
Пример плагина на событие «mskladOnProductImport»
Работаем с объектом $resource и массивом параметров $propertiesif ($modx->event->name == 'mskladOnProductImport') {
//fix series
if(isset($properties['КатегорияБренда'])){
$resource->set('series', $properties['КатегорияБренда']);
$resource->save();
}
}
return;Пример плагина «mskladOnProductOffers»
Работаем с объектом $resource.if ($modx->event->name == 'mskladOnProductOffers'){
$qt = intval($resource->get('quantity'));
if($qt) {
$resource->set('instock', 1);
}
else {
$resource->set('instock', 0);
}
$resource->save();
}
return;Убрано всплывающее окно с реквизитами API МойСклад при установке, изменяется при необходимости через системные настройки.
Комментарии: 56
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Александр, написал:
Если в системе установлен и настроен компонент msOptionsPrice, то цены автоматически выгрузятся в него в соответсвии с размерами. Необходимо наличие связи источник «Размер», тип «поле miniShop», цель «size».
Так вот вопрос: как можно заменить указанное соответствие с размерами, на тоже соответствие, но с другим(ими) аналогичным(ими) полем(ями), например, вес (weight) или цвет (color)?
В 1С есть свойство — Статус товара со значениями Удален или В наличии. Можно ли как то сделать, чтобы при загрузке, если у номенклатуры у данного свойства значение = Удален — отключать его
Потому вопросы такие:
Это вообще присутствует в последней версии mSklad (учет остатков)? Если да, то где можно вести учет остатков товаров?
Где можно редактировать остатки товаров в 1с? С 1с не работаю, плохо знаю потому обращаюсь за помощью к тем, кто знает.
По 1С не подскажу.
Вот как выглядит товар в Мой Склад prntscr.com/63oon6
Вот параметры синхронизации prntscr.com/63ooqh
Настройки модуля prntscr.com/63op6u
Вот что получаю на сайте prntscr.com/63ooul
Также пробую выгружать все характеристики в TV — ничего не происходит. Там оказывается пусто. если убираю галочку в настройках синхронизации (Выгружать остатки с учетом характеристик), то выгружаются просто товары, размер нигде не учитывается.
Решают, что с ним делать дальше.
День-два, я думаю.
Спасибо Василий за отзывчивость!
Очень буду ждать его
очень надо!
Сейчас он вновь доступен в репозитории.
Но сомневаюсь, что компонент обновится в modstore.
Меня убрали с этого компонента, а в паблик пока не планирую выкладывать.
Подскажите пожалуйста, как запустить синхронизацию без 1С?
Дело в том что синхронизировать нужно с 1с77, а там нет стандартного обмена как в 1С8.
Программист сделал offers.xml и import.xml, я положил их в 1C_temp
а дальше не знаю как запустить 1c_exchange.php
где htauth:bVN5bmM6ZWQ3ODgyYmU1NzZhMTJjNWU0MGU1MTE2MWMyNmQ2MGM=
логин пароль через : в base64
ну а остальное по логике сообразите
Ошибка импорта каталога, передано пустое имя файла (переменная filename)
При этом файл от 1С приходит(import0_1.xml)
В логах:
Подскажите что не понравилось компоненту?
В системных настройках поставил чтобы у импортированных товаров в псевдоним подставлялся id товара (синхронизирую с класс365).
Но при выгрузке в псевдоним не подставляется id и получается, что у 10 товаров абсолютно одинаковый псевдоним и все вытекающие из этого проблемы…
Что нужно сделать, чтобы в псевдоним подставлялся id товара?!
С недавнего времени перестало авторизовывать из 1с (проверьте логин/пароль).
Проверка путем Проходит хорошо – в окне браузера выдает SUCCESS…
Если на другом домене – всё отлично, Соединение с сайтом установлено.
Если в строке Адрес сайта в (Узлах 1С) вставить строчку с логином/паролем в Base64 (как ссылка выше),
то Сведение установлено.
В чём может быть загвоздка?)
Как я понимаю Компонент может обработать выгрузку из 1С УТ, вопрос, а с изображениями как дело обстоит тоже выгружаются?
есть ли обратная синхронизация т.е. с сайта в 1С УТ вместе с характеристиками и изображениями?
У товара может быть 3 цены:
price
price_usd
price_euro
Соответственно в 1С есть цены в рублях и валюте.
Насколько я понимаю мне нужно создать плагин на одно из событий mskladOnProductImport или mskladOnProductOffers.
Пожалуйста дайте пример, где отловить <Валюта>USD</Валюта> и перенаправить price в msProductData price_usd.
Ну или хотя бы, как получить список свойств $properties и $resource?
1. Идем в настройки импорта mSync. Создаем или обновляем «Цена» или «Розничная цена» (у меня розничная) и устанавливаем тип поля -> msProduct и цель -> currency of price.
2. Еще создаем настройки импорта с источниками USD, EUR, руб типом msProduct и соответствующими целями price_usd, price_euro, price.
3. В файле core/components/msklad/model/msklad/mskladcataloghandler.class.php заменяем
на вот это
У меня в настройках mSync стоит «импортировать все цены» (msklad_import_all_prices).
Я недавно синхронизировал сайт с 1С, и дело было примерно так. Специалист по 1С настроил товары, настроил в программе выгрузку по CommerceML (где-то тут есть инструкция, как это делать), я же всего лишь связал через админку MODX'а нужные поля с полями товара и все.
В данном случае модификация — это TV параметр размер.
Вот как выглядит при создании заказа в МойСклад — prntscr.com/mwn6jb
Вот как должно быть — prntscr.com/mwn7ck
Вот так выбирается размер на сайте — prntscr.com/mwn7xp
Сами значения размеров (TV-параметры) как раз-таки и берутся из МоегоСклада, поле заполняется модификациями при импорте товаров на сайт.
Подскажите, в каком файле можно добавить указание модификации к товарам в заказе.