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

11.08.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Как ускорить перенос изменений между хранилищами 1С?:
.cf 33,72Mb ver:1.0.1.5
15
15 Скачать (2 SM) Купить за 2 150 руб.

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

На момент написания статьи в моем направлении работало порядка 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 или что можно было бы улучшить

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

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

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

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

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

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

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

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

См. также

SALE! 50%

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

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

4900 2450 руб.

29.06.2022    11951    100    4    

132

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

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

23.09.2024    2913    kraynev-navi    2    

25

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

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

17.09.2024    7374    Golovanoff    69    

26

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

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

05.09.2024    2231    ardn    12    

15

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

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

14.08.2024    7698    lekot    34    

8

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

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

05.08.2024    4350    sinichenko_alex    16    

25

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

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

15.07.2024    3287    bayselonarrend    8    

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