Интеграция 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    18749    24    70    

39

Виртуальная АТС Ростелеком - интеграция с 1С

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

Продукт интеграции возможностей Виртуальной АТС Ростелеком в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, динамическая маршрутизация входящих звонков, ведение журнала, анализ использования связи.

12000 руб.

04.02.2021    19278    18    0    

24

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

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

В одном из лучших руководств администраторов "UNIX and Linux System Administration Handbook, © 2018 Pearson Education lnc." описывается такой метод настройки систем: "Копируй, вставляй, молись". Какой бы ни была подробной инструкция и на какой бы типовой системе она ни составлялась, всегда что-то может пойти не так. В этой публикации рассмотрим, как искать и устранять ошибки авторизации ОС сервером 1С на базе linux.

02.05.2024    539    capitan    0    

9

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

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

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

18.03.2024    668    capitan    0    

9

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

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

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

13.03.2024    643    doctor_it    6    

0

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

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

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

25.02.2024    2313    capitan    0    

6

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

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

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

06.02.2024    2921    0    Infostart    0    

18

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

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

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

06.02.2024    4635    Sedaiko    13    

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