• Добрый день.

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

    Пример из файла import:

    <Товар>
    				<Ид>621f3f3b-319e-11e6-81b4-080027004cfa</Ид>
    				<Артикул>231.9300.000</Артикул>
    				<Наименование>Badu-Jet "Action-sport" 2,20kW /  230 V,  54 м3/ч, с 2-мя форсунками ? 28 мм c прожектором 300W/12V</Наименование>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<Группы>
    					<Ид>621f3f1c-319e-11e6-81b4-080027004cfa</Ид>
    				</Группы>
    				<СтавкиНалогов>
    					<СтавкаНалога>
    						<Наименование>НДС</Наименование>
    						<Ставка>Без налога</Ставка>
    					</СтавкаНалога>
    				</СтавкиНалогов>
    				<ЗначенияРеквизитов>
    					<ЗначениеРеквизита>
    						<Наименование>ВидНоменклатуры</Наименование>
    						<Значение>Товары</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>ТипНоменклатуры</Наименование>
    						<Значение>Товар</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>Полное наименование</Наименование>
    						<Значение>Badu-Jet "Action-sport" 2,20kW /  230 V,  54 м3/ч, с 2-мя форсунками ? 28 мм c прожектором 300W/12V</Значение>
    					</ЗначениеРеквизита>
    					<ЗначениеРеквизита>
    						<Наименование>Код</Наименование>
    						<Значение>00000000534</Значение>
    					</ЗначениеРеквизита>
    				</ЗначенияРеквизитов>
    				<_regular_currency_prices>"EUR":"3?940"</_regular_currency_prices>
    				<_product_base_currency>EUR</_product_base_currency>
    			</Товар>
    			<Товар>

    Вопрос относится к значениям _regular_currency_prices и _product_base_currency.

    Возможно ли залить эти значения через исправления в 1С или необходимо лезть в код (и желательно ткнуть куда именно).

    P.S. Пояснение: в базе 1С товары хранятся в долларе и евро, на сайте установлен плагин для автоматической конвертации цены из одной валюты в другую (Aelia Currency Switcher for WooCommerce), на сайте отображение цены должно идти в одной (третей – гривне) валюте.
    P.P.S. Значения в необходимых полях уже настроены в соответствии с тем, как они должны храниться в БД.

    Заранее благодарен за помощь.

    https://www.ads-software.com/plugins/woocommerce-and-1centerprise-data-exchange/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Удалось решить?

    Thread Starter dragomagic

    (@dragomagic)

    Увы, закидывание полей как ЗначениеРеквизита не помогает

    Thread Starter dragomagic

    (@dragomagic)

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

    <Товары>
    			<Товар>
    				<Ид>34198bce-338c-11e6-bd42-080027004cfa</Ид>
    				<Артикул>30254</Артикул>
    				<Наименование>Втулка редукционная  (КН-КВ) 1 1/2"x1 1/4"  </Наименование>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<ЗначениеВариации>"EUR":"39,40"</ЗначениеВариации>
    				<ВариацияВалюты>EUR</ВариацияВалюты>
    				<Группы>
    					<Ид>34198bd0-338c-11e6-bd42-080027004cfa</Ид>
    				</Группы>

    и далее по стандартной структуре.

    И правим файл import.php (/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange) строка (652)
    Было:

    $post_meta = array(
        '_sku' => @$product['Артикул'],
        '_manage_stock' => 'yes',
      );

    Стало:

    $post_meta = array(
        '_sku' => @$product['Артикул'],
        '_manage_stock' => 'yes',
    	'_regular_currency_prices' => @$product['ЗначениеВариации'],
    	'_product_base_currency' => @$product['ВариацияВалюты'],
      );

    Новые значения для поля meta_key товара добавляются, но, увы, плагин их почему-то не подхватывает.

    Копаем дальше)

    Thread Starter dragomagic

    (@dragomagic)

    Получилось.
    Дополняю предыдущий пост.

    Для 1С разделителем должна быть точка – это обязательно.
    И добавилось еще одна строка в файл import.php:

    $post_meta = array(
        '_sku' => @$product['Артикул'],
        '_manage_stock' => 'yes',
    	'_regular_currency_prices' => @$product['ЗначениеВариации'],
    	'_product_base_currency' => @$product['ВариацияВалюты'],
    	'_sale_currency_prices' => '[]',
      );

    Thread Starter dragomagic

    (@dragomagic)

    Замечание.
    В подобном случае, когда импортируете товары в разной валюте, при импорте файла offers.xml может меняться валюта магазина в целом.

    Thread Starter dragomagic

    (@dragomagic)

    Для исправления изменения валюты магазина необходима в файле offers.php (лежит там же, где и import.php) закомментировать пару строк:

    function wc1c_update_currency($currency) {
      if (!array_key_exists($currency, get_woocommerce_currencies())) return;
    
      //update_option('woocommerce_currency', $currency);
    
      $currency_position = array(
        'RUB' => 'right_space',
        'USD' => 'left',
      );
     // if (isset($currency_position[$currency])) update_option('woocommerce_currency_pos', $currency_position[$currency]);
    }

    Thread Starter dragomagic

    (@dragomagic)

    И пожалуй последнее примечание)

    Если не требуется, что бы на товар становилась цена, которая подтягивается из файла offers, то правим файл offers.php, добавляя в него пару строк (155).
    Было:

    if (!is_null($price)) {
        $sale_price = @$current_post_meta['_sale_price'];
        $sale_price_from = @$current_post_meta['_sale_price_dates_from'];
        $sale_price_to = @$current_post_meta['_sale_price_dates_to'];
        if (empty($current_post_meta['_sale_price'])) {
          $post_meta['_price'] = $price;
        }
        else {
          if (empty($sale_price_from) && empty($sale_price_to)) {
            $post_meta['_price'] = $current_post_meta['_sale_price'];
          }
          else {
            $now = strtotime('now', current_time('timestamp'));
            if (!empty($sale_price_from) && strtotime($sale_price_from) < $now) {
              $post_meta['_price'] = $current_post_meta['_sale_price'];
            }
            if (!empty($sale_price_to) && strtotime($sale_price_to) < $now) {
              $post_meta['_price'] = $price;
              $post_meta['_sale_price_dates_from'] = '';
              $post_meta['_sale_price_dates_to'] = '';
            }
          }
        }
      }

    Стало:

    if (!is_null($price)) {
        $sale_price = @$current_post_meta['_sale_price'];
        $sale_price_from = @$current_post_meta['_sale_price_dates_from'];
        $sale_price_to = @$current_post_meta['_sale_price_dates_to'];
        if (empty($current_post_meta['_sale_price'])) {
          $post_meta['_price'] = $price;
        }
        else {
          if (empty($sale_price_from) && empty($sale_price_to)) {
            $post_meta['_price'] = $current_post_meta['_sale_price'];
          }
          else {
            $now = strtotime('now', current_time('timestamp'));
            if (!empty($sale_price_from) && strtotime($sale_price_from) < $now) {
              $post_meta['_price'] = $current_post_meta['_sale_price'];
            }
            if (!empty($sale_price_to) && strtotime($sale_price_to) < $now) {
              $post_meta['_price'] = $price;
              $post_meta['_sale_price_dates_from'] = '';
              $post_meta['_sale_price_dates_to'] = '';
            }
          }
        }
      }
    $post_meta['_price'] = '';
    $post_meta['_regular_price'] = '';

    Как говорится, всем спасибо)))

    P.S. Автору плагина огромное спасибо за столь качественный и гибкий инструмент + понятный красивый код)

    Thread Starter dragomagic

    (@dragomagic)

    Не удается отредактировать сообщение, поэтому еще раз привожу формат для 1С:

    <Товары>
    			<Товар>
    				<Ид>34198bce-338c-11e6-bd42-080027004cfa</Ид>
    				<Артикул>30254</Артикул>
    				<Наименование>Втулка редукционная  (КН-КВ) 1 1/2"x1 1/4"  </Наименование>
    				<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
    				<ЗначениеВариации>{"EUR":"39.40"}</ЗначениеВариации>
    				<ВариацияВалюты>EUR</ВариацияВалюты>
    				<Группы>
    					<Ид>34198bd0-338c-11e6-bd42-080027004cfa</Ид>
    				</Группы>

    Спасибо за столь развёрнутый ответ! Попробую провести настройки у себя также.

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Загрузка дополнительных полей’ is closed to new replies.