Битрикс. Генерация задач из Excel

Постановка задачи

Задача: дан excel - файл, он лежит на Битрикс Диске. Файл будет редактироваться в любое время. Нужно сделать страницу с запуском сприпта, который бы проходился по файлу и проставлял задачи сотрудникам, задачи не могут дублироваться, обратить внимание на то что у отдельных задач нужно проставлять свои сокращения в начале названия задачи.

Результат

Из этого:

Получилось это:

Как это было сделано мною

  1. Вначале нужно было распарсить сам файлик, воспользовался я PHPExcel. Она очень удобна, нежели в ручную заходить в сам xls файл и переходить в нужную директорию искать и совмещать столбцы и строчки, к тому же форматирование текста, это убиться можно поначалу.
  2. Но перед тем как что-то парсить, это нужно найти на диске. С помощью \Bitrix\Disk\Driver::getInstance()->getUserFieldManager() находим по ID нужный файл. Учтите вто все варианты редактированного файла сливаются в ID самого первого файла, он то нам и нужен.
  3. После того как прочитан файл и составлен масив из массивов (матрица) берем и разбиваем матрицу для удобства прохода в дальнейшем, саму матрицу под uset, перед этим предварительно записав в лог, также для дальнейшей поддержки скрипта.
  4. После разбивки матрицы, я получил массив с задачами, где есть "Название задачи", "Крайний срок", "Место сдачи документов". Помимо этого я составил дерево для того чтобы было легче ориентироваться по каждой задаче, оно выглядит так:
    • Корень
      • ООО
        • ОСНО
          • С работниками
          • Без работников
        • УСН
          • С работниками
          • Без работников
        • ЕНВД
          • С работниками
          • Без работников
        • Патент
          • С работниками
          • Без работников
      • ИП
        • ОСНО
          • С работниками
          • Без работников
        • УСН
          • С работниками
          • Без работников
        • ЕНВД
          • С работниками
          • Без работников
        • Патент
          • С работниками
          • Без работников
    В каждом лепестке занесены все задачи которые нужно будет выводить, те что нужно выводить - у тех в файле непустые ячейки
  5. Дальше дело идет так: цикл по пользователям, цикл по его компаниям со статусом "Клиент"
    • Определяем ИП или ООО (можно по типу реквизитов, можно по названию компании)
    • Определяем какая/ие системы налогообложения (их может быть несколько и по каждой придется ставить задачи)
    • Определяем есть ли сотрудники у клиента, в битриксе есть свое для этого поле, просто смотрим туда
    • Определяем есть ли у клиента условные обозначения как в файлике
    • Определив ИП это или ООО, выбираем соответствующую ветку в дереве
    • В нем проходимся по системам, и если есть совпадения, то ныряем на уровень глубже, смотрим сколько сотрудников
    • В зависимости от того есть или нет сотрудников, выбираем нужную ветку (кстати никто не говорил, что дерево будет построено полностью, в файле спокойно может оказаться что нет такой ветви, а клиент такой есть ^_^)
    • Цикл по всем значениям выбранного лепестка, смотрим, если есть значение, то ищем совпадение в условных обозначениях
    • Если нашли совпадение, то берем название задачи и ее крайний срок, делаем из нее новое название с добавлением пометки в начало из условных обозначений
    • Иначе, просто берем задачу и ее время. После составления названия, смотрим в базе наличие такой задачи в таблице с задачами.
    • Если такой задачи для этой компании с ее ответственным по названию и дате окончания нету, то
    • Заносим в базу по задачам, и ставим ответственному задачу в Битриксе

Вот в принципе и весь процесс, скрипт получился не очень большим всего 828 строчек. Удачи из прошлого!

Комментарии (0)

Написать комментарий