Как программно в трелло создать карточку задачи 1с

от admin

Обменивайтесь задачами между самой популярной тикет-системой Трелло и самой популярной системой учета, 1С

Самая популярная система управления проектами Trello может обмениваться задачами с 1С:CRM.

  • Вы можете предоставить доступ каждому вашему клиенту в созданную для этого доску с задачами, где они смогут принимать участие в планировании работ, добавлять этапы, контролировать сроки, устанавливать ответственных.
  • Все это будет осуществляться в удобном интерфейсе с любого устройства. При этом не придется никого пускать в вашу CRM систему.
  • Из Trello задачи будут загружены в вашу CRM, распределены по сотрудникам, попадут в историю работы с клиентом.
  • CRM напомнит сотруднику о приближении плановых сроков по задаче.
  • CRM Вернет в Trello обновленный статус этапа проекта

Увеличение продаж портфелей услуг на 10% за счет централизованного прозрачного для заказчика управления

Лицензирование

  • Поддержка на 1 год
  • Внедрение

Интеграция с Trello

30 000 руб.

  • 9 960 руб/год
  • 2 990 руб/час

Модуль предоставляется без ограничения на количество пользователей

В комплекте поставки предоставляется:

  1. Расширение для встраивания
  2. Инструкция по встраиванию
  3. Инструкция по использованию

При необходимости, можем оказать помощь во внедрении и доработках на платной основе

Поддержка

Мы постоянно развиваем функционал, отвечающий последним требованиям бизнеса.

Чтобы пользоваться новым функционалом, а так же получать интеграцию, адаптированную под новые релизы 1С следует оплатить поддержку.

Совместимость

Модуль встраивается как расширение в следующие типовые конфигурации:

  1. 1С:CRM 3.0
  2. 1C:Управление торговлей и взаимоотношениями с клиентами (CRM)
  3. 1C:Модуль 1С:CRM для ERP и КА
  4. Другие конфигурации — по запросу

Работоспособность подтверждена для блока CRM не ниже 3.0.19.31

Для работы также необходима установленная платформа «1С:Предприятие 8.3» (не ниже версии 8.3.15)

Как программно в трелло создать карточку задачи 1с


Познакомимся поближе с каждым элементом.

Доска задач Трелло


Чтобы добавить шаблон в свой аккаунт, нажмите на кнопку «Использование шаблона» и выберите настройки доски.

  • Приватная — доступна только вам и тем, кого вы пригласили.
  • Командная — доступна для команды, которую вы создали.
  • Публичная — доступна любому пользователю интернета. Она индексируется поисковыми системами — её могут найти по соответствующему запросу. Вот пример открытой доски.
Списки (или колонки) Трелло
  • Статусы задач. Например, «Сделать», «В работе», «В доработке», «Сделано».
  • Время. Например, «Вчера», «Сегодня», «Завтра», «Когда-нибудь потом» или «Январь», «Февраль», «III квартал 2020».
  • Приоритет. Например, «Срочно», «Выполнить в течение 2 дней», «Выполнить в течение недели».
  • Виды задач. Например, «SEO», «Дизайн», «Контент», «Разработка».
  • Этапы. Например, «Первый звонок», «Второй звонок», «Встреча», «Сделка», «Лиды».
Карточки Трелло

Примеры использования: чем можно управлять с помощью Трелло
Личный планировщик


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

Список дел



Доска Трелло может выполнять роль ежедневника для записи рутинных задач. Задачи можно разбивать в колонки по их виду (на рабочие, семейные, личные) или просто распределять их по дням недели. Выставленные сроки выполнения помогут вспомнить о них заранее. Цветовыми метками можно помечать важность дела.

Планирование мероприятия


Чтобы организовать публичное мероприятие, придётся координировать разных людей: менеджеров, маркетологов, PR-специалистов, экспертов и спикеров, бухгалтерию, внешних подрядчиков. Создание единой доски в Трелло поможет разбить процесс на этапы и связать между собой ответственных за направление.

Контент-план


Трелло поможет организовать работу с публикациями на неделю, месяц, квартал или год. Обратите внимание, что используются колонки смешанного типа — и по виду задач («Написание», «Редактура», «Иллюстрации»), и по их статусу («Готово к публикации», «Опубликовано»). С помощью цветовых меток можно обозначать вид контента (подкаст, статья, инфографика и так далее).

Баг-трекер


Для регистрации ошибок в системе удобно организовать доску с колонками «Входящие», «Несрочные баги», «Срочные баги», «В процессе», «Блокирующие баги», «Тестируется» и «Исправлено». Пользователи, которым нужна информация о ходе работы, могут следить за процессом исправления багов.

Мониторинг проблем в бизнес-процессах


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

Трекер задач для технической поддержки


Для заявок, поступающих в IT-отдел, тоже можно завести отдельную доску. Там будет удобно фиксировать проблемы пользователей и пути их решения.

Воронка продаж


Доска в Трелло для отработки воронки продаж будет полезна небольшим отделам продаж. Например, от отдела маркетинга в первую колонку поступает информация о потенциальных клиентах. Ответственный за доску с помощью метки присваивает каждой задаче степень приоритетности. Менеджеры обновляют данные в карточке и перемещают её между колонками.

Подбор персонала


Доска в Трелло может облегчить коммуникацию между HR и руководителями других отделов. Руководитель, которому нужен новый сотрудник, заносит в первую колонку карточку с описанием вакансии и требованиями к кандидату. Специалист по найму переносит карточку в нужную колонку в зависимости от приоритета или статуса, например «Поиск приостановлен», «К публикации», «Поиск идёт» и так далее.

Адаптация новых сотрудников


Чтобы помочь новым сотрудникам освоиться, нужно много времени и сил. Доска Трелло зачастую может заменить специальный курс обучения.

Стратегическое планирование


В Трелло можно загружать стратегические планы своего отдела или компании. Если добавить всех заинтересованных лиц (руководителей, инвесторов, клиентов и тех, кто принимает решения), вы уменьшите количество совещаний и встреч. Процессы будут на виду, и вам будет проще объяснять свои решения.

Сколько стоит Трелло?
Как работать в Трелло с максимальной пользой


Все участники доски должны знать, как устроен рабочий процесс. Когда перемещать карточку — сразу после выполнения или раз в неделю после общего созвона? Кто отмечает карточку как выполненную — исполнитель или организатор? Какие приняты цветовые метки? Как использовать чек-листы? Эти правила должны быть прописаны и понятны.

Выводы

How to integrate 1C and Trello

Humanity is experiencing a pandemic unprecedented in modern history, offices are closing down, employees are starting to work online, everything is changing. In these conditions, it’s essential to have cloud tools for planning and managing projects. One such tool is Trello.

Trello allows you to quickly and easily organize tasks, to-do lists, initiatives, discussions and ideas on one board. However, there are also disadvantages — Trello does not have time tracking, and the reporting required in any project or service activity is quite limited. In conditions when you need to get reports on the tasks of employees in the context of Customers / Projects / Employees etc. 1C may come to the rescue.
As we know, 1C is ideal for solving accounting problems. So we can quickly implement a scenario when Trello is working with tasks, and in 1C application, information accumulated, processed, and based on it, the necessary reporting generated or other processes using this data are performed, for example, calculating KPI or payroll, billing customers.

Can we connect 1C and Trello? If it were possible, this would allow an employee in 1C to see changes in Trello cards quickly.

I’ll answer right away — yes, it’s possible! Below you will see how to do it.

First, let’s look at a ready-made solution and then analyze the source code.

So, we have a board in Trello:

1.png

This is our working Trello, in parallel with the main work, we are building a rocket for flying to Mars — a little competition with Elon Musk.

And here is the Trello board already in 1C:

2.png

Let’s add another card to Trello and see how it displays in 1C:

3.png

Add to the member’s card and write a comment:

4.png

Then we update the data in 1C and voila:

5.png

The card we just created is already in 1C.

Well, now let’s look at how it all works.

First, you need to get the API key and token. How to do this is described on the page: https://developers.trello.com/reference#api-key-tokens

Once you have received the API key and token, you can open 1C and start writing code.

Let’s create a new 1C, add a subsystem “Trello” and a server module “Trello” there:

6.png

Also, let’s add two constants (the API key and token will be stored in them) and the Common form on which these constants will be located:

7.png

Finally, we add three Catalogs and one Data Processor. I’ll not describe the attributes of Catalogs, and you can look at them independently in the source code, which is attached to this article.

8.png

All main work will take place in Data Processor “Trello”. Let’s look at how it works.

Two dynamic lists are placed on the form: a list of boards and a list of cards. (Attention! To simplify the example, we do not consider working with Trello lists, only with boards and cards)

9.png

Also on the form are three commands:

10.png

Well — now let’s move on to the 1C source code.

Here is the source code for the “RefreshAll” command:

Procedure Refresh(Command)

ShowQueryBox(New NotifyDescription(«RefreshCompletion», ThisObject),«The refresh may take a long time. Continue?», QuestionDialogMode.YesNo);

EndProcedure

Procedure RefreshCompletion ( QuestionResult , AdditionalOptions ) Export

If QuestionResult = DialogReturnCode . Yes Then

Trello . GettingDataTrello ();

EndProcedure

If the user answers “Yes” to the question, then the GettingDataTrello() procedure from the server module is called. Here is the source code for this procedure:

Procedure GettingDataTrello () Export

Connection = Undefined;

GetAndRefreshBoards ( Connection );

arrayBoards = GetListBoards ();

For Each board In arrayBoards Do

GetAndRefreshCards ( board , Connection );

EndProcedure

The operation algorithm is as follows:

1. First we receive (or update) data about our boards ( GetAndRefreshBoards ( Connection ) );
2. Then get an array of updated boards and in a cycle we process this array ( arrayBoards = Trello.GetListBoards () );
3. Inside the cycle, we get all the cards on the current board ( GetAndRefreshCards ( board, Connection) );

Consider each of the procedures in more detail. Let’s start with GetAndRefreshBoards :

Function GetAndRefreshBoards ( Connection = Undefined) Export

ReturnParameters = GettingResultQueryJSON ( «GetBoards» . Connection );

If Not ReturnParameters . Error Then

For Each board In ReturnParameters . Result Do

RefreshBoard ( board , Connection );

Return Not ReturnParameters . Error ;

EndFunction

Procedure RefreshBoard ( board , Connection ) Export

Query = New Query ;

Query . Text =

| Trello_Boards.Ref AS Ref

| Catalog.Trello_Boards AS Trello_Boards

| Trello_Boards.id = &id» ;

Query . SetParameter ( «id» , board . id );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

BoardObject = Selection . Ref . GetObject ();

BoardObject = Catalogs . Trello_Boards . CreateItem ();

FillPropertyValues ( BoardObject , board );

BoardObject . Description = board . name ;

BoardObject . desc_ = board . desc ;

BoardObject . t_memberships . Clear ();

For Each member In board . memberships Do

new_member = BoardObject . t_memberships . Add ();

FillPropertyValues ( new_member , member );

new_member . Member = RefreshMember ( member . idMember , Connection )

BoardObject . Write ();

EndProcedure

First, the GettingResultQueryJSON() procedure is called with the parameter GetBoards . This procedure creates a connection to Trello, transfers all the necessary parameters to Trello, and gets back a list of all the boards.

The source code of the GettingResultQueryJSON () procedure will be considered later.

So, from Trello, we got a list of boards, and in a loop, we process this list ( RefreshBoard ( board , Connection ) ).

Here, too, is simple: we are looking for the current board in the Catalog “Trello_Boards” by ID. If nothing is found, a new entry is created in the Catalog “Trello_Boards” with these IDs. After that, the attributes (properties) of the current board are filled.

As we know, each board has several members. In the Catalog “Trello_Boards” for storing members, the tabular part “t_memberships” is provided. In a cycle, this tabular part is filled with the data of members:

BoardObject . t_memberships . Clear ();

For Each member In board . memberships Do

new_member = BoardObject . t_memberships . Add ();

FillPropertyValues ( new_member , member );

new_member . Member = RefreshMember ( member . idMember , Connection )

After filling in the member’s data, the procedure RefreshMember() is called, which updates the member’s data in the Catalog “Trello_members”. Here is the source code for this procedure:

Function RefreshMember ( idMember , Connection )

Query = New Query ;

Query . Text =

| Trello_members.Ref AS Ref

| Catalog.Trello_members AS Trello_members

| Trello_members.id = &idMember» ;

Query . SetParameter ( «idMember» , idMember );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

MemberObject = Selection . Ref . GetObject ();

MemberObject = Catalogs . Trello_members . CreateItem ();

MemberObject . id = idMember ;

QueryParameters = New Structure ( «MEMBER_ID,fields» , idMember , «fullName,email,confirmed,initials,memberType,username,url,avatarUrl» );

ReturnParameters = GettingResultQueryJSON ( «GetDataMember» , QueryParameters ,, Connection );

If Not ReturnParameters . Error Then

FillPropertyValues ( MemberObject , ReturnParameters . Result );

If Not ValueIsFilled ( MemberObject . Description ) Then

MemberObject . Description = MemberObject . fullName ;

MemberObject . Write ();

Return MemberObject . ref ;

EndFunction

The algorithm of this procedure is similar to the algorithm of the RefreshBoard procedure. The member is also first searched in the Catalog “Trello_members”. If it’s not, then a new one is created.

Also in this procedure, GettingResultQueryJSON , already familiar to us, is called, into which “GetDataMember” parameter is passed, and which returns the data of a specific member.

Well — we took apart the first step, received data on available boards. Let’s go further.

The source code for the procedure GetListBoards is as follows:

Function GetListBoards () Export

Query = New Query ;

Query . Text =

| Trello_boards.Ref AS board

| Catalog.Trello_Boards AS Trello_boards

| NOT Trello_boards.DeletionMark» ;

Return Query . Execute (). Unload (). UnloadColumn ( «board» );

EndFunction

The code is straightforward — a request to the Catalog “Trello_Boards” is created, and a list of available boards is returned.

After receiving the list of available boards, this list is processed in a cycle. And already in the cycle, the information on the cards is updated. Source code of the GetAndRefreshCards() procedure:

Function GetAndRefreshCards ( Board , Connection = Undefined) Export

RequestParameters = New Structure ( «BOARD_ID» , Board . id );

ReturnParameters = GettingResultQueryJSON ( «GetCards» , RequestParameters ,, Connection );

If Not ReturnParameters . Error Then

For Each card In ReturnParameters . Result Do

RefreshCard ( card , Connection );

GetAndRefreshComments ( GetCardByID ( card . id ), Connection );

Return Not ReturnParameters . Error ;

EndFunction

Procedure RefreshCard ( card , Connection ) Export

Query = New Query ;

Query . Text =

| Trello_cards.Ref AS Ref

| Catalog.Trello_cards AS Trello_cards

| Trello_cards.id = &id» ;

Query . SetParameter ( «id» , card . id );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

CardObject = Selection . Ref . GetObject ();

CardObject = Catalogs . Trello_cards . CreateItem ();

FillPropertyValues ( CardObject , card );

CardObject . Description = card . name ;

CardObject . desc_ = card . desc ;

CardObject . dateLastActivity = ConvertDate ( card . dateLastActivity );

CardObject . due = ConvertDate ( card . due );

CardObject . t_Members . Clear ();

For Each idMember In card . idMembers Do

newMember = CardObject . t_Members . Add ();

newMember . id = idMember ;

newMember . member = RefreshMember ( idMember , Connection );

CardObject . Write ();

EndProcedure

First, the procedure GettingResultQueryJSON is called with the “ GetCards ” parameter, and it returns the current list of cards from Trello. Then the resulting list in a cycle is processed and updated information on each card (procedure RefreshCard () ).

Information is also updated immediately on the comments for the current card (procedure GetAndRefreshComments () ).

The algorithm of the RefreshCard procedure is similar to the algorithm of the RefreshBoard procedure. First, look for the current card by ID in the Catalog “ Trello_cards ”, if you don’t find it, then create a new card.

Let’s look at the source code for the GetAndRefreshComments procedure:

Function GetAndRefreshComments ( Card , Connection = Undefined) Export

arrayComments = New Array ;

RequestParameters = New Structure ( «id,field» , Card . id , «all» );

ReturnParameters = GettingResultQueryJSON ( «GetCardInfo» , RequestParameters ,, Connection );

If Not ReturnParameters . Error Then

For Each data IN ReturnParameters . Result Do

If data . data . Property ( «text» ) And ValueIsFilled ( data . data . text ) Then

arrayComments . Add ( data );

If Not arrayComments . Count () = 0 Then

cardObject = Card . GetObject ();

cardObject . t_Comments . Clear ();

For Each comment In arrayComments Do

newComment = cardObject . t_Comments . Add ();

newComment . id = comment . id ;

newComment . text = comment . data . text ;

newComment . date = ConvertDate ( comment . date );

newComment . idMember = comment . idMemberCreator ;

newComment . member = RefreshMember ( comment . idMemberCreator , Connection );

cardObject . Write ();

Return Not ReturnParameters . Error ;

EndFunction

First, we get data on a specific card from Trello (the procedure GettingResultQueryJSON already known to us with the parameter “ GetCardInfo ”). Then, if there are comments in the card, it is added to the array arrayComments and then the data from this array is added to the tabular section t_Comments of the Catalog “Trello_cards”.

Thus, we obtain from Trello data on boards, cards, and comments, and write this data in 1C.

In general, using REST API, you can not only receive data from Trello but also add your data to Trello. For example, you can add a new card to 1C, and it will appear in Trello.

A detailed description of REST API is on this page: https://developer.atlassian.com/cloud/trello/rest/

Oops, we did not consider the source code of the last procedure GettingResultQueryJSON . Well, let’s do it:

Function GettingResultQueryJSON ( Kind , RequestParameters = Undefined, RequestType = «GET» , HTTPConnection = Undefined)

ParametersAuthorization = GetParametersAuthorization ();

ReturnParameters = InitializeReturnParameters ();

If Kind = “GetBoards” Then

ResourceAddress = «/1/members/me/boards?» ;

ElsIf Kind = «GetDataMember» Then

ResourceAddress = «/1/members/» + RequestParameters . MEMBER_ID + «?fields EN-US» style=»font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:»Courier New»;mso-bidi-font-family:»Lohit Devanagari»; color:red»>+ RequestParameters . fields + «&» ;

ElsIf Kind = «RefreshBoard» Then

ResourceAddress = «/1/boards/» + RequestParameters . id + «/» + RequestParameters . name + «?value EN-US» style=»font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:»Courier New»; mso-bidi-font-family:»Lohit Devanagari»;color:red»>+ RequestParameters . value + «&» ;

ElsIf Kind = «GetCards» Then

ResourceAddress = «/1/boards/» + RequestParameters . BOARD_ID + «/cards?» ;

ElsIf Kind = «GetCardInfo» Then

ResourceAddress = «/1/cards/» + RequestParameters . id + «/actions?» + RequestParameters . field + «&» ;

ResourceAddress = StrReplace ( ResourceAddress , » » , «%20» );

ResourceAddress = ResourceAddress + «key EN-US» style=»font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:»Courier New»;mso-bidi-font-family:»Lohit Devanagari»; color:red»>+ ParametersAuthorization . Key + «&token EN-US» style=»font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:»Courier New»;mso-bidi-font-family:»Lohit Devanagari»;color:red»>+ ParametersAuthorization . Token ;

If HTTPConnection = Undefined Then

HTTPConnection = New HTTPConnection ( «api.trello.com» , 443 . New OpenSSLSecureConnection );

HTTPRequest = New HTTPRequest ();

HTTPRequest . ResourceAddress = ResourceAddress ;

If RequestType = «GET» Then

HTTPResponse = HTTPConnection . Get ( HTTPRequest );

ElsIf RequestType = «POST» Then

HTTPResponse = HTTPConnection . Post ( HTTPRequest );

ElsIf RequestType = «PUT» Then

HTTPResponse = HTTPConnection . HTTPConnection ( «PUT» , HTTPRequest );

ElsIf RequestType = «DELETE» Then

HTTPResponse = HTTPConnection . HTTPConnection ( «DELETE» , HTTPRequest );

If Not HTTPResponse . StatusCode <> 200 Then

JSONReader = New JSONReader ;

JSONReader . SetString ( HTTPResponse . GetBodyAsString ());

ReturnParameters . Result = ReadJSON ( JSONReader , False);

ReturnParameters . Result = HTTPResponse . GetBodyAsString ();

ReturnParameters . Error = True;

Return ReturnParameters ;

EndFunction

Function GetParametersAuthorization () Export

ParametersAuthorization = New Structure ( «Key,Token» );

ParametersAuthorization . Key = Constants . Trello_Key . Get ();

ParametersAuthorization . Token = Constants . Trello_Token . Get ();

Return ParametersAuthorization ;

EndFunction

Function InitializeReturnParameters () Export

ReturnParameters = New Structure ( «Error, Result» );

ReturnParameters . Error = False;

ReturnParameters . Result = «» ;

Return ReturnParameters ;

EndFunction

The function GetParametersAuthorization returns authorization parameters for the Trello server. The function InitializeReturnParameters initializes the structure into which the response from the Trello server will be written.

Then an HTTP Request is created with specific parameters, depending on what information we want to get from Trello. This request is sent to the server (in this example, we use only the GET request), and the server response is processed.

If there is no error ( Not HTTPResponse.StatusCode <> 200 ), then the response from the server is converted to the JSON format and returned.

Also, if you add processing of additional commands (for example, work with lists or attachments) to this function, you can make full integration of your 1C program and Trello.

So, we made a simple example of 1C and Trello integration. As you can see, the 1C platform is very flexible, and it’s effortless to connect with any of the other information systems.

Читать:
Как подключить камеру заднего вида к навигатору

You can download this Example for your own application.

If you have any questions about this article, you can always get answers on our forum: https://1c-dn.com/forum/

Function InitializeReturnParameters () Export

ReturnParameters = New Structure ( «Error, Result» );

ReturnParameters . Error = False;

ReturnParameters . Result = «» ;

Return ReturnParameters ;

EndFunction

1C Developer
18+ years of experience in the software industry in Russia and Germany. My main fields of expertise are developing and implementation of business applications (Retail, CRM, WMS, and Accounting) and integration of software with POS equipment and web portals.

Как программно в трелло создать карточку задачи 1с

Trello: управление задачами

Планирование в Трелло
Возможности Трелло
  • Скачать Trello для Windows и Mac
  • Cкачать приложение Trello для Android и iOS
Как пользоваться Трелло


Познакомимся поближе с каждым элементом.

Доска задач Трелло


Чтобы добавить шаблон в свой аккаунт, нажмите на кнопку «Использование шаблона» и выберите настройки доски.

  • Приватная — доступна только вам и тем, кого вы пригласили.
  • Командная — доступна для команды, которую вы создали.
  • Публичная — доступна любому пользователю интернета. Она индексируется поисковыми системами — её могут найти по соответствующему запросу. Вот пример открытой доски.
Списки (или колонки) Трелло
  • Статусы задач. Например, «Сделать», «В работе», «В доработке», «Сделано».
  • Время. Например, «Вчера», «Сегодня», «Завтра», «Когда-нибудь потом» или «Январь», «Февраль», «III квартал 2020».
  • Приоритет. Например, «Срочно», «Выполнить в течение 2 дней», «Выполнить в течение недели».
  • Виды задач. Например, «SEO», «Дизайн», «Контент», «Разработка».
  • Этапы. Например, «Первый звонок», «Второй звонок», «Встреча», «Сделка», «Лиды».
Карточки Трелло

Примеры использования: чем можно управлять с помощью Трелло
Личный планировщик


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

Список дел



Доска Трелло может выполнять роль ежедневника для записи рутинных задач. Задачи можно разбивать в колонки по их виду (на рабочие, семейные, личные) или просто распределять их по дням недели. Выставленные сроки выполнения помогут вспомнить о них заранее. Цветовыми метками можно помечать важность дела.

Планирование мероприятия


Чтобы организовать публичное мероприятие, придётся координировать разных людей: менеджеров, маркетологов, PR-специалистов, экспертов и спикеров, бухгалтерию, внешних подрядчиков. Создание единой доски в Трелло поможет разбить процесс на этапы и связать между собой ответственных за направление.

Контент-план


Трелло поможет организовать работу с публикациями на неделю, месяц, квартал или год. Обратите внимание, что используются колонки смешанного типа — и по виду задач («Написание», «Редактура», «Иллюстрации»), и по их статусу («Готово к публикации», «Опубликовано»). С помощью цветовых меток можно обозначать вид контента (подкаст, статья, инфографика и так далее).

Баг-трекер


Для регистрации ошибок в системе удобно организовать доску с колонками «Входящие», «Несрочные баги», «Срочные баги», «В процессе», «Блокирующие баги», «Тестируется» и «Исправлено». Пользователи, которым нужна информация о ходе работы, могут следить за процессом исправления багов.

Мониторинг проблем в бизнес-процессах


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

Трекер задач для технической поддержки


Для заявок, поступающих в IT-отдел, тоже можно завести отдельную доску. Там будет удобно фиксировать проблемы пользователей и пути их решения.

Воронка продаж


Доска в Трелло для отработки воронки продаж будет полезна небольшим отделам продаж. Например, от отдела маркетинга в первую колонку поступает информация о потенциальных клиентах. Ответственный за доску с помощью метки присваивает каждой задаче степень приоритетности. Менеджеры обновляют данные в карточке и перемещают её между колонками.

Подбор персонала


Доска в Трелло может облегчить коммуникацию между HR и руководителями других отделов. Руководитель, которому нужен новый сотрудник, заносит в первую колонку карточку с описанием вакансии и требованиями к кандидату. Специалист по найму переносит карточку в нужную колонку в зависимости от приоритета или статуса, например «Поиск приостановлен», «К публикации», «Поиск идёт» и так далее.

Адаптация новых сотрудников


Чтобы помочь новым сотрудникам освоиться, нужно много времени и сил. Доска Трелло зачастую может заменить специальный курс обучения.

Стратегическое планирование


В Трелло можно загружать стратегические планы своего отдела или компании. Если добавить всех заинтересованных лиц (руководителей, инвесторов, клиентов и тех, кто принимает решения), вы уменьшите количество совещаний и встреч. Процессы будут на виду, и вам будет проще объяснять свои решения.

Сколько стоит Трелло?
Как работать в Трелло с максимальной пользой


Все участники доски должны знать, как устроен рабочий процесс. Когда перемещать карточку — сразу после выполнения или раз в неделю после общего созвона? Кто отмечает карточку как выполненную — исполнитель или организатор? Какие приняты цветовые метки? Как использовать чек-листы? Эти правила должны быть прописаны и понятны.

