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

11.06.20

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

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

Скачать файлы

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

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

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

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

  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    6996    64    4    

87

Jenkins на службе 1С

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

Основная специализация Jenkins – это, прежде всего, CI/CD. Но его можно использовать и для других важных задач: разбора хранилищ, настройки копий баз данных, раздачи прав пользователям, рестарта кластера и проверки кода проектов. Об опыте использования Jenkins для автоматизации рутинных задач 1С-ника на конференции Infostart Event 2021 Moscow Premiere рассказал Юрий Гончарук.

19.07.2023    1137    yukon    4    

11

Приемы быстрой работы в EDT/Git

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

Статья даёт ответы на некоторые вопросы, возникающие у разработчиков, которые погружаются в океан технологий EDT и Git, омывающий царство DevOps... Сколько и какие ветки нужны? Какой репозиторий выбрать? Кто должен сливать доработки в мастер ветку или ветку версии? Как не тратить время в EDT на ресурсоёмких операциях? Зачем нам сборочный конвейер и как его построить? Зачем нам нужно тестирование и как его реализовать? Как вести разработку, если есть разработчики, не умеющие вести разработку в EDT или не имеющие технической возможности, но нам нужны их skills в 1С? Что такое фантомы и нужно ли с ними бороться? Как слить 20 доработок с конфликтами и уложиться в 4 часа? Опыт использования модных технологий в реальных проектах.

30.03.2023    6085    check2    10    

81

Получаем статистику по git-репозиторию в разрезе разработчиков

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

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

13.03.2023    1847    ardn    3    

27

Формула успешного внедрения DevOps и Agile в 1С: от неудачи к неудаче без потери энтузиазма

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

На конференции Infostart Event 2021 Post-Apocalypse выступил директор практики БИТ:ERP компании Первый БИТ Глеб Стальной. В ходе доклада он рассмотрел трансформацию проектного подхода в продуктовый, рассказал про имплементацию «современных» практик DevOps и продемонстрировал инструменты для разработки, взаимодействия с бизнесом и клиентами, применяемые в его команде.

27.02.2023    1639    glebushka    2    

12

Кровь, пот и GIT

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

Ведущий разработчик 1С Андрей Карпов на конференции Infostart Event 2021 Post-Apocalypse поделился ошибками, которые совершают новички в работе с GIT. В докладе четыре кейса с пошаговыми инструкциями, которые позволят не допускать конфликтов в разработке.

17.01.2023    7566    karpik666    45    

65

Прокси хранилища 1С (IIS, OneScript)

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

Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.

08.12.2022    6309    kamisov    46    

89

Что, если Continuous Integration – это прежде всего практика, а не набор инструментов?

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

Рано или поздно многие компании приходят к практикам DevOps. И начало этому – Continuous Integration. О том, что происходит в команде специалистов 1С, когда они переходят на Git, и почему простое внедрение CI-инструментов не решает проблему подходов к разработке, в докладе на Infostart Event 2021 Post-Apocalypse рассказал руководитель компании ПрогТехБизнес Александр Анисков.

07.12.2022    1909    vandalsvq    0    

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

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

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

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

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

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

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

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

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

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


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

Пароль = "1";

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

Показать
Serj1C; CSiER; родственник; VKislitsin; Steelvan; sashocq; MaxxG; +7 Ответить
16. artbear 1437 17.06.20 11:34 Сейчас в теме
Очень интересный и полезный анализ, спасибо автору!
20. kraynev-navi 635 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 98 26.04.23 10:02 Сейчас в теме
В Вашем случае:
АдресСервераХранилища: localhost:44380
АдресРесурсаХранилища: /storage_8_3_20_1914/storage.1ccr
Алиас: samware
sergio_sconosciuto; +1 Ответить
Оставьте свое сообщение