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

26.03.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Интеграция 1С и Trello:
.epf 16,76Kb
15
15 Скачать (1 SM) Купить за 1 850 руб.

В примерах описан далеко не весь набор 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С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3210    1    2    

11

Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Облачные сервисы, хостинг Программист Пользователь Платформа 1С v8.3 Управляемые формы 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Данная система предназначена всем, кому нужно выгружать данные в SPOT 2D или в ОРИМИ. Позволяет гибко настроить получение данных для каждого поля файла и файла выгрузки в целом. Имеет отборы по организации, складу, и папкам номенклатуры. Есть возможность выгружать данные как вручную, с выбором конкретного файла, за конкретный период, так и в автоматическом режиме в указанное вами время. Выгрузка может выполняться в файл или через http напрямую. Имеется подробная справка по настройке, а также примеры запросов для приведенных в примерах файлов выгрузки. Может работать в составе любой конфигурации! Обновление от 31.03.2020!

14400 руб.

19.10.2018    28703    7    1    

9

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1320    capitan    0    

0

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

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    1723    capitan    5    

12

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

Перенос 1С в облако — это процесс, который требует тщательного планирования и грамотного исполнения, чтобы избежать простоев и обеспечить бесперебойную работу системы. В этой статье рассмотрим пошаговую инструкцию по переносу 1С в облако, уделяя особое внимание минимизации рисков и обеспечению беспрерывной работы вашего бизнеса.

02.09.2024    444    EFSOL_oblako    0    

-2

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

Примеры решения некоторых насущных проблем при работе с облачными сервисами, покрываемых CLI версией Открытого пакета интеграций - OInt CLI.

05.08.2024    1847    bayselonarrend    7    

26

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

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана" в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая прочая... Это основное блюдо, на закуску разберемся с отказоустойчивостью. В этой публикации для PostgreSQL, заодно попробуем сделать это по новому.

17.06.2024    7672    capitan    18    

40

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

В прошлых публикациях мы, не торопясь, после настройки персонального рабочего места на РедОС 7.3, посмотрели РедОС 8 и почти полностью собрали рабочую сеть 1С на отечественной ОС подходящую для работы среднего размера компании. С веб-серверами, доменной авторизацией и прочая прочая... Осталось настроить регулярное архивирование, чтобы не потерять нажитое.

27.05.2024    1462    capitan    6    

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