Интеграция 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 Управляемые формы 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

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

14400 руб.

19.10.2018    28611    7    1    

9

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

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

02.09.2024    343    EFSOL_oblako    0    

0

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

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

05.08.2024    1721    bayselonarrend    7    

26

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

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

17.06.2024    7148    capitan    18    

40

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

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

27.05.2024    1306    capitan    6    

9

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

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

02.05.2024    1288    capitan    0    

11

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

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

18.03.2024    1451    capitan    1    

9

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

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

13.03.2024    1026    doctor_it    6    

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