How to integrate 1C and Trello

Humanity is experiencing a pandemic unprecedented in modern history, offices are closing down, employees are starting to work online, everything is changing. In these conditions, it’s essential to have cloud tools for planning and managing projects. One such tool is Trello.

Trello allows you to quickly and easily organize tasks, to-do lists, initiatives, discussions and ideas on one board. However, there are also disadvantages — Trello does not have time tracking, and the reporting required in any project or service activity is quite limited. In conditions when you need to get reports on the tasks of employees in the context of Customers / Projects / Employees etc. 1C may come to the rescue.
As we know, 1C is ideal for solving accounting problems. So we can quickly implement a scenario when Trello is working with tasks, and in 1C application, information accumulated, processed, and based on it, the necessary reporting generated or other processes using this data are performed, for example, calculating KPI or payroll, billing customers.

Can we connect 1C and Trello? If it were possible, this would allow an employee in 1C to see changes in Trello cards quickly.

I’ll answer right away — yes, it’s possible! Below you will see how to do it.

First, let’s look at a ready-made solution and then analyze the source code.

So, we have a board in Trello:

1.png

This is our working Trello, in parallel with the main work, we are building a rocket for flying to Mars — a little competition with Elon Musk.

And here is the Trello board already in 1C:

2.png

Let’s add another card to Trello and see how it displays in 1C:

3.png

Add to the member’s card and write a comment:

4.png

Then we update the data in 1C and voila:

5.png

The card we just created is already in 1C.

Well, now let’s look at how it all works.

First, you need to get the API key and token. How to do this is described on the page: https://developers.trello.com/reference#api-key-tokens

Once you have received the API key and token, you can open 1C and start writing code.

Let’s create a new 1C, add a subsystem “Trello” and a server module “Trello” there:

6.png

Also, let’s add two constants (the API key and token will be stored in them) and the Common form on which these constants will be located:

7.png

Finally, we add three Catalogs and one Data Processor. I’ll not describe the attributes of Catalogs, and you can look at them independently in the source code, which is attached to this article.

8.png

All main work will take place in Data Processor “Trello”. Let’s look at how it works.

Two dynamic lists are placed on the form: a list of boards and a list of cards. (Attention! To simplify the example, we do not consider working with Trello lists, only with boards and cards)

9.png

Also on the form are three commands:

10.png

Well — now let’s move on to the 1C source code.

Here is the source code for the “RefreshAll” command:

Procedure Refresh(Command)

ShowQueryBox(New NotifyDescription(«RefreshCompletion», ThisObject),«The refresh may take a long time. Continue?», QuestionDialogMode.YesNo);

EndProcedure

Procedure RefreshCompletion ( QuestionResult , AdditionalOptions ) Export

If QuestionResult = DialogReturnCode . Yes Then

Trello . GettingDataTrello ();

EndProcedure

If the user answers “Yes” to the question, then the GettingDataTrello() procedure from the server module is called. Here is the source code for this procedure:

Procedure GettingDataTrello () Export

Connection = Undefined;

GetAndRefreshBoards ( Connection );

arrayBoards = GetListBoards ();

For Each board In arrayBoards Do

GetAndRefreshCards ( board , Connection );

EndProcedure

The operation algorithm is as follows:

1. First we receive (or update) data about our boards ( GetAndRefreshBoards ( Connection ) );
2. Then get an array of updated boards and in a cycle we process this array ( arrayBoards = Trello.GetListBoards () );
3. Inside the cycle, we get all the cards on the current board ( GetAndRefreshCards ( board, Connection) );

Consider each of the procedures in more detail. Let’s start with GetAndRefreshBoards :

Function GetAndRefreshBoards ( Connection = Undefined) Export

ReturnParameters = GettingResultQueryJSON ( «GetBoards» . Connection );

If Not ReturnParameters . Error Then

For Each board In ReturnParameters . Result Do

RefreshBoard ( board , Connection );

Return Not ReturnParameters . Error ;

EndFunction

Procedure RefreshBoard ( board , Connection ) Export

Query = New Query ;

Query . Text =

| Trello_Boards.Ref AS Ref

| Catalog.Trello_Boards AS Trello_Boards

| Trello_Boards.id = &id» ;

Query . SetParameter ( «id» , board . id );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

BoardObject = Selection . Ref . GetObject ();

BoardObject = Catalogs . Trello_Boards . CreateItem ();

FillPropertyValues ( BoardObject , board );

BoardObject . Description = board . name ;

BoardObject . desc_ = board . desc ;

BoardObject . t_memberships . Clear ();

For Each member In board . memberships Do

new_member = BoardObject . t_memberships . Add ();

FillPropertyValues ( new_member , member );

new_member . Member = RefreshMember ( member . idMember , Connection )

BoardObject . Write ();

EndProcedure

First, the GettingResultQueryJSON() procedure is called with the parameter GetBoards . This procedure creates a connection to Trello, transfers all the necessary parameters to Trello, and gets back a list of all the boards.

The source code of the GettingResultQueryJSON () procedure will be considered later.

So, from Trello, we got a list of boards, and in a loop, we process this list ( RefreshBoard ( board , Connection ) ).

Here, too, is simple: we are looking for the current board in the Catalog “Trello_Boards” by ID. If nothing is found, a new entry is created in the Catalog “Trello_Boards” with these IDs. After that, the attributes (properties) of the current board are filled.

As we know, each board has several members. In the Catalog “Trello_Boards” for storing members, the tabular part “t_memberships” is provided. In a cycle, this tabular part is filled with the data of members:

BoardObject . t_memberships . Clear ();

For Each member In board . memberships Do

new_member = BoardObject . t_memberships . Add ();

FillPropertyValues ( new_member , member );

new_member . Member = RefreshMember ( member . idMember , Connection )

After filling in the member’s data, the procedure RefreshMember() is called, which updates the member’s data in the Catalog “Trello_members”. Here is the source code for this procedure:

Function RefreshMember ( idMember , Connection )

Query = New Query ;

Query . Text =

| Trello_members.Ref AS Ref

| Catalog.Trello_members AS Trello_members

| Trello_members.id = &idMember» ;

Query . SetParameter ( «idMember» , idMember );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

MemberObject = Selection . Ref . GetObject ();

MemberObject = Catalogs . Trello_members . CreateItem ();

MemberObject . id = idMember ;

QueryParameters = New Structure ( «MEMBER_ID,fields» , idMember , «fullName,email,confirmed,initials,memberType,username,url,avatarUrl» );

ReturnParameters = GettingResultQueryJSON ( «GetDataMember» , QueryParameters ,, Connection );

If Not ReturnParameters . Error Then

FillPropertyValues ( MemberObject , ReturnParameters . Result );

If Not ValueIsFilled ( MemberObject . Description ) Then

MemberObject . Description = MemberObject . fullName ;

MemberObject . Write ();

Return MemberObject . ref ;

EndFunction

The algorithm of this procedure is similar to the algorithm of the RefreshBoard procedure. The member is also first searched in the Catalog “Trello_members”. If it’s not, then a new one is created.

Also in this procedure, GettingResultQueryJSON , already familiar to us, is called, into which “GetDataMember” parameter is passed, and which returns the data of a specific member.

Well — we took apart the first step, received data on available boards. Let’s go further.

The source code for the procedure GetListBoards is as follows:

Function GetListBoards () Export

Query = New Query ;

Query . Text =

| Trello_boards.Ref AS board

| Catalog.Trello_Boards AS Trello_boards

| NOT Trello_boards.DeletionMark» ;

Return Query . Execute (). Unload (). UnloadColumn ( «board» );

EndFunction

The code is straightforward — a request to the Catalog “Trello_Boards” is created, and a list of available boards is returned.

After receiving the list of available boards, this list is processed in a cycle. And already in the cycle, the information on the cards is updated. Source code of the GetAndRefreshCards() procedure:

Function GetAndRefreshCards ( Board , Connection = Undefined) Export

RequestParameters = New Structure ( «BOARD_ID» , Board . id );

ReturnParameters = GettingResultQueryJSON ( «GetCards» , RequestParameters ,, Connection );

If Not ReturnParameters . Error Then

For Each card In ReturnParameters . Result Do

RefreshCard ( card , Connection );

GetAndRefreshComments ( GetCardByID ( card . id ), Connection );

Return Not ReturnParameters . Error ;

EndFunction

Procedure RefreshCard ( card , Connection ) Export

Query = New Query ;

Query . Text =

| Trello_cards.Ref AS Ref

| Catalog.Trello_cards AS Trello_cards

| Trello_cards.id = &id» ;

Query . SetParameter ( «id» , card . id );

Selection = Query . Execute (). Select ();

If Selection . Next () Then

CardObject = Selection . Ref . GetObject ();

CardObject = Catalogs . Trello_cards . CreateItem ();

FillPropertyValues ( CardObject , card );

CardObject . Description = card . name ;

CardObject . desc_ = card . desc ;

CardObject . dateLastActivity = ConvertDate ( card . dateLastActivity );

CardObject . due = ConvertDate ( card . due );

CardObject . t_Members . Clear ();

For Each idMember In card . idMembers Do

newMember = CardObject . t_Members . Add ();

newMember . id = idMember ;

newMember . member = RefreshMember ( idMember , Connection );

CardObject . Write ();

EndProcedure

First, the procedure GettingResultQueryJSON is called with the “ GetCards ” parameter, and it returns the current list of cards from Trello. Then the resulting list in a cycle is processed and updated information on each card (procedure RefreshCard () ).

Information is also updated immediately on the comments for the current card (procedure GetAndRefreshComments () ).

The algorithm of the RefreshCard procedure is similar to the algorithm of the RefreshBoard procedure. First, look for the current card by ID in the Catalog “ Trello_cards ”, if you don’t find it, then create a new card.

Let’s look at the source code for the GetAndRefreshComments procedure:

Function GetAndRefreshComments ( Card , Connection = Undefined) Export

arrayComments = New Array ;

RequestParameters = New Structure ( «id,field» , Card . id , «all» );

ReturnParameters = GettingResultQueryJSON ( «GetCardInfo» , RequestParameters ,, Connection );

If Not ReturnParameters . Error Then

For Each data IN ReturnParameters . Result Do

If data . data . Property ( «text» ) And ValueIsFilled ( data . data . text ) Then

arrayComments . Add ( data );

If Not arrayComments . Count () = 0 Then

cardObject = Card . GetObject ();

cardObject . t_Comments . Clear ();

For Each comment In arrayComments Do

newComment = cardObject . t_Comments . Add ();

newComment . id = comment . id ;

newComment . text = comment . data . text ;

newComment . date = ConvertDate ( comment . date );

