Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Ошибка выгрузки заказов из Битрикс в 1С

00 голосов
1

После кривых рук "суперпрограммистов" из подразделения Рарус возникла проблема, которую никак не могу решить...не выгружаются заказы с сайта

Что сделал для проверки процесса:

1. 1c_exchange.php?type=sale&mode=checkauth - success PHPSESSID ************** sessid=********************

2. 1c_exchange.php?type=sale&mode=init - zip=yes file_limit=204800

3. 1c_exchange.php?type=sale&mode=query

И вот тут возникает:

This page contains the following errors:

error on line 1 at column 7: XML declaration allowed only at the start of the document

Below is a rendering of the page up to the first error.

Я с таким не встречался никогда. Яндекс с Корпорацией Добра НИЧЕГО, связанного с Битрикс не отдают. В мануалах так и не нашёл - КАКОЙ файл отвечает за генерацию (шаблон XML)

Есть мысли у кого?

спросил 19 Янв, 16 от skyglider (340 баллов)
редактировать 19 Янв, 16 от skyglider

1 Ответ

+11 голос
Генерация инициализируется в компоненте /bitrix/components/bitrix/sale.export.1c/component.php, причём в связке с 1С компонент работает в 2х режимах - отдать заказы в xml и забрать информацию из 1С. Mode=query - это отдать заказы, вызывается метод CSaleExport::ExportOrders2Xml , который реализован в /bitrix/modules/sale/general/export.php

Одна из методик отладки - перед вызовом ExportOrders2Xml делаем ob_start, после вызова - $out = ob_get_flush();
ответил 19 Янв, 16 от root (25,590 баллов)
Спасибо за подсказку, где лежит метод!
Дальше...если я правильно понял рекомендацию, то в файле /bitrix/components/bitrix/sale.export.1c/component.php я подставляю в строку 258 ob_start (может всё-таки ob_start();?) и после завершения вызова (строка 263) - $out = ob_get_flush();...ТАК?
А вывод сведений? Где смотреть?
Вопрос
Собственно попробовал - но так и не понял...результаты где смотреть? На странице ничего не изменилось!
Ну, пример можно было найти в php справке по функции ob_get_flush().
Вот пример моего кода:

CTimeZone::Disable();
ob_start();
$arResultStat = CSaleExport::ExportOrders2Xml($arFilter, $nTopCount, $arParams["REPLACE_CURRENCY"], $bCrmMode, $arParams["INTERVAL"], $_SESSION["BX_CML2_EXPORT"]["version"]);
$xml = ob_get_flush();
$filename = $_SERVER['DOCUMENT_ROOT'].'/upload/1c_archive/orders/'.date('Y-m-d-H-s').'.xml';
file_put_contents($filename, $xml);
CTimeZone::Enable();
Просто СПАСИБО огромное!!!

Всё выгрузилось и тут стали возникать новые вопросы...

По непонятной мне причине разметка <?xml... начинается не с первого столбца, а с седьмого, как в ошибке и написано...НО...почему???

 Вот формирование заголовка файла из кода функции ExportOrders2Xml

        if ($crmMode)
        {
            echo "<"."?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n";

            $arCharSets = array();
            $dbSitesList = CSite::GetList(($b=""), ($o=""));
            while ($arSite = $dbSitesList->Fetch())
                $arCharSets[$arSite["ID"]] = $arSite["CHARSET"];
        }
        else
            echo "<"."?xml version=\"1.0\" encoding=\"windows-1251\"?".">\n";

Собственно ядро никто не трогал.

И при открытии сформированного xml  - нет нормальной табуляции структуры файла, т.е. отбивка строк слева как заблагорассудится...

Кстати...а может быть так, что на Битрикс 15.9 версия схемы 2.05?
Ошибка Битрикса - врядли. Почему с 7 столбца - надо искать, в каком из файлов в процессе выполнения перед включением PHP "<?" стоит табуляция или пробелы. Они выводятся перед xml шаблоном - и всё портят.
Где поискать:
- /bitrix/components/bitrix/sale.export.1c/component.php
- /bitrix/modules/sale/admin/1c_exchange.php
- /bitrix/admin/1c_exchange.php
- файлы в папке /bitrix/php_interface/
root, не знаю твоего имени, спасибо что помогаешь!

Смотри...

Если я выбираю режим query и это НЕ $crmMode, то происходит обращение к CSaleExport::ExportOrders2Xml и если я правильно понимаю код /bitrix/modules/sale/general/export.php, то echo "<"."?xml version=\"1.0\" encoding=\"windows-1251\"?".">\n"; является первой генерируемой HTML-разметкой в этой функции. Откуда могут браться эти лишние 6 символов?
Удалось разобраться? У меня похожая фигня, в начало xml файла стало добавляться три байта ef bb bf  - юникодный признак направления текста

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

0 голосов
1 ответ
спросил 19 Янв, 16 от skyglider (340 баллов)
+1 голос
1 ответ
0 голосов
1 ответ