/ Сайтостроение / Адаптивность / Интеграция Woocommerce с 1С

Интеграция Woocommerce с 1С

HIT

Deprecated: Function create_function() is deprecated in /home/htvtwmhs/public_html/wp-content/plugins/wp-spamshield/wp-spamshield.php on line 2033

Интеграция Woocommerce с 1С — довольно сложная тема с множеством нюансов. Буду описывать на что стоит обращать внимание, с какими проблемами пришлось столкнуться.

Плагин 1С:Предприятие Data Exchange

1s-integration2

Так как не имею опыта в интеграции 1С и сайта, обратился в фирму специализирующуюся на этом. Процесс интеграции пока продолжается, поэтому данные об организации и оценку работы по взаимодействию с ними опишу по завершении. Единственно упомяну, что процесс интеграции дело не быстрое!

Процесс интеграции на стороне сайта основывается на плагине Данила Семеленова «Обмен данным между WooCommerce и 1С:Предприятием».

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

Соответствие полей 1С = WC

Наименование. В 1С часто данное поле не аккуратное, т.е. заполняется закупщиками как придется. Для наименования нужно (лучше) заводить специальное поле — Наименование для интернет-магазина.

Описание. Описание из 1С импортируется в сайт. Нужно настроить так, чтоб краткое описание из 1С переносилось в поле woocommece Краткое описание товара. А основное (полное) описание товара заполнялось на стороне сайта и не затиралось при обновлении позиции. В данный момент поле Основное описание затирается.

Куда записывается поле Описание из 1С в полое или краткое описание на сайте — это не важно, т.к. всегда можно поменять их местами в шаблоне вывода

Категории/подкатегории. При импорте в сайт в WC создаются те же категории/подкатегории что и 1С. При этом описание и изображение категории задается на сайте, и не затирается при очередной выгрузке. Наименование категории каждый раз обновляется из 1С.

Структура каталога товаров на сайте будет полностью дублировать структуру папок с 1С. Поэтому стоит этому уделить особое внимание!

1s-integration3
  • Все папки должны быть названы в одном стиле. Название строчными буквами с большой буквы (Категория), множественное/единственное число — в названиях должно быть единым.
  • Стараться избегать лишних вложенностей папок. Чтоб не получились категории с 1-2 товарами. И наоброт очень большие папки нужно разбивать на подкатегории (либо использовать фильтр).
  • Отказаться от служебных названий (Распродажа, Остатки, Непроданное и пр.), т.к. данные наименования могут появится на сайте
  • Не использовать в названии папок 1С каких либо символов: *_-()№,. Если это не обусловлено специальной необходимостью

Свойства. Поля из вкладки 1С свойства импортируются в атрибуты товара WC. Если на сайте создать для товара какие-либо атрибуты — при импорте из 1С они сотрутся. Так же в атрибуты подгружаются некоторые поля из вкладки По-умолчанию.

При экспорте свойств в атрибуты у атрибутов получается неправильный slug (что-то такое 62bc690e-a069-11e6-9fde-001a4be59578). Если переименовать на нормальное, то при следующем экспорте появится еще один атрибут снова со слагом 62bc690e-a069-11e6-9fde-001a4be59578, т.е. значение атрибута дублируется.

Вес. Исходно вес подставляется не в то поле. Должен ставится в вкладку Доставка вес, но он подгружается в виде атрибута. Возможно поможет такая запись

 if ($requisite_name=="Вес") {
      update_post_meta($post_id,"_weight",$requisite['Значение'][0]);
}
weight

Изображение. 1С позволяет задавать изображение и оно успешно импортируется на сайт. Но зачастую, это не очень удобно. Лучше изображениями наполнять на стороне сайта. При импорте они не стираются.

Артикул. Данное поля не всегда заполняется в 1С. Как альтернатива, можно в поле артикул подгружать код товара 1С.

Цена. Корректно подгружается из 1С. Цена распродажи, скидки задаются на стороне сайта. они не затираются. При формировании заказа поступают в 1С уже со скорректированными на сайте ценами.

Количество. Поле переносится на сайт корректно. Есть количество товара из 1С приходит равным 0, то у товара меняется статус наличия (stock_status) с instock (в наличии) на outofstock (нет в наличии). Если мы хотим игнорировать статус наличия, продавать товары и при 0 остатке (делать предзаказ), то нужно закомментировать в файле woocommerce-and-1centerprise-data-exchange/exchange/offers.php строки:

//$stock_status = $quantity > 0 ? 'instock' : 'outofstock';
//@wc_update_product_stock_status($post_id, $stock_status);

Если товаров много и многие уже по факту оказались не в наличии при очередной выгрузке, то массово проставляем им статус в наличии и желательно разрешение на предзаказ.

