Для чего я это все делал:
Изначально было интересно как же устроено хранилище конфигурации, возможно ли каким-либо образом вытащить из него данные и работать с ними. Стандартные средства работы с хранилищем из конфигуратора есть, но для доступа к данным необходим доступ в конфигуратор, а это не всегда возможно обеспечить. Например, есть потребность у службы технической поддержки посмотреть какие были сделаны изменения в рабочей конфигурации за вчера, чтобы сопоставить с обращениями пользователей. Или для системы учета обращений сопоставить конкретное обращение с изменениями в конфигурации (измененные объекты). Или, наконец, построить банальный отчет по изменениям в конфигурации за период.
Что нам потребуется:
- Хранилище конфигурации с доступом по протоколу HTTP
- Установленный компонент CAPICOM (как установить описано здесь)
- Утилита Network Monitor
Начнем....
Первое, что я сделал - решил проанализировать трафик, которым обменивались конфигуратор и хранилище конфигурации. Для этой задачи прекрасно подходит инструмент от Microsoft - Network Monitor. Первое, что я увидел - конфигуратор общается с хранилищем через отправку POST запросов в теле которых простой XML. Например, по нажатию кнопки "Обновить" в окне "Администрирование хранилища конфигурации" 1С отправляет запрос следующего вида:
Интересующие нас на данном этапе параметры в секции auth: password и user.
Если с User все понятно - это логин, то с password все оказалось сложнее. Это хэш пароля, но как оказалось, хэш не простой. Я долго не мог понять как он формируется, но в итоге удалось определить, что хэш пароля формируется по алгоритму CAPICOM_HASH_ALGORITHM_MD5.
В ответ на этот запрос сервер хранилища отвечает нам тоже данными в виде XML
В итоге, имеем 3 секции:
- statMap - информация о версиях
- bindInfos - информация о подключениях к хранилищу
- users - информация о пользователях хранилища
Уже что-то есть, но нам этого мало. Хотим историю хранилища...
Идем дальше...
Запрос на получение истории хранилища следующий (получил я его так же как и в первом примере)
По авторизации все понятно, остальные параметры я оставлял как есть. Предполагаю, что параметры begindate, enddate, beginvernum и endvernum для фильтрации истории по дате и номерам версий.
Отправив такой запрос мы получим ответ в следующем формате:
Уже интереснее. Мы имеем номер версии, версию платформы (pver...), дату версии, версию конфигурации, а так же метку(комментарий).
Но и это еще не все. Осталось сделать то, ради чего все это делалось - состав изменений. Запрос выглядит следующим образом:
Уже все просто. Помимо авторизации нам необходим параметр verNum - номер версии. Отправляем этот запрос серверу хранилища и получаем ответ:
Вот это именно то, чего я хотел.
- Name - наименование объекта
- action - действие (опытным путем понял, что "0" - Добавление, 1 и 5 - изменение)
- fullName - полное наименование объекта метаданных, где нечто похожее на ГУИД - это идентификатор родителя (Справочник, документ, форма и т.д.), ниже приведу расшифровку того, что мне удалось расшифровать
СоответствиеОбъектов.Вставить("9cd510cd-abfc-11d4-9434-004095e12fc7", "Главный блок");
СоответствиеОбъектов.Вставить("09736b02-9cac-4e3f-b4f7-d3e9576ab948", "Роль");
СоответсвиеОбъектов.Вставить("24c43748-c938-45d0-8d14-01424a72b11e", "Параметр сеанса");
СоответствиеОбъектов.Вставить("39bddf6a-0c3c-452b-921c-d99cfa1c2f1b", "Интерфейс");
СоответствиеОбъектов.Вставить("0fe48980-252d-11d6-a3c7-0050bae0a776", "Общий модуль");
СоответствиеОбъектов.Вставить("857c4a91-e5f4-4fac-86ec-787626f1c108", "План обмена");
СоответствиеОбъектов.Вставить("37f2fa9a-b276-11d4-9435-004095e12fc7", "Подсистема");
СоответствиеОбъектов.Вставить("3e5404af-6ef8-4c73-ad11-91bd2dfac4c8", "Стили");
СоответствиеОбъектов.Вставить("3e7bfcc0-067d-11d6-a3c7-0050bae0a776", "Критерии отбора");
СоответствиеОбъектов.Вставить("9cd510ce-abfc-11d4-9434-004095e12fc7", "Язык");
СоответствиеОбъектов.Вставить("7dcd43d9-aca5-4926-b549-1842e6a4e8cf", "Картинка");
СоответствиеОбъектов.Вставить("9fcd25a0-4822-11d4-9414-008048da11f9", "Блок");
СоответствиеОбъектов.Вставить("13134201-f60b-11d5-a3c7-0050bae0a776", "Регистр сведений");
СоответствиеОбъектов.Вставить("0195e80c-b157-11d4-9435-004095e12fc7", "Константа");
СоответствиеОбъектов.Вставить("bf845118-327b-4682-b5c6-285d2a0eb296", "Обработка");
СоответствиеОбъектов.Вставить("bc587f20-35d9-11d6-a3c7-0050bae0a776", "Последовательность");
СоответствиеОбъектов.Вставить("07ee8426-87f1-11d5-b99c-0050bae0a95d", "Форма");
СоответствиеОбъектов.Вставить("061d872a-5787-460e-95ac-ed74ea3a3e84", "Документ");
СоответствиеОбъектов.Вставить("b64d9a40-1642-11d6-a3c7-0050bae0a776", "Регистр накоплений");
СоответствиеОбъектов.Вставить("36a8e346-9aaa-4af9-bdbd-83be3c177977", "Нумератор документов");
СоответствиеОбъектов.Вставить("f6a80749-5ad7-400b-8519-39dc5dff2542", "Перечисление");
СоответствиеОбъектов.Вставить("82a1b659-b220-4d94-a9bd-14d757b95a48", "План видов характеристик");
СоответствиеОбъектов.Вставить("4612bd75-71b7-4a5c-8cc5-2b0b65f9fa0d", "Журнал документов");
СоответствиеОбъектов.Вставить("631b75a0-29e2-11d6-a3c7-0050bae0a776", "Отчет");
СоответствиеОбъектов.Вставить("cf4abea6-37b2-11d4-940f-008048da11f9", "Справочник");
СоответствиеОбъектов.Вставить("fdf816d2-1ead-11d5-b975-0050bae0a95d", "Форма");
СоответствиеОбъектов.Вставить("4e828da6-0f44-4b5b-b1c0-a2b3cfe7bdcc", "Подписка на событие");
СоответствиеОбъектов.Вставить("11bdaf85-d5ad-4d91-bb24-aa0eee139052", "Регламентное задание");
СоответствиеОбъектов.Вставить("fdf816d2-1ead-11d5-b975-0050bae0a95d", "Форма");
СоответствиеОбъектов.Вставить("0fffc09c-8f4c-47cc-b41c-8d5c5a221d79", "HTTP сервис");
Дальше, в планах получение версии объекта из хранилища, если кого-то заинтересует, опишу и этот функционал.
Обработку с демонстрацией описанных выше функций я прикладываю, но замечу, это не какой-то конечный продукт - лишь демонстрация написанного материала. Обработка тестировалась на версии платформы 8.3.15.1830, конфигурация, в которой запускается обработка не имеет значения