Интеграция Битрикс24 с системой учета времени в Google Spreadsheet

Алексей Шкарупа
Дмитрий М.

Понимаете, каждый год 31 декабря мы с друзьями ходим в баню.
Это у нас такая традиция…

(с) Ирония судьбы, или С лёгким паром!

Похожая традиция есть и у меня. Каждый год 30 декабря я собираю статистику по проектам выполненным ИНТЕРВОЛГОЙ за год. По каждому проекту вычисляю важный финансовый показатель: стоимость часа разработчика в проекте. Он показывает насколько каждый проект для нас выгоден, и в каких мы допустили серьезные просчеты в оценках. Проблема в том, что управленческие решения на основе этой метрики нужно принимать намного чаще, чем раз в год.

Исторически сложилось

Более 5 лет наши сотрудники пишут в  в Google-таблицах ежедневные отчеты, за которые ставятся оценки. Там же у нас KPI, заплаты, выработка.

Из десятка таких отчетов (по 12 листов-месяцев в каждом) я собираю данные в 1 таблицу, очищаю от мусора и пытаюсь отнести каждую запись о потраченном времени к конкретному проекту. На разовый подсчет такой статистики 5 лет назад требовалось не менее 4-х часов. С ростом штата эта цифра быстро выросла.

Задача #1. Считать статистику по потраченному времени более оперативно и с меньшими трудозатратами. 

Была еще одна проблема, которую хотелось исправить - отчет для постановщиков задач. До сих пор узнать, сколько времени потрачено на задачу можно было, только спросив у исполнителя голосом. Исполнителю в свою очередь приходилось идти в отчет и искать “хвосты” этой задачи.

Задача #2. Получать информацию /отчет о потраченном времени для постановщиков задачи без дополнительных трудозатрат со стороны исполнителя.

Решения и подводные камни

Решение пришло само собой: учет времени в Битрикс24.

Голоса “за”:

  • задачи мы давно ставим только через эту систему;
  • есть учет времени;
  • заявляется, что есть отчеты по затраченному времени в разных разрезах (проекты, люди, даты).

Голоса “против”:

  • отказываться от отчетных файлов мы не хотели (помимо потраченного времени там есть KPI и другие важные данные);
  • дублирование руками - чистой воды muda;
  • известна пара багов:
    • две задачи могут одновременно иметь статус "выполняется",
    • иногда руководитель и подчиненный видят разный статус выполнения.
После анализа  фактов родилась идея: “затянуть” данные о потраченном времени из наших GoogleDocs-отчетов в Битрикс24. В голове была следующая схема.

Хочу обратить внимание на “теоретическую” простоту желаемого решения. Теоретическую потому, что компоненты этой схемы в том или ином виде реализуемы.
Но вылезло много подводных камней.


OAuth повсюду.

И Google, и Битрикс24 требуют для работы подтвердить, что вы это вы, а не робот, который работает от Вашего имени. Мало того, что сам механизм ужасно неудобен для программиста, так еще и без человека не работает.

Вывод: никакого выполнения операций по расписанию. Обязательно нужен кто-то перед браузером, авторизованный и в Google, и в Битрикс24.


Права доступа

В Битрикс24 куда ни плюнь, все завязано на права доступа. Это настоящий ад. В самых неожиданных местах вдруг выясняется, что вы не имеете доступа к задаче, которую делал Ваш подчиненный для соседнего отдела.
Скажу больше, каждый сотрудник может создать “закрытую невидимую” группу, и даже администратор портала не сможет ее увидеть, если не включит “режим бога”.

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

Вывод: строить отчет в разрезе сотрудников или вообще всех проектов без потери данных может только администратор.


“Текущий” пользователь

Эта особенность Битрикс24 доставила больше всего неудобств. Допустим, существует задача, которую делает сотрудник Вася, и у вас к ней даже есть доступ. Вы устроили совещание по  этой задаче и решили зафиксировать потраченное время самостоятельно (за себя и за Васю). Думаете это возможно?

А вот и невозможно. Все операции в Битрикс24 (и по REST API тоже) выполняются от имени текущего авторизованного пользователя. В случае REST API от имени того, кто предоставил авторизацию. Поэтому записать время вы можете только на себя.