Галерея WC, метки, дополнительные таксономии и поля, при выгрузке из 1С сохраняются!

Удаление товара из 1С

При удалении товара или категории в 1С на сайте товар или категория сохраняются. Их нужно удалять вручную.

Заказы

Заказы поступающие в 1С передают следующую информацию: наименование, количество и цену товара (если цена изменена на сайте в виде скидки поступит измененная цена), комментарий к заказу, № и дата заказа. Полей доставка и данных о покупателе в заказе 1С нет.

При поступлении заказа в 1С все заказчики выгружаются под наименованием «Гость». Чтобы это изменить — редактируем файл /exchange/query.php. Находим соответствующую строку и меняем Гость на что угодно.

Ошибки, проблемы

1. Модуль конфликтует с плагином слайдером, конкретно с функцией сохранения. Ругается на выделенную в коде строку:

add_action('save_post', 'atb_box_update');
function atb_box_update($post_id){
	if (!wp_verify_nonce($_POST['atb_nonce'], __FILE__)) return false; // Проверка, что сохраняется именно нужная нам страница.
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return false; // Проверка, что это не автосохранение
	if (!current_user_can('edit_post', $post_id)) return false; // Проверка, что пользователь может изменять этот пост
	if(!isset($_POST['extra']) ) return false;	// Проверка, что нам пришли все поля
	foreach($_POST['extra'] as $key=>$value){ // Циклом добавляем поля. Можно и в ручную это делать... Но так проще добавить новое поле
		if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
			delete_post_meta($post_id, $key); // Удаляем это поле из мета-данных
			continue; // Продолжаем
		}
		update_post_meta($post_id, $key, $value); // Обновляем или добавляем мета-данные
	}
	return $post_id;
}

Вылечилось удалением этой строки

2. Некоторые товары выгружаются как вариативные. Происходит это из-за того что у позиции 1С есть несколько характеристик, которые по сути являются вариациями товара (варианты упаковки, количество и т.д.).

3. При обновлении товара у него обновляется дата публикации. По-хорошему надо сделать чтоб менялась дата изменения.
Решение: находим в файле exchange/import.php такие строки кода

'post_date' => $post_date,
'post_date_gmt' => get_gmt_from_date($post_date),

и меняем их на

'post_modified' => $post_date,
'post_modified_gmt' => get_gmt_from_date($post_date),

4. При обновлении товар перестает быть акционным. При этом акционная цена у него не затирается, но он каким то образом не проходит проверку is_on_sale. Если просто обновить карточку товара, то он снова становиться акционным. Происходит это скорее всего из-за особенности обновления метаполей wordpress.

Проблему решил следующим образом — удалил из файла /exchange/offers.php эту часть кода:

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'] = '';
        }
      }
    }
}

Некоторые моменты на стороне 1С

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

Интересная статья про переговоры на счет интеграции сайта и 1С.
Принцип обмена данными сайта с 1С

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Метод изменения шаблонов woocommerce

Метод изменения шаблонов woocommerce

В данной статье будет рассмотрен метод изменения шаблонов плагина Woocommerce. Разделение шаблонов категории и товара Первым делом надо разделить общий шаблон woocommerce.php на woocommerce-product.php и woocommerce-category.php. Делаем это простой проверкой: Читать далее »

Шорткод вывода товаров по метке

Шорткод вывода товаров по метке

Иногда требуется быстро вывести товары с определенной меткой. Данный шорткод еще не испытывал. // Шорткод для вывода товаров по метке function woo_products_by_tags_shortcode( $atts, $content = null ) { // Get Читать далее »

/
Обзор плагинов по фильтрации товаров WC

Обзор плагинов по фильтрации товаров WC

В данном обзоре мы будем приводить сильные и слабые стороны различных плагинов по созданию фильтрации товаров WC. Причем рассмотрим как платные, так и бесплатные решения. WooCommerce Products Filter (50 000) Читать далее »

/

Добавить комментарий

10 комментариев

  1. Николай

    Добрый день! К сожалению, документации и мануалов по установке вышеописанного плагина в сети очень мало. Не могли бы Вы написать пару строк о том, с чего начать, после того как плагин загрузился на WP?

    1. Alexandr
      Alexandr

      Дело в том, что я прибегал к помощи специалистов — они настраивали обмен на стороне 1С. В будущем планирую более детально разобраться в данном вопросе..

  2. Рус

    Я чтото не понял.. єто плагин Даниила Семенова описан?? Или что

    1. Alexandr
      Alexandr

      Да, здесь описан плагин Данила Семеленова.

  3. Данил

    В иторе какой результат? Удалось реализовать? Сколько товаров проходит через обмен? И можете ли дать контакты тех, кто все настраивал?

    1. Alexandr
      Alexandr

      Я обращался в компанию ENTEREGO. Синхронизировали 2 сайта, все работает (обменивается) успешно.

  4. Рося

    Сталкивался ли кто с проблемой переезда сайта на https? Когда в 1С пытаюсь синхронизироваться с сайтом, то выдаёт ошибку «Подключиться к серверу не удалось. Ошибка авторизации». Когда сайт был на http, то всё было хорошо

  5. Александр

    Здравствуйте! У меня не получается обменяться заказами. С сайта заказы не выгружаются.
    Пожалуйста, помогите разобраться
    Вот что пишет в ошибке:
    PHP Unknown Error: Функция status вызвана неправильно. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Дополнительную информацию можно найти на странице <a href=»https://codex.wordpress.org/Debugging_in_WordPress»>&laquo;Отладка в WordPress&raquo;</a>. (Это сообщение было добавлено в версии 3.0.) in /home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/functions.php on line 4161.#0  wc1c_error(Функция status вызвана <strong>неправильно</strong>. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Дополнительную информацию можно найти на странице <a href=»https://codex.wordpress.org/Debugging_in_WordPress»>&laquo;Отладка в WordPress&raquo;</a>. (Это сообщение было добавлено в версии 3.0.) in /home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/functions.php on line 4161, PHP Unknown Error) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange.php:142]#1  wc1c_strict_error_handler(1024, Функция status вызвана <strong>неправильно</strong>. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Дополнительную информацию можно найти на странице <a href=»https://codex.wordpress.org/Debugging_in_WordPress»>&laquo;Отладка в WordPress&raquo;</a>. (Это сообщение было добавлено в версии 3.0.), /home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/functions.php, 4161, Array ([function] => status,[message] => Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Дополнительную информацию можно найти на странице <a href=»https://codex.wordpress.org/Debugging_in_WordPress»>&laquo;Отладка в WordPress&raquo;</a>.,[version] => (Это сообщение было добавлено в версии 3.0.)))#2  trigger_error(Функция status вызвана <strong>неправильно</strong>. Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong Дополнительную информацию можно найти на странице <a href=»https://codex.wordpress.org/Debugging_in_WordPress»>&laquo;Отладка в WordPress&raquo;</a>. (Это сообщение было добавлено в версии 3.0.)) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/functions.php:4161]#3  _doing_it_wrong(status, Order properties should not be accessed directly. Backtrace: require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), do_action(‘template_redirect’), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc1c_template_redirect, wc1c_exchange, wc1c_mode_query, include(‘/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php’), WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong, 3.0) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce/includes/wc-deprecated-functions.php:116]#4  wc_doing_it_wrong(status, Order properties should not be accessed directly., 3.0) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce/includes/legacy/abstract-wc-legacy-order.php:407]#5  WC_Abstract_Legacy_Order->__get(status) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php:141]#6  include(/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange/query.php) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange.php:474]#7  wc1c_mode_query(sale) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange.php:511]#8  wc1c_exchange() called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-content/plugins/woocommerce-and-1centerprise-data-exchange/exchange.php:533]#9  wc1c_template_redirect()#10 call_user_func_array(wc1c_template_redirect, Array ([0] => )) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/class-wp-hook.php:286]#11 WP_Hook->apply_filters(, Array ([0] => )) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/class-wp-hook.php:310]#12 WP_Hook->do_action(Array ([0] => )) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/plugin.php:453]#13 do_action(template_redirect) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/template-loader.php:12]#14 require_once(/home/vtrendes/domains/vtrendeshop.com/public_html/wp-includes/template-loader.php) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/wp-blog-header.php:19]#15 require(/home/vtrendes/domains/vtrendeshop.com/public_html/wp-blog-header.php) called at [/home/vtrendes/domains/vtrendeshop.com/public_html/index.php:17]Request URI: http://vtrendeshop.com/?wc1c=exchange?type=sale&mode=queryServer API: litespeedMemory limit: 256MMaximum POST size: 8MPHP version: 5.6.37WordPress version: 4.9.8Plugin version: 0.7r1466555

    1. Alexandr
      Alexandr

      Я не подскажу, т.к. подробно этот плагин не знаю. Сам обмен никогда не настраивал.

  6. Viktor

    Александр, подскажите — а картинка только одна у вас выгружается из 1с на каждый товар? Решали ли вы как-то эту проблему? Вы пишете, что картинки из 1с удобнее не использовать, а делать их в админке сайта. Но у вас два сайта — получается нужно для каждого из них делать — не очень удобно должно быть.

Интеграция Woocommerce с 1С Интеграция Woocommerce с 1С Интеграция Woocommerce с 1С Интеграция Woocommerce с 1С Интеграция Woocommerce с 1С Интеграция Woocommerce с 1С
Плавное появление элементов на сайте
Рекомендации для васПлавное появление элементов на сайтеOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.