Как загрузить товары в битрикс из excel
Ранее в одном из наших КП добавление задач обрабатывалось бизнес-процессами, сейчас задач стало столько, что бизнес-процессы стали неуместны, и понадобился инструмент для массовой заливки задач на КП.
- TITLE
- DESCRIPTION
- RESPONSIBLE_ID
- CREATED_BY
- START_DATE_PLAN
- END_DATE_PLAN
Сегодня:
- загружаем файл без перезагрузки страницы
- обрабатываем xlsx файл с помощью сторонней библиотеки
- добавляем свои свойства к задачам
- добавляем задачи в базу КП по конкретным группам
FormData
Я уже где-то упоминала что не помню как работать с обычными формами, поэтому всё делаю на аджаксе. У меня так быстрее получается. Самой большой проблемой тут виделось скачивание файла и отправка его серверу без перезагрузки страницы. Недолгое гугление выдало мне FormData, что и было использовано.
Да, это не поддерживается "неновыми" браузерами, но у меня не стояло задачи написать универсальный инструмент для всех.
Итак, пишем обработчик клика по кнопочке, который и будет запускать всё действо.
XLSXReader
Эта замечательная библиотечка позволяет нам считывать содержимое xlsx файла. Даже со всех содержащихся там листов. Так как всяких извращений типа графиков и формул задачи не содержат, то спокойно используем этого клопа для нашей работы.
Для дальнейшего использования была накарябана функция, которая на вход получает путь к файлу и возвращает нам массив с построчными данными, содержащимися в импортируемом файле. Так как первая строка содержит названия столбцов, то было решено привести массив в ассоциативный вид, где индексами будут названия столбцов, а значениями - соответственно построчное содержимое.
Замечание: даты в xlsx содержатся в каком-то своём формате, соответственно надо их переработать в человеческий вид. Библиотека XLSXReader предоставляет для этого метод, который и используется.
* string $filename - полный путь к файлу
* array $date_indexes - массив с индексами столбцов, где содержится дата (см. код)
Собственно, в скрипте обработчике фукнция вызывается вот так:
Пользовательские свойства задач
Идём Настройки -- Настройки продукта -- Пользовательские поля
Добавляем новое свойство. Для того, чтобы оно принадлежало задаче надо задать поле Объект в TASKS_TASK, например вот так
Таким образом это поле будет принадлежать задаче и спрашиваться при её добавлении и, если заполнено, то отображаться при просмотре.
Группа задачи
Для того, чтобы в списке задач была сортировка по группам, к задаче надо добавлять группу. Это делается при добавлении задачи указанием поля GROUP_ID
Но у нас в документе были указаны только названия групп, без айдишек. Дабы не добавлять работы операторам по поиску нужных айдишек групп сделаем это сами. А если группа по имени не найдена, пропускаем эту строку и записываем в отчёт как ошибку.
Зачастую возникает необходимость перенести данные из существующих таблиц Excel, Google Sheets и т.п. Для Лидов, Сделок, Контактов и Компаний предусмотрен штатный импорт, а в коробочной версии Битрикс24 это можно сделать внутренними инструментами через панель управления, а в облачной таких инструментов нет. И как быть если таблица абсолютно индивидуальна, например, реестр техники и оборудования?
Благодаря возможности формировать строки такого списка через бизнес-процесс мы и проведем наш импорт. Для этого воспользуемся штатным импортом Сделок. Для сделок можно создавать пользовательские поля, которые мы можем использовать при импорте. Сами сделки нам не нужны, поэтому, чтобы не мешать работе сотрудников и не портить статистику в CRM для этих задач, создадим отдельное направление сделок, ограничив доступ к нему.
Шаг 1. Подготовка данных для импорта
Для начала нам нужно определиться с типами полей в имеющейся у нас таблице. Их не так много:
- Строка
- Список
- Ссылка
- Дата/время
- Да/Нет
- Число
- Привязка к пользователю
- Привязка к элементам CRM
- Адрес Google карты
- Бронирование ресурсов
- Файл
- Деньги
- Привязка к справочникам CRM
- Привязка к разделам инф. блоков
- Привязка к элементам инф. блоков
При такой процедуре лучше свести все данные к первым 8 типам. Таким образом, у нас должны появиться столько же доп. полей в карточке сделки (если мы не используем штатные поля сделки) сколько колонок есть в нашей таблице. Получится вот такая таблица необходимых преобразований:
Исходный файл | Поле сделки | Поле списка |
---|---|---|
Строка | Строка | Строка |
Текст | Строка | Детальный текст |
Список | Строка | Список |
Ссылка | Строка | Строка |
Дата | Дата/Время | Дата |
Дата/Время | Дата/Время | Дата/Время |
Да, нет (+/-) | Строка | Список |
Число | Число | Число |
Деньги | Число | Число |
Сотрудник компании | Число | Привязка к пользователю |
Привязка к элементам CRM | Имя/Название, телефон/E-mail | Привязка к элементам CRM |
При их создании нам нужно будет учесть следующие свойства типов данных. Далее речь пойдет о данных в исходном документе:
Строка, Текст - поле не ограничено традиционными 256 символами, поэтому в него можно передавать достаточно большой текст, который в результате на уровне списка мы сохраним в поле типа “Детальный текст”.
Список - если в работе с таблицей для какого-либо поля вы используете набор вариантов, то для импорта значения этого поля необходимо создать “Строку”, т.к. у облачного Битрикс24 есть ряд ограничений на работу со списками, т.е. значение строки нельзя “отдать” полю типа список. Самый простой способ - это в бизнес-процессе, отвечающем за импорт, описать условия, назначающие соответствующие значения полям.
Ссылка - список не поддерживает ссылки, поэтому передавать нужно как обычную строку.
Дата, дата/время - тут важно не ошибиться с форматом и включить учет времени при создании поля в сделке.
Да/Нет, чекбокс - штатного аналогичного типа поля в списке нет, поэтому тут самым правильным решением будет создание элемента типа "Список", назначение пункта описано выше. Но важно иметь в виду то, что теперь у вас будет 3 статуса (Да, нет, не выбран), а не 2 (да, нет).
Число - число везде остается числом, и в данном случае оно будет работать и с целыми, и с дробными числами.
Employee Сотрудник - Сотрудника (если он есть в Битрикс24) можно передать и в виде строки (Имя Фамилия), но тогда придется писать в БП условие для каждого, чтобы связать его c сотрудником. Мы предлагаем заменить имена сотрудников на их ID в портале еще в самой исходной таблице. А полученное число назначить полю.
Привязка к элементам CRM - для этого нам будут нужны уникальные поля, поэтому лучше использовать название компании или имя контакта и его e-mail или телефон.
Давайте теперь пройдемся по остальным шагам, которые необходимо сделать для такого импорта.
Шаг 2. Подготовка CRM к импорту
Со стороны CRM нам неоходимо выполнить 3 действия:
- Создаем направление для сделок, через которое пройдет импорт, чтобы не портить статистику и отчеты. Подробное описание вы можете найти здесь.
- Создаем пользовательские поля для сделок в настройках CRM. Подробное описание вы можете найти здесь.
- Формируем список в группе, в которой мы будем хранить полученные данные. Подробное описание вы можете найти здесь.
Шаг 3. Формируем бизнес-процесс отвечающий за импорт данных
На изображении выше приведена принципиальная схема бизнес-процесса. Основные шаги следующие:
- Ожидаем стадии сделки в созданном нами направлении.
- Формируем запись в списке.
- Обрабатываем преобразования, необходимые для работы с полями типа "Список"
- Дописываем необходимые значения в строку списка
- Завершаем работу со сделкой
Шаг 4. Процесс импорта
Скачиваем CSV шаблон для загрузки сделок. Процедура импорта подробно описана здесь. При работе с ним не использовать Microsoft Excel т.к. он интерпретирует этот формат достаточно фривольно. У вас могут возникнуть сложности с его последующим открытием и дальнейшим импортом. Рекомендуем воспользоваться бесплатным Libre Office или другой программой.
Переносим данные, в таблицу - добавленные нами поля появились в ее конце. Не забывая заполнить направление сделки и ответственного.
Проводим импорт и переходим в группу со списком. В дальнейшем список может пополняться бизнес-процессом или управляться в ручном режиме.
Читайте также: