1С-Битрикс: Импорт данных посредством файла csv, используя cron, или «тривиальные» настройки импорта данных

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

Часть 1. Подготовка csv файла
1. Желательное, но не обязательно, в первой строке файла перечислить названия полей выгрузки, это сильно облегчит настройку по синхронизации полей в файле и в битриксе.
2. Желательно элементы синхронизировать по уникальным идентификаторам, хотя возможно и по наименованиям, но здесь каждое наименование должно быть уникальным.
3. Если элементы выгрузки имеют иерархический характер, то в файле нужно перечислить группы/папки выгрузки, причем здесь также рекомендую указывать уникальные идентификаторы. Внимание: пропускать верхние уровни не допускается, иначе они заменятся элементами «Пустое название», и их придется вручную переносить в нужные папки.
4. Цены выгружаются только при указании в файле валюты.
5. Картинки следует загружать в отдельный каталог, например, /upload/import/pics/. В файле прописать только названия картинки с расширением.

Рассмотрим пример структуры каталога:

Вариант файла csv:

6. В битриксе добавляем профиль для Import CSV (new), надеюсь с этим пунктом все понятно 🙂

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

Часть 3. Настройка cron, на примере timeweb.
1. И снова права доступа! Отмечу, что при загрузке через cron создается новый пользователь, которому присваивается только роль «Все пользователи (в том числе и неавторизованные)», НО не будем же мы давать права доступа на запись к файлу и информационному блоку неавторизованным пользователям по соображениям безопасности.
Здесь есть два пути:
а) создать пользователя с тем же именем, что и для ftp пользователя и присоединить его к группе 1С-Интеграция. В файле скрипта /bitrix/modules/catalog/load_import/csv_new_run.php после

global $USER;

вставить:

$USER->Authorize(87);

где 87 — это ID нашего ftp пользователя, для примера;
б) если мы не хотим привязываться к пользователю ftp, то в файле скрипта нужно добавить создаваемого пользователя к роли 1С-Интеграция:
отредактируем код скрипта /bitrix/modules/catalog/load_import/csv_new_run.php
Найдем кусок кода:

if (!isset($USER) || !is_a($GLOBALS['USER'], 'CUser'))
{
    $bTmpUserCreated = True;
    if (isset($USER))
    {
        $USER_TMP = $USER;
    }
    
    $USER = new CUser();
}

и вставим после него следующий код:

$idUser = $USER->GetID();
CUser::SetUserGroup($idUser, array_merge(CUser::GetUserGroup($idUser), array(5)));

пояснения:
первая строка получает id текущего пользователя,
вторая строка добавляет его к группе 1С-Интеграция (в нашем случае id группы 1С-Интеграция равен 5)

2. Вешаем наш профиль на cron

3. Получаем конфигурационный файл cron, в котором содержаться задания на выполнения. Об этом написано на странице с профилями.
Отдельно опишу случай, когда у вас на cron уже есть другие задания, а вам не хочется заново их добавлять, так как при установке конфигурационного файла задачи, которые не перечислены в нем, затираются.
Открываем конфигурационный файл /bitrix/crontab/crontab.cfg и видим его содержание, подобное этому:

40 12 * * * /usr/local/php/bin/php -f /home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/cron_frame.php 16 >/home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/logs/16.txt

здесь
40 12 * * * — это периодичность запуска, а именно, каждый день в 12 часов дня 40 минут
/usr/local/php/bin/php — указывает, что запускается скрипт php
/home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/cron_frame.php 16 — оболочка, 16 — это id профиля импорта
>/home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/logs/16.txt
— путь к логу профиля

имя_логина и имя_домена заменяем на свои.

На timeweb настройка задания:

в поле путь до файла пишем:
/home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/cron_frame.php 16 >/home/w/имя_логина/имя_домена/public_html/bitrix/php_interface/include/catalog_import/logs/16.txt

Вот основные моменты, надеюсь ничего не забыла 🙂

При перепубликации активная ссылка на этот блог обязательна.
Поблагодарить автора 🙂
 руб.