Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

indaled

Новачок
  
  • Публікації

    47
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем indaled

  1. В 21.10.2018 в 21:22, vier сказал:

    нет такой возможности и не будет, так как практически в 40% есть ошибки, дубли по Значениям атрибутов в товарах, которые фильтр находит при генерации и их группировке, и показывает администратору сайта.

    а особенно их еще больше при импорте товара.

    отсюда вопрос - как их исправлять автоматически. - ответ - никак, только вручную.

    модуль заточен на контроль по ошибкам и дублям, которые никому не нужны, думаю, и Вам тоже.

    А жаль. Многим такой функционал жизненно необходим, скажем если бы была функция к которой можно было обратиться посредством cron - было бы супер.

  2. 20 часов назад, Tom сказал:

    Присвоить статус одинаковый и для заказа "в процессе" и для "завершённого" ?

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

    Вы не совсем поняли суть вопроса. Проблема в том что на последнем этапе оформления заказа (кнопка #button-confirm) не проводится верификация на наличие товаров находящихся в корзине к реальному наличию, соот-но если кто то оформлял заказ с вами параллельно, то вы можете заказать единицу которой в наличии реально нет.

    Проблему решил следующим образом (вдруг кому пригодится).

    1. Добавляем в контроллер используемого payment (по дефолту cod.php, но может быть и другой если настраивали оплату) в функцию confirm валидацию корзины условием выполнения. Соответственно должно получиться как то так:

    public function confirm() {
    	    if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
    			$redirect = $this->url->link('checkout/cart');
    			$json['redirect'] = $redirect;
    			$this->response->addHeader('Content-Type: application/json');
    		    $this->response->setOutput(json_encode($json));
    		}
            else {
        		if ($this->session->data['payment_method']['code'] == 'cod') {
        			$this->load->model('checkout/order');
        
        			$this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $this->config->get('cod_order_status_id'));
        		}
            }
    	}

    2. В tpl файле того же метода оплаты (в данному случае дефолтный cod.tpl) меняем ajax запрос с учетом проверки json на предмет наличия там условия редиректа в корзину:

    <div class="buttons">
      <div class="pull-right">
        <input type="button" value="<?php echo $button_confirm; ?>" id="button-confirm" class="btn btn-primary" data-loading-text="<?php echo $text_loading; ?>" />
      </div>
    </div>
    <script type="text/javascript"><!--
    $('#button-confirm').on('click', function() {
    	$.ajax({
    		type: 'get',
    		url: 'index.php?route=extension/payment/cod/confirm',
    		cache: false,
    		beforeSend: function() {
    			$('#button-confirm').button('loading');
    		},
    		complete: function() {
    			$('#button-confirm').button('reset');
    		},
    		success: function(json) {
    		    if(json['redirect']) {
    				location = json['redirect'];
    			}
    			else {
    			    location = '<?php echo $continue; ?>';
    			}
    		}
    	});
    });
    //--></script>

    Теперь при нажатии кнопки "подтверждение заказа" проходит еще одна валидация, которая не допустит проблемы с минусовым наличием.

  3. Добрый день! Вопрос на форуме поднимался пару раз но ответа так никто и не дал.

     

    Ситуация: 2 человека примерно в одно время добавляют товар с наличием 1шт в корзину. Даже если в настройках запрещено продавать товар с нулевым остатком они могут это сделать. Соответственно далее на этапе оформления заказа они опять таки оба (а их может быть и больше) могут купить этот товар. В итоге мы получаем наличие "-1 шт" и недостаток товаров на складе.

     

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

     

    Решение вижу в том чтобы при отправке заказа так же проверять весь список товаров на текущее наличие на складе.

     

    Вопрос простой: как быть!?

     

    Версия движка любая (ранее вопрос поднимался и про OS 1.5 и про 2.0, в моем случае 2.3)

  4. 27 минут назад, 19th сказал:

    я об этом и говорю, заходите на демо сайт http://19th19th.ru/related_options_2_demo/index.php?route=product/product&amp;product_id=40

    и переключаете между "два человека - синий" и "два человека - красный", видите что количество товара меняется, в зависимости от связки.

    related.gif

    Действительно, слона то я и не приметил)))

    Ну зато разобрался в системе таблиц и методологии работы модуля.

     

    Спасибо!

  5. Речь о том чтобы показывать именно наличие по конкретной связанной опции.

     

    В принципе практически допилил сам. Порядок действий примерно следующий:

    1. Вытаскиваем из таблицы oc_relatedoptions по полю product_id значения relatedoptions_id и quantity 

    2. Вытаскиваем из таблицы oc_relatedoptions_option связку relatedoptions_id с option_value_id

    3. При выводе опций в product.tpl из таблицы oc_product_option_value вытаскиваем 2 значения product_option_value_id (по умолчанию выводится в значениях опций) и option_value_id (чтобы сравнивать со значениями пункта 2). По индексу product_option_value_id сравниваем с тем что есть в опциях и записываем соответствующий option_value_id в опцию.

    4. Фронт часть на JS. Имея связку option_value_id от каждой опции и данные из п2. Определяем текущий relatedoptions_id (для конкретной выбранной связянной опции) и по нем подтягиваем quantity, которым в свою очередь заменяем стандартное поле opencarta.

     

    Не самый простой допил, но если очень приспичит, то можно)

  6. В 10.07.2018 в 16:49, dmitrycler сказал:

    Доброго времени суток. 

     

    Могу ли я как-то вывести указанное в админке количество для сочетания опций на странице товара? 

     

    Как можно получить вот эти цифры, подчёркнутые красным? 

    1.png

    Поддерживаю вопрос, очень нужно!

  7. Видимо я немного неправильно про доставку выразился: разумеется никакой карточки товара для нее не было, все шло по стандартному сценарию opencarta, доставка уходила в файл обмена уже на этапе формирования этого самого файла. Решение строго частное, для широкой массы оно не подойдет, тк сильно допиливали сторону 1С чтобы адекватно работало.

     

    Все что про модуль написано - в целом верно. Проблема в том, что альтернатив все равно нет :) У того же битрикса те же самые проблемы, у WP WOO вообще на пару порядков хуже дела обстоят, другие платформы я не знаю, но думаю что принципиально лучше дело нигде не обстоит.  Другие готовые плагины для OS тоже не блещут - везде куча косяков и постоянная альфа, только еще за деньги (причем немалые в ракурсе того, что это готовый модуль) и разработчику работать с ними сложнее чем с модулем Виталия.

     

    Модуль на данном этапе не для конечника, а для опытного разработчика, который готов долго и упорно пилить индивидуальные решения. Разумеется цена внедрений высока и далеко не каждый владелец готов их оплачивать :)

  8. 4 часа назад, IronMann сказал:

    Помогли бы тогда автору, допилить. :) А то уже два года с момента анонса прошло, а работам ни конца ни края не видно. Не операционная ведь система пишется, а шлюз данных. Месяца за три такие задачи решаются, при четкой постановке задачи.

     

    У меня, да и не только у меня, есть и знания 1С и знания PHP, но тут вопрос выбора - заниматься программированием, или коммерцией. На все сразу времени точно не хватит. При условии, разумеется, что перечисленное выше делается качественно.

     

    Далее, боюсь даже спрашивать - а как у вас с доставкой? Прямо заколдованный вопрос какой-то... Задаю его постоянно в теме разным участникам, после чего 95% из них пропадают из темы навсегда. Надеюсь, вы не пропадете, ответите? От чтения этой темы складывается ложное представление, что доставка для интернет-магазина нафиг никому не нужна и никто её не использует. Но за рамками этой темы, картина совершенно иная - большинство интернет-магазинов используют доставку. А 1С, в УНФ в частности, от релиза к релизу наращивает функционал по работе с доставкой.

     

    Я занимаюсь коммерческой индивидуальной разработкой и каждого клиента свои требования. Допилить модуль до конкретной задачи - сложно, но можно, намного сложнее сделать его общедоступным и применимым - тут моих навыков не хватит :) 

     

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

     

    PS в описании методологии возможна ошибка, файлов у меня нет, поэтому восстановил схему по памяти)))

     

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

  9. 14 часов назад, IronMann сказал:

    Вы просто ГЕРОЙ во всех отношениях. Говорю вам честно - удивлен, даже не верится, что такое может быть. Что у вас точно есть и не отнять - это железные нервы, если вы используете данный модуль на своей рабочей базе.

    Я использую модуль на нескольких рабочих сайтах и у всех все прекрасно работает. Вопрос в том что на данный момент это не готовый модуль а по сути такой себе фреймворк который без допилов малопригоден :-D

    Но если у Вас есть минимальные знания в PHP и 1С то никаких проблем допилить..

  10. Всем привет!

     

    Есть решение адекватное по связанным опциям?

     

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

     

    Мб кто делал с модулем "связанные опции"? Если требуется например только наличие и цену обновлять, сработает ли синхронизация опция->товар (по артикулу), если у каждой опции свой артикул, а в 1С каждый товар отдельно с соот-им артикулом.

  11. В 19.09.2017 в 15:14, indaled сказал:

     

    Удалось решить вопрос с прикреплением файлов, но вот на 2й тяму не хватает))))

     

    Сейчас исходные данные такие:

    В 1с добавил поля для сопутствующих товаров и прилепил их к CML в следующем виде:

      <Сопутствующие>
         <СопутствующийТовар Ид="45750b07-8e23-11e7-80ed-f079596a53f8"/>
         <СопутствующийТовар Ид="c8e473d2-8e24-11e7-80ed-f079596a53f8"/>
        </Сопутствующие>

    те имеем Guid которые нужно преобразовать в id товара из `oc_product` и записать в `oc_product_related` в формате id (товара) => id (сопутствующего товара). 

    Моих скудных знаний в php к сожалению не хватает не сие простейшее действие.

    Более того, данные должны еще и обновляться. Единственный более менее адекватный вариант который мне видится - очищать  `oc_product_related` перед каждой выгрузкой и перезаписывать заново.

     

    Вообщем прошу помощи :)

     

    удалось частично решить вопрос, в private function parseProducts($xml, $classifier) дописал вот такой код:

    // Сопутствующие
    if ($product->Сопутствующие) {
    	$data['related'] = array();
    	$data['related'] = $product->Сопутствующие;
    	$el='';
    	foreach($data['related']->СопутствующийТовар as $el)
    		{	
    			$this->query("INSERT INTO `oc_product_related` SET `product_id` = '" . $this->getProductIdByGuid($product->Ид) . "', `related_id` = '" . $this->getProductIdByGuid($el['Ид']) . "'");
    		}
    }

    В целом все вроде работает, сопутствующие товары добавляются, но после этой вставки начала происходить какая то вакханалия, некоторые товары перестали попадать в выгрузку без объяснения причин. Подозреваю что пользоваться getProductByGuid таким варварским способом нельзя. Так же не могу придумать в какое место запихать запрос на очистку таблицы oc_product_related. Очень хочу помощи, мои знания PHP не дают довести до ума :( 

  12. Виталий, доброго вечера! 

     

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

  13. 2 часа назад, Shkodich сказал:

    Всем добрый день!

    Подскажите, у кого как реализованы акции на товар в 1С? 

    На сайте нужно отобразить у товара две цены, одна основная цена и вторая цена со скидкой, т.е. выгружается два типа цен.

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

    Можно ли как-то по другому отправлять цены? Типа если на сайте была цена 6 и стала 5 (изменилась в меньшую сторону), то ее отображать как цену со скидкой?

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

    Реализовал на 2 сайтах, создав 2 вида цен в 1С и определив один как основной, а второй как акционный. Вроде проще некуда :)

    • +1 1
  14. В 15.06.2017 в 23:47, indaled72 сказал:

    Добрый день,

    Версия модуля 1.6.3.11
    Версия ocStore 2.1.0.2.1

    CML 2.04

     

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

    Заранее предупреждаю, что данные решения не являются панацеей и удовлетворяют сугубо мои потребности.

     

    и так поехали:

    1. Проблема с обновлением картинок

    У меня проблема заключается в том что новые фотографии отправляемые из 1с имеют то же имя, но другое содержимое.

    А участок кода проверял существует ли уже эта картинка, если существует идем дальше, а мне нужно заменить!

    ( в файле admin/controller/module/excenge1c.php строка 1919)

      Показать контент
    
    
              if (is_file(DIR_IMAGE.$name)) {
                //$this->log('[zip] file exist: '.$name, 2);
             } else {
                $dump = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    
                // для безопасности проверим, не является ли этот файл php
                $pos = strpos($dump, "<?php");
    
                if ($pos !== false) {
                   $this->log("[!] ВНИМАНИЕ Файл '" . $name . "' является PHP скриптом и не будет записан!");
    
                } else {
    
                   if (file_exists(DIR_IMAGE . $name) && $this->config->get('exchange1c_product_images_import_mode') != 'full') {
                      return "";
                   }
                   $fd = @fopen(DIR_IMAGE . $name, "w+");
    
                   if ($fd === false) {
                      return "Ошибка создания файла: " . DIR_IMAGE.$name . ", проверьте права доступа!";
                   }
    
                   //$this->log('[zip] create file: '.$name, 2);
                   fwrite($fd, $dump);
                   fclose($fd);
    
                   // для безопасности проверим, является ли этот файл картинкой
    //             $image_info = getimagesize(DIR_IMAGE.$name);
    //             if ($image_info == NULL) {
    //                $this->log("[!] ВНИМАНИЕ Файл '" . $name . "' не является картинкой, и будет удален!");
    //                unlink(DIR_IMAGE.$name);
    //             }
                }
             }

     

    Тогда я убрал условия проверяющее наличие картинки, теперь модуль принудительно записывает полученные картинки, даже если они существуют.

    Возможно оптимизацией тут не пахнет, стоит сделать проверку хотя бы по размеру файла, если совпадает имя и размер, пропустить обновление.

     

      Показать контент
    
    
             $dump = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    
             // для безопасности проверим, не является ли этот файл php
             $pos = strpos($dump, "<?php");
    
             if ($pos !== false) {
                $this->log("[!] ВНИМАНИЕ Файл '" . $name . "' является PHP скриптом и не будет записан!");
    
             } else {
    
                if (file_exists(DIR_IMAGE . $name) && $this->config->get('exchange1c_product_images_import_mode') != 'full') {
                   return "";
                }
                $fd = @fopen(DIR_IMAGE . $name, "w+");
    
                if ($fd === false) {
                   return "Ошибка создания файла: " . DIR_IMAGE.$name . ", проверьте права доступа!";
                }
    
                //$this->log('[zip] create file: '.$name, 2);
                fwrite($fd, $dump);
                fclose($fd);
    
                // для безопасности проверим, является ли этот файл картинкой
    //             $image_info = getimagesize(DIR_IMAGE.$name);
    //             if ($image_info == NULL) {
    //                $this->log("[!] ВНИМАНИЕ Файл '" . $name . "' не является картинкой, и будет удален!");
    //                unlink(DIR_IMAGE.$name);
    //             }
             }

     

    2. Не обновляются наименование товара и описание товара

    Я решил это следующим путем:

    Добавил два условия в admin/model/tool/exchenge1c

    в функцию private function updateProduct($data)

    Сразу после "// КОНЕЦ ФИЛЬТРА"

    строка 2555

     

      Показать контент
    
    
    // Записываем новое наименование товара
    if (isset($data['name'])) {
        $this->updateProductName($data['name'], $data['product_id']);
        if ($this->ERROR) return false;
    }
    
    // Записываем новое описания товара
    if (isset($data['description']))  {
        $this->updateProductDescription($data['description'], $data['product_id']);
        if ($this->ERROR) return false;
    }

     

    Добавил 2 функции в admin/model/tool/exchenge1c
    После функции updateProductAttributes()

    в строку 3707
     

      Показать контент
    
    
    /**
     * Обновляет наименование товара
     */
    private function updateProductName($name, $product_id) {
    
        // Проверяем
        $query = $this->query("SELECT `name` FROM `" . DB_PREFIX . "product_description` WHERE `product_id` = " . $product_id . " AND `language_id` = " . $this->LANG_ID);
        // Проверим значение и обновим при необходимости
        if ($query != $name) {
            $this->query("UPDATE `" . DB_PREFIX . "product_description` SET `name` = '" . $this->db->escape($name) . "' WHERE `product_id` = " . $product_id . " AND `language_id` = " . $this->LANG_ID);
            $this->log("Наименование товара обновлено'" . $this->db->escape($name) . "' = '" . $this->db->escape($name) . "' записано в товар id: " . $product_id, 2);
        }
        unset($query);
    } // updateProductName()
    
    /**
     * Обновляет описание товара
     */
    private function updateProductDescription($description, $product_id) {
    
        // Проверяем
        $query = $this->query("SELECT `description` FROM `" . DB_PREFIX . "product_description` WHERE `product_id` = " . $product_id . " AND `language_id` = " . $this->LANG_ID);
        // Проверим значение и обновим при необходимости
        if ($query != $description) {
            $this->query("UPDATE `" . DB_PREFIX . "product_description` SET `description` = '" . $this->db->escape($description) . "' WHERE `product_id` = " . $product_id . " AND `language_id` = " . $this->LANG_ID);
            $this->log("Наименование товара обновлено'" . $this->db->escape($description) . "' = '" . $this->db->escape($description) . "' записано в товар id: " . $product_id, 2);
        }
        unset($query);
    } // updateProductDescription()

     

     

    попробуйте это, должно вылечить

    • +1 2
  15. 2 часа назад, uvers сказал:

    это из-за SEO. Не правильно сгенерировалась ссылка

    Можно подробнее, у меня тоже такая проблема, SEO модуля не стоит.

     

    Ошибку выдает везде где значится unit_id и тп колонки из этой таблицы в БД.

     

    2 часа назад, Alexander16795 сказал:

     

    поставил на чистый opencart, в модулях стал устанавливаться, выгрузка товаров из класс365 работает на отлично, но загрузку заказов проверить не могу,  корзина на сайте перестала работать, нельзя в корзину ничего отправить, может кто знает что нужно сделать

    viber-image.jpg

     

    У меня такая же проблема в 12 версии. Как решить глобально не придумал, но смог сделать временную заплатку:

    В файле system/storage/modificator/catalog/checkout/cart.php в районе 354 строчки нужно удалить аргумент unit_id.

    Корзина начинает работать, однако при обновлении модификаторов все ломатется вновь.

  16. В 20.06.2017 в 20:28, DjPrizrak сказал:

    Спасибо Виталию за проделанную работу, вижу что обновления делаются быстро, поэтому понятное дело встречаются ошибки.

    Версия 12 что бы установилась на 2.3, нужно поправить такие строки.

     

    admin\controller\extension\module\exchange1c.php

    найти $this->module_extension__exchange1c->installUnits();
    заменить на $this->model_extension_exchange1c->installUnits();

     

    admin\model\extension\exchange1c.php

    найти $result = @$this->db->query("ALTER TABLE  `" . DB_PREFIX . "unit_to_1c` CHANGE `code` `number_code` INT(4) DEFAULT 0`");
    заменить на  $result = @$this->db->query("ALTER TABLE  `" . DB_PREFIX . "unit_to_1c` CHANGE `code` `number_code` INT(4) DEFAULT 0");

    найти $result = @$this->db->query("ALTER TABLE  `" . DB_PREFIX . "unit_to_1c` CHANGE `fullname` `full_name` VARCHAR(50) DEFAULT ''`");
    заменить на $result = @$this->db->query("ALTER TABLE  `" . DB_PREFIX . "unit_to_1c` CHANGE `fullname` `full_name` VARCHAR(50) DEFAULT ''");

     


×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.