Интеграция 1С и Trello

26.03.21

Интеграция - Облачные сервисы, хостинг

В публикации и приложенной обработке описываются методы взаимодействий между 1С и облачным сервисом Trello по API.

Скачать исходный код

Наименование Файл Версия Размер
Интеграция 1С и Trello:
.epf 16,76Kb
14
.epf 16,76Kb 14 Скачать

В примерах описан далеко не весь набор API, включены те методы, которые использованы в разработке Тикеты - система учета задач/Service Desk в 1С (интеграция с Trello, Мобильное приложение)

Токен и ключ можно после авторизации в сервисе Trello получить по адресу trello.com/app-key

Обработку открывать из любой конфигурации на управляемых формах, под любой версией платформы.

Обработка тестировалась на платформе 8.3.17

Чтение

Функция ВыполнитьЗапросКСерверу(ТекстЗапроса)
    
    Соединение = Новый HTTPСоединение("api.trello.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос(ТекстЗапроса + "key=" + Ключ + "&token=" + Токен);
    Результат = Соединение.Получить(Запрос);
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
    РезультатЗапроса = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    Возврат(РезультатЗапроса);
    
КонецФункции

Функция ДатаTrello(ДатаИсточник)
    
    Если ДатаИсточник = Дата(1, 1, 1, 0, 0, 0) Тогда
        Рез = "";
    Иначе
        Рез = XMLСтрока(ДатаИсточник) + ".000Z"; 
    КонецЕсли;
    
    Возврат(Рез);
    
КонецФункции


Доски пользователя

//Получаем ID пользователя по адресу электронной почты
    ТекстЗапроса = "1/search/members/?query=" + ЭлектроннаяПочта + "&limit=1&onlyOrgMembers=false&";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);
    
     Если ТипЗнч(РезультатЗапроса) = Тип("Массив") И (РезультатЗапроса.Количество() > 0)  Тогда
        IDПользователя = РезультатЗапроса[0].id;
    Иначе
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "В Trello не найден пользователь по e-mail """ + ЭлектроннаяПочта + """";
        Сообщение.Сообщить();
        Возврат;
    КонецЕсли;
    
    //Получаем все доски пользователя
    ТекстЗапроса = "1/members/" + IDПользователя + "/boards?filter=all&fields=all&lists=none&memberships=none&organization=true&organization_fields=name%2CdisplayName&";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Колонки доски

ТекстЗапроса = "1/boards/" + IDДоски + "/lists?";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Пользовательские поля доски

ТекстЗапроса = "1/boards/" + IDДоски + "/customFields?";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Карточки колонки

ТекстЗапроса = "1/lists/" + IDКолонки + "/cards?";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Комментарии и файлы карточки

Фильтр = "commentCard,addAttachmentToCard";
    ТекстЗапроса = "1/cards/" + IDКарточки + "/actions/?limit=1000&filter=" + Фильтр + "&since=" + ДатаTrello(НачалоДня(ПериодСобытий.ДатаНачала)) + "&before=" + ДатаTrello(КонецДня(ПериодСобытий.ДатаОкончания)) + "&";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Действия с карточкой

Фильтр = "commentCard,addAttachmentToCard,addMemberToCard,removeMemberFromCard,updateCard,moveCardToBoard";
    ТекстЗапроса = "1/cards/" + IDКарточки + "/actions/?limit=1000&filter=" + Фильтр + "&since=" + ДатаTrello(НачалоДня(ПериодСобытий.ДатаНачала)) + "&before=" + ДатаTrello(КонецДня(ПериодСобытий.ДатаОкончания)) + "&";
    РезультатЗапроса = ВыполнитьЗапросКСерверу(ТекстЗапроса);

 

Скачивание прикрепленного файла (из ранее заполненной таблицы)

  Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    Если Диалог.Выбрать() Тогда
        КопироватьФайл(ТекущаяСтрока.ПутьКФайлу, Диалог.Каталог + "\" + ТекущаяСтрока.Комментарий);
    КонецЕсли;

 

Запись

Функция ВыполнитьЗаписьНаСервере(ТекстЗапроса)
    
    Соединение = Новый HTTPСоединение("api.trello.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос(ТекстЗапроса + "key=" + Ключ + "&token=" + Токен);
    Результат = Соединение.Записать(Запрос);
    
    Возврат(Результат.КодСостояния);
    
КонецФункции

Функция Дата1С(ДатаISO)
    
    Если ДатаISO = Неопределено ИЛИ ПустаяСтрока(ДатаISO) Тогда
        Возврат(Дата(1, 1, 1, 0, 0, 0));
    КонецЕсли;
    
    Возврат(XMLЗначение(Тип("Дата"), ДатаISO));
    
КонецФункции

 

Переместить на доску

ТекстЗапроса = "1/cards/" + IDКарточки + "/?idBoard=" + Результат.Значение + "&";
        РезультатЗапроса = ВыполнитьЗаписьНаСервере(ТекстЗапроса);

 

Переместить в колонку

ТекстЗапроса = "1/cards/" + IDКарточки + "/?idList=" + Результат.Значение + "&";
        РезультатЗапроса = ВыполнитьЗаписьНаСервере(ТекстЗапроса);

 

Установить тему

ТекстЗапроса = "1/cards/" + IDКарточки + "/?name=" + Тема + "&";
    Результат = ВыполнитьЗаписьНаСервере(ТекстЗапроса);

 

Установить дату исполнения

ТекстЗапроса = "1/cards/" + IDКарточки + "/?due=" + ?(ДатаИсполнения = Дата(1, 1, 1, 0, 0, 0), "", ДатаTrello(УниверсальноеВремя(ДатаИсполнения))) + "&";
    Результат = ВыполнитьЗаписьНаСервере(ТекстЗапроса);

 

Добавить комментарий

Соединение = Новый HTTPСоединение("api.trello.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос("1/cards/" + IDКарточки + "/actions/comments/?text=" + Комментарий + "&key=" + Ключ + "&token=" + Токен);
    Результат = Соединение.ОтправитьДляОбработки(Запрос);

 

Добавить файл

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.МножественныйВыбор = Ложь;
    Если ДиалогВыбора.Выбрать() Тогда
        ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
        Поз = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца);
        Если Поз > 0 Тогда
            ИмяФайла = Прав(ПутьКФайлу, СтрДлина(ПутьКФайлу) - Поз);
            ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
            
            Соединение = Новый HTTPСоединение("api.trello.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL());
            Запрос = Новый HTTPЗапрос("1/cards/" + IDКарточки + "/attachments/?key=" + Ключ);
            boundary = СтрЗаменить(Новый УникальныйИдентификатор,"-","");
            МассивДД = Новый Массив;
            Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + boundary);
            ПереводСтроки = Символы.ВК + Символы.ПС;
            Текст = "--" + boundary + ПереводСтроки;
            Текст = Текст + "Content-Disposition: form-data; name=""token""" + ПереводСтроки + ПереводСтроки;
            Текст = Текст + Токен + ПереводСтроки;
            Текст = Текст + "--" + boundary + ПереводСтроки;
            Текст = Текст + "Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайла + """" + ПереводСтроки + ПереводСтроки;
            МассивДД.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(Текст, КодировкаТекста.UTF8, Ложь)));
            МассивДД.Добавить(ДвоичныеДанныеФайла);    
            Текст = ПереводСтроки;
            Текст = Текст + "--" + boundary + "--" + ПереводСтроки + ПереводСтроки;
            МассивДД.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ПолучитьБуферДвоичныхДанныхИзСтроки(Текст, КодировкаТекста.UTF8, Ложь)));
            ТелоДД = СоединитьДвоичныеДанные(МассивДД);
            Запрос.УстановитьТелоИзДвоичныхДанных(ТелоДД);
            Результат = Соединение.ОтправитьДляОбработки(Запрос);
            Если Результат.КодСостояния = 200 Тогда
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Файл успешно добавлен");
            Иначе
                ПоказатьПредупреждение(, "Не удалось добавить файл !");
            Конецесли;
        КонецЕсли;
    КонецЕсли;

 

Установка пользовательского поля

Соединение = Новый HTTPСоединение("api.trello.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос("1/cards/" + IDКарточки + "/customField/" + СтрокаТаблицы.ID + "/item?key=" + Ключ + "&token=" + Токен);
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
    
    Если ЗначениеПоля = "" ИЛИ ЗначениеПоля = 0 ИЛИ ЗначениеПоля = Неопределено Тогда
        Если Строка(СтрокаТаблицы.ТипЗначения) = "Строка" И СтрокаТаблицы.СписокЗначений.Количество() > 0 Тогда
            СтруктураДанныхJSON = Новый Структура("idValue", "");
        Иначе
            СтруктураДанныхJSON = Новый Структура("value", "");
        КонецЕсли;
    ИначеЕсли СтрокаТаблицы.ТипЗначения = Новый ОписаниеТипов("Булево") И НЕ ЗначениеПоля Тогда
        СтруктураДанныхJSON = Новый Структура("value", "");
    Иначе
        Если Строка(СтрокаТаблицы.ТипЗначения) = "Строка" И СтрокаТаблицы.СписокЗначений.Количество() > 0 Тогда
            СтруктураДанныхJSON = Новый Структура("idValue", ЗначениеПоля);
        Иначе
            Если Строка(СтрокаТаблицы.ТипЗначения) = "Строка" Тогда
                СтруктураДанныхПоля = Новый Структура("text", Строка(ЗначениеПоля));
            ИначеЕсли Строка(СтрокаТаблицы.ТипЗначения) = "Число" Тогда
                СтруктураДанныхПоля = Новый Структура("number", СтрЗаменить(СтрЗаменить(Строка(ЗначениеПоля), Символы.НПП, ""), ",", "."));
            ИначеЕсли СтрокаТаблицы.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда
                СтруктураДанныхПоля = Новый Структура("checked", "true");
            ИначеЕсли Строка(СтрокаТаблицы.ТипЗначения) = "Дата" Тогда
                СтруктураДанныхПоля = Новый Структура("date", ДатаTrello(ЗначениеПоля));
            КонецЕсли;
            СтруктураДанныхJSON = Новый Структура("value", СтруктураДанныхПоля);
        КонецЕсли;
    КонецЕсли;
    
    ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
    СтрокаJS = ЗаписьJSON.Закрыть();
    Запрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Результат = Соединение.Записать(Запрос);

 

Trello Интеграция

См. также

Интеграция 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и др.)

Облачные сервисы, хостинг 8.3.14 Конфигурации 1cv8 Россия Платные (руб)

Готовое решение по интеграции 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и любое совместимое объектное хранилище). Решение даёт возможность осуществлять как основные операции (получить список, закачать, скачать, удалить и т.д.), так и расширенные (работа с бакетами, генерация ссылок, работа с правами и т.д.) с объектным хранилищем S3 прямо из 1С.

31200 руб.

27.04.2021    18586    24    70    

39

В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана

Облачные сервисы, хостинг Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С.

18.03.2024    556    capitan    0    

9

Готовое облако или выделенный сервер? Экономика владения 1С

Облачные сервисы, хостинг Бесплатно (free)

Если вы работаете с 1С, то, скорее всего, используете для этого собственный сервер. Это решение дает больше гибкости: железо всегда под рукой, в любой момент можно поменять конфигурацию или установить дополнительное ПО. Например, чтобы организовать бухгалтеру удаленный рабочий стол. Но насколько этот вариант экономически выгоден для компании? Мы сравнили три варианта развертывания 1С: на собственном сервере, на арендованном в Selectel и в готовом облаке. Какие есть преимущества и недостатки у каждого варианта и что выгоднее — разбираем в статье.

13.03.2024    606    doctor_it    6    

0

Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

Облачные сервисы, хостинг Linux Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

25.02.2024    2254    capitan    0    

6

Бесплатный митап “1С в облаке: возможности и риски, решения и кейсы”

Облачные сервисы, хостинг Мероприятия Бесплатно (free)

На митапе говорили о переносе 1С в облако: какие решения есть на рынке, их достоинства и недостатки. На примере реальных кейсов узнали особенности перехода, сроки, бюджеты, риски и возможности. В программе митапа 5 докладов и круглый стол.

06.02.2024    2888    0    Infostart    0    

18

Из 1С в S3 и обратно. Работа с объектным хранилищем

Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье демонстрируется работа с объектным хранилищем 1С с использованием подписанных (pre-signed) ссылок. Загрузка, скачивание и удаление реализованы на "чистом" языке 1С без внешних компонент и сервисов. В качестве провайдера хранилища S3 будем использовать Яндекс.Облако

06.02.2024    4425    Sedaiko    13    

64

В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)

Linux Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

На прошедшем вебинаре "В облаке, как дома: Как настроить рабочее место пользователя 1С на базе РЕД ОС" мы договорились, что продолжением будет установка соединения по HTTPS и архивирование. Это финальные штрихи в настройке рабочего места. Вот и оно (продолжение) или они (штрихи), прошу под кат...

29.01.2024    788    capitan    5    

6

Непрерывный сбор данных из торговых точек для визуализации в Yandex DataLens

Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Бесплатно (free)

В данной статье рассматривается пример непрерывного сбора данных о продажах со множества торговых точек и последующей визуализации через Yandex DataLens в режиме реального времени.

05.01.2024    2088    Sedaiko    23    

51
Оставьте свое сообщение