К сожалению, в Интернете довольно мало подробно описанных и готовых примеров кода импорта/экспорта данных 1С Битрикс через CSV-файлы, что лично для меня, какое-то время было проблемой, в процессе реализации проекта. Может кому-то данная тема окажется полезной в работе и избавит от головной боли.
Скрипты проверены и работают в актуальных версиях продуктов 1С Битрикс на текущий момент. Но так как я еще в процессе изучения Bitrix Framework, поэтому могут быть более тривиальные способы решения задачи импорта/экспорта и если Вы знаете такие, огромная просьба отписаться в данной теме и указать на ошибки или предложить улучшения.
Импорт/Экспорт данных любых инфоблоков через CSV файлы я описал .
Представленные скрипты созданы на основе официальной документации
Обновление полей пользователей (импорт данных из CSV файла)
При этом подразумевается, что добавление новых пользователей производится через Active Directory или непосредственно в 1С Битрикс.
Выгрузка пользователей из 1С Битрикс (экспорт данных в CSV файл)
Скрипты проверены и работают в актуальных версиях продуктов 1С Битрикс на текущий момент. Но так как я еще в процессе изучения Bitrix Framework, поэтому могут быть более тривиальные способы решения задачи импорта/экспорта и если Вы знаете такие, огромная просьба отписаться в данной теме и указать на ошибки или предложить улучшения.
Импорт/Экспорт данных любых инфоблоков через CSV файлы я описал .
Представленные скрипты созданы на основе официальной документации
Обновление полей пользователей (импорт данных из CSV файла)
При этом подразумевается, что добавление новых пользователей производится через Active Directory или непосредственно в 1С Битрикс.
| Код |
|---|
<?php
/* Для запуска на Cron'е (автоматически, по расписанию), нужно добавить этот код в файл.
То есть, создаем файл, например, назовем его data_import_users.php в любой
папке в файловой структуре, помещаем в него весь этот код с тегами <?php ?> и запускаем
исполнение файла на Cron'е через командную строку BitrixVM, с нужным интервалом.
Также можно создать Агента и добавить данный код в /bitrix/php_interface/init.php
Пример создания Агента: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2290&LESSON_PATH=3913.4776.4620.4978.2290
*/
/*
// Для запуска на кроне нужно раскомментировать этот участок кода
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/.." ) ;
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('CHK_EVENT', true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php" ) ;
@set_time_limit(0);
@ignore_user_abort(true);
*/
/* Для запуска через Командную PHP-строку в панели Администратора достаточно кода ниже,
при этом теги <?php ?> в начале и конце кода не ставятся */
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php"); // Подключаем библиотеку CCSVData
$filePath = $_SERVER["DOCUMENT_ROOT"] . '/imtest/data_import_users.csv'; // Путь до CSV файла, откуда берем данные (от корня сайта)
/* Содержимое CSV файла должно выглядеть так (при открытии через текстовый редактор):
1;Login1;Anton;Bytsko;anton@gmail.com
2;Login2;Ivan;Ivanov;ivan@gmail.com
и так далее */
// Будьте осторожны с обновлением полей пользователя с ID = 1, это Главный Администратор, для экспериментов начните с ID = 2
$csvFile = new CCSVData('R', false); // Создаём объект – экземпляр класса CCSVData
$csvFile->LoadFile($filePath); // Указываем методу LoadFile путь до CSV файла
$csvFile->SetDelimiter(';'); // Устанавливаем разделитель для CSV файла
$user = new CUser; // Объявляем класс для работы с пользователями
while ($arFields = $csvFile->Fetch()) // Циклом вытаскиваем данные из каждой строки CSV файла и записываем их в поля пользователя
{
$fields = Array(
"LOGIN" => $arFields[1],
"NAME" => $arFields[2], // В поле NAME пользователя помещаем данные из второго столбца CSV файла и т.д.
"LAST_NAME" => $arFields[3],
"EMAIL" => $arFields[4],
//"PASSWORD" => "123456", // Пароль также можно передавать из CSV, например $arFields[5]
//"CONFIRM_PASSWORD" => "123456",
/* Если нужно передать или изменить подразделение пользователя, то передаем ID подразделений в массиве, например
"UF_DEPARTMENT" => Array(1, 2), где приставка UF_ указывает на пользовательское свойство (USER FIELD) */
);
$ID = $arFields[0]; // Указываем на ID пользователя, который хранится, например, в первом столбце CSV файла (в массиве это 0)
if(!$user->Update($ID, $fields)) // Обновляем данные из CSV файла пользователю с указанным ID
{
//echo $user->LAST_ERROR; // Если пользователь не обновился, выводим ошибку. Если скрипт работает на Cron'е, здесь можно написать простой обработчик отправки письма на E-mail Администратора с текстом ошибки
// Если произошла ошибка, отправляем письмо с текстом ошибки Администратору
$mail = "mailadmin@testdomain.local"; //Ваша почта (кому), правильнее, если
$subject = "Test"; //Тема письма
$text = $user->LAST_ERROR; //Текст письма
mail($mail, $subject, $text);
// Если используется Битрикс24 и установлен модуль "Веб мессенджер", то еще отправляем уведомление об ошибке Администратору в чат на портале
if (IsModuleInstalled("im") && CModule::IncludeModule("im"))
{
$arMessageFields = array(
"TO_USER_ID" => 1, // Получатель
"FROM_USER_ID" => 0, // Отправитель (может быть > 0)
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // Тип уведомления
"NOTIFY_MODULE" => "im", // Модуль запросивший отправку уведомления
"NOTIFY_TAG" => "IM_CONFIG_NOTICE", // Символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр
"NOTIFY_MESSAGE" => '[b]Внимание:[/b] произошел сбой при импорте пользователей на Cron, проверьте почту, чтобы узнать об ошибке', // Текст уведомления на сайте (доступен html и бб-коды)
//"NOTIFY_MESSAGE_OUT" => '' // Текст уведомления для отправки на почту (или XMPP), если различий нет - не задаем параметр
);
CIMNotify::Add($arMessageFields); // Отправляем уведомление
}
}
/* Для добавления новых пользователей нужно конструкцию $ID = $arFields[0]; if(!$user->Update($ID, $fields)){echo $user->LAST_ERROR;} заменить на
$ID = $user->Add($fields); // Добавляем нового пользователя с данными из CSV файла
if (intval($ID) > 0) // Проверка, если запись не добавлена, показывает ошибку
{
echo "Пользователь успешно добавлен.";
} else {
echo $user->LAST_ERROR; //Или добавляем код отправки письма и уведомления в чат Администратору
}
При этом, записывать ID пользователя в CSV файл и затем брать его не нужно, ID будет присваиваться автоматически в Битрикс,
а значит, первый столбец в CSV делаем, например LOGIN, с ключом 0 ("LOGIN" => $arFields[0])
*/
}
/*
Чтобы посмотреть список всех полей пользователя, можно в Командной PHP-строке в
панели Администратора выполнить PHP скрипт, представленный ниже. После чего, выбрать
нужные поля и указать их в массиве $fields = Array(...
$rsUser = CUser::GetByID(23); // В () указать ID нужного пользователя
$arUser = $rsUser->Fetch();
echo "<pre>"; print_r($arUser); echo "</pre>";
*/
?>
|
Выгрузка пользователей из 1С Битрикс (экспорт данных в CSV файл)
| Код |
|---|
<?php
/* Для запуска на Cron'е (автоматически, по расписанию), нужно добавить этот код в файл.
То есть, создаем файл, например, назовем его data_export_users.php в любой
папке в файловой структуре, помещаем в него весь этот код с тегами <?php ?> и запускаем
исполнение файла на Cron'е через командную строку BitrixVM, с нужным интервалом.
Также можно создать Агента и добавить данный код в /bitrix/php_interface/init.php
Пример создания Агента: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2290&LESSON_PATH=3913.4776.4620.4978.2290
*/
/*
// Для запуска на кроне нужно раскомментировать этот участок кода
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/.." ) ;
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('CHK_EVENT', true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php" ) ;
@set_time_limit(0);
@ignore_user_abort(true);
*/
/* Для запуска через Командную PHP-строку в панели Администратора достаточно кода ниже,
при этом теги <?php ?> в начале и конце кода не ставятся */
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/csv_data.php"); // Подключаем библиотеку CCSVData
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/imtest/' . 'data_export_users.csv'; // Путь до файла, куда записываем данные из инфоблока, от корня сайта
$fp = fopen($filePath, 'w+'); // Очищаем файл CSV, иначе записи будут добавляться к уже имеющимся
@fclose($fp); // Закрываем файл CSV
$fields_type = 'R'; // Дописываем строки в файл
$delimiter = ";"; // Устанавливаем разделитель для CSV файла
$csvFile = new CCSVData($fields_type, false); // Создаём объект – экземпляр класса CCSVData
$csvFile->SetFieldsType($fields_type); // Метод класса CCSVData, задающий тип записи в файл R
$csvFile->SetDelimiter($delimiter); // Метод класса CCSVData, устанавливающий разделитель
$csvFile->SetFirstHeader(false); // Метод класса CCSVData, указывающий, что первая строка будет шапкой
$rsUsers = CUser::GetList(($by="id"),($order="desc")); // Функция Битрикс API. Возвращает список пользователей по их ID
while($arItem = $rsUsers->GetNext())
{
$exportUserDATA = array($arItem['ID'],$arItem['LOGIN'],$arItem['NAME'],$arItem['LAST_NAME'],$arItem['EMAIL']); // Присваиваем набор полей и свойств пользователя в $exportUserDATA
$csvFile->SaveFile($filePath, $exportUserDATA); // Записываем результат из переменной $exportDATA в CSV файл
}
/* Содержимое CSV файла после экспорта будет выглядеть так (при открытии через текстовый редактор):
1;Login1;Anton;Bytsko;anton@gmail.com
2;Login2;Ivan;Ivanov;ivan@gmail.com
и так далее */
?>
|