Вступление
Наша команда начала использовать выгрузку в GIT. Мы используем Гиттер ( оригинал и моя доработка ). Так же можно использовать GitSync на OneScript ( раз и два и три). Я выбрал Гиттер, т.к. он полностью на 1С, в которой я отлично разбираюсь и без проблем смог расковырять, посмотреть, доработать и отладить работу с gitом.
В качестве удаленного репозитория мы используем bitbucket.org . Он позволяет делать бесплатные приватные репозитории на команду до 5 человек и размером до 2гиг. Наша вхламинушку переписанная УПП и ее 300 коммитов сейчас занимает 340мб. Но пришлось настроить .gitignore на многие файлы, и поэтому обратно конфу собрать нельзя.
Так же на БитБакете есть возможность обсуждения кода (для проведения код-ревью), что стало главным огромным плюсом, ради чего и был переход на Git.
На GitHub приватные репозитории за небесплатно, но там и возможностей больше. Вроде. Я не смотрел особо. Есть еще GitLab и возможность поднять локальный сервер для удаленного репо, и там даже есть подсветка синтаксиса 1С, но я его даже не смотрел еще.
!!!Не выкладывайте в публичные репозитарии код типовых. Лицензионная политика 1С по отношению к коду БСП и типовых еще не утверждена и неизвестна. Так что это может быть противозаконно!!!
В работе мы используем простенький самописный таскменеджер. Переходить на что-то другое не хочеться, а видеть ссылки на задачи хочеться. Как это я разрешил и является темой статьи.
Статья состоит из 3х частей: настройка на стороне БитБакета, создание http-сервиса и его публикация. Если у вас уже есть http-сервис, то можно прочитать только первую часть.
Настройка на стороне БитБакета
Идем в нужный репозиторий на БитБакете, в настройки и там в ссылки. Там можно настроить ссылки на существующие сервисы, если они у вас есть, а можно добавить ссылку на свой.
Определяемся с ссылкой, по которой будем переходить и с форматом сообщения, которое должно будет распарситься. В качестве формата я выберу fix-123 и task-123 для багов и задач соответственно. А ссылки должны формироваться по правилам 1С, пусть будут localhost/Tracker/hs/Bags/123 и localhost/Tracker/hs/Tasks/123 . Мне достаточно пофик, что это все будет работать только в локалке, работаю то я в основном в ней, а когда не работаю, то и задачи мне без интереса. Опять же сюда можете подставить свои адреса от существующих трекеров не на 1С.
Для формата есть ряд ограничений. Формат #123 зарезервирован под внутренний трекер задач (кстати, можно использовать и его), формат BB-123 зарезервирован под Jira, может еще какие-нибудь тоже заняты.
Теперь указываем это в настройках. Жмем добавить произвольную ссылку (Add a custom link) и заполняем поля.
Формат задается в поле Link key и является регулярным выражением. Результат разбора подставляется в Link url вместо \1, \2 итп. Для ссылок на задач добавим еще одну ссылку.
Проверим работу. Закоммитим что-нить и посмотрим как это выглядит.
fix и task превратились в ссылки, bag нет, т.к. для него мы не добавили ссылки. При нажатии переходит по нужному адресу. Правда по этому адресу ничего нет, но это я решу в следующей части.
Создание http-сервиса
Я бы не стал с ними заморачиваться, если б уже не натренеровался их делать: HTTP-сервис: отчеты [Расширение]
Весь сервис состоит из 4х частей:
- настройка сервиса (имя, параметры, шаблон),
- парсер входящих параметров,
- получение контента по параметрам,
- возврат результата.
Настройка сервиса
Создаем 2 http-сервиса: Tasks и Bags. Они идентичны кроме идентификаторов. В первом случае будет Tasks и получать данные будет из справочника Задачи, второй Bags и даные будет брать из справочника Ошибки. В остальном они идентичны, поэтому рассказывать буду только про Tasks. Кстати, во вложении конфигурация, где весь код есть.
Так вот. Добавляем новый сервис
Добавляем новый шаблон URL
И новый метод Get
В итоге
Парсер входящих параметров
Тут все просто, берем параметр URL, по нему ищем задачу, по ней формируем html и возвращаем
Функция ПолучитьЗадачуGET(Запрос)
номерЗадачи = Запрос.ПараметрыURL["string"];
Если номерЗадачи = "Ping" Тогда
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
Ответ.УстановитьТелоИзСтроки( НСтр( "ru='Поздравляем!!! Подключение выполнено успешно!'" ) );
Возврат Ответ;
КонецЕсли;
Попытка
найденнаяЗадача = Справочники._Задачи.НайтиПоКоду( Число( номерЗадачи ) );
Если ЗначениеЗаполнено( найденнаяЗадача ) Тогда
Ответ = Ответ_Задача( найденнаяЗадача );
Иначе
Ответ = Ответ_ЗадачаНеНайдена();
КонецЕсли;
Исключение
Ответ = Ответ_ОшибкаВыполнения();
КонецПопытки;
Возврат Ответ;
КонецФункции
Получение контента по параметрам
Мне было очень лень делать красивую html страничку под задачу, поэтому я создал в конструкторе печатную форму, а потом этот табличный документ превращал в html.
Но потом захотелось иметь ссылку, чтобы можно было перейти прям в 1Ску. Сделал так:
текстHTML = ПолучитьТекстHTMLПоТабличномуДокументу(таблДок);
СсылкаНаЗадачу = "<a href=" + Константы._АдресПубликацииИнформационнойБазы.Получить() + "#" + ПолучитьНавигационнуюСсылку(пОшибка) + ">Перейти в 1С</a>";
текстHTML = стрЗаменить( текстHTML, "</body></html>", СсылкаНаЗадачу + "</body></html>" );
где константу заполняю обработкой, запущенной в тонком клиенте, вот так
&НаСервере
Процедура ПриОткрытииНаСервере(адрес)
Константы._АдресПубликацииИнформационнойБазы.Установить( адрес );
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
адрес = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
ПриОткрытииНаСервере(адрес);
КонецПроцедуры
Возврат результата
Тут самое простое, устанавливаем ответ 200, заголовок, что это html, собственно тело и все
Функция Ответ_Задача( Знач пЗадача )
Попытка
таблДок = Новый ТабличныйДокумент;
Справочники._Задачи.Печать( таблДок, пЗадача );
Исключение
Возврат Ответ_НеверныйЗапрос( ИнформацияОбОшибке() );
КонецПопытки;
текстHTML = ПолучитьТекстHTMLПоТабличномуДокументу(таблДок);
СсылкаНаЗадачу = "<a href=" + Константы._АдресПубликацииИнформационнойБазы.Получить() + "#" + ПолучитьНавигационнуюСсылку(пЗадача) + ">Перейти в 1С</a>";
текстHTML = стрЗаменить( текстHTML, "</body></html>", СсылкаНаЗадачу + "</body></html>" );
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
Ответ.УстановитьТелоИзСтроки( текстHTML );
Возврат Ответ;
КонецФункции
Публикация http-сервиса
Как настраивать апач, включать отладку, пробрасывать в интернет итп я рассказывать не буду. У меня как то уже все работает, а статей по этой теме уже много. Так что все просто, идем в публикацию, публикуем только эти сервисы, ребутаем апач и проверяем. Главное, чтобы имена совпадали у публикации и у адреса, что мы уже в БитБакете ввели (можно конечно в БитБакете заменить ссылку).
Всю радость от заработавшего http-сервиса портит тот момент, что приходится вводить параметры аутентификации
Тут я так же поступил по ленивому и радикально. Идем в папку с публикацией, у меня это c:\WWW\Tracker\ , я ее еще стрелочкой выше отметил. Открываем единственный там файл default.vrd в блокноте, добавляем в строчку ib= логин и пароль пользователя, под которым будем открывать задачи. Например, я добавил пользователя WEB с паролем WEB и эта строчка стала выглядеть вот так
ib="File="G:\Bases\TasksInfostart";usr="WEB";pwd="WEB8""
На всякий ребутнем апач.
Внимание! Если использовать этот способ, то вся публикация будет открываться под этим пользователем. То есть если еще опубликован веб-интерфейс, то он так же молча будет открываться под WEB. Для более тонкой настройки можно этот финт сделать отдельно для точки подключения, приводить этот способ здесь я конечно не буду.
ИТОГ
После всех доработок результат выглядит так:
PS Если у вас не заработал переход в 1С прям с сайта, то нужно применить еще чуть-чуть магии. Создаем новый текстовый документ, вставляем туда
REGEDIT4
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\DefaultIcon]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\" /url \"%1\""
Сохраняем как "e1creg.reg" и запускаем под админом.
PPS Эта конфигурация так же доступна на https://github.com/Stepa86/1C-Tasks-for-web