Redmine 1c подключение к источнику данных

Обновлено: 07.07.2024

Немного предыстории. В своей работе я пользуюсь системой управления задачами Redmine. Если честно, я не помню насколько давно я начал использовать Redmine, но помню, что это произошло когда стало очевидно, что проект Mantis BT окончательно заглох и серьезных улучшений ждать не приходится. Пришлось искать альтернативу и альтернатива, в виде Redmine, оказалась хороша. Я могу долго описывать прелести Redmine (это не реклама, честное слово!), но публикация посвящена взаимодействию Redmine и 1С, так что вернемся к теме.

Подсистема повторяет структуру данных, которая описывается Redmine API на объектах метаданных 1С и позволяет обмениваться данными через ту же Redmine API.

Почему так? Взаимодействовать с Redmine я пробовал разными способами: ситуативно, по необходимости обращался из кода к API, строил в памяти (на структурах и таблицах значений) временную модель, работал с ней и уничтожал, немного пробовал внешние источники данных. Но лучшей моделью использования стало для меня все же повторение структуры данных Redmine на объектах метаданных 1С. Это удобно, так как для получения и отправки информации используются привычные объекты 1С, а для сборки данных и построения сложных запросов к данным не нужно придумывать новые функции, достаточно собрать информацию запросом 1С, предварительно освежив данные справочников. Да, это приводит к дублированию информации (одни и те же данные есть в Redmine и в 1С), но удобство важнее. Плюс - можно достраивать UI на формах 1С как угодно, привычным способом.

Подсистема писалась для обычных форм, толстого клиента, но может быть легко переделана и под управляемые формы (планируется в следующих версиях). Разумеется, те формы что есть в подсистеме, просто поддерживают функционал подсистемы и могут быть доработаны.

Подсистема тестировалась на платформе 8.3.14.1694

Общее описание

Итак, что же предлагается:


Большая часть справочников не нуждается в комментариях. Тут есть задачи, пользователи, проекты, статусы и прочее-прочее.

Вот, например, форма задачи:


Большая часть справочников имеет кнопку "Получить с сайта":


И соответствующий вызов функции модуля менеджера справочника:

У некоторых справочников, там, где это поддерживалось API и было целесообразно для моих потребностей, есть кнопка отправки.

В модулях менеджеров есть соответствующие функции:


Начало работы

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


Немного о настройках.

Адрес, порт, путь в комментариях не нуждаются, ключ API вы можете найти в настройках пользователя в самом Redmine в разделе "Моя учетная запись":


От имени этого пользователя, ключ которого вы возьмете, будет работать подсистема (но не всегда, об этом далее). Пользователь должен быть администратором.

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

Флаг "Получать только доступные проекты" заставит подсистему получать данные только из тех проектов, в которые назначен пользователь Redmine от имени которого работает подсистема. В противном случае, будут доступны все проекты.

Флаг "Полное обновление по регламентному заданию" включает обновление всех справочников из Redmine и очистку мусора. Рекомендуется периодически делать это, но помните, что полное обновление может занять продолжительное время.

О мусоре

Для своих внутренних нужд подсистема создает "лишние" элементы некоторых справочников. Процедура сбора мусора помечает такие элементы на удаление и в последствии они могут быть безопасно удалены. Так же, некоторые данные могут быть удалены в самом Redmine, без участия 1С и в этом случае в 1С такие данные так же будут синхронизированы и помечены на удаление в процессе выполнения очистки.

Флаг "Получать пометки удаления в закрытых задачах" заставит подсистему при сборке мусора получать информацию о том, существует ли еще уже закрытая задача в Redmine и, если нет, пометить ее на удаление. Как правило, в этом нет необходимости.

Флаг "Не получать/отправлять наблюдателей" нужен, чтобы отключить синхронизацию данных о наблюдателях в процессе синхронизации данных о задачах. Если вы не используете наблюдателей в Redmine, лучше включить этот флаг, так как работа с наблюдателями порождает массу небольших отдельных запросов к API и время синхронизации задач может значительно увеличиться.

"Коррекция времени (часов)" корректирует время, получаемое из задач, на указанное количество часов. Это полезно, если настройка сервера Redmine указывает на отличный от вашего часовой пояс.

Логи

Так как подсистема активно взаимодействует с внешним сайтом, которым является Redmine, вы можете столкнуться с ошибками, связанными с нестабльным интернетом. Для более удобного отслеживания таких ситуаций, а так же других возможных проблем, подсистема все возникшие ошибки пишет в отдельный регистр логов. Очистка устаревших данных этого регистра производится так же при очистке мусора. Срок хранения логов указывается в настройке "Срок хранения логов (дней)" в днях.

Получение задач по событию

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

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

Пользовательский модуль

