CRM: вывести код артикула в счет Есть решение

В CRM в печатной форме счета нужно в отдельную колонку вывести код артикула товара (если таковой имеется). Судя по шпаргалке, отдельной переменной для этого не предусмотрено. Но в массиве из которого выводятся позиции в счете есть [product_id]. При помощи него можно вытащить данные по коду артикула. Как мне правильно это сделать?

10 ответов

  • 2
    Михаил Ушенин 15 августа 2023 19:20 # Решение

    Внутри цикла

    {foreach $invoice.items as $_item}

    добавьте

    {$product_id_parts = explode(':', $_item.product_id|default:'')}
    
    {if count($product_id_parts) == 3 && $wa->shop}
        {$product_id = $product_id_parts[1]}
        {$product = $wa->shop->product($product_id)}
        
        {if $product}
            {$sku_id = $product_id_parts[2]}
            {$product.skus[$sku_id].sku|default:''}
        {/if}
    {/if}

    • +1
      SysLink SysLink 15 августа 2023 22:52 #

      Спасибо, получилось!

    • +1
      SysLink SysLink 16 августа 2023 04:12 #

      Подскажите еще пожалуйста. Нужно у этого артикула удалить лишние символы, оставив только буквы "У", "Т" и цифры. Грубо говоря из артикула "УТ000003247Д" надо сделать "УТ000003247". Пытаюсь сделать через так: {$product.skus[$sku_id].sku|regex_replace:"/[^УТ0123456789]/":""}

      но в конце добавляется какой-то спецсимвол со знаком вопроса. Что-то я походу делаю не так...

      • +2
        replicant replicant 16 августа 2023 07:46 #

        Модификатор U (либо сразу iuxs, но кмк это уже перебор, хотя в примере так).

        Удаляем последний символ, если он не число.

        {$string = "УТ000003247Д"}
        
        {$string2 = "УТ000008324"}
        
        {$string|regex_replace:'/(.*)[^0-9]$/iuxs':'$1'}
        
        <br>
        
        {$string2|regex_replace:'/(.*)[^0-9]$/u':'$1'}

        на выходе вот такое

  • 1
    SysLink 17 августа 2023 13:58 #

    Не буду отдельно создавать тему, в догонку к предыдущему. Подскажите еще пожалуйста, как в в переменной названия товара правильно удалить название артикула (все что идет в круглых скобках).

    • +1
      SysLink SysLink 17 августа 2023 14:34 #

      ...включая скобки удалить

      • +1
        replicant replicant 17 августа 2023 15:37 #

        На вход подаем строку (в примере ставим даже две пары скобок)

        Длинный текст (текст в скобках) и еще кусок (снова скобки)

        Применяем

        {$stroka|regex_replace:'~\([^()]*\)~':''}

        На выходе получаем

        Длинный текст и еще кусок

  • 2
    replicant 17 августа 2023 16:29 #

    Если же не прибегать к косметике через регулярные выражения, то следует уже сразу в коде взять $product.name, а не $_item.name, которая есс-но идет в связке с названием артикула как это принято во всяких $items.

    Тем более код Михаила уже доставляет вам нужный ID товара, вынимая его из строки вида wa_app:product_id:sku_id и организует возможность заглянуть в массив $product, поэтому просто берите имя в лоб.


    Как поведет себя состав счета при переименовании товара в магазине в таком случае вы уже сами посмотрите т.к. это живое имя, влияющее напрямую на состав счетов даже уже выставленных, а не замороженный на момент создания и по сути неизменный слепок в виде $item.name. Если вам это подойдет, то ок.

    • +1
      SysLink SysLink 17 августа 2023 17:11 #

      Спасибо! Это прям гениальное решение! )

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите