1с битрикс ошибка при открытии файла

  • Ошибки на стороне веб-сервера
  • Ошибки при работе с файлами данных
  • Проблемы авторизации
  • Ошибки MySQL
  • Логические ошибки
  • Диагностика отладки
    • Отладка обмена на стороне 1С-Битрикс
    • Модуль отладки обмена от ИНТЕРВОЛГИ
  • Выводы

Настроить обмен между «1С» и «1С-Битрикс» интернет-магазина или сайта – не проблема. Эта функция присутствует «из коробки» начиная с ранних версий продуктов «1С:Предприятие», редакция Управление торговлей и «1С-Битрикс: Управление сайтом» в редакциях Малый бизнес и Бизнес.

Даже с учётом имеющейся документации по продукту, у многих разработчиков сайтов возникают сложности в корректной настройке обмена данными между этими системами. Рассмотрим самые частые проблемы, которые возникают у тех кто пытался.

Мы выделили несколько групп ошибок:

  • проблемы авторизации;
  • ошибки на стороне сервера;
  • ошибки при работе с файлами данных;
  • ошибки MySQL;
  • логические ошибки.

Далее мы детально рассмотрим сами ошибки и способы их исправления.

Ошибки на стороне веб-сервера

К этой группе относятся ошибки, возникающие в подсистемах веб-сервера, отвечающих за выполнение PHP-кода. Обычно это: Nginx, Apache и сам интерпретатор языка PHP.

Возможны 2 варианта:

  • Ошибка действительно вызвана неоптимальными настройками Nginx/Apache/PHP. Если Вы чувствуете неуверенность в своем веб-сервере или совсем недавно на него переехали — привлеките администратора для проверки и изменения настроек.
Название ошибки Как исправить
Failed sending data to the peer (no headers, no data)‏.
  1. Увеличить значения параметров max_execution_time и memory_limit. в файле php.ini
  2. Перезагрузить сервер.
  3. Повторить выгрузку.
Получен пустой ответ сервера.
Ошибка нехватки памяти, например выводится сообщение: Fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 102401…)‏. Проверить настройку memory_limit в php.ini. Должно быть указано не менее 512Mb, увеличить значение и перезагрузить сервер. Или не изменяя настройки сервера сделать равным таймаут сервера и таймаут «1С-Битрикс: Управление сайтом» (страница Магазин > Настройки магазина > Интеграция с 1С, поле Интервал одного шага в секундах). Если проблема с нехваткой памяти, данное решение не подойдёт.
  • Подобная ошибка может маскировать либо некорректную настройку объема одной порции загружаемых данных (10К товаров за раз, например), либо логическую ошибку в программном коде (например, пересчет каких-нибудь значений в товарах по событию изменения).

Способы решения:

  1. уменьшать объем передаваемых за раз данных (проверить на 1 товаре, но лучше выставлять значение поочередно, 1, 100, 1000, 10000 и смотреть, какое значение оптимально для ваших настроек);
  2. временно закомментировать обработчики событий в файле /bitrix/php_interface/init.php, может быть они мешают обмену.

Ошибки при работе с файлами данных

Данные ошибки возникают при неверной настройке прав доступа к файлу. Отображение ошибок звучит следующим образом: «Ошибка открытия файла» и «Ошибка записи файла». Возможные причины и их решение:

Название ошибки Как исправить

Закончилось место на диске.

Удалить старые бэкапы или увеличить тариф на хостинге.

По ftp файлы загружаются, а через веб-интерфейс административного раздела сайта нет.

Обратиться в техническую поддержку хостинг-провайдера.

Не работает или некорректно работает сжатие данных при обмене.

Для начала можно попробовать выключить сжатие в настройках модуля обмена.

Также можно проверить работу функции zip_open на сервере

Откройте в браузере страницу http://<ваш_сайт>//bitrix/admin/phpinfo.php (Либо выполните команду

if (exist_function (“zip_open”)){ echo “OK”; }

В браузере отобразится таблица:

Для строки ZIP должно стоять «enabled».

Проблемы авторизации

Самая распространённая проблема, если пользователь не указал данные или указал их неверно.

Название ошибки Проблема / как исправить

«Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль, а также настройки подключения к Интернет».

На сервере 1С установлено ПО, которое блокирует исходящие соединения, в этом случае при попытке обмена выдаётся ошибка. Исправляется добавлением адреса сайта в белый список ПО.

«Авторизация не выполнена.

Не удалось установить соединение с сервером. Проверьте имя пользователя и пароль».

Неверно указаны логин/пароль доступа к сайту.

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