Вывод: каждый сотрудник должен выполнять синхронизацию самостоятельно.


Заявляемая и реальная функциональность

Отчеты по потраченному времени в Битрикс24 Вам не помогут. Они там конечно, есть но…
Но относят все время из задачи на непосредственного исполнителя. А ведь задачу могут делать 2-3-4 человека. И каждый тратит/записывает время. Но в отчете вы увидите у всех 0, а у главного исполнителя - полную сумму.

Вывод: отчеты придется “переписать”.

Суровая реальность

Вернемся к схеме. Теперь она приобрела вот такой вид:

Для поддержки этой схемы мы немного модифицировали сами отчетные файлы. Ранее в них присутствовала колонка “название проекта” и с группировкой по ней возникали проблемы (пропуски, опечатки, различное написание). Мы заменили ее на “ID задачи или ссылка на нее”.

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


Как вы лодку назовете , так она и поплывет. Наше приложение мы назвали “Потрачено” :)

Технологии: Bitrix24 REST API, Google Spreadsheets API, React

При разработке хотелось избавиться от необходимости авторизации хотя бы в одной из систем Google/Битрикс24. Google-авторизация оказалась проще. Решили сделать приложение 2-го типа для Битрикс24, а в нем дополнительную авторизацию в Google. Такое приложение не требует программирования отдельной авторизации в Битрикс24.

Итого минус 1 блок в нашей схеме.

Общение с таблицей-отчетом происходит через Google Apps Script API https://developers.google.com/apps-script/.

Для успешной работы с отчетным листом сотрудник должен быть авторизован в аккаунте Google и указать в приложении ID документа-таблицы. В интерфейсе, если все области горят зеленым, значит данные подходят и можно приступать к синхронизации. Остается нажать кнопку «Синхронизировать рабочее время».

Мы заранее понимали, что JS-кода будет очень много. Так много, что в нем черт ногу сломит. Чтобы хоть немного все структурировать решили попробовать связку фреймворков React и Flux.

React+Flux дает ряд преимуществ при разработке приложений подобного рода. В нашем случае увесистая “модель” ворочает большим (конечно, если речь идет о JS) количеством данных, получаемых и отправляемых двумя асинхронными API.
Вдобавок к этому, интерфейс приложения должен вовремя, правильно и красиво отреагировать на то, что происходит как со стороны Битрикс24, так и со стороны Google.

Подробнее о синхронизации

Итак, имеем 2 независимые системы: отчетные файлы и Битрикс24. Данные в каждой из систем могут изменяться независимо. Возникают 2 вопроса:

  1. Как сопоставить записи в отчетах и их аналоги в Битрикс24?
  2. Как понять какая из тысяч строк в отчете изменилась с момента последней синхронизации?

К сожалению в Битрикс24 не нашлось места куда бы могли сохранить служебные данные для ответов на эти вопросы. Пришлось изобретать велосипед.

По каждой строке таблицы-отчета на стороне Google вычисляются уникальный идентификатор строки (XML_ID) и контрольная сумма (VERSION). Эти данные мы добавляем прямо в комментарий к записям о временных затратах.

Поле VERSION помогает “экономить” запросы. Каждое удаление или вставка отдельной записи о затраченном времени делается отдельным асинхронным запросом. Это долго и можно упереться в лимиты API. Если вывернуться наизнанку, можно отправлять их пакетами по 50 штук. Но кода становится больше в разы, а его поддержка усложняется на порядок.

В процессе разработки “Потрачено” была написана собственная обертка для отправки запросов пакетами. Она самостоятельно занимается контролем их количества, объединением порций получаемых данных и т.п. Тут Вам и DRY, и задел для следующих проектов.

О чем забывают проектируя “волшебный интерфейс”

При синхронизации может возникать десяток коллизий. Расскажем о некоторых из них.


Коллизия “Записали время не в ту задачу”.

В отчете указали время по задаче X, синхронизировали. Опомнились, что это не та задача. Изменили задачу на Y в отчете и снова синхронизировали.

Если ничего не предпринять, время потраченное на одну и ту же работу окажется в 2-х задачах, ведь нигде не хранится информация об изменениях в отчете. Возникает коллизия если задача X больше нигде не фигурирует и приложение вообще не узнает что нужно рассматривать эту задачу при синхронизации.

В решении этой коллизии нам помогает специальное хранилище в Битрикс24. В хранилище мы складываем все задачи, которые упоминались в отчете за последние несколько месяцев.


Коллизия “Очистка строки отчета”.

В отчет можно не только вписывать свои подвиги и делать в них правки, но и удалять их из отчета вовсе (бывает по-разному). При этом, как узнать, что где-то в корпоративном портале осталась запись о затраченном времени, которую пора уничтожить?

Решение: из отчета мы забираем не только заполненные строки, но и все пустые. У пустых строк остается все тот же XML_ID, который не зависит от заполнения, а значит ему по-прежнему может соответствовать что-то в кор. портале. Дальше дело техники.


Коллизия “не положено”.

Бывает так, что все шло хорошо, задачу делали, вписывали и синхронизировали, но вдруг по каким-то причинам в Битрикс24 были изменены настройки доступа. Теперь сотрудник, а соответственно и “Потрачено” от его имени, не имеет прав вписать или отредактировать время. Синхронизация проходит не полностью, что-то упущено, состояния отчета и портала разные. Чтобы отслеживать подобные ошибки, строки отчета красятся разными цветами. Это позволяет сразу после синхронизации заглянуть в отчет и проверить, все ли прошло гладко.

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


Коллизия “задача-сирота”

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

Результаты

Разработка приложения велась 2 месяца. Еще 2 месяца подчищались баги и писались обходные пути для коллизий. Весь процесс занял 205 рабочих часов. #Wasted Своих целей мы достигли и теперь намного оперативнее делаем выводы о расходе времени и ставке часа в проекте.

Разработка приложений для Битрикс24 дело не для слабонервных. Тем более если внутри интеграция с внешней системой. При этом сама платформа совсем не дружелюбна.

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

Читайте нашу статью о разработке системы синхронизации потраченного времени по задачам.

Мы готовы и умеем решать нетиповые задачи работы с данными, построения отчетов и формирования управленческой отчетности для Битрикс24. Расскажите о своей задаче и мы предложим решение!

Оцените статью
18.08.2016
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

01.06.2023
Переезд как 2 пожара. Как перевести процессы с Salesforce на Битрикс24 за 9 недель Интерес к CRM-системам, подогреваемый историями успеха от разработчиков/вендоров/интеграторов, непрерывно растёт. Их выбор редко случаен. CRM, как нервная ...
05.05.2023
CRM и Партнерский портал Лаборатории Касперского. Переход с Salesforce Компания ИНТЕРВОЛГА была выбрана исполнителем в тендере на оказание услуг для АО «Лаборатория Касперского» по замене решения на Salesforce Sales Cloud на альте...
28.04.2023
Переезд с SalesForce на Битрикс24 для крупного агентства коммерческой недвижимости С чего все начиналось? К нам обратилась за помощью ведущая российская компания, оказывающая консультационные, инвестиционные и агентские услуги в сфере ко...
13.04.2023
Корпоративный Личный кабинет: как в Битрикс24 организовать работу сотрудников и клиентов аутсорсинговой компании Персонализация – это уже не дань моде, а норма жизни современного человека. Она проявляется в новостной ленте, рекламе, торговых предложениях и даже в орга...
24.03.2023
Как мы заново написали модуль учета рабочего времени сотрудников в среде Битрикс24 для инжинирингового холдинга Задача учета времени работы сотрудников всегда актуальна. Для этой цели разработано много инструментов. Если вы пользуетесь Битрикс24, то наверняка знаете ...
10.02.2023
Импортозамещение наоборот или как мы сделали и продаем Обратный SMS-шлюз для Twilio + Bitrix24 Мы сделали приложение для глобального рынка, научились его продвигать и продавать и вышли на $1000+ дохода в месяц (самим немного смешно, но на оплату Goog...

Мы работаем по одному из двух форматов:

  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).

ИНТЕРВОЛГА предоставляет:

  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.

Для доработок и развития мы предлагаем формат 100 часов в месяц. Что можно сделать за это время:

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

Поддержка «чтобы все работало как часы» стоит 45 тысяч рублей в месяц и описана тут.

Хочешь получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишись на рассылку — спамить не будем