Если вы хотите самостоятельно обрабатывать полученные задачи и изменения в них, не вмешиваясь в код подсистемы, вы можете воспользоваться модулем ЮК_RM_Пользовательский. Функция ЗадачиПолучены будет вызвана после получения информации о создании или обновлении задачи регламентно или по событию.


Отправка данных

Для отслеживания изменений в объектах внутри 1С используется план обмена и регистр сведений "Исходные версии объектов".

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

Отчеты

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

Пользователи Redmine

Для того, чтобы подсистема выполняла операции от имени другого пользователя Redmine, в общем модуле ЮК_Redmine1C предусмотрено две функции - Логин и Логаут.

Например, если вы хотите, чтобы у новой задачи, которую вы создали в 1С, был определенный автор, перед отправкой задачи на сайт выполните логин, а после отправки - логаут.


Обнаруженные проблемы

К сожалению, информация об ошибках, которую возвращает сам API не слишком информативна и порой сложно догадаться почему та или иная операция возвращает код ошибки.

При создании задач это чаще всего связано с тем, что не хватает какого-то обязательного поля, при получении файлов или комментариев может быть так, что информации уже нет в Redmine (была удалена).

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

Спасибо

Про обнаруженные ошибки пишите в комментарии.

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

Спасибо за интерес к подсистеме, всем хорошего дня и хорошего кода.

Наша небольшая команда в качестве трекера для работы с клиентами использует бесплатный достаточно популярный трекер Redmine. Почему Redmine? - Потому что для нас проще было разместить трекер в сети, чем организовывать доступ к нашей инфраструктуре и использовать что-нибудь на основе 1с. Для синхронизации данных Redmine и 1с была написана эта обработка.

Все общение с Redmine идет через REST API, подробное описание которого можно найти по адресу

В самой обработке есть управляемая форма где можно посмотреть примеры работы.

Подключение к Redmine

Для того чтобы подключится к Redmine , на необходимо включить использование Rest . Это можно сделать на закладке Администрирование - > Настройки - > закладка Аутентификация - > галочка веб сервис REST :

фрагмент настройки 1

Затем получить ключ текущего пользователя, под которым вы зашли. Заходите в пункт "Моя учетная запись". В правой панели смотрите ваш API Ключ.

фрагмент настройки 2

Данные о ключе и сервере прописываете в реквизиты обработки.

пример кода 1

После инициализации этих переменных, можно делать запросы к Redmine.

Пример получения данных

Для примера получим описание задачи. В примере в форме обработки это делается кодом:

пример кода 2

У меня в переменных формы НомерЗадачи, содержится "41", это идентификатор задачи в базе Redmine . В параметрах, я указал что хочу получать присоединенные файлы, по умолчанию они не выдаются. На выходе получаем структуру:

пример структуры

Как обрабатывать эту структуры мы решаем в зависимости от того что мы делаем в нашей 1с конфигурации.


Обмен данными производится через Rest-API. При разработке использовалась описание сервиса расположенное на ресурсе
2. Отбор задач по дополнительным полям (произвольные поля добавляемые пользователями в Redmine)

В настоящий момент, поля (идентификаторы) приходится заполнять в ручном режиме. Такое ограничение возникло из-за того, что для их получения требуются права Администратора в Redmine, которыми я не обладаю.

На изображении ниже представлено отбор по произвольному полю Релиз, идентификатор в Redmine которого "21". Отбор можно задавать как по пустому значению, для этого в списке значений нужно указать пустую строку, так и по конкретным значениями, одному или нескольким.


3. Получение Учета времени с отбором по пользователю и диапазону дат

В качестве отбора для пользователя используется его ИД (можно узнать на закладке Пользователи) и период. Оба параметра задаются на закладке настройки.


4. Получение задач с различными отборами (гибкая настройка)

Подборы выполняются на соответствующих закладках: Проекты, Трекеры, Статусы, Версии, Произвольные поля (Отборы по Пользователи не реализовано, в связи с тем что доступ к этой таблице так же требует Администраторских прав)


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


Как узнать свой API Key, вы можете нажав кнопку "Как узнать свой ключ API"


Основное отличие это работа с произвольными полями и возможность отбора по нескольким однотипным параметрам.

Все общение с Redmine идет через REST API, подробное описание которого можно найти по адресу

В самой обработке есть управляемая форма где можно посмотреть примеры работы.

Подключение к Redmine

фрагмент настройки 1

фрагмент настройки 2

Данные о ключе и сервере прописываете в реквизиты обработки.

пример кода 1

После инициализации этих переменных, можно делать запросы к Redmine.

Пример получения данных

Для примера получим описание задачи. В примере в форме обработки это делается кодом:

пример кода 2

пример структуры

Как обрабатывать эту структуры мы решаем в зависимости от того что мы делаем в нашей 1с конфигурации.

Related Posts

40 Comments

(1) Yashazz, Смотрел выступление на infostart event на эту тему. Может поищите, есть на ютуб канале Доржи Но там все сложно, через снегопад писали свои скрипты, и вспомогательный софт. Не мой уровень к сожалению.

Только задачи или и wiki тоже забираете?

Wiki не забираю. У всех объектов единообразный интерфейс, добавить нужное не сложно.

(4) уже давно сделал интеграцию с 1С, только я делал через внешние источники данных. В связи с развитием ВИД, можно с их помощью уже не только получать данные из Redmine в 1С, но и из 1С писать напрямую в Redmine.

(5) PrinzOfMunchen, Был в начале такой план, но у меня база лежит на внешнем хостинге.

Нет в планах использовать redmine_contacts? Интересно было бы связать через пользователей 1С

(7) omut, Есть в планах добавить пользователей и роли. чтобы с ними можно было работать.

нужно немного разгрести дела, сесть и сделать. может на выходных сделаю

(8) я использовал этот плагин. Логика работы была такая: пользователи 1С не являются пользователями редмайн, а являются контактами. Данные по контакту через апи добавлялись в редмайн (если такого контакта там еще не было) и автоматически привязывались к задачам. К сожалению, руки так же не дошли добить до конца интерфейс добавления задачи в 1С (

Спасибо, интересная разработка!

(10) Нет интеграцию с этой системой не делал. Посмотрел, там идет взаимодействие через json , поэтому тот прием который я использовал, чтобы сократить код до минимума не подойдет.

Нашел: Преобразование 1С->JSON->1С для обменов, Web-сервисов

но если совсем обнаглеть, то хотелось бы для 7.7 😉

(12) phsin, Про эту обработку знаю, хорошая вещь.

а вот с 7.7 точно не будет, там таких плюшек как XDTO нет, собственно за счет их использования все получилось просто.

да и я с 7.7 сейчас работаю преимущество только в проектах по переходу на 8. 🙂 какой то разработки на 7.7 уже года 3 не веду.

(9) omut, Посмотрел плагин. у него есть API так что прикрутить можно. Единственное не понял в чем преимущество его пользования?

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

(6) ну так у нас тоже. Для ВИД это не проблема. Ты можешь через них к любой базе цепануться.

Подскажите, как получить все задачи? Сейчас, даже при простом запросе вида: redmine/issues.xml?project_id=7 я получаю только открытые задачи.

Коллеги, а у всех работает обновление проектов ? У меня хоть убиться не получается программно создавать/обновлять подчиненные проекты, т.е. те где указан parent_id. Может кто подскажет как решить проблему ?

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

по прикреплению файлов: у Вас ошибка в схеме в разделе группы файлов, не хватает аттрибута Type

нужно заменить на

У меня все заработало 🙂

2. По custom-fields:

это свойство в процедуре УдалитьПустыеПоля(ОбрабатываемаяСтруктура) просто удаляется, если не заполнено.

Данная статья предназначена для технических специалистов.

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

Содержание

1. Переключите сайт (а если сайта нет, то создайте его с главной страницы личного кабинета по ссылке Зарегистрировать, привязать домен и создать сайт , тип сервера любой) в режим Ruby on Rails из раздела кабинета полный список функций -> Хостинг Ruby on Rails

Перевод сайта в режим "хостинг Ruby on Rails" в личном кабинете 1Gb.ru


2. Задайте окружение production :

Настройка окружения


3. Для работы Redmine требуется база данных. Redmine может работать с базами MySQL и PostgreSQL. В личном кабинете в разделе начало -> Базы данных нужного вам типа.

2. Зайдите на сайт по SSH и запустите команду:

3. Укажите какую версию Rails вы будете использовать:

1. Устанавливаем bundler:

2. Скачиваем Redmine. В команде ниже вместо X.X поставьте ранее выбранную версию

3. Создаем файл конфигурации

и прописываем параметры доступа к базе данных для production окружения для случая MySQL базы, посмотреть их можно в личном кабинете на странице начало -> Пароли на ресурсы -> Базы данных mySQL

или если вы выбрали базу PostgreSQL:

4. Создаем файл конфигурации

5. Используя bundler ставим gem'ы необходимые для работы Redmine:

6. Наполняем базу данными:

7. Перезапустите web-сервер:

8. В личном кабинете в разделе начало -> Почтовые адреса создайте ящик от имени которого Redmine будет рассылать уведомления.

Ящик может быть любым, если у вас уже есть созданные почтовые адреса, то можно использовать какой-то из них.
Этот адрес пользователи Redmine будут видеть в качестве обратного адреса ( From ), когда будут получать уведомления.


9. Откройте ваш сайт в браузере и зайдите под администратором используя логин admin и пароль admin .

Перейдите в раздел Администрирование -> Настройки -> Уведомления по email .

В поле Исходящий email адрес введите ранее созданный емейл адрес, убедитесь, что в Использовать скрытые копии (BCC) галка не стоит, внизу нажмите кнопку Сохранить .

Читайте также: