При организации совместной работы системы 1С и трекера задач Redmine часто возникает вопрос выбора подходящей библиотеки или готового механизма взаимодействия. На практике специализированные внешние компоненты не требуются — обмен данными между системами реализуется через стандартный REST API Redmine с использованием HTTP-запросов и формата данных JSON или XML.
Рассмотрим по шагам, как устроено взаимодействие между 1С и Redmine, какие параметры необходимо настроить на стороне сервера и как правильно реализовать отправку и получение данных средствами платформы 1С.
Перед началом разработки в 1С убедимся, что служба REST API включена на стороне Redmine. Проанализируем порядок предварительных настроек:
Для передачи ключа в запросах 1С используется специальный HTTP-заголовок X-Redmine-API-Key. Также Redmine поддерживает базовую HTTP-авторизацию (Basic Authentication) через передачу логина и пароля в заголовке Authorization, однако использование API-ключа считается более безопасным и удобным подходом.
Разберем, как выполняется отправка данных из 1С. Взаимодействие построено на использовании объектов HTTPСоединение и HTTPЗапрос. Посмотрим на основные технические нюансы построения кода:
HTTPСоединение обязательно инициализируется с указанием параметра ЗащищенноеСоединение, для которого создается объект ЗащищенноеСоединениеOpenSSL.Content-Type: application/json или Content-Type: application/xml.ЗаписатьJSON и ПрочитатьJSON.Рассмотрим пример создания и выполнения POST-запроса для передачи данных из 1С в Redmine в формате JSON:
// Инициализация защищенного HTTPS-соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("redmine.yourcompany.com", 443, , , , , ЗащищенноеСоединение);
// Формирование заголовков запроса
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("X-Redmine-API-Key", APIКлючПользователя);
// Создание HTTP-запроса к ресурсу создания задачи
Запрос = Новый HTTPЗапрос("/issues.json", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТекстТелаJSON, КодировкаТекста.UTF8);
// Отправка запроса и получение ответа
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния = Ответ.КодСостояния;
При работе с REST API Redmine важно учитывать специфику структуры данных задачи:
Сначала двоичные данные файла отправляются POST-запросом на адрес /uploads.json с заголовком Content-Type: application/octet-stream. В ответ Redmine возвращает токен (идентификатор загрузки).
Затем при создании или изменении задачи в структуру JSON добавляется массив uploads, в котором передаются токен, имя файла filename и его описание.
custom_fields. Для каждого реквизита необходимо указывать его идентификатор id и значение value.Проанализируем особенности обработки больших объемов данных и получения обратных вызовов из Redmine в 1С:
limit и offset в URL-строке запроса.HTTPСервис. Без публикации 1С может работать с Redmine только в режиме периодического опроса через РегламентныеЗадания.В зависимости от архитектуры предприятия и требований к скорости обмена можно рассмотреть следующие альтернативные подходы:
HTTPСервис базы 1С. Это исключает необходимость постоянного фонового опроса API Redmine.ADODB.Connection. Этот способ подходит исключительно для чтения данных при построении сложной аналитической отчетности. Прямая запись в СУБД Redmine категорически запрещена, так как это нарушает внутреннюю логику и целостность данных системы.