Работа с хранилищем конфигурации из режима 1С: Предприятие минуя конфигуратор

11.06.20

Разработка - Групповая разработка (Git, хранилище)

Описание приемов работы с хранилищем конфигурации 1С из режима 1С: Предприятие минуя конфигуратор. Статья содержит ряд примеров работы с хранилищем по протоколу HTTP, описание "внутренностей", а также демонстрационную обработку

Скачать исходный код

Наименование Файл Версия Размер
Работа с хранилищем конфигурации из режима 1С: Предприятие минуя конфигуратор
.epf 15,41Kb
14
.epf 15,41Kb 14 Скачать

Для чего я это все делал:

Изначально было интересно как же устроено хранилище конфигурации, возможно ли каким-либо образом вытащить из него данные и работать с ними. Стандартные средства работы с хранилищем из конфигуратора есть, но для доступа к данным необходим доступ в конфигуратор, а это не всегда возможно обеспечить. Например, есть потребность у службы технической поддержки посмотреть какие были сделаны изменения в рабочей конфигурации за вчера, чтобы сопоставить с обращениями пользователей. Или для системы учета обращений сопоставить конкретное обращение с изменениями в конфигурации (измененные объекты). Или, наконец, построить банальный отчет по изменениям в конфигурации за период.

Что нам потребуется:

  1. Хранилище конфигурации с доступом по протоколу HTTP
  2. Установленный компонент CAPICOM (как установить описано здесь)
  3. Утилита Network Monitor 

Начнем....

Первое, что я сделал - решил проанализировать трафик, которым обменивались конфигуратор и хранилище конфигурации. Для этой задачи прекрасно подходит инструмент от Microsoft - Network Monitor. Первое, что я увидел - конфигуратор общается с хранилищем через отправку POST запросов в теле которых простой XML. Например, по нажатию кнопки "Обновить" в окне "Администрирование хранилища конфигурации" 1С отправляет запрос следующего вида:

Интересующие нас на данном этапе параметры в секции auth: password и user.

Если с User все понятно - это логин, то с password все оказалось сложнее. Это хэш пароля, но как оказалось, хэш не простой. Я долго не мог понять как он формируется, но в итоге удалось определить, что хэш пароля формируется по алгоритму CAPICOM_HASH_ALGORITHM_MD5.

В ответ на этот запрос сервер хранилища отвечает нам тоже данными в виде XML

 

В итоге, имеем 3 секции:

  1. statMap - информация о версиях
  2. bindInfos - информация о подключениях к хранилищу
  3. 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, конфигурация, в которой запускается обработка не имеет значения

Хранилище конфигурации HTTP API

См. также

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9357    78    4    

112

Обновляемый список последних статей Инфостарт для профиля Github

Групповая разработка (Git, хранилище) Бесплатно (free)

Не знаете, чем бы таким заполнить свой профиль Github? Заполните его своими статьями на Инфостарт! Этот простой workflow сам соберет список ваших последних статей и будет периодически обновлять его для актуализации данных.

08.04.2024    894    bayselonarrend    2    

29

Процесс разработки с использованием GIT и расширений для 1С:ERP. Без EDT

Групповая разработка (Git, хранилище) Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Доработки 1С:ERP на крупных проектах можно организовать, не внося изменения в саму типовую конфигурацию, а используя только расширения и отдельные «микроконфигурации». Расскажем о том, как это сделать без EDT, используя процесс разработки GitHub Flow.

02.04.2024    4314    Begemoth80    24    

45

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1539    bayselonarrend    3    

38

Автоматизация процесса разработки с помощью сервиса GitFlic

Групповая разработка (Git, хранилище) Бесплатно (free)

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    2041    user1989937    6    

16

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

Групповая разработка (Git, хранилище) Бесплатно (free)

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    3973    bayselonarrend    15    

62

Насколько глубок 1С-ный GitHub?

Групповая разработка (Git, хранилище) Бесплатно (free)

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    8025    bayselonarrend    50    

87

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2979    kamisov    17    

59
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. VKislitsin 966 11.06.20 17:31 Сейчас в теме
Круто!
Дальше, в планах получение версии объекта из хранилища, если кого-то заинтересует, опишу и этот функционал

