Не импортируются цены при автообмене через модуль Битрикс Принято

1

Добрый день, тестируем вашу платформу для запуска

интернет-магазина. К сожалению, отметили следующую ошибку.

Имеем: УТ Проф 10.3.45.4 (платформа: 8.2.19.130), модуль обмена 1С-Битрикс 6.5.0.1. Версия Webasyst 1.8.3.219, версия плагина «1С(CommerceML)» 2.5.2.66.

Стандартный модуль обмена УТ 10.3 не выгружает остатки по складам, только общий остаток, и не поддерживает настройки выгрузки доп. полей (например, чтобы поле «Комментарий» выгружалось в элемент «Краткое описание»). Поэтому было решено задействовать модуль обмена Битрикс.

Настроили по инструкции (см. результат по ссылке).

http://prntscr.com/j3pomf

После ручного обмена корректно выгружается все (см. ссылку).

http://prntscr.com/j3pp8v

Но, затем, при автоматическом обмене, обновляется вся информация, кроме цен (см. ссылку Для наглядности, удалил все товары и выполнил обмен. Как видно, импортировалось все, кроме цен).

http://prntscr.com/j3ppiv

Проблема именно на стороне ShopScript, так как, в файлах выгрузки цены присутствуют и при ручном импорте обновляются.

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

  • +1
    Михаил Ушенин Михаил Ушенин Webasyst 11 апреля 2018 12:51 #

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

    Если вы не выбрали соответствие типов цен при ручном импорте, это должно быть видно на вкладке "Синхронизированные параметры". В таком случае очистите содержимое этой вкладки и заново импортируйте файлы вручную, но в этот раз выберите соответствие типов цен. В последующих сессиях автоматического обмена выбранное вами соответствие будет использоваться для обновления значений цен из файлов.

    • +1
      Сергей Владимиров Сергей Владимиров 12 апреля 2018 10:00 #

      Цитата: «Во время ручного импорта файлов нужно выбрать соответствие типов цен из файла типам цен интернет-магазина. Если вы сделали это, то на вкладке "Синхронизированные параметры", часть содержимого которой вы показали на снимке, должно быть указано соответствие типов цен.»

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

      Покажу настройку плагина по шагам.

      1. сначала смотрим в файл выгрузки, чтобы узнать идентификаторы 1С для типов цен (http://prntscr.com/j44mub), и подставляем полученные значения в соотв. поля настроек плагина (http://prntscr.com/j44naz). Сохраняемся.

      2. удаляем синхронизированные параметры (http://prntscr.com/j44qfq).

      3. переходим к ручному обмену, выбираем «Экспертный уровень настроек» и начинаем процесс «Анализ и импорт файлов CommerceML в бекенде Shop-Script».

      4. анализируем первый файл import (http://prntscr.com/j44s2l). Выставляем соответствие складов и цен. Сохраняем и импортируем (http://prntscr.com/j44sft).

      5. анализируем второй файл import (каталог товаров, http://prntscr.com/j44t2h). Здесь выставляем соответствие дополнительных полей 1С («Описание» и «Краткое описание»). Сохраняем и импортируем (http://prntscr.com/j44tkx).

      6. анализируем файл offers (http://prntscr.com/j44wjv) и выставляем соответствие характеристик. Сохраняем и импортируем (http://prntscr.com/j44ww4).

      7. анализируем файл prices (http://prntscr.com/j44xgu). Сохраняем и импортируем (http://prntscr.com/j44xvq).

      8. анализируем файл rests (http://prntscr.com/j44yc9). Сохраняем и импортируем (http://prntscr.com/j44z4x).

      9. смотрим на вкладку «Синхронизированные параметры» (http://prntscr.com/j44zn8). Убеждаемся, что соответствие типов цен там не отображается, так как оно настраивается во вкладке «Настройки обмена» (http://prntscr.com/j450eq), как и предписывает ваша инструкция (http://prntscr.com/j450og).

      10. переходим на вкладку «Товары» и убеждаемся, что все импортировалось (цены, остатки, характеристики, http://prntscr.com/j4524j).

      11. удаляем все товары (http://prntscr.com/j452ow).

      12. выполняем автоматическую выгрузку из 1С на сайт (http://prntscr.com/j453rh). Обратите внимание на время выгрузки.

      13. смотрим на результат на сайте (http://prntscr.com/j455nl). Убеждаемся, что импортировалось все, кроме цен.

      14. заходим в «Журнал изменений остатков» и смотрим на время (http://prntscr.com/j45643). Оно совпадает со временем экспорта из 1С.

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

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 12 апреля 2018 11:43 #

        Спасибо за подробное и последовательное описание со снимками экрана! Все бы так...

        Возможно, ваша "1С" отправляет в магазин в автоматическом режиме не те же самые данные, которые вы экспортируете оттуда вручную. Чтобы проверить это, в файле wa-apps/shop/plugins/cml1c/lib/actions/frontend/shopCml1cPluginFrontend.controller.php после фрагмента

        if ($sp = fopen('php://input', 'rb')) {
            $filename = $this->plugin()->path(waRequest::get('filename', 'upload'));
            if ($fp = fopen($filename, "ab")) {
                $result = stream_copy_to_stream($sp, $fp);
            } else {
                throw new waException("Error while open target file");
            }
        } elseif (isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
            if (!empty($GLOBALS['HTTP_RAW_POST_DATA'])) {
                $filename = $this->plugin()->path(waRequest::get('filename', 'upload'));
                $result = waFiles::write($filename, $GLOBALS['HTTP_RAW_POST_DATA']);
            } else {
                throw new waException("Error while read POST file");
            }
        } else {
            throw new waException("Error while read POST file");
        }

        добавьте

        copy($filename, wa()->getConfig()->getPath('log').'/cml1c-debug.zip');

        И повторите автоматический обмен. После этого в директории wa-log/ должна появиться копия ZIP-файла, который "1С" отправляет в интернет-магазин во время автоматического обмена.

        Скачайте этот архив и распакуйте его на своём компьютере. Затем вручную импортируйте распакованные файлы в Shop-Script и посмотрите, импортируются ли цены.

        • Если цены не обновятся после ручного импорта распакованных файлов, проверьте наличие информации о ценах товаров в распакованных файлах:
          • Если цен в файлах нет или если они указаны в другом формате, думаю, что вам придётся уточнить подробности у вашего консультанта по "1С". Плагин ожидает, что формат данных, полученных в ручном и автоматическом режимах, должен полностью совпадать.
          • Если цены в распакованных файлах указаны точно так же, как и в файлах, полученных из "1С" ручным экспортом, но всё равно не обновились, то пришлите в службу поддержки а) файлы, полученные из "1С" вручную, и б) файлы, распакованные из отладочного архива. Возможно, файлы всё-таки чем-то отличаются, но вы этого не заметили. Мы это у себя проверим.
        • Если цены обновятся после ручного импорта распакованных файлов, то придётся подробно логировать работу плагина по FTP в рамках расширенной диагностики. Значит, плагин, по крайней мере, в вашем случае по-разному ведёт себя при ручном и автоматическом обменах данными при получении одних и тех же данных.

        Расширенная диагностика платная — 1000 руб. В случае обнаружения ошибок в логике работы наших продуктов или в наших инструкциях вся сумма полностью вам возвращается. Если вы не получаете понятного вам объяснения результатов диагностики, то тоже получаете всю сумму обратно.

        Более подробно о платной диагностике и других дополнительных услугах.

        Заказать диагностику в Центре заказчика.

        • +1
          Сергей Владимиров Сергей Владимиров 13 апреля 2018 09:34 #

          Итак, проделал предложенное. К сожалению, ваш код сохраняет копию только последнего импортируемого файла, а именно rests_*.xml. Поэтому слегка его модифицировал, чтобы получить все выгружаемые на сайт файлы:

          $randInt = rand();
          copy($filename, wa()->getConfig()->getPath('log').'/cml1c-debug-'.$randInt.'.zip');

          Получил 7 файлов. Импортировал вручную, все корректно, цены загрузились.

          Сравнил файлы через Notepad++ (плагин Compare), как и предполагалось, различия только в дате формирования файла (результат сравнения). В предложениях отличий нет (например).

          Таким образом, считаю, что предоставленных данных достаточно, чтобы сделать вывод о некорректной работе плагина "1C (CommerceML)" при автообмене через модуль обмена Битрикс.

          Что касается расширенной платной диагностики, то платить за ошибки разработчиков я не намерен. Готов оказать посильную помощь бесплатно. Исправите, будем рассматривать ваш сервис дальше, нет - конкурентов достаточно.

        • +1
          Михаил Ушенин Михаил Ушенин Webasyst 13 апреля 2018 14:40 #

          Уточните, пожалуйста, для чего вы удаляете импортированные вручную товары, прежде чем обновлять их автоматически. Только ради проверки, или у вас планируется выполнять такие операции в работе магазина? Проверяйте работу плагина в том режиме, в котором планируете его использовать.

          И проверьте, чтобы ваша "1С" отдавала файлы в том же порядке, который рекомендован в нашей инструкции. Порядок импорта файлов важен.

          • +1
            Сергей Владимиров Сергей Владимиров 15 апреля 2018 09:34 #

            Импортированные вручную товары я удаляю только для более наглядной проверки. Но, даже если их не удалять, а просто установить новые цены через "Установки цен номенклатуры" и затем выгрузить на сайт, цены на сайте не обновляются, хотя в файле prices изменения отражены.

            Проверил порядок выгрузки файлов из 1С на сайт. Действительно, он не соответствовал рекомендованному в инструкции. Так как, кроме необходимых выгружались ещё дополнительные справочники свойств и характеристик. Исправил соответствующую настройку обмена в 1С. Убедился, что выгрузка идет в нужном порядке.

            После этого, удалил все товары, все синхронизированные параметры, и настроил обмен заново.

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

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

            Проверил работу встроенного механизма обмена с сайтом в УТ 11.4. Он выгружает в 2 файла, в том числе и остатки по складам. Все импортируется корректно, но не позволяет настраивать дополнительные поля. Так что, снова упираемся в необходимость модуля обмена Битрикс.

            Таким образом, на сегодняшний день плагин "1С (CommerceML)" реализует только самый простой вариант обмена, используемый в 1С по умолчанию. Более сложные варианты с использованием модуля обмена Битрикс неработоспособны.

            • +1
              Михаил Ушенин Михаил Ушенин Webasyst 16 апреля 2018 09:21 #

              Спасибо, будем проверять работу плагина с вашими файлами. Либо дополнительно напишем вам здесь, либо просто выпустим обновление с исправлением. Пока что вы — первый пользователь, который обратился с такой проблемой.

            • +1
              Михаил Ушенин Михаил Ушенин Webasyst 16 апреля 2018 14:08 #

              Попробуйте ещё использовать вот такую схему для импорта дополнительных полей:

              • используйте "1С:Управление торговлей" 11.4
              • настройте дополнительные поля в "1С"
              • при ручном импорте файлов, экспортированных из "1С", выберите экспертный режим и настройте соответствие для нестандартных реквизитов, добавленных в "1С"
              • +1
                Сергей Владимиров Сергей Владимиров 17 апреля 2018 10:53 #

                Процитирую самого себя:

                Проверил работу встроенного механизма обмена с сайтом в УТ 11.4. Он выгружает в 2 файла, в том числе и остатки по складам. Все импортируется корректно, но не позволяет настраивать дополнительные поля. Так что, снова упираемся в необходимость модуля обмена Битрикс.

                Настроить доп. поля во встроенном модуле обмена 1С (в том числе и в УТ 11.4) невозможно. Там просто нет этих настроек. Они есть в модуле обмена Битрикс. Установил модуль Битрикс в УТ 11.4, настроил, ситуация с УТ 10.3 повторилась в точности. При ручном обмене все выгружается корректно, при автообмене - все, кроме цен.

              • +1
                Михаил Ушенин Михаил Ушенин Webasyst 19 апреля 2018 09:36 #

                Покажите, пожалуйста, настройки плагина на снимке экрана.

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

                • +1
                  Сергей Владимиров Сергей Владимиров 19 апреля 2018 11:03 #

                  Снимок настроек плагина.

                  Удалил все настройки и синхронизированные параметры. Сделал ручной обмен и все необходимые настройки заново. Затем удалил товары и сделал автообмен. Записи появились только в логах плагина "1С(CommerceML)", в других логах записей не добавилось.

                  report.log

                  error. log

                  Время выполнения ручного обмена и настройки: с 10.35 до 10.40, автоматического обмена: с 10.44 до 10.47.

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

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