У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 13865
Из: Киев
Спасибо сказали: 4440 раз
Рейтинг: 3559.1
Надумал когда-то задачу себе: выгрузить содержимое табличного документа в Google Document. Одним из вариантов использования данного функционала может быть выгрузка состояния заказов пользователей из базы в 1с в google spreadsheet. Если клиент знает адрес данного документа, то они могут ознакомиться с состоянием дел не звоня менеджеру. Может кто еще придумает варианты использования – пишите в комментарии, буду рад.
Последовательность выгрузки документа такова: сначала получаем список таблиц, которые есть у пользователя в системе Google Document. Затем после определения таблицы выгрузки пользователю предлагаем выбрать лист, в который будет выгружаться содержимое. Во время выбора всех этих параметров так же предоставляется возможность создания новых элементов (таблиц, листов). Уже после определения листа выгрузки обходим все ячейки документа и их содержимое переносим в таблицу на соответствующее место. Вопрос сохранения форматирования табличного документа в данной задаче не рассматривался.
Для написания функционала использовалась информация про google document API. Для того чтобы получить доступ к данным необходимо чтобы 1с сначала прошла аутентификацию. Про аутентификацию приложений можно почитать в соответствующем документе. Для того чтобы пройти аутентификацию мы должны сначала получить маркер, затем этот маркер прописывать каждый раз при обращении к серверу.
Функция получения маркера следующая:
Функция ПолучитьМаркер(ВидСервиса,Пользователь = Неопределено) Экспорт ПараметрыПользователя = ПолучитьПараметрыПользователя();
Если ПараметрыПользователя = Неопределено Тогда Возврат Неопределено; КонецЕсли;
АдресКлиентЛогин = "https://www.google.com/accounts/ClientLogin"; Если ВидСервиса = "Таблица" Тогда Сервис = "wise"; ИначеЕсли ВидСервиса = "Документ" Тогда Сервис = "writely"; КонецЕсли;
Функция получения маркера в качестве входного параметра получает вид службы, для которой будет проходить аутентификация. Это очень важный момент. Например, полученный маркер для Календаря не даст возможности работать с документами.
Для получения списка таблиц отправляется GET запрос по адресу «https://spreadsheets.google.com/feeds/spreadsheets/private/full». В запросе параметр «Authorization» определяется значением полученного маркера аутентификации. В результате выполнения запроса в ResponseText мы получаем xml, который для удобство дальнейшего разбора перегоняется в ДеревоЗначений.Функция получения списка таблиц имеет следующий вид:
&НаСервере Функция ПолучитьСписокТаблиц(Пользователь = Неопределено) Экспорт
ПараметрыПользователя = ПолучитьПараметрыПользователя(); Если ПараметрыПользователя = Неопределено Тогда Возврат Ложь; КонецЕсли;
Маркер = ПолучитьМаркер("Таблица"); Если Маркер = Неопределено Тогда Возврат Ложь; КонецЕсли;
Если ХМЛХТТП.Status = 200 Тогда ОтветСервера = ХМЛХТТП.ResponseText; ДеревоXML = ПрочитатьResponseTextXML(ОтветСервера); СписокТаблиц = Новый СписокЗначений; ТаблицаСсылка = ""; НазваниеТаблицы = "";
Для Каждого Строка Из ДеревоXML.Строки[0].Строки Цикл Если Строка.ИмяXMLЭлементаДанных = "entry" Тогда Для Каждого ТекАтрибут Из Строка.Строки Цикл Если ТекАтрибут.ИмяXMLЭлементаДанных = "link" Тогда ТекРел = ТекАтрибут.СписокАтрибутов.НайтиПоЗначению("rel"); Если ТекРел.представление = "http://schemas.google.com/spreadsheets/2006#worksheetsfeed" Тогда ТекСсылка = ТекАтрибут.СписокАтрибутов.НайтиПоЗначению("href"); ТаблицаСсылка = ТекСсылка.Представление; ТаблицаСсылка = СтрЗаменить(ТаблицаСсылка,"https://","http://"); КонецЕсли; КонецЕсли;
Если ТекАтрибут.ИмяXMLЭлементаДанных = "title" Тогда НазваниеТаблицы = ТекАтрибут.ЗначениеXMLЭлементаДанных; КонецЕсли; КонецЦикла; Если ЗначениеЗаполнено(ТаблицаСсылка) И ЗначениеЗаполнено(НазваниеТаблицы) Тогда СписокТаблиц.Добавить(ТаблицаСсылка,НазваниеТаблицы); КонецЕсли; КонецЕсли; КонецЦикла;
Теперь остановимся на самой выгрузке значения в ячейку google таблицы. Для определения значения в ячейке выполняется POST запрос по адресу листа таблицы, который пользователь определил до этого. Успешность выполнения обновления контролируется по значению Status, в случае удачного обновления он должен быть равен 201. Функция обновления значения ячейки на листе Google таблицы имеет следующий вид:
Функция ПолучитьМаркер(ВидСервиса,Пользователь = Неопределено) Экспорт ПараметрыПользователя = ПолучитьПараметрыПользователя();
Выдает ошибку:
Цитата
{ОбщийМодуль.ПродедурыГугл.Модуль(7,29)}: Процедура или функция с указанным именем не определена (ПолучитьПараметрыПользователя) ПараметрыПользователя = <<?>>ПолучитьПараметрыПользователя(); (Проверка: Сервер)
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!