gifts2017

Чтение Google Spreadsheet из 1C на примере простой службы Help Desk

Опубликовал Осипов Сергей (fixin) в раздел Обмен - Загрузка и выгрузка в Excel

В статье рассматривается работа с Excel-подобными таблицами (spreadsheet) Гугл через Web API этой службы (только чтение). А также практический пример использования Google Spreadsheet для простейшей организации службы поддержки Help Desk.

В статье рассматривается работа с Excel-подобными таблицами (spreadsheet) Гугл через Web API этой службы (только чтение). А также практический пример использования Google Spreadsheet для простейшей организации службы поддержки Help Desk.

Организация службы поддержки с помощью Google Spreadsheet

Google Spreadsheet – это аналог таблиц Excel, с которыми могут работать несколько пользователей одновременно. Такой функционал позволяет развернуть на их базе простейшую коммуникацию специалистов службы поддержки.

Если все обращения пользователей поступают на один почтовый ящик, то кто-то назначается ответственным по разбору почты и регистрации заявок. Каждой заявке добавляется одна строка в Google-документе. Можно регистрировать заявки и каждому из специалистов поддержки при просмотре почты – зарегистрирована заявка или нет видно по списку.

При этом желательно добавить скрипт, который будет проставлять дату и время обращения при вводе текста в новую строку, чтобы не делать это вручную:

Инструменты — Управление скриптами, далее функция onEdit:

Добавляем скрипт:

function twoDigit(value) {

  return (value < 10 ? '0' : '') + value;

}

 

function formatRfc3339(date) {

  var y = date.getUTCFullYear();

  var l = twoDigit(date.getUTCMonth() + 1);

  var d = twoDigit(date.getUTCDate());

  var h = twoDigit(date.getUTCHours()+3);

  var m = twoDigit(date.getUTCMinutes());

  var s = twoDigit(date.getUTCSeconds());

  return d + '.' + l + '.' + y + ' ' + h + ':' + m + ':' + s;

}

 

function onEdit(event) {

  var range = event.source.getActiveRange();

var  Row= range.getRow();

 

  var timestamp = formatRfc3339(new Date());

  var user = event.user;

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getActiveSheet();

var  cell = sheet.getRange(Row,2);

 var col=range.getColumnIndex();

  var shname= sheet.getName();

  if ((cell.getValue()=="")&&(col!=2)&&(shname=="HelpDesk"))  {

  cell.setValue( timestamp );

  }

}

В таблице для организации службы поддержки используются следующие колонки:

  • Дата, время – дата и время обращения
  • Заявитель – кто обратился с заявкой
  • Тема – тема, краткое содержание заявки
  • Специалист – кто из специалистов поддержки взялся за задание
  • Статус – статус задания
  • Комментарий – комментарий по ходу выполнения
  • Часы – затраченное на задание время

 

При этом простым пользователям можно прямо в 1С показывать состояние обработки заданий. Хотя, конечно, можно и давать ссылку на гугл-страницу, но иногда проще реализовать монитор заданий в 1С, чем объяснять пользователям куда ходить и смотреть. К тому же, можно скрыть часть служебной информации, отфильтровать записи и т.п.

Принципы чтения Google Spreadsheet

Описание API Google реализовано тут:

http://code.google.com/apis/spreadsheets/data/1.0/reference.html

Нюансы, касающиеся аутентификации, рассмотрены тут:

http://code.google.com/apis/spreadsheets/data/1.0/developers_guide_protocol.html#AuthSubHTTP

Тем не менее, в реализации возникли некоторые сложности, которые удалось решить только обращением на форум sql.ru:

 

По сути, любая гугл-таблица выступает как RSS-поток, который можно прочитать в виде XML-файла, разобрать и получить нужную информацию.

На практике для чтения публичных и приватных документов требуется указывать различные адреса потоков public/values и private/full соответственно, как это делается в коде обработки:

Соединение = Новый HTTPСоединение("spreadsheets.google.com", , , , , Истина);
ИДФайла = "0Ao9KCEqHCZbidGVlUVcyYmt0NTlid2VDZ1ZxSF9vbHc";
Если ИмяПользователя = "" Тогда
    Соединение.Получить("/feeds/list/" + ИДФайла +"/od8/public/values", ФайлИД);
Иначе
    Соединение = Новый HTTPСоединение("spreadsheets.google.com", , , , , Истина);
    Соединение.Получить("feeds/list/" + ИДФайла + "/od8/private/full", ФайлИд, Заголовки);
КонецЕсли;

Демонстрационная обработка

Обработка из примера читает гугл-документ, расположенный по адресу: https://docs.google.com/spreadsheet/ccc?key=0Ao9KCEqHCZbidGVlUVcyYmt0NTlid2VDZ1ZxSF9vbHc :

Обработка реализована для чтения документа определенной структуры, поэтому нет поля ввода для чтения документа по другому адресу.

При этом она разукрашивает статусы разным цветом.

Можно отбирать заявки только за последние две недели.

Результат имеет вид:

Скачать файлы

Наименование Файл Версия Размер
down.zip 53
.zip 8,88Kb
23.06.12
53
.zip 8,88Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Eugeneer (Eugeneer) 24.06.12 00:14
Откуда Фиксин всякой фигни (которую публикует) знает - я в шоке. ведь реально нафиг никому не нужно.
2. sai_ NT (sai_NT) 24.06.12 00:27
(1) Eugeneer, кстати не так много рускоязычной инфы по работе со спредшитами (таблицами) от корпорации добра...
Я в свое время когда писал выгрузку отчета в ранее отформатированный спредшит ой как намучался, хотя до этого уже был опыт постинга в гугл-календарь. В любом случае нужная разработка в своей тематике!
3. Александр Зубцов (iov) 24.06.12 00:58
(1) Я вот прям никак не пойму картину "черный квадрат" но она стоит много денег и считается мировым достоянием или как-то так... Так вот это я к чему пусть пишет... Это лучше чем в политику или гопники...
И тем более не лукавь - ты же прочитал - да еще и отписался - хотя в реально бесполезных темах - тебя замечено не было...
4. Осипов Сергей (fixin) 24.06.12 09:28
(1) я на базе Google Spreadsheets делал службу HelpDesk, как и описано в примере. Мало ли где нужна коллективная работа, ;-)

(2)(3) спасибо.
5. Ruslan (rus128) 27.06.12 13:37
не, за информацию по взаимодействию с Google Spreadsheets - спасибо, конечно, но делать HelpDesk на ее базе - это жесть...
как в нее внести заявку "не работает интернет"? :-)
6. Осипов Сергей (fixin) 27.06.12 14:14
(5) это HelpDesk по вопросам 1С. а не по вопросам интернета. Интересно, а как вы внесете заявку про интернет в любой ХелпДекс? Бугога.
7. Ruslan (rus128) 27.06.12 15:09
(6) fixin, а чо "бугога"? или реализация HelpDesk без интернета невозможна по определению?
на одном из прошлых мест работы HelpDesk был реализован на веб-приложении, на другом - не поверите - даже на 1С 8.1/8.2! :-)
8. Осипов Сергей (fixin) 27.06.12 15:38
(7) это если специалисты поддержки находятся в пределах интранет. Что натянуто как-то.
9. Аркадий Кучер (Abadonna) 27.06.12 16:07
(6), (7)
Если бы наш сисадмин не был таким ленивым, он бы опубликовал, как сделать правильный Help-Desk в совокупности с корпоративным чатом ;)
Subject: Сообщение дня

Добро пожаловать! Информационно-техническая служба Сервис-М приветствует вас!

Напоминаем Вам, что запросы в службу технической поддержки принимаются в электронной форме по адресу http://help.its
Справочная информация о чате http://doc.its/chat/help
.... бла бла
// ссылки, разумеется, отсюда никуда не приведут

А Сережа пусть лучше обработки пишет, чем в форумах ругается.
Так что, fixin, плюс (но в уме)
10. Осипов Сергей (fixin) 27.06.12 16:12
(9) вот видишь, чтобы поднять такой ХД как у тебя, нужно иметь сисадмина, сервер PHP и MySQL. А тут без всяких сись-админов, взял и поднял в Гугле... Речь не о том, что у меня крутой ХД, а о том, что дешевый и сердитый. Надеюсь, теперь всё понятно?
11. Аркадий Кучер (Abadonna) 27.06.12 16:19
(10) Дык я и не говорил, что у тебя плохой. Даже плюс в уме поставил ;)
12. Осипов Сергей (fixin) 27.06.12 17:06
(11) загадочны помыслы твои. остался ты мною не понят.
13. Василий Зайцев (vasiliy_b) 28.06.12 09:38
Отличная идея! Кстати в google есть еще формы, поэтому собирать информацию можно и через эти формы. Т.е создать список вопросов: Описание проблемы, конфигурация, тип проблемы, важность и т.д т.п. а все данные собираются уже в Spreadsheet.
14. Осипов Сергей (fixin) 28.06.12 10:45
(13) да, я в курсе за формы. Такие решения из серии - дешево и сердито. вообще началось с того, что ящик почтовый поддержки был один, а спецов, которые решали задачи - трое. Нужно было как-то взаимодействовать, чтобы разделять задачи.
Начали юзать хелпдеск.
15. Василий Казьмин (awk) 28.06.12 20:32
(9) Abadonna, Почему в уме? Идея хоть и через G, но вполне интересная своей нетривиальностью.... Хотя думаю, что бесплатный хостинг трака или редмайна найти в сети можно. Так что я пожалуй плюсану.
16. Аркадий Кучер (Abadonna) 30.06.12 03:02
(15)
Почему в уме?

Потому что, если уж делать чисто одноэсовский Help Desk через инет, то и делать его надо 1С web-клиенте. Дешево, сердито, юзверям почти привычно. Но и такое решение, в общем, право на жизнь имеет, поэтому и в уме.
17. Осипов Сергей (fixin) 30.06.12 09:14
(16) вы не вкурили суть идеи - минимальными средтсвами.
зашел в гугл, поднял документ, раздал доступы и все.
сравните с другими вариантами - подымать апач, СКЛ сервер - для редмайна и подобных трекеров.
у вас ваще надо писать еще на 1с клиента и раздавать ключи доступа пользователям.
к тому же интерфейс экселя более понятен, чем интерфейс редмайна и подобных трекеров.
я не к тому, что хелпедеск через гугл - самый клевый, просто он самый простой.
адуырщдв; +1 1 Ответить 2
18. Василий Казьмин (awk) 30.06.12 11:06
(16) Abadonna,
Но и такое решение, в общем, право на жизнь имеет, поэтому и в уме.
Ясно. Другими словами не хочется светить свой ник в решении: "Как проводить топором хирургические операции". Плюс если в конце статьи написано, "берем скальпель" (это я про
Обработка из примера читает гугл-документ, расположенный по адресу:
).
19. Осипов Сергей (fixin) 30.06.12 13:23
20. Аркадий Кучер (Abadonna) 01.07.12 07:27
(17)
я не к тому, что хелпедеск через гугл - самый клевый, просто он самый простой.

Я тебе еще раз повторяю: я вовсе не говорил, что твое решение плохое.
Решение как решение.
21. адуырщдв (адуырщдв) 24.11.12 23:02
Хорошее решение. Годно, конечно ж, не только для задачей обозначенных автором. Однозначно плюс.
22. адуырщдв (адуырщдв) 24.11.12 23:09
(21) адуырщдв,
Например, три раза делали такое для 1. торгпредов с андроидами, 2. замерщиков и сборщиков с андроидами, и 3. босса фирмы просиживающего штаны в думе с ипадом :) Плюсы очевидны, недорого и надежно. Плюс ненужно никакого левого софта.
23. Алексей Новиков (Новиков) 19.06.13 13:19
(17) fixin,
сравните с другими вариантами - подымать апач, СКЛ сервер - для редмайна и подобных трекеров.


1. апач для редмайна устанавливать не обязательно. Для сабжа, в том ключе, который он описал вполне можно:
- либо юзать WEBrick, который идет вместе Ruby.
- либо доставить mongrel.
В первом случае - НИЧЕГО ДЕЛАТЬ НЕ НУЖНО, "оно само уже работает". В втором случае - написать одну команду в консоле.
Поэтому непонятно, что какую сложность Фиксин вкладывает в слово "подымать".

2.по поводу СУБД - можно выбрать тот сервер из поддерживаемых, который больше устраивает. Бесплатные в т.ч. Вся установка сходится к дальше-дальше-да-да-да-ок-ок. Опять не понятно, в чем затраты и сложность этого действия?

Сухой остаток: Redmine вместе с веб-сервером поднимается за 20 минут неторопливых действий. Сколько автор потратил на свои изыскания?

Но за статью я ставлю плюс, однозначно. Как демонстрация технической стороны вопросы.
За идею баг-трекера, суппорт-трекера и какого-то еще трекера - минус.
24. Осипов Сергей (fixin) 19.06.13 14:02
(23) Новиков, насколько же зашорено ваше сознание, боже мой!!!

Поймите, что ньюбу проще начать сразу с колес работать с Google Desk, чем разбираться 20 минут, как ставить сервер БАЗЫ ДАННЫХ и веб-сервер, какими бы простыми они не были. НЕ бывает серверов баз данных и веб-серверов с нулевым администрированием.

И потом, если вы напрактиковались ставить базы данных и веб-сервера за 20 минут, это не значит, что у ньюба это взлетит быстрее, чем за два часа.



Новиков, вы как с луны упали.

Хотя, если бы в интернете существовал НЕДОРОГОЙ платный сервис хелп-деск или коллективной работы, можно было бы им воспользоваться, как вариант.

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

Да. если ВСЕРЬЕЗ и НАДОЛГО, то нормальный хелпдеск лучше, спору нет.
А если на коленке и с колес, то нормалек и через Гугл-докс.
Светлый ум; +1 Ответить 1
25. Алексей Новиков (Новиков) 19.06.13 14:07
(24) fixin,
И потом, если вы напрактиковались ставить базы данных и веб-сервера за 20 минут, это не значит, что у ньюба это взлетит быстрее, чем за два часа.


Вы описываете "ньюба" в лице себя, я так полагаю?
26. Осипов Сергей (fixin) 19.06.13 14:14
(25) как вариант. Новиков, вы поймите, что потребность в ХД может возникнуть не только в конторе, укомплектованной тру-админами, но и в мелкой организации, где нужны коллективные действия, и где даже корпоративного сайта нет.

Выйдите за рамки своей организации, подумайте о проблеме в общем. Пока нормальных средств взаимодействия, кроме гугл-докс нету.

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

В ИТ кризис - нет нормальных решений и нет анализа решений. Поэтому так много автоматизации на Экселе, спуститесь уже к реальной жизни, уважаемый олимпиец.
27. Алексей Новиков (Новиков) 19.06.13 14:31
(26) fixin, Сергей, я даже не критиковал Вас, а вы уже ярлыки навешиваете в виде олимпийцев, луны и еже с ними. Я только высказал свою точку зрения. Если вы неприемлете это, укажите это в тексте статьи, я бы прошел мимо :)
28. Осипов Сергей (fixin) 19.06.13 15:32
(27) Я критикую не вас, а вашу точку зрения, используя красочные эпитеты. Если для вас такой стиль ведения дискуссии неприемлим, не будем ее продолжать. По существу вопроса я ответил, не нужно обсуждать офорление ответа. Обсуждайте аргументы, если дискуссия интересна.
29. Алексей Новиков (Новиков) 19.06.13 15:42
Если для вас такой стиль ведения дискуссии неприемлим, не будем ее продолжать

ок.
30. Семён Павлюков (7OH) 11.04.14 01:17
Ваш файл считывается хорошо.
А вот свой по примеру не выходит.
Файл открыт на полный доступ - его надо считать (люди добавляют данные, я считываю).
Исправил ссылку на /private/full, ошибка считывания исчезла, но файл получает пустой.
Поможете ?
Интересует тупо считывание таблицы в таблицу значений (может есть ещё публикации на эту тему)