Как ускорить перенос изменений между хранилищами 1С?

11.08.21

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

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

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

Наименование Файл Версия Размер
Как ускорить перенос изменений между хранилищами 1С?:
.cf 33,72Mb
11
.cf 1.0.1.5 33,72Mb 11 Скачать

Предпосылки автоматизации

На момент написания статьи в моем направлении работало порядка 70 сотрудников - специалистов, ведущих специалистов и их руководителей, которые занимались разработкой на платформе 1С. Каждый из них ежедневно проводил разработку, тестирование и внедрение функционала.

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

Вот последовательность типовых операций, которые нужно было выполнить сотруднику:

  1. В Источнике: Обновить конфигурацию из хранилища. Время этого шага - от 1 до 20 минут (в зависимости от нагрузки на хранилище, оборудование и объема изменений).

  2. В Источнике: Сохранить конфигурацию в файл. Время этого шага - от 5 до 15 минут.

  3. В Приемнике: Обновить конфигурацию из хранилища. Время этого шага - от 1 до 10 минут.

  4. В Приемнике: Захватить объекты в хранилище. Время этого шага измеряется количеством объектов и зависит от нагрузки на хранилище. Например, если нужно захватить 100 объектов и хранилище работает идеально, то время захвата составляет порядка 60 минут интенсивной ручной работы.

  5. В Приемнике: Обновить ИБ. Время этого шага - от 1 до 20 минут.

  6. В Приемнике: Сравнить/объединить конфигурацию с файлом, выгруженным на шаге 2. Время этого шага от 10 до 60 минут.

  7. Просмотр всех изменений и отметка галочками по каждому объекту, что конкретно нужно перенести. Время этого шага измеряется количеством объектов и сложностью изменений. Например, если нужно сравнить между собой 100 объектов, то время сравнения составляет порядка 2 часов интенсивной ручной работы.

  8. В Приемнике: Обновить ИБ. Время этого шага - от 1 до 20 минут.

  9. В Приемнике: Выполнить синтаксическую проверку модулей. Время этого шага - от 1 до 10 минут.

  10. В Приемнике: Выполнить помещение изменений в хранилище. Время этого шага - от 1 до 30 минут. В статистику не включены такие ситуации, как удаление объектов из хранилища, т.к. эти операции довольно редкие. Но если они используются, то помещение может идти часами.

Идея возникла в том, чтобы ускорить этот процесс:

  1. За счет автоматизации рутинных операций. Сотруднику остается указать базы источника и получателя, выбрать объекты для переноса, а после переноса - проверить результат.

  2. За счет использования пакетного режима 1С:Конфигуратора. Некоторые шаги в этом режиме работают значительно быстрее.

Те сотрудники, кто начал использовать инструмент, получили следующие эффекты:

  1. Трудозатраты на выполнение рутинных операций сократились от 20% до 90%. Вот конкретный пример: в рамках задачи обновления "1С:Библиотеки стандартных подсистем" потребовалось поместить изменения в два отдельных хранилища тестовой среды. Объектов было порядка 1000. В случае ручного переноса на каждое помещение потребовалось бы около 6 часов непрерывной работы сотрудника. В случае автоматизации время каждого переноса составило не более 30 минут.

  2. Снизился риск “человеческого фактора” что-нибудь забыть перенести.

Итак, ниже описана краткая инструкция по использованию этого инструмента.

 

Начинаем работу

Развертывание базы

Инструмент представляет из себя небольшую конфигурацию, разработанную на базе "1С:Библиотеки стандартных подсистем" от "Фирмы 1С". Базу лучше развернуть в файловом режиме. Для корректной работы необходимо использовать платформу не ниже 8.3.10.

Почему файловый режим? Причин несколько:

  1. Большая часть операций требуют прямого доступа к конфигуратору. А это значит, что для выполнения синхронизации придется либо закрывать конфигуратор базы источника и базы приемника, что не всегда бывает удобно; либо сделать отдельные копии баз источника и приемника в клиент-серверном варианте работы.

  2. Для загрузки метаданных из базы потребуется установить COM-соединение, а для него важно, чтобы версии клиента и сервера совпадали.

  3. Интерактивные операции, такие как “Запуск Конфигуратора”, в клиент-серверном варианте работают некорректно - конфигуратор откроется на сервере :) Руки починить это пока не дошли.

 

Создание источника, приемника и сценария синхронизации

Для примера рассмотрим классический сценарий переноса изменений из хранилища разработки в хранилище обновления. Запускаем режим Предприятия. На рабочем столе появляется окно “Синхронизации хранилищ”.

 

 

Создаем базы для синхронизации.

 

 

 

Для удобства дальнейшей работы прописываем сценарий синхронизации.

 

 

Каждый шаг процесса имеет собственную настройку атрибутов.

 

 

Атрибут "Интерактивный" означает, что указанный шаг по своему завершению потребует каких-либо действий от пользователя. Поэтому после завершения такого шага сценарий будет остановлен.

Атрибут "Требует список объектов" означает, что указанный шаг для своего выполнения потребует указание списка объектов. Если список объектов указан не будет, то сценарий будет остановлен.

 

Настройка сценария

В форме “Синхронизация хранилищ” заполняем таблицу шагов (кнопка "Заполнить").

 

 

Задаем общие параметры сценария (гиперссылка "Установить параметры сценария"). По умолчанию каждый шаг наследует общие параметры сценария, но если это необходимо, то параметры конкретного шага можно поменять. Здесь реализовано четыре вкладки:

  • Выбранные объекты

  • Помещение в хранилище

  • Комплект поставки

  • Параметры запуска

 

Выбор объектов метаданных

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

Есть несколько способов подбора объектов:

1) Обычное редактирование списка. Можно вручную вводить имена объектов метаданных. Например, ОбщийМодуль.ОбщегоНазначения.

 

2) Подбор по дереву метаданных.

Форма подбора открывается по кнопке "Отобрать по дереву метаданных". В открывшейся форме потребуется указать базу-источник, из которой будут взяты метаданные, и нажать кнопку с пиктограммой подключения. Альтернативный вариант - загрузить метаданные базы заранее и обращаться к ним.

 

 

После некоторого времени в форме отобразится дерево метаданных базы-источника. Здесь можно отметить галками нужные объекты.

 

 

Если при подключении у вас возникает ошибка “Недопустимая строка с указанием класса”, то это значит, что на вашем ПК не установлена библиотека comcntr.dll. Чтобы установить библиотеку, нужно под учетной записью администратора через cmd выполнить вот такую команду:

regsvr32 "C:\Program Files\1cv8\8.3.15.1869\bin\comcntr.dll" -i

 

3) Подбор по списку.

Этот вариант доступен по кнопке с пиктограммой OpenOffice Calc. Здесь можно задать произвольный список объектов. При переносе объекты будут стыковаться по полному имени.

 

 

4) Подбор по подсистемам.

Этот вариант доступен по кнопке с пиктограммой подсистемы. Объекты будут отбираться в иерархии выбранных подсистем.

 

5) Подбор по истории помещения в хранилище.

Форма подбора открывается по кнопке "Отобрать по коммитам". Открывшаяся форма позволяет выбрать объекты по истории помещения в хранилище базы-источника. В появившемся окне нужно выбрать начальный и конечный номер версии коммита и нажать кнопку "Выбрать коммиты".

 

 

Настройка помещения в хранилище

На этой вкладке можно указать комментарий к помещению, а также оставить объекты захваченными, если это требуется.

 

 

Настройка создания комплекта поставки

Если в сценарии планируется создавать комплект поставки, то для корректной работы этого этапа нужно прописать настройки.

 

 

Установка параметров запуска

На этой вкладке есть несколько галок. Они применяются на шаге "Запустить Конфигуратор" и "Запустить Предприятие".

 

 

Сохранение изменений

Для сохранения параметров синхронизации нужно нажать на кнопку "Сохранить".

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

 

 

Выполнение сценария

Внимание! Помещать изменения в хранилище без предварительной проверки глазами не рекомендуется.

Объединение изменений происходит с приоритетом файла. Это значит, что такие объекты, как роли и состав планов обмена, будут целиком взяты из файла. Поэтому после объединения конфигураций потребуется вручную по удалять всё лишнее.

Еще одна причина проверить глазами - человеческий фактор. Вдруг кто-то из разработчиков нарушил регламент и не поместил свои изменения в ХО, а объекты в ХР отпустил? В этом случае его изменения будут видны на этапе сравнения-объединения конфигураций.

Поэтому в описанном выше сценарии нужно проверить изменения глазами, сверившись с конфигурацией базы данных, и только после проверки помещать изменения в хранилище.

 

Запуск сценария

Выполнить сценарий можно как целиком, так и по частям. В первом случае нужно отметить флажками нужные шаги и нажать на кнопку "Выполнить". Во втором случае нужно выбрать нужный шаг, вызвать контекстное меню и выбрать команду "Выполнить этот шаг".

 

 

Состояние выполнения отображается в колонке "Состояние". Если на шаге произошла ошибка, то сценарий будет прерван.

Например, ошибка произойдет в случае, если при захвате объектов не получится захватить все объекты по списку, т.к. они уже захвачены другими. Пользователю нужно будет принять решение, пропустить этот шаг или исправить ситуацию и повторить его.

Некоторые шаги, такие как "Сравнить конфигурацию с файлом (только просмотр)" могут возвращать результат в виде отчета.

 

Сохранение настроек сценария

Настройки синхронизации можно сохранять. Эту возможность удобно использовать тогда, когда требуется поместить изменения сначала в тестовую среду, а затем спустя время - в хранилище обновления.

Для сохранения и восстановления настроек предусмотрены вот эти кнопки командной панели.

 

 

ToDo или что можно было бы улучшить

В текущей реализации пока не хватает:

  • Древовидного сценария для возможности параллельного выполнения его шагов.

  • Возможности не закрывать хранилище, когда получаешь историю его изменения. Но это можно обойти путем создания отдельного пользователя хранилища.

  • Возможности не закрывать Конфигуратор источника и приемника в процессе выполнения сценария.

  • Возможности использовать интерактивные шаги в клиент-серверном варианте работы базы.

  • Инструмент не тестировался на базе с расширениями и хранилищами, к которым они подключены. Здесь могут быть нюансы.

Пожелания по доработке пишите в комментариях.

Конфигурация автоматизация переноса изменений между хранилищами ускорение работы

См. также

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

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

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

4900 руб.

29.06.2022    9379    78    4    

112

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

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

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

08.04.2024    912    bayselonarrend    2    

31

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

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

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

02.04.2024    4530    Begemoth80    24    

45

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

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

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

25.03.2024    1564    bayselonarrend    3    

38

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

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

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

05.03.2024    2076    user1989937    6    

16

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

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

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

05.02.2024    3998    bayselonarrend    15    

62

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

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

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

22.01.2024    8048    bayselonarrend    50    

87

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

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

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

17.01.2024    3001    kamisov    17    

60
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 7OH 69 11.08.21 10:58 Сейчас в теме
Есть пара вопросов ?
1. А не проще ли во второй базе всегда держать всё захваченным ?
2. Как можно автоматизировать процесс объединения, особенно когда переносить надо не всё ? Я так понимаю данный момент только для идеальных вариантов - когда спринт закончен и до релиза никто ничего не пушит ?
+
2. kabanoff 49 11.08.21 11:28 Сейчас в теме
(1)
1. Это возможно, если с хранилищем работает 1 человек. Но тогда и смысла в двух хранилищах нет. А вот если это команда из 10, 30, 50 человек, тогда держать всё захваченным просто не получится.
2. Это как раз-таки и описано в статье.
+
3. 7OH 69 11.08.21 12:08 Сейчас в теме
(2)
1. с релизным хранилищем и должен работать один. в него же переносятся наработки из дев, с которым работает сколько угодно человек.
2. не увидел, как забрать только одну процедуру из модуля объекта, а вторую объединить частично. Если корректно понял, то забирается объект (по имени) целиком, считая, что ничего лишнего не успели поместить.
MrsMastersan; +1
4. kabanoff 49 11.08.21 12:33 Сейчас в теме
(3)
1. В нашей команде в релизном хранилище работают все и изменения переносят в него самостоятельно. В вашем случае можно также захватить только то, что нужно по задаче, чтобы не перенести ничего лишнего.
2. Да, механизм переносит объекты целиком. Но у вас есть возможность путем сравнения с конфигурацией ИБ точечно отметить те изменения модулей, которые нужно оставить.
+
Оставьте свое сообщение