Задать вопрос
@photosho

Где в Bitrix лог обмена заказами с 1С?

Где в Bitrix можно посмотреть лог обмена заказами с 1С? Интересует именно передача заказов из 1С на сайт.
  • Вопрос задан
  • 9460 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
sabramovskikh
@sabramovskikh
По заказам на странице /bitrix/admin/sale_exchange_log.php?lang=ru
По конкретному заказу - в просмотре заказа вкладка "История изменений". Там можно узнать по пользователю, который выполняет обмен что было изменено. (для обмена лучше завести отдельного пользователя)
XML хранится в папке upload/
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега 1С-Битрикс
гыгы, ответ "нигде", и возможности его включить нет.
Ждем в релизах ;)
Ответ написан
@AndreyS411
Добрый день.

Решал такую проблему нижеописанным способом. Нужно было поймать за руку 1С'ника, который утверждал что выгружает всё как положено.

Можно получить все обмены, к примеру, таким образом: создать событие "OnEndBufferContent" с обработчиком "save1CExchangeToFile" в init.php. В обработчике проверять User Agent на соответствие 1C. В случае успешной проверки:
- сохранить запрос 1С
- сохранить ответ сайта на запрос 1С
- сохранить файлы присланные 1С

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

Единственное не помню почему используется при формировании $filename функция str_replace слешей. Вероятно, когда тестировал это, то 1С разносила файлы по подпапкам. Сейчас такого не встречается, но лучше оставить.

В init.php:
use Bitrix\Main\Application,
          Bitrix\Main\Diag\Debug,
          Bitrix\Main\EventManager;

    #...

    EventManager::getInstance()->addEventHandler('main', 'OnEndBufferContent', 'save1CExchangeToFile');

    function save1CExchangeToFile(&$content)
    {
        if (php_sapi_name() == 'cli') {
            return false;
        }

        $requestHeaders = getallheaders();
        $is1CRequest = strpos($requestHeaders['User-Agent'], '1C+Enterprise/') !== false;

        if ($is1CRequest) {
            $docuemntRoot = Application::getDocumentRoot();
            $request = Application::getInstance()->getContext()->getRequest();

            # запись запроса 1С и ответа Bitix в файл
            Debug::writeToFile(
                [
                    'request' => [
                        'get' => $request->getQueryList()->toArray(),
                        'post' => $request->getPostList()->toArray()
                    ],
                    'response' => $content
                ],
                date('Y-m-d H:i:s'),
                '__bx_log_1c_exchange_' . date('Y-m-d') . '.log'
            );


            # сохранить файл пришедший из 1С
            $filePath = '';
            if ($fileName = trim(str_replace('\\', '/', $request->get('filename')), '/')) {
                if ($request->get('type') === 'catalog') {
                    $filePath = $docuemntRoot . '/upload/1c_catalog/' . $fileName;
                } elseif ($request->get('type') === 'sale') {
                    $filePath = $docuemntRoot . '/upload/1c_exchange/' . $fileName;
                }

                if ($filePath) {
                    if (file_exists($filePath)) {
                        $c1FileCopyPath = $docuemntRoot . '/upload/1c_catalog_xml_copy/' . $fileName;
                        $c1FileCopyDir = dirname($c1FileCopyPath);
                        if (! is_dir($c1FileCopyDir)) {
                            mkdir($c1FileCopyDir, 0755, true);
                        }

                        if (! copy($filePath, $c1FileCopyPath)) {
                            Debug::writeToFile(
                                [
                                    'error' => error_get_last()
                                ],
                                date('Y-m-d H:i:s'),
                                '__bx_log_1c_exchange_copy_err_' . date('Y-m-d') . '.log'
                            );
                        }
                    } else {
                        Debug::writeToFile(
                            [
                                'dir' => dirname($filePath),
                                'files' => scandir(dirname($filePath))
                            ],
                            date('Y-m-d H:i:s'),
                            '__bx_log_1c_exchange_copy_error-exists_' . date('Y-m-d') . '.log'
                        );
                    }
                }
            }

        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы