Немного предыстории. В своей работе я пользуюсь системой управления задачами 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
Общее описание
Итак, что же предлагается:
Большая часть справочников не нуждается в комментариях. Тут есть задачи, пользователи, проекты, статусы и прочее-прочее.
Вот, например, форма задачи:
Большая часть справочников имеет кнопку "Получить с сайта":
И соответствующий вызов функции модуля менеджера справочника:
Справочники.ЮК_RM_ПриоритетыЗадач.ПолучитьССайтаВсе(Узел);
У некоторых справочников, там, где это поддерживалось 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, а удаленные файлы и комментарии подсистема старается отслеживать сама, но об ошибках все же пишет информацию в лог.
Спасибо
Про обнаруженные ошибки пишите в комментарии.
Так как подсистемой я пользуюсь сам в ежедневной работе, она поддерживается и будет обновляться.
Спасибо за интерес к подсистеме, всем хорошего дня и хорошего кода.