Вход • Регистрация

Синхронизация с 1С - как сохранить привязку Доп.Характеристик при частичной синхронизации

  • 29 февраля 2016 г.
  • Задача:
    Тяжелый каталог из 1С довольно долго выгружается на склад. При добавления одного товара к складу, приходиться перезаливать весь Каталог. Рациональней настроить несколько синхронизаций в 1С, каждая из которых заливала бы только одну категорию товара. Например только брюки, не перезаливая Рубашки и Галстуки
    ОДЕЖДА
    - Рубашки
    - Майки
    - Брюки
    У Брюки и Рубашек есть общая характеристика - Размер. Если перезалить только Брюки, то с ней перезаливается и Характеристика - Размер, у которой теряется связь с Майки, Рубашки. Если зайти в раздел Характеристики на сайте, то у Размер отмечена только одна категория - Брюки, о две другие слетели. Причем в карточке товара на сайте эта характеристика указана, только находясь в категории - Одежда к выбору по характеристикам видны только размеры от категории - Брюки. Нужно открывать карточку товара - из категории - Рубашки и пересохранить, тогда размеры рубашек тоже попадут в характеристику - Размер.
    После каждого частичного перезалива со всех категорий слетают все характеристики, кроме обновляемых. Можно еще каждую характеристику раскрыть и присвоить в ней значение "Категори"= Все. Но каждый раз это неудобно , например у меня более 50 характеристик по каталогу.

    Нашел участок кода, который по моему мнению может влиять на переписывания категорий у характеристик при синхронизации.
    Файл shop.1c.php
    Код:

    /**
    * Импорт дополнительных характеристик
    *
    * @return void
    */
    private function import_params($xml)
    {
    $property = array();
    if(isset($xml->Свойства->СвойствоНоменклатуры))
    {
    $property = $xml->Свойства->СвойствоНоменклатуры;
    }

    if(isset($xml->Свойства->Свойство))
    {
    $property = $xml->Свойства->Свойство;
    }

    foreach ($property as $xml_feature)
    {
    switch($xml_feature->ТипЗначений)
    {
    case 'Число':
    $type = 'numtext';
    break;
    case 'Справочник':
    $type = 'select';
    break;
    default:
    $type = 'text';
    break;
    }
    $row = DB::query_fetch_array("SELECT id, type FROM {shop_param} WHERE [name]='%h' LIMIT 1", $xml_feature->Наименование);
    $values = array();
    if(! $row)
    {
    $row["id"] = DB::query("INSERT INTO {shop_param} ([name], type) VALUES ('%h', '%s')", $xml_feature->Наименование, $type);
    $row["type"] = $type;
    if($type == 'select' && ! empty($xml_feature->ВариантыЗначений->Справочник))
    {
    $i = 1;
    foreach ($xml_feature->ВариантыЗначений->Справочник as $xml_s)
    {
    $values[strval($xml_feature->Ид)] = DB::query("INSERT INTO {shop_param_select} ([name], param_id, sort) VALUES ('%h', %d, %d)", $xml_s->Значение, $row["id"], $i++);
    }
    }
    }
    else
    {
    if($row["type"] == "multiple" && $type == 'select')
    {
    $type = 'multiple';
    }
    if($row["type"] != $type)
    {
    DB::query("UPDATE {shop_param} SET type='%s' WHERE id=%d", $type, $row["id"]);
    }
    if(($type == 'select' || $type == 'multiple') && ! empty($xml_feature->ВариантыЗначений->Справочник))
    {
    $i = 1;
    foreach ($xml_feature->ВариантыЗначений->Справочник as $xml_s)
    {
    if(! $sel_id = DB::query_result("SELECT id FROM {shop_param_select} WHERE [name]='%h' AND param_id=%d", $xml_s->Значение, $row["id"]))
    {
    $sel_id = DB::query("INSERT INTO {shop_param_select} ([name], param_id, sort) VALUES ('%h', %d, %d)", $xml_s->Значение, $row["id"], $i++);
    }
    $values[strval($xml_s->ИдЗначения)] = $sel_id;
    }
    }
    DB::query("DELETE FROM {shop_param_category_rel} WHERE element_id=%d", $row["id"]);
    }
    $row["values"] = $values;
    $this->cache["params"][strval($xml_feature->Ид)] = $row;
    }
    }

    /**
    * Импорт товаров

  • 29 февраля 2016 г.
  • И знающие товарищи без труда подскажут мне, как убрать сложный алгоритм присваивание выложенной характеристике категорий, соответствующих выкладываемым в эту сессию синхронизации товаров, а просто назначить выкладываемой Характеристике ВСЕ категории. Там где эта характеристика не используется, она все равно не видна в отборе, поэтому не так наверное важно иметь на сайте четкое соответствие состава - Характеристика + все категории где она используется.

    Спасибо, если кто сможет дочитать до конца и даже поможет.

Новости

  • Вчера, 09:47
  • В преддверии 2025 года была выпущена сборка 7.2.5, которая не приносит радикальных изменений в функциональности, но способствует повышению стабильности работы системы и расширению возможностей облачного сервиса для создания сайтов.
  • 18 июня 2024 г.
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля 2024 г.
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.