И проверить наличие редиректов при переходе по ссылке, например на https версию сайта.

Если по ссылке

http:// адрес сайта /bitrix/admin/1c_exchange.php

появляется сообщение, значит с логином и паролем всё в порядке.

Ошибки MySQL

Ошибки возникают при соединении с базой данных MySQL, настроенной на сайте.

Название ошибки Проблема / как исправить

[Illegal mix of collations (russian_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation ‘=’]

Конфликт кодировок. Причина ошибки — таблицы базы данных в одной кодировке, а сам база в другой. В данном случае база в russian и новые таблицы создаются в не russian. При выгрузке из «1С» создается временная таблица b_xml_tree в «некорректной» кодировке russian.

Логические ошибки

Ошибки пользователей неверно понимающих процесс обмена данными и, соответственно, неверно выполняющих какие-то действия.

Название ошибки Проблема / как исправить

Несовместимые версии модуля обмена и базовой конфигурации 1С.

Проверить на официальном сайте “1С-Битрикс” соответствие версий продуктов.

Если версии не совпадают, переустановить модуль обмена на стороне 1С

«Изменения товаров не зарегистрированы. Выгрузка товаров не произведена».

Неверно настроен отбор товаров в модуле обмена. Надо проверить эти настройки. Скорей всего, выбраны параметры, которые не позволяют правильно отфильтровать параметры для выгрузки.

Также это сообщение выдаётся, если если в настройках Режима обмена данными с WEB-сайтом установлено: Выгружать только измененные объекты с момента последнего обмена. В этом случае это не ошибка, а выгрузки не произошло, потому что данные со стороны 1с не были изменены.

«Не удалось найти вид номенклатуры».

Ошибка появляется, если в «1С» нет видов номенклатуры «Услуга» и «Товар». Эти виды критичны для процесса обмена данными с сайтом. Решение – создать в «1С» указанные виды номенклатуры.

«Поле объекта не обнаружено».   

Не указаны соответствия для полей заказа в «1С-Битрикс: Управление сайтом». Проверьте настройки, заданные в закладке Экспорт в «1С:Предприятие» страницы Настройки > Настройки продукта > Настройки модулей > Интернет-магазин. Два поля «Полное Название» и «Название» критичны для 1С. Если их не задать, экспорт выполняться не будет. Настройка соответствий для разных типов плательщиков производится отдельно.

Данные выгружаются на сайт, но не обновляются.

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

Диагностика отладки

Мы применяем два инструмента отладки обмена между 1С и 1С-Битрикс.

Отладка обмена на стороне 1С-Битрикс

При настройке выгрузки необходимо проверить существование папки /upload/1c_catalog/. В эту папку будут загружаться файлы при обмене.

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

Включить «режим отладки» можно отредактировав файл dbconn.php. А именно, создать константу такого вида: define(«BX_CATALOG_IMPORT_1C_PRESERVE», true).

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

Модуль отладки обмена от ИНТЕРВОЛГИ

Для упрощения диагностики мы создали модуль отладки обмена.

Он встраивается между 1С и 1С-Битрикс и пишет логи того, что происходит при обмене. По этим логам можно выяснить, где ошибка и исправить её. Отображение логов происходит в административной части сайта.

Модуль отладки обмена от ИНТЕРВОЛГИ лучше логов со стороны 1С-Битрикс, потому что он:

  • следит за размером и в результате его работы не закончится место на сайте;
  • логирует обмен справочников и заказов;
  • логирует время обмена и время выполнения одного шага.

Выводы

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

Наша компания обладает компетенциями в вопросе отладки обмена. Если у вас возникла подобная проблема, напишите, обсудим.

Вам может быть интересно:

  • Tutorial по стандартному и нестандартному обмену сайта с 1С. Часть первая: стандартный обмен и его хитрости.
  • Tutorial по обмену сайта с 1С. Часть вторая: зачем и как писать свой обмен с нуля на очередях и REST API.
  • Tutorial по обмену с 1С. Часть третья: Выжимаем максимум из стандарта. Что мы хотели бы знать 1000 проектов назад.
  • Tutorial по обмену с 1С. Часть четвертая: Обмен через промежуточную базу данных.
  • Tutorial по обмену с 1С. Часть пятая: Наш опыт настройки 1000 и 1 обмена.

Данная проблема в Битриксе может появляться при отсутствии нужных прав на каталоги и файлы. В моём случае проблема возникла при многосайтовости, до этого всё было в порядке, но спустя какое-то время после длительной работы, появилось ограничение. За время поиска решения этой задачи, я нашел несколько решений и думаю, что один из вариантов Вам поможет справиться с данной проблемой. 

Первое что необходимо сделать — это проверить права на файлы и папки в нужном каталоге. Права на папку должны быть 755, на файлы 664. Ни в коем случае не выставляйте права 777 на папки или файлы, даже на время. 

В моём случае этот метод не сработал, я стал копать дальше. Нашел такой совет. в файле /bitrix/php_interface/dbconn.php установить такие константы. 

define( "BX_FILE_PERMISSIONS", 0660 );

define( "BX_DIR_PERMISSIONS", 0775 );

@umask( ~BX_DIR_PERMISSIONS );

@ini_set( "memory_limit", "512M" );

Но этого не потребовалось, т.к. эти значения уже были заданы и по идее всё должно было работать. На одном из форумов посоветовали изменить права доступа и владельца к нужной категории через консоль. Но я посчитал, что если всё до этого работало, то не нужно так далеко залазить, проблема явно была в не в этом, для Вас приведу код в котором можно изменить права доступа к каталогам и файлам через консоль. Говорят может помочь. 

find . -type d -exec chmod 775 { } ;

find . -type f -exec chmod 664 { } ;

В моём случае решение оказалось куда проще.  Все сайты лежали в корневой директории, один из них являлся общим ядром. Но по какой-то причине прекратился общий доступ к «главному сайту» и всё что нужно было сделать — это открыть доступ.

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

  1. Зайдите в нужную директорию
  2. В верхней части экрана нажмите на кнопку “Инструменты” -> “Настроить общий доступ к текущей директории”: 
  3. Установите переключатели “Чтение и запись” и “Включая вложенные папки”, нажмите кнопку “Открыть доступ”: 

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

Нет. Такие же не надо.
Надо посмотреть от чьего имени работает веб сервер. Тут вообще битрикс не при чем. У вас пробема в том, что все файлы доступны только root и вебсервер не имеет к ним доступ. Попробуйте в каталоге — корне сайта (в терминале через ssh) выполнить команду

там увидите у файлов кто владелец группа. Я так понимаю у части root:root, но у некоторых должно быть нечто другое. Например bitrix:bitrix, www-data:www-data или иное… Тут уже зависит от дистрибутива линукса развернутого на сервере, предыдущего админа и т.п. Вот вам нужно ходить через ftp именно под этим пользователем. (Да и по ssh под root лучше не ходить — обычно это запрещают, а при необходимости логинятся обычным, и уже в терминале меняют пользователя на root)

Ну и необходимо будет поменять права к файлам. Для этого находясь в терминале в корне сайта под root. Выполните (в примере имя искомого пользователя bitrix и группа bitrix:

Bash
1
chown -R bitrix:bitrix ./*

Но вообще с этим со всем надо аккуратно… Лучше пригласить специалиста. Наверняка на том же хостинге есть услуга помощи админа.

Добавлено через 56 секунд
PS Вопрос, кстати, ваш скорее не для этого раздела. Т.к. битрикс относится лишь косвенно.

Нужно проверить, чтобы у файлов был тот же владелец, что и пользователь Apache. Кроме того, выставить необходимые права на папки и файлы.
chown bitrix:bitrix file.php

Для массовой смены владельца можно использовать:
find . -type f -exec chown bitrix:bitrix {} ;

Вот универсальное решение:

cd /home/bitrix/www
find . -type d -exec chmod 775 {} ;
find . -type f -exec chmod 664 {} ;
find . -type d -exec chown bitrix:bitrix {} ; 
find . -type f -exec chown bitrix:bitrix {} ;

/home/bitrix/www — директория где лежит сайт
bitrix:bitrix — пользователь и группа под кем запущен демон httpd
Пользователя и группу можно подсмотреть в phpinfo.

Заказать сайт

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

Настройки подключения к 1С должны быть произведены согласно официальной документации

Очистка кеша после импорта

В файле init.php добавляем

//При начале импорта из 1С устанавливаем сессионную переменную
AddEventHandler(
    'catalog',
    'OnBeforeCatalogImport1C',
    function ()
    {
        $_SESSION["1C_UPDATE"] = true;
    }
);

//При окончании импорта из 1С устанавливаем сессионную переменную
AddEventHandler(
    'catalog',
    'OnSuccessCatalogImport1C',
    function ()
    {
        $_SESSION["1C_UPDATE"] = false;

        define('BX_BUFFER_USED', true);
        define('NO_KEEP_STATISTIC', true);
        define('NOT_CHECK_PERMISSIONS', true);
        define('NO_AGENT_STATISTIC', true);
        define('STOP_STATISTICS', true);
        define('SITE_ID', 's1');

        BXClearCache(true);

        if (class_exists('BitrixMainDataManagedCache')) {
            (new BitrixMainDataManagedCache())->cleanAll();
        }

        if (class_exists('CStackCacheManager')) {
            (new CStackCacheManager())->CleanAll();
        }

        if (class_exists('BitrixMainDataStaticHtmlCache')) {
            BitrixMainDataStaticHtmlCache::getInstance()->deleteAll();
        }
    }
);

Запуск импорта вручную

Для этого нужно перейти по адресу: https://site.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml

Так же импорт можно запустить из отладочного файла /bx_1c_import.php, что намного удобнее, но небезопасно! Переименуйте его и удалить сразу после использования

Включение отладки

В файле /bitrix/php_interface/dbconn.php добавляем константу

define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

Для каждого обновляемого файла получим массив вида

Host: site.ru:443
Date: 2020-06-29 09:23:48
Module: ------------UPDATE-----------
Array
(
    [ACTIVE] => Y
    [PROPERTY_VALUES] => Array
        (
                )

            [339] => Array
                (
                    [n0] => Array
                        (
                            [VALUE] => 5055185210794
                            [DESCRIPTION] => 
                        )

                )

            [340] => Array
                (
                    [n0] => Array
                        (
                            [VALUE] => 5678000-01109
                            [DESCRIPTION] => 
                        )

                )

            [342] => Array
                (
                    [n0] => Array
                        (
                            [VALUE] => Товар 
                            [DESCRIPTION] => ВидНоменклатуры
                        )

                    [n1] => Array
                        (
                            [VALUE] => Товар
                            [DESCRIPTION] => ТипНоменклатуры
                        )

                    [n2] => Array
                        (
                            [VALUE] => Набор для вышивания "Поле маков". По картине Стива Томса ("Poppy Field", Steve Thoms). 25х25 см
                            [DESCRIPTION] => Полное наименование
                        )

                    [n3] => Array
                        (
                            [VALUE] => 1933.83
                            [DESCRIPTION] => Цена
                        )

                    [n4] => Array
                        (
                            [VALUE] => 0
                            [DESCRIPTION] => Вес
                        )

                )

        )

    [TMP_ID] => 1765642395
    [XML_ID] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97
    [NAME] => Набор для вышивания MAIA Поле маков
    [DETAIL_TEXT] => Размер:25*25см (состав: канва Aida 16, цветная схема, нитки Anchor, игла, инструкция), счетный крест
    [DETAIL_TEXT_TYPE] => text
    [PREVIEW_TEXT] => Набор для вышивания "Поле маков". По картине Стива Томса ("Poppy Field", Steve Thoms). 25х25 см
    [PREVIEW_TEXT_TYPE] => text
    [DETAIL_PICTURE] => Array
        (
            [name] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.jpg
            [size] => 84906
            [tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/58/583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.jpg
            [type] => image/jpeg
            [external_id] => 825a18b4d6a465891654f1227d1968e4
            [description] => 09
            [MODULE_ID] => iblock
            [old_file] => 122987
        )

    [PREVIEW_PICTURE] => Array
        (
            [name] => 583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.resize1.jpg
            [size] => 40462
            [tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/58/583b6b8d-d8f1-11e0-9980-1c6f65bc8a97_2b668b28-d6b7-11e5-afc8-001e676a37f6.resize1.jpg
            [type] => image/jpeg
            [external_id] => 825a18b4d6a465891654f1227d1968e4
            [description] => 09
            [MODULE_ID] => iblock
            [old_file] => 122986
        )

    [IBLOCK_SECTION] => Array
        (
            [0] => 1217
        )

    [BASE_WEIGHT] => 0
    [MODIFIED_BY] => 1
    [WF] => N
    [SEARCHABLE_CONTENT] => НАБОР ДЛЯ ВЫШИВАНИЯ MAIA ПОЛЕ МАКОВ
НАБОР ДЛЯ ВЫШИВАНИЯ "ПОЛЕ МАКОВ". ПО КАРТИНЕ СТИВА ТОМСА ("POPPY FIELD", STEVE THOMS). 25Х25 СМ
РАЗМЕР:25*25СМ (СОСТАВ: КАНВА AIDA 16, ЦВЕТНАЯ СХЕМА, НИТКИ ANCHOR, ИГЛА, ИНСТРУКЦИЯ), СЧЕТНЫЙ КРЕСТ
    [PREVIEW_PICTURE_ID] => 136021
    [DETAIL_PICTURE_ID] => 136022
    [ID] => 116896
    [IBLOCK_ID] => 22
    [RESULT] => 1
)

Поиск проблемного файла при получении во время импорта из 1С ответа Файл не является графическим

В файле /bitrix/modules/main/classes/general/file.php перед каждым

return GetMessage("FILE_BAD_FILE_TYPE");

вставляем:

print_r($arFile)

Получим массив вида

[
	[name] => 493d6d81-6ebb-11e3-8f8e-001e676a37f6_493d6d83-6ebb-11e3-8f8e-001e676a37f6.jpg
	[size] => 1051
	[tmp_name] => /home/bitrix/www/upload/1c_catalog/import_files/49/493d6d81-6ebb-11e3-8f8e-001e676a37f6_493d6d83-6ebb-11e3-8f8e-001e676a37f6.jpg
	[type] => image/jpeg
	[external_id] => b6c6e1bf0372a666323fd0a000999734
	[description] => PN-0146947
	[MODULE_ID] => iblock
	[old_file] => 
]

Теперь в файле import.xml мы можем найти id проблемного товара по имени изображения

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

Вместо print_r добавьте в файл /bitrix/modules/main/classes/general/file.php такой код

$log = '///////////////////////////////////////////////////////////////n';
$log .= date('Y-m-d H:i:s') . ' ' . print_r($arFile, true);
//$log .= str_replace(array('	', PHP_EOL), '', print_r($arFile, true)); //Для вывода в одну строку
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/log.txt', $log . PHP_EOL, FILE_APPEND);

Выгрузка на сайт завершилась с ошибками. import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.

1С вернул код ответа Ошибка открытия файла

Если вы убедились, что на жестком диске место есть, у вашего скрипта есть права доступа к папке /upload/ и сама папка существует, то попробуйте отключить сжатие при обмене с 1С.

Перейдите по ссылке /bitrix/admin/1c_admin.php?lang=ru&tabControl_active_tab=edit_catalog или используя навигацию Магазин > Настройки > Интеграция с 1С и снимите галочку с опции Использовать сжатие zip, если доступно

Теги:

1С Битриксphp

Обмен товарами (1С -> Битрикс).

Данный тип обмена (type=catalog) используется для создания и обновления на сайте следующих сущностей:

  • инфоблок товаров
  • UF-поля разделов в этом инфоблоке
  • свойства элементов в этом инфоблоке
  • инфоблок SKU
  • типы цен
  • склады
  • разделы в инфоблоке товаров
  • элементы в инфоблоке товаров (товары)
  • цены товаров
  • наличие товаров по складам

При обмене товарами 1С формирует XML-файлы, передает их на сайт и контролирует их обработку сайтом. 1С может передать 4 вида файлов:

  • В файлах с префиксом import_ — разделы каталога, товары, свойства товаров
  • В файлах с префиксом offers_ — SKU
  • В файлах с префиксом prices_ — цены товаров и предложений
  • В файлах с префиксом rests_ — остатки товаров и предложений по складам

На шаге авторизации в случае успеха сервер вернет дополнительный параметр timestamp (текущее время). 1С сохранит timestamp и передаст на сайт на последнем шаге обмена товарами.

schema1.jpg - ITsale

Шаг 1. Передача файла (повторяющийся).

Запрос
GET-параметры type=catalog
mode=file
sessid=<ID сессии>
filename=<имя файла>
POST Содержимое файла в виде строки
Cookie <имя Cookie>=<значение Cookie>
Ответ
Если успех success
Если ошибка failure
<текст ошибки>

Шаг может выполняется несколько раз. Каждый файл выгружается частями не более file_limit байт (см. предыдущий шаг) в бинарном виде через сырой POST-запрос. Сайт создает файл, если его нет. Имя файла берет из GET-параметра filename и дописывает в него переданный контент. Так продолжается до тех пор, пока 1С не передаст все части этого файла.
Возможные ошибки

Текст ошибки Что делать
Ошибка чтения HTTP данных Проверить сетевое соединение между сайтом и 1С.
Ошибка открытия файла <имя файла> для записи Проверить права на файл и папку файла у пользователя Apache, под которым работает Битрикс.
Ошибка записи в файл <имя файла> Проверить права на файл и папку файла у пользователя Apache, под которым работает Битрикс.

Шаг 2. Основной.

Запрос
GET-параметры type=<тип обмена>
mode=import
sessid=<ID сессии>
filename=<имя файла>
Cookie <имя Cookie>=<значение Cookie>
Ответ
Если импорт завершен success
Если импорт продолжается progress
<текущий статус>
Если ошибка failure
<текст ошибки>

Этот шаг — особенный. Файл уже целиком загружен на сайт и Битрикс готов его обработать. Его обработка может состоять из 11 более мелких операций, о которых 1С ничего не знает. Поэтому в параметре GET приходит mode=import (один и тот же запрос!), но сайт выполняет совершенно разные операции. Текущий прогресс Битрикс сохраняет в сессии в переменной $_SESSION[BX_CML2_IMPORT][NS]. Например, узел STEP в этом массиве отвечает как раз за номер внутренней операции импорта.

Шаг 2.1 Распаковка архива (повторяющийся, необязательный).

Ответ
Если файл распакован progress
Идет распаковка архива
Если файл распаковывается progress
Распаковка архива завершена
Если ошибка failure
<текст ошибки>

Шаг исполняется, только если 1С передала файл в формате ZIP. Распаковка происходит в той же директории, где лежат все файлы обмена товарами (по умолчанию — /upload/1c_catalog/). Эта операция не нумеруется внутри Битрикса (значение STEP в сессии не изменяется).
Возможные ошибки

Текст ошибки Что делать
Ошибка распаковки архива Проверьте работоспособность функции PHP zip_open и расширение Zip . Если все корректно — скачайте архив с сайта и проверьте его корректность вручную.

Шаг 2.2 Удаление временных таблиц.

Ответ
Если успех progress
Временные таблицы удалены
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 0

Работать напрямую с файлом XML (тем более, если он большой) неудобно и неэффективно. Поэтому все данные прочитываются во временную таблицу b_xml_tree. На этом подготовительном шаге таблица b_xml_tree, если она существует, удаляется.

Шаг 2.3 Создание временных таблиц.

Ответ
Если успех progress
Временные таблицы созданы
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 1

Таблица b_xml_tree создается. Если объявлена PHP константа BX_XML_CREATE_INDEXES_IMMEDIATELY, таблица сразу же индексируется. В конце этого шага Битрикс испускает событие OnBeforeCatalogImport1C.
Возможные ошибки

Текст ошибки Что делать
Ошибка создания временных таблиц Проверить права и подключение СУБД.

Шаг 2.4 Загрузка файла во временную таблицу (повторяющийся).

Ответ
Если файл читается progress
Обработано <число>% файла
Если файл прочитан progress
Файл импорта прочитан
Если ошибка failure
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 2

Битрикс шаг за шагом начинает читать переданный из 1С файл, добавляя записи в таблицу b_xml_tree. Чтобы избежать проблем с временем исполнения, процесс происходит пошагово. Управление продолжительностью шага происходит на странице «Интеграция с 1С» в панели управления сайтом.
Возможные ошибки

Текст ошибки Что делать
Ошибка открытия файла импорта Проверить доступ к файлу

Шаг 2.5 Индексация временных таблиц.

Ответ
Если успех progress
Временные таблицы проиндексированы
Если ошибка failure
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 3

Для повышения скорости работы импорта таблица b_xml_tree индексируется после прочтения файла.
Возможные ошибки

Текст ошибки Что делать
Ошибка создания индекса для временных таблиц Возможная причина: проблемы с СУБД, правами в ней или подключением.

Шаг 2.6 Импорт метаданных.

Ответ
Если успех progress
Метаданные импортированы успешно
Если ошибка failure
Ошибка импорта метаданных
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 4

На этом шаге создаются или обновляются следующие данные:

  1. Инфоблоки товаров и SKU
  2. Служебные свойства каталога (с префиксом CML2_: CML2_BAR_CODE, CML2_ARTICLE, CML2_ATTRIBUTES…)
  3. Торговый каталог
  4. Свойства инфоблоков
  5. UF-поля разделов инфоблоков
  6. Типы цен
  7. Склады
  8. Единицы измерения

Никакие сущности при импорте метаданных не удаляются. Случайно выгруженный из 1С склад или тип цены остается на сайте, пока администратор не удалит его вручную.

Возможные ошибки

Текст ошибки Что делать
Отсутствует модуль «Торговый каталог». Импорт торговых предложений и цен невозможен Пояснения не требуются
Ошибка создания типа информационных блоков После этого сообщения следует текст ошибки API, который пояснит причину ошибки.
Ошибка добавления новой единицы измерения (код единицы: <код>) Текст ошибки Битрикс не выведет, необходимо разобрать XML файл самостоятельно и найти причину ошибки.
Количество импортированных складов превышает разрешенное для данной редакции Пояснения не требуются
Ошибка импорта пользовательского свойства (xml_id: <код>) Проверить параметры пользовательского свойства
Название справочника должно начинаться с буквы и состоять только из латинских букв и цифр. Пояснения не требуются
В выгрузке настроены цены с одинаковым названием. Продолжение обмена невозможно. Пояснения не требуются
В редакции Малый Бизнес нет возможности иметь более одного типа цены. Настройте выгрузку из 1С или перейдите на другую редакцию БУС. Пояснения не требуются
Текст ошибки Что делать
Ошибка создания индекса для временных таблиц Возможная причина: проблемы с СУБД, правами в ней или подключением.

Шаг 2.7 Импорт разделов каталога.

Ответ
Если успех progress
Группы импортированы
Если ошибка failure
Ошибка импорта метаданных
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 5

На этом шаге в инфоблоке создаются и обновляются все разделы каталога, которые были в XML файле. Сопоставление разделов из XML-файла и в БД происходит по XML_ID. Если на сайте нет раздела с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML файла с аналогичными полями в БД.

2. 2-8.jpg - ITsale

Если изменения нет, то Битрикс только обновляет поле TIMESTAMP_X и пропускает раздел. Если изменения есть — происходит полноценное обновление. Это происходит независимо от настроек сайта. Для экономии ресурсов сервера добавление разделов происходит без пересчета дерева (речь о полях LEFT_MARGIN и RIGHT_MARGIN).
Возможные ошибки Так как импорт разделов не пошаговый, при обмене большом дереве разделов на сайте может возникать ошибка превышения времени исполнения. Решения три.

  1. Увеличить время исполнения на странице «Интеграция с 1С» и в настройках сервера (nginx).
  2. Доработать 1С, чтобы ошибки на этом этапе игнорировались пока не будет получен ответ «progress».
  3. Повторить всю выгрузку несколько раз.

Объясним, как поможет повтор шага или всей выгрузки. Допустим, в XML-файле и на сайте 20001 раздел. Пусть за один проход Битрикс успевает импортировать только 10000 разделов.

№ Обмена/шага Пропущено т.к. нет изменений Обработано Ответ
1 0 10000 Ошибка сервера
2 10000 10000 Ошибка сервера
3 20000 1 progress
Группы импортированы

Битрикс каждый раз обрабатывает столько разделов, сколько успевает. При повторении выгрузки первые 10000 разделов он пропустит (обновит только TIMESTAMP_X) и обновит еще 10000 разделов, пока не наступил тайм-аут. И только на 3-ей выгрузке из 1С шаг будет завершен корректно.

Шаг 2.8 Пересчет дерева разделов.

Ответ
Если успех progress
Деактивация/удаление групп завершено
Если ошибка failure
Ошибка импорта метаданных
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 6

На этом шаге Битрикс выполняет две задачи:

  1. Удаление/деактивация разделов (в старых версиях модуля обмена в 1С)
  2. Перестройка дерева разделов

В старых версиях 1С отличить полную выгрузку от частичной просто: при частичной в узле «Классификатор» был атрибут СодержитТолькоИзменения=»true», при полной его не было. В 2019 году 1С всегда выгружает этот атрибут. Если этого атрибута нет, Битрикс мог (и до сих пор может, просто этот код не используется) удалить, деактивировать старые разделы (или пропустить их). На выбор влиял параметр на странице «Интеграция с 1С». Сейчас эта настройка уже ни на что не влияет и ни деактивации, ни удаления не происходит.
Также на этом шаге пересчитываются служебные поля LEFT_MARGIN и RIGHT_MARGIN всех разделов.

3. 2-9.jpg - ITsale

Шаг 2.9 Импорт товаров (повторяющийся).

Ответ
Если идет процесс импорта progress
Обработано <число> из <число> элементов
Если импорт завершен progress
Загрузка элементов завершена
Если ошибка failure
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 7
DONE Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле

На этом шаге в инфоблоке создаются и обновляются все товары, которые были в XML файле. Сопоставление товаров в файле товарам на сайте происходит по полю XML_ID.
Если на сайте нет товара с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML файла с аналогичными полями в БД.
Если изменения нет, и задан параметр «Использовать контрольные суммы элементов для оптимизации обновления каталога», Битрикс только обновляет поле TIMESTAMP_X и пропускает товар. Иначе происходит полноценное обновление.
При импорте товара заполняется поле TMP_ID. Значение для этого поля хранится в узле <НомерВерсии>. Если узла нет — Битрикс вычисляет контрольную сумму от всей информации о товаре из XML файла.
Возможные ошибки

Текст ошибки Что делать
Временная таблица не существует Ошибка возникает если с сайтом работает несколько 1С или одна 1С присылает несколько запросов одновременно. В одном потоке выполняется шаг 4.9, а другой запустил шаг 4.2.

Шаг 2.10 Деактивация/удаление товаров (повторяющийся).

Ответ
Если идет обработка progress
Обработано <число> из <число> элементов
Если обработка завершена progress
Деактивация/Удаление элементов завершены
Если ошибка failure
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 8
DONE Ассоциативный массив, счетчик обработанных товаров и всех товаров в файле

На этом шаге раньше (как и на шаге 2.8 Пересчет дерева разделов) Битрикс проводил чистку товаров. Чистка товаров происходила только если в узле “Классификатор” XML файла не было пометки СодержитТолькоИзменения=»true» (старый формат выгрузки). Есть аналогичная настройка для выбора, что делать с товарами.

4. 2-11.jpg - ITsale

В 2019 году на этом шаге ничего не происходит.

Шаг 2.11 Завершение импорта

Ответ
Если успех success
Импорт успешно завершен
Если ошибка failure
<текст ошибки>
Сессия ($_SESSION[BX_CML2_IMPORT][NS])
STEP 9

Служебный шаг. Обработки данных нет, только испускается событие OnSuccessCatalogImport1C.

Шаг 3. Деактивация старых данных.

Запрос
GET-параметры type=<тип обмена>
mode=deactivate
sessid=<ID сессии>
timestamp=<время на сервере>
Cookie <имя Cookie>=<значение Cookie>
Ответ
Если успех success
Деактивация элементов завершена
Если ошибка failure
Ошибка деактивации элементов

На этом шаге в 2019 году Битрикс деактивирует все товары и разделы каталога, не затронутые в текущей сессии. Для этого время последнего изменения сравнивается с timestamp, который передает 1С — время начала текущей сессии, полученное на шаге авторизации.
Напомним, что эти настройки в панели управления сайта сейчас ни на что не влияют (всегда происходит деактивация):

5. 3.jpg - ITsale

Этот шаг будет выполнен, только если современная 1С делает полную выгрузку. Для выгрузки изменений и в старых версиях 1С этого шага нет.

Шаг 4. Завершение импорта.

Запрос
GET-параметры type=<тип обмена>
mode=complete
sessid=<ID сессии>
timestamp=<время на сервере>
Cookie <имя Cookie>=<значение Cookie>
Ответ
Если успех success
Завершение процедуры импорта
Если ошибка failure
<текст ошибки>

Служебный шаг. Обработки данных нет, только испускается недокументированное событие модуля catalog OnCompleteCatalogImport1C. Аргументы обработчика аналогичны обработчикам события OnSuccessCatalogImport1C, возвращаемого значения нет.

Недавно была ошибка с .htaccess и на сайте висела ошибка 500, потом кто-то исправил, но теперь в CMS’ке при создании папки или файла выскакивает ошибка — «Не удалось создать папку «Название»»

Я заметил, что если создать папку в «/»(корень), — единственное место, где хоть что-то создается -, то в значении «Права на доступ сервера» написано 755 apache apache, а во всех других папках это значение другое — 755 vostorg vostorg (vostorg — название сайта).

Пожалуйста, помогите разобраться.

Часть файла dbconn.php:

...
define("BX_FILE_PERMISSIONS", 0644);
define("BX_DIR_PERMISSIONS", 0755);
@umask(~BX_DIR_PERMISSIONS);
@ini_set("memory_limit", "512M");
...

Среди многих фирм, выполняющих продажу и установку 1С, наша компания имеет ряд неоспоримых преимуществ:

  • Работа в IT-сфере с 2003 года

    Многолетний опыт обеспечивает возможность решать задачи любой сложности – от типового внедрения 1С до разработки и настройки индивидуальных программных продуктов. Знания и умения специалистов компании подтверждены сертификатами.

  • Безупречная репутация

    Мы дорожим своей репутацией, безупречность которой подтверждают наши клиенты – более 4500 компаний и 400 государственных учреждений России.

  • Специалисты высшего уровня

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

  • Нацеленность на результат.

    Любая задача по автоматизации бизнеса — системы быстрого внедрения программного обеспечения, специально разработанные специалистами компании.

  • Разумные цены

    Привлекательные цены – официальные программы

Понравилась статья? Поделить с друзьями:
  • 1с адресауведомленияодоставке ошибка чтения значения
  • 1с wsопределения ошибка 500
  • 1с workbooks open ошибка при вызове метода
  • 1с word documents add ошибка
  • 1с web server ошибка 500