newComment . idMember = comment . idMemberCreator ;

newComment . member = RefreshMember ( comment . idMemberCreator , Connection );

cardObject . Write ();

Return Not ReturnParameters . Error ;

EndFunction

First, we get data on a specific card from Trello (the procedure GettingResultQueryJSON already known to us with the parameter “ GetCardInfo ”). Then, if there are comments in the card, it is added to the array arrayComments and then the data from this array is added to the tabular section t_Comments of the Catalog “Trello_cards”.

Thus, we obtain from Trello data on boards, cards, and comments, and write this data in 1C.

In general, using REST API, you can not only receive data from Trello but also add your data to Trello. For example, you can add a new card to 1C, and it will appear in Trello.

A detailed description of REST API is on this page: https://developer.atlassian.com/cloud/trello/rest/

Oops, we did not consider the source code of the last procedure GettingResultQueryJSON . Well, let’s do it:

Function GettingResultQueryJSON ( Kind , RequestParameters = Undefined, RequestType = «GET» , HTTPConnection = Undefined)

ParametersAuthorization = GetParametersAuthorization ();

ReturnParameters = InitializeReturnParameters ();

If Kind = “GetBoards” Then

ResourceAddress = «/1/members/me/boards?» ;

ElsIf Kind = «GetDataMember» Then

ResourceAddress = «/1/members/» + RequestParameters . MEMBER_ID + «?fields EN-US» style=»font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Lohit Devanagari"; color:red»>+ RequestParameters . fields + «&» ;

ElsIf Kind = «RefreshBoard» Then

ResourceAddress = «/1/boards/» + RequestParameters . id + «/» + RequestParameters . name + «?value EN-US» style=»font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"; mso-bidi-font-family:"Lohit Devanagari";color:red»>+ RequestParameters . value + «&» ;

ElsIf Kind = «GetCards» Then

ResourceAddress = «/1/boards/» + RequestParameters . BOARD_ID + «/cards?» ;

ElsIf Kind = «GetCardInfo» Then

ResourceAddress = «/1/cards/» + RequestParameters . id + «/actions?» + RequestParameters . field + «&» ;

ResourceAddress = StrReplace ( ResourceAddress , » » , «%20» );

ResourceAddress = ResourceAddress + «key EN-US» style=»font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Lohit Devanagari"; color:red»>+ ParametersAuthorization . Key + «&token EN-US» style=»font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"Courier New";mso-bidi-font-family:"Lohit Devanagari";color:red»>+ ParametersAuthorization . Token ;

If HTTPConnection = Undefined Then

HTTPConnection = New HTTPConnection ( «api.trello.com» , 443 . New OpenSSLSecureConnection );

HTTPRequest = New HTTPRequest ();

HTTPRequest . ResourceAddress = ResourceAddress ;

If RequestType = «GET» Then

HTTPResponse = HTTPConnection . Get ( HTTPRequest );

ElsIf RequestType = «POST» Then

HTTPResponse = HTTPConnection . Post ( HTTPRequest );

ElsIf RequestType = «PUT» Then

HTTPResponse = HTTPConnection . HTTPConnection ( «PUT» , HTTPRequest );

ElsIf RequestType = «DELETE» Then

HTTPResponse = HTTPConnection . HTTPConnection ( «DELETE» , HTTPRequest );

If Not HTTPResponse . StatusCode <> 200 Then

JSONReader = New JSONReader ;

JSONReader . SetString ( HTTPResponse . GetBodyAsString ());

ReturnParameters . Result = ReadJSON ( JSONReader , False);

ReturnParameters . Result = HTTPResponse . GetBodyAsString ();

ReturnParameters . Error = True;

Return ReturnParameters ;

EndFunction

Function GetParametersAuthorization () Export

ParametersAuthorization = New Structure ( «Key,Token» );

ParametersAuthorization . Key = Constants . Trello_Key . Get ();

ParametersAuthorization . Token = Constants . Trello_Token . Get ();

Return ParametersAuthorization ;

EndFunction

Function InitializeReturnParameters () Export

ReturnParameters = New Structure ( «Error, Result» );

ReturnParameters . Error = False;

ReturnParameters . Result = «» ;

Return ReturnParameters ;

EndFunction

The function GetParametersAuthorization returns authorization parameters for the Trello server. The function InitializeReturnParameters initializes the structure into which the response from the Trello server will be written.

Then an HTTP Request is created with specific parameters, depending on what information we want to get from Trello. This request is sent to the server (in this example, we use only the GET request), and the server response is processed.

If there is no error ( Not HTTPResponse.StatusCode <> 200 ), then the response from the server is converted to the JSON format and returned.

Also, if you add processing of additional commands (for example, work with lists or attachments) to this function, you can make full integration of your 1C program and Trello.

So, we made a simple example of 1C and Trello integration. As you can see, the 1C platform is very flexible, and it’s effortless to connect with any of the other information systems.

You can download this Example for your own application.

If you have any questions about this article, you can always get answers on our forum: https://1c-dn.com/forum/

Function InitializeReturnParameters () Export

ReturnParameters = New Structure ( «Error, Result» );

ReturnParameters . Error = False;

ReturnParameters . Result = «» ;

Return ReturnParameters ;

EndFunction

1C Developer
20+ years of experience in the software industry in Russia and Germany. My main fields of expertise are developing and implementation of business applications (Retail, CRM, WMS, and Accounting) and integration of software with POS equipment and web portals.

Похожие статьи