Обменивайтесь задачами между самой популярной тикет-системой Трелло и самой популярной системой учета, 1С
Самая популярная система управления проектами Trello может обмениваться задачами с 1С:CRM.
- Вы можете предоставить доступ каждому вашему клиенту в созданную для этого доску с задачами, где они смогут принимать участие в планировании работ, добавлять этапы, контролировать сроки, устанавливать ответственных.
- Все это будет осуществляться в удобном интерфейсе с любого устройства. При этом не придется никого пускать в вашу CRM систему.
- Из Trello задачи будут загружены в вашу CRM, распределены по сотрудникам, попадут в историю работы с клиентом.
- CRM напомнит сотруднику о приближении плановых сроков по задаче.
- CRM Вернет в Trello обновленный статус этапа проекта
Увеличение продаж портфелей услуг на 10% за счет централизованного прозрачного для заказчика управления
Лицензирование
- Поддержка на 1 год
- Внедрение
Интеграция с Trello
30 000 руб.
- 9 960 руб/год
- 2 990 руб/час
Модуль предоставляется без ограничения на количество пользователей
В комплекте поставки предоставляется:
- Расширение для встраивания
- Инструкция по встраиванию
- Инструкция по использованию
При необходимости, можем оказать помощь во внедрении и доработках на платной основе
Поддержка
Мы постоянно развиваем функционал, отвечающий последним требованиям бизнеса.
Чтобы пользоваться новым функционалом, а так же получать интеграцию, адаптированную под новые релизы 1С следует оплатить поддержку.
Совместимость
Модуль встраивается как расширение в следующие типовые конфигурации:
- 1С:CRM 3.0
- 1C:Управление торговлей и взаимоотношениями с клиентами (CRM)
- 1C:Модуль 1С:CRM для ERP и КА
- Другие конфигурации — по запросу
Работоспособность подтверждена для блока 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:

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:

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

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

Then we update the data in 1C and voila:

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:

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:

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.

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)

Also on the form are three commands:

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:

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:

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

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

Then we update the data in 1C and voila:

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:

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:

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.

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)

Also on the form are three commands:

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.