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

11.06.20

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Работа с хранилищем конфигурации из режима 1С: Предприятие минуя конфигуратор
.epf 15,41Kb
17
17 Скачать (3 SM) Купить за 2 450 руб.

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

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

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

  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

См. также

SALE! 50%

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

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 2450 руб.

29.06.2022    11949    100    4    

132

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

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    2894    kraynev-navi    2    

25

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

Называть Git новой технологией – уже смешно, но для многих 1С-ников это действительно «новое и неизведанное». Расскажем о плюсах и минусах двух главных систем контроля версий в мире 1С: Git и хранилища.

17.09.2024    7355    Golovanoff    69    

26

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

Во многих командах незаслуженно забывают о том, что в базе меняются расширения (как от вендора, так и собственные) и внешние отчеты и обработки. Вплоть до того, что релиз происходит каждый день – меняются печатные формы, отчеты, обработки. Расскажем о том, как выгружать в Git не только изменения конфигурации рабочего контура, но и файлы внешних обработок и расширений.

05.09.2024    2216    ardn    12    

15

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

Заказчики любят EDT+Git за прозрачность и контроль качества. А у разработчиков есть две основные причины не любить EDT – это тормоза и глюки. Расскажем о том, что нужно учесть команде при переходе на EDT+Git.

14.08.2024    7679    lekot    34    

8

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

В «долгоиграющих» проектах стандартный захват объектов 1С в хранилище может привести к длительным простоям других разработчиков. Но и создавать под каждую доработку отдельное хранилище, чтобы использовать технологию разветвленной разработки конфигураций от фирмы «1С» – избыточно. Расскажем о том, как разрабатывать в отдельной базе без ожиданий, а потом с легкостью перенести изменения в хранилище, используя основную идею технологии 1С – конфигурацию на поддержке хранилища.

05.08.2024    4319    sinichenko_alex    16    

25

Групповая разработка (Git, хранилище) Программист Руководитель проекта Стажер Бесплатно (free)

Про изменения и новинки в агрегаторе открытых проектов OpenYellow, которые появились с момента его создания: про портал, Github и Telegram

15.07.2024    3272    bayselonarrend    8    

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

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

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

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

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

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

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

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

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

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


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

Пароль = "1";

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

Показать
Serj1C; CSiER; родственник; VKislitsin; Steelvan; sashocq; MaxxG; +7 Ответить
16. artbear 1563 17.06.20 11:34 Сейчас в теме
Очень интересный и полезный анализ, спасибо автору!
20. kraynev-navi 681 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 102 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, только оно закодировано в непонятной кодировке, возможно в нем и содержутся эти данные.
25. karpik666 3853 23.06.24 06:09 Сейчас в теме
Очень интересно, спасибо большое, у меня вот возникла другая задача, мне нужно подключить конфигурацию к хранилище без синхронизации, типо я точно уверен, что моя конфигурация идентичная с хранилищем, но она к нему не подключена, я просто хочу установить признак, что она подключена именно к этому хранилищу, без ожидания и сравнения с конфигурацией хранилища. такое часто случается, если нужно подключить к хранилищу копию прода, например.
Оставьте свое сообщение