Очень интересно! Подписался.
jaroslav.h; YPermitin; +2 Ответить
2. Yashazz 4722 11.06.20 18:34 Сейчас в теме
Я вот, честно сказать, не очень понял. Лежит у меня, допустим, хранилище на некоем сервере компании, и подключаемся мы с коллегами к нему... И хранилище это, как учит нас теория, по сути пара файлов формата, близкого к файловым SDBL...И вот с чего оно вдруг будет отвечать на рест-запросы? Волшебный компонент "CAPICOM" поможет?

пы.сы. опечатку в "СоответсТвие" поправьте)
3. MaxxG 100 11.06.20 18:49 Сейчас в теме
(2)Спасибо, опечатку поправил.
Хранилище - это не только несколько файлов, но и сервер хранилища конфигураций. Если сервер опубликован по протоколу http, то конфигуратор общается с ним с помощью post запросов. Что я и описал в статье. Компонент capicom необходим лишь для получения хэша пароля.
4. Yashazz 4722 11.06.20 19:01 Сейчас в теме
(3) Вооот) Только вы это упомянуть забыли, как краеугольное условие применения) И невольно создаётся ощущение, что старые-добрые варианты хранилища тоже так тягать можно. О чём я вам аккуратно и напомнил. Пропишите в статье, пожалуйста, во избежание дезориентации читателя, что хранилище-то опубликованное должно быть.

Кстати, вопрос защищённости такого публикования и такого обращения, случайно, не копали? Он слабовато освещён.
5. comptr 31 12.06.20 01:29 Сейчас в теме
(4) Зная 1С, думаю, всё передаётся в открытом виде, нужно только перехватить трафик между хранилищем и пользователем, чтобы узнать данные для авторизации, а дальше можно делать всё что захочется.
6. MaxxG 100 12.06.20 20:36 Сейчас в теме +5 $m
(5)Да, все передаётся в открытом виде. Именно это я и описал в статье
7. MaxxG 100 12.06.20 20:40 Сейчас в теме
(4) в начале статьи я описал, что нам потребуется сервер хранилища с доступом по http. Попробую позже более четко сформировать это требование, чтобы ни у кого не возникало вопросов. Трафик никак не защищается и не кодируется. Думаю, что при классическом доступе по tcp ситуация аналогичная, просто при доступе по http примеры более показательны
8. LexBond 12.06.20 20:41 Сейчас в теме
Отличная работа. Как с вами связаться? Мой мейл: bonduser*yandex.ru
12. malikov_pro 1293 15.06.20 10:24 Сейчас в теме
(9) Если будет в виде надстройки для nginx на lua, то да, а так неудобно еще один узел разворачивать.
Сейчас на сервере развернуто 4 сервиса под каждый из вариантов клиентов (рарус, scloud, локальные установки клиентов), для каждого добавлять доп сервис неудобно.

(5) Оборачивается в HTTPS nginx-ом например или настроить VPN до сервера с хранилищем OpenVPN RA на pfSense например. При организации по HTTPS дополнительно прикрывать по allow IP.

(0) Если глубоко копали формат обмена, то после какого сообщения запись в базе хранилища сформирована и имеет смысл запускать gitsync например?
13. VKislitsin 966 15.06.20 12:26 Сейчас в теме
(12)
Если глубоко копали формат обмена, то после какого сообщения запись в базе хранилища сформирована и имеет смысл запускать gitsync например?

Судя по вопросу, Вы хотите выполнять синхронизацию с Git по событию помещения в хранилище.
Я у себя делал подобное с помощью PowerShell-а и планировщика заданий. Скрипт PS, запущенный как служба, при изменении каталога /data Хранилища генерировал событие Windows. А в планировщике настроена задача, срабатывающая по этому событию. Причем срабатывание ставил с задержкой на 5-10 минут, для того, чтобы комментарий к версии Хранилища уже "устаканился". Зачастую разработчики пишут комментарий не сразу при помещении в Хран, а в течение нескольких минут. Или редактируют, например номер задачи дописывают.
14. malikov_pro 1293 15.06.20 12:40 Сейчас в теме
(13)
Судя по вопросу, Вы хотите выполнять синхронизацию с Git по событию помещения в хранилище.

Да, именно так. У самого развернуто на ubuntu. Активно использую nginx как обратный прокси, поэтому хотел как дополнение к нему.
Интересно именно помещение изменения, а не изменение БД, чтобы лишних срабатываний не было.

Коммент редактировать после помещения бывает нужно, при автоматике уже "никак".
15. malikov_pro 1293 15.06.20 12:42 Сейчас в теме
(13) Усложняется это еще тем что при помещении даже с комментарием и при отсутствии изменения по данным отдельная версия не фиксируется в хранилище (на сколько знаю). По идее и этот вариант нужно обработать.
17. artbear 1518 17.06.20 11:38 Сейчас в теме
(13) подписка на изменение файлов\каталогов для хранилища работает неточно, т.к. хранилище довольно часто меняет свои файлы, даже если разработчик ничего не поменял (
я и многие коллеги за долгие годы используют периодический опрос хранилища и хранилище прекрасно синхронизируется с гитом.
18. VKislitsin 966 17.06.20 13:47 Сейчас в теме
(17)
подписка на изменение файлов\каталогов для хранилища работает неточно, т.к. хранилище довольно часто меняет свои файлы, даже если разработчик ничего не поменял (
я и многие коллеги за долгие годы используют периодический опрос хранилища и хранилище прекрасно синхронизируется с гитом

Артур, я как раз не хотел использовать периодический опрос. Мне важно было сделать с задержкой после изменения, т.к. я не хотел чтобы периодический опрос, выполнившийся через несколько секунд после помещения, забрал результат с недозаполненным комментарием. Не замечал ложных срабатываний, но даже если они и есть, GitSync тут же, получив список версий, видит что синхронизирована последняя версия и лишних телодвижений не выполняет.
Кстати, если я правильно помню, в материалах курса по инженерным практикам (и вышедшей следом книге), описывалось отслеживание изменений файла БД хранилища. Я отслеживаю не его, а каталог с данными.
10. PerlAmutor 129 14.06.20 17:43 Сейчас в теме
Если пароль преобразовать сначала в UTF-8, убрать оттуда BOM (если есть) и скормить классу "Новый ХешированиеДанных" в виде Двоичных Данных, то MD5 хэш тоже не будет совпадать?
11. MaxxG 100 15.06.20 10:19 Сейчас в теме
(10)Нет, я очень много способов перебрал, прежде чем дошел до компоненты capicom. Различий кодирования просто в MD5 и CAPICOM_HASH_ALGORITHM_MD5 я пока не нашел
19. r0610201 314 13.08.20 11:16 Сейчас в теме
(11)
Видимо, capicom работает с кодировкой UTF16, т.е. по два байта на символ.
Тогда от компоненты можно отказаться, нужный хеш получается следующим кодом:


// Искомый хеш пароля "1" в хранилище - 06d49632c9dc9bcb62aeaef99612ba6b

Пароль = "1";

ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(ПолучитьДвоичныеДанныеИзСтроки(Пароль, "UTF16"));
Сообщить(НРег(СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "")));

Показать
Serj1C; CSiER; родственник; VKislitsin; Steelvan; sashocq; MaxxG; +7 Ответить
16. artbear 1518 17.06.20 11:34 Сейчас в теме
Очень интересный и полезный анализ, спасибо автору!
20. kraynev-navi 648 11.08.22 13:29 Сейчас в теме
(0) Спасибо за статью, за обработку. Применил у себя.
Работа через http-запросы на порядок быстрее чем работа в пакетном режиме!
Плюс парсинг отчетов mxl не нужен. Сплошные плюшки.
21. sergio_sconosciuto 5 21.04.23 11:21 Сейчас в теме
Подскажите плз. Что означают в вашей обработке следующие реквизиты:
АдресСервераХранилища, АдресРесурсаХранилища, Алиас.
Приведите пример какой-нибудь.
Например, я соединяюсь к хранилищу по строке https://localhost:44380/storage_8_3_20_1914/storage.1ccr/samware
как для нее будут заполнены эти параметры?
22. sergio_sconosciuto 5 21.04.23 13:37 Сейчас в теме
(21) А то купил вашу обработку, но не совсем понятно как ей пользоваться.
23. MaxxG 100 26.04.23 10:02 Сейчас в теме
В Вашем случае:
АдресСервераХранилища: localhost:44380
АдресРесурсаХранилища: /storage_8_3_20_1914/storage.1ccr
Алиас: samware
sergio_sconosciuto; +1 Ответить
24. Shuga88 09.02.24 20:28 Сейчас в теме
Скажите пжл, в обработке я вижу информацию по добавлению, изменению и удалению объектов, а можно как то посмотреть какое поле в объекте поменялось? Если посмотреть Xml запрос, то он содержит поле crs:data, только оно закодировано в непонятной кодировке, возможно в нем и содержутся эти данные.
Оставьте свое сообщение