Удаление элементов или снятие активности при импорте данных из 1С

Материал из Umicms
Перейти к:навигация, поиск

Актуально для 2.9.6


В XSL-Шаблоне импорта xsl/import/commerceML2.xsl, в шаблоне "Товары/Товар", прописан следующий блок:

<xsl:if test="Статус = 'Удален'">
  <xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>

данные строки добавляют в узел <page> атрибут is-deleted="1" в том случае, если в системе 1С для какого либо элемента (раздел, номенклатура) была поставлена "Пометка удаления". В итоге, при обработке данных, UMI.CMS помеченный элемент переместит в "Корзину", но он по прежнему будет существовать в системе и при повторном импорте данных, помещенный элемент в корзину будет обновляться. Для полного удаления элемента его необходимо удалить из Корзины.

Некоторые версии 1С передают статус "Удален" не как отдельный элемент <Статус>Удален</Статус> в xml-дереве товара, а как атрибут у элемента <Товар Статус="Удален">. В этом случае для удаления товара при импорте из 1С, если он помечене на удаление, нужно в скопировать темплейт <xsl:template match="Товары/Товар"> из файла /xsl/import/commerceML2.xsl в файл /xsl/import/custom/commerceML2.xsl и добавить после условия

<xsl:if test="Статус = 'Удален'">
<xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>

дополнительное условие

<xsl:if test="@Статус='Удален'">
<xsl:attribute name="is-deleted">1</xsl:attribute>
</xsl:if>

В некоторых случаях, требуется не удаления элемента в корзину, а изменение его активности, т.е. установления статуса "Не активен". Для этого необходимо весь шаблон "Товары/Товар" скопировать в файл xsl/import/custom/commerceML2.xsl, в корневой узел <stylesheet>. И потом изменить строчку:

<xsl:attribute name="is-deleted">1</xsl:attribute>

на:

<xsl:attribute name="is-active">0</xsl:attribute>

Если Вы хотите, чтобы товары, помеченные как удаленные, не попадали в корзину, а сразу удалялись из системы, то можете применить решением из статьи Удаление_товаров_из_системы_при_импорте.