Установил на 1С модуль для интеграции с сайтом. Модуль при попытке обмена данными с магазином говорит:
Не удалось получить версию XML. Загрузка с сайта невозможна
Как я понял из форума битриксоидов дело в том что umi отдает данные в старом формате xml который как-то видоизменился в БУС 14.5
Кто сталкивался с такой проблемой. Как решить?
Как я понял из форума битриксоидов дело в том что umi отдает данные в старом формате xml который как-то видоизменился в БУС 14.5
Насколько я понимаю БУС 14.5 это код предназначенный для битрикс, а не для 1С и уж тем более umi или я ошибаюсь? Если нет то при чем он тут, если вы говорите о umi и 1С
Если вы говорите что umi что-то отдает 1С, то скорее всего вы говорите о выгрузке заказов из umi в 1С.
Ваша проблема может иметь несколько причин. Если отталкиваться от вашего предположения, что umi отдает xml который не нравиться 1С, то следует на сайте 1С найти спецификацию, которая ожидает ваша 1С. Точно утверждать не буду, но в самом низу данной статьи (http://v8.1c.ru/edi/edi_stnd/131/ (http://v8.1c.ru/edi/edi_stnd/131/)) приводятся образцы стандартов выгрузки информации о заказах, которые ожидает 1С.
Осталось получить xml, который отдает umi и сравнить их. Для того чтобы посмотреть xml, который отдает umi.
- Открываем модуль "Обмен данными",
- заходим на вкладку "Экспорт"
- создаем новый экспорт (руководство можно посмотреть тут (http://help.docs.umi-cms.ru/rabota_s_modulyami/modul_obmen_dannymi/eksport_dannyh/))
- заполняем название экспорта и поле "Формат экспорта" (Список заказов в формате CommerceML 2.0) после чего сохраняем его
- возвращаемя на вкладку "Экспорт".
- выбираем наш экспорт (щелкните по строчке с нашим экспортом, но не по названию)
- сверху появится кнопка "выполнить экспорт"
- вас спросят в файл или тут же посмотреть результаты, после чего вы можете их сравнить с тем что ждет 1С
вам необходимо внести изменений в xsl файл по принципу, который описан в данной статье Изменение значений полей h1 и title при обновлении данных (http://wiki.umisoft.ru/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_h1_%D0%B8_title_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)
толкь осуть ваших изменений будет такая:
1. скопировать в custom файл шаблон для товаров
<xsl:template match="Товары/Товар">
...
2. найти в нем описание свойств в группе common и в самое начало (это не принципиально, но чтобы вы не путались, давайте писать в начало), поместить код, для заполнения поля "Показывать подменю"
.......
<properties>
<group name="common">
<title>Основные параметры</title>
<!-- наш код-->
<property name="show_submenu" type="boolean">
<title>Показывать подменю</title>
<value>1</value>
</property>
........
Спасибо, все получилось. Только я вставил в
<xsl:template match="Группы/Группа" mode="groups">
Тоже сижу над интеграцией с 1С и тоже все очень медленно, поскольку мне сами бухгалтеры толком никак не могут ответить, что и как у них работает сейчас и как все должно работать.
Есть вопрос.
Как мне при выгрузке(обновлении) товаров из 1С не менять название соответствующего товара на сайте.
пробовал в commerceML2.xsl Вот в этой части кода добавлять обрамляющий тег <default-value>:
...
<xsl:template match="Товары/Товар">
<xsl:param name="group_id" select="string(Группы/Ид)" />
<xsl:param name="name">
<xsl:choose>
<xsl:when test="string-length(ПолноеНаименование)">
<default-value><xsl:value-of select="ПолноеНаименование" /></default-value>
</xsl:when>
<xsl:otherwise>
<default-value><xsl:value-of select="Наименование" /></default-value>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
...
Код получался вот такой:
...
<xsl:template match="Товары/Товар">
<xsl:param name="group_id" select="string(Группы/Ид)" />
<default-value>
<xsl:param name="name">
<xsl:choose>
<xsl:when test="string-length(ПолноеНаименование)">
<default-value><xsl:value-of select="ПолноеНаименование" /></default-value>
</xsl:when>
<xsl:otherwise>
<default-value><xsl:value-of select="Наименование" /></default-value>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
</default-value>
...
Названия товаров действительно не менялись при выгрузке. Но это от того, что я их, видимо полностью отключил, поскольку, если на сайте нет товара из 1С, то он теперь и не создается при выгрузке. Помогите решить.
Основа есть в wiki -
http://wiki.umisoft.ru/%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B8%D0%BB%D0%B8_%D1%81%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B8%D0%B7_1%D0%A1
<xsl:if test="ЗначенияСвойств/ЗначенияСвойства[Ид = current()/Свойства/Свойство[Наименование = 'Наличие']/Ид]/Значение = 'Нет у поставщика'">
<xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>
Что-то не срабатывает. Может не туда код вставил?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">
<xsl:template match="Товары/Товар">
<xsl:param name="group_id" select="string(Группы/Ид)" />
<xsl:param name="name">
<xsl:choose>
<xsl:when test="string-length(ПолноеНаименование)">
<xsl:value-of select="ПолноеНаименование" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Наименование" />
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<page id="{Ид}" parentId="{$group_id}" type-id="{$group_id}">
<xsl:if test="Статус = 'Удален'">
<xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>
<!--Мои вставки...-->
<xsl:if test="ЗначенияСвойств/ЗначенияСвойства[Ид = current()/Свойства/Свойство[Наименование = 'Наличие']/Ид]/Значение = 'Нет у поставщика'">
<xsl:attribute name="is-active">0</xsl:attribute>
</xsl:if>
<!--...Мои вставки-->
<xsl:if test="not(Группы/Ид)">
<xsl:attribute name="parentId"><xsl:value-of select="$catalog-id" /></xsl:attribute>
<xsl:attribute name="type-id">root-catalog-object-type</xsl:attribute>
</xsl:if>
<default-active><xsl:value-of select="$catalog_item_activity" /></default-active>
<default-visible><xsl:value-of select="$catalog_item_visible" /></default-visible>
<basetype module="catalog" method="object">Объекты каталога</basetype>
<name><xsl:value-of select="$name" /></name>
<xsl:if test="string-length($catalog_item_template)">
<default-template><xsl:value-of select="$catalog_item_template" /></default-template>
</xsl:if>
<properties>
<group name="common">
<title>Основные параметры</title>
<property name="title" type="string">
<title>Поле TITLE</title>
<default-value><xsl:value-of select="$name" /></default-value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<default-value><xsl:value-of select="$name" /></default-value>
</property>
</group>
<group name="product">
<title>1C: Общие свойства</title>
<xsl:if test="string-length(Описание)">
<property name="description" title="Описание" type="wysiwyg" allow-runtime-add="1">
<type data-type="wysiwyg" />
<title>Описание</title>
<value>
<xsl:choose>
<xsl:when test="Описание/@ФорматHTML = 'true'">
<xsl:value-of select="Описание"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="php:function('nl2br', string(Описание))" disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</value>
</property>
</xsl:if>
<property name="1c_catalog_id" type="string">
<title>Идентификатор каталога 1С</title>
<value><xsl:value-of select="$catalog-id" /></value>
</property>
<property name="1c_product_id" type="string">
<title>Идентификатор в 1С</title>
<value><xsl:value-of select="Ид" /></value>
</property>
<property name="artikul" type="string">
<title>Артикул</title>
<value><xsl:value-of select="Артикул" /></value>
</property>
<property name="bar_code" type="string">
<title>Штрих-код</title>
<value><xsl:value-of select="Штрихкод" /></value>
</property>
<property name="weight" type="float">
<title>Вес</title>
<value><xsl:value-of select="ЗначенияРеквизитов/ЗначениеРеквизита[Наименование = 'Вес']/Значение"/></value>
</property>
<xsl:apply-templates select="Картинка" />
</group>
<xsl:apply-templates select="ЗначенияСвойств" />
</properties>
</page>
</xsl:template>
</xsl:stylesheet>
Что-то не срабатывает. Может не туда код вставил?
.........
сомнение вызывает xPath выражение
ЗначенияСвойств/ЗначенияСвойства[Ид = current()/Свойства/Свойство[Наименование = 'Наличие']/Ид]/Значение = 'Нет у поставщика'
так как это написано в шаблоне, который обрабатывает Товары/Товар, а ЗначенияСвойств/ЗначенияСвойства находиться в xml дереве в другой ветке (намного выше), то, возможно, вам надо поменять xPath выражение на такое
//ЗначенияСвойств/ЗначенияСвойства[Ид = current()/Свойства/Свойство[Наименование = 'Наличие']/Ид]/Значение = 'Нет у поставщика'
P.S. Добавил // в самое начало выражения