Работа с хранилищем конфигурации из режима 1С: Предприятие минуя конфигуратор
Описание приемов работы с хранилищем конфигурации 1С из режима 1С: Предприятие минуя конфигуратор.
Статья содержит ряд примеров работы с хранилищем по протоколу HTTP, описание «внутренностей», а также демонстрационную обработку
- Описание
- Подробнее
Описание
Для чего я это все делал:
Изначально было интересно как же устроено хранилище конфигурации, возможно ли каким-либо образом вытащить из него данные и работать с ними. Стандартные средства работы с хранилищем из конфигуратора есть, но для доступа к данным необходим доступ в конфигуратор, а это не всегда возможно обеспечить. Например, есть потребность у службы технической поддержки посмотреть какие были сделаны изменения в рабочей конфигурации за вчера, чтобы сопоставить с обращениями пользователей. Или для системы учета обращений сопоставить конкретное обращение с изменениями в конфигурации (измененные объекты). Или, наконец, построить банальный отчет по изменениям в конфигурации за период.
Что нам потребуется:
- Хранилище конфигурации с доступом по протоколу 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, конфигурация, в которой запускается обработка не имеет значения