Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

13.07.22

Разработка - DevOps и автоматизация разработки

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

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

Наименование Файл Версия Размер
Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT): статья и Jenkins скрипты
.7z 469,70Kb
8
.7z 469,70Kb 8 Скачать

В данной статье речь пойдет об альтернативном быстром способе обновления конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. При желании можно его использовать и в случае работы с конфигуратором. Данный способ заключается в непосредственном обновлении базы данных на сервере баз данных (минуя сервер 1С) из файлов конфигурации XML.

После внедрения новой среды разработки столкнулись с проблемой очень долгого обновления информационной базы из EDT по сравнению с Конфигуратором. Для общего понимания, связка систем разработки у нас такая: EDT - bitbucket – GIT. Итоговое решение можно разделить на три шага и для каждого их них используется свой инструмент. Но у вас может быть вместо bitbucket, например, GitLab, и тогда первый шаг можно решать другими инструментами. Из данной статьи вы можете почерпнуть для себя что-то полезное из каждого пункта и/или выбрать для себя что-то отдельное или все в совокупности. Итак, данные шаги и инструменты:

  • Клонирование (получение файлов) необходимой ветки из удаленного репозитария в локальный каталог для дальнейшей работы с ними: Jenkins (программная система предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения - из Википедии)
  • Конвертация файлов формата EDT в формат XML- файлов конфигурации: ring (утилита EDT, устанавливается вместе с EDT)
  • Быстрое обновление базы данных из XML- файлов конфигурации непосредственно через СУБД MS SQL (минуя Конфигуратор и EDT): ibcmd (утилита автономного сервера 1С, устанавливается вместе с сервером 1С)

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

Настройка окружения / переменные

  • Рабочий каталог Jenkins: C:/jenkinsSlave/workspace/
  • Рабочий каталог задания и он же локальный каталог проекта EDT, загруженный из удаленного репозитария: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT
  • Каталог проекта EDT основной конфигурации: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU
  • Каталог проекта EDT расширения: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение
  • Каталог XML файлов основной конфигурации: C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML
  • Каталог XML файлов расширения: C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML
  • Версия EDT (ring): edt@2021.2.0:x86_64
  • Имя сервера MS SQL: SRV_SQL
  • Имя базы MS SQL: TST_TEY
  • Имя пользователя MS SQL: user_SQL
  • Пароль пользователя MS SQL: pass_SQL
  • Имя пользователя базы 1С: user_1C
  • Пароль пользователя базы 1С: pass_1C
  • Имя расширения конфигурации: _скРасширение
  • Каталог лога утилиты ibcmd: C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

  1. Jenkins: Получение файлов необходимой ветки из удаленного репозитария в локальный каталог

 

Как установить и запустить Jenkins, можно найти на просторах интернета, информации по этому поводу довольно много. Самое главное это то, что данный инструмент абсолютно бесплатный. Здесь же я покажу непосредственно само задание, как оно настроено у нас. Создается задача (item) свободной конфигурации, назовем ее к примеру «MASTER_XML_FILES_FROM_GIT» и выделим соответствующим тип (задача со свободной конфигурацией).

 

 

Пишем небольшое описание и сразу ставим флаг «Удалять устаревшие сборки» для того, чтобы ограничить хранение истории выполнения данного задания до 5-ти:

 

 

Далее – Управление исходным кодом. В моем случае - bitbucket server, credentials – учетная запись в  bitbucket (надо завести отдельно), instanceBITBUCKET (единственный выбор), Project name – имя проекта в GIT, Repository name – имя репозитория  в GIT, Clone from – Primary Server (единственный выбор), Branch Specifier - */master (по умолчанию, если ветка другая, то аналогично ее путь в репозитории).

 

 

Триггеры сборки - ставим флаг «Опрашивать SCM об изменениях» и указываем расписание. Указанные настройки говорят о том, что каждый час с 6-ти утра до 23-х вечера (расписание можете указать свое, формат расписания можно посмотреть, нажав знак вопроса), задание будет опрашивать ветку master удаленного репозитария на изменение и, если она изменилась, – обновлять локальный каталог на машине (на котором крутится Jenkins).

 

 

На этом в принципе настройку первого пункта можно считать завершенной. Сохраняем и видим наше задание.

 

 

Как видно на скриншоте, кроме ветки master, настроены аналогичные задания на другие рабочие ветки (под каждого разработчика). Выгруженные файлы проекта из удаленного репозитария будут выгружены в рабочий каталог Jenkins в папку с именем наименования задания. В нашем случае это C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT

 

 

  1. EDT ring: Конвертация файлов формата EDT в формат XML файлов конфигурации

 

2.1 Сначала подготовим каталоги XML файлов конфигурации и расширения, куда будут выгружены файлы из локального проекта EDT -  удалим их полностью (можно вместо удаления каталогов очищать вместо rd использовать del, но это дольше), чтобы не было конфликтов и наложений при выгрузке. Далее ring снова создаст эти каталоги

   rd "C:/1c/EDT/GIT_ORIGIN_TEY/CF_XML" /S /Q

   rd "C:/1c/EDT/GIT_ORIGIN_TEY/CFE_XML" /S /Q 

 

  1. 2.2 Выгружаем конфигурацию проекта EDT в XML файлы конфигурации

 

>CALL ring edt@2021.2.0:x86_64 workspace export --project           C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU --configuration- files "C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML" --workspace-location C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU

 

  1. 2.3 Выгружаем расширение проекта EDT в XML файлы конфигурации

 

>CALL ring edt@2021.2.0:x86_64 workspace export --project C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение --configuration-files "C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML" --workspace-location C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение

 

Если настроить эти скрипты в Jenkins в pipeline, то выглядит как на рисунке ниже (информативно, структурировано и красиво). Текст задания данного скрипта в Jenkins выложен в приложенных файлах. Но вы можете использовать любой способ запуска и контроля данных команд.

 

 

  1. Ibcmd: Быстрое обновление базы данных из XML файлов конфигурации непосредственно через СУБД (MS SQL)

 

3.1. Импорт конфигурации

 

>ibcmd infobase config import --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

3.2. Обновление конфигурации

 

>ibcmd infobase config apply --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA --force

 

3.3. Импорт расширения

 

>ibcmd infobase config import --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML --extension=_скРасширение --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

3.4. Обновление расширения

 

>ibcmd infobase config apply --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C --extension=_скРасширеие --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA --force

 

В Jenkins данное задание выглядит так (текст задания данного скрипта в Jenkins выложен в приложенных файлах):

 

 

 

Результат, выводы и дополнения

Время на обновление базы данных сократилось примерно в 10 раз. Если раньше в EDT приходилось синхронизировать ветку, запускать обновление, ждать, подтверждать принятие изменений, опять ждать… И на все это уходило примерно около часа. То теперь это занимает 5-6 минут одной кнопкой, в том числе, включает в себя подтверждение принятия изменений. В расчет не беру первые два шага, т.к. они автоматически обновляют XML-файлы конфигурации ежечасно (можно и чаще настроить). Но даже если нужно обновить базу сразу после внесения изменений в GIT, то в нашем случае это добавляет 15 минут. В любом случае получается 20 минут против 60-ти (быстрее в 3 раза).

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

Утилита ibcmd содержит в себе проверки корректности XML-файлов. Что попало грузить не будет. Если находит в файлах ошибки, обязательно об этом скажет в логах - на это обязательно стоит обращать внимание перед обновлением рабочей базы. Например:

ibcmd быстрое обновление EDT GIT

См. также

Обновление для КА 1.1, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

19900 руб.

01.04.2020    140619    678    352    

232

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.15.111.

2220 руб.

04.07.2022    6722    26    0    

22

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

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

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

4900 руб.

29.06.2022    9142    78    4    

110

Автотесты для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.144.49.

1728 руб.

20.01.2022    6586    10    0    

9

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Расширение для конфигураций 1С для автоматического подтверждения легальности обновления и выполнения обработчиков обновления при пакетном автоматическом обновлении большого числа баз 1С. А также сам модуль обработки по автоматическому обновлению баз.

2 стартмани

08.05.2019    24213    54    VPanin56    26    

26

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

11.12.2023    6407    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18470    SeiOkami    46    

118

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8813    YA_418728146    6    

141
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. YA_443979581 15.07.22 15:28 Сейчас в теме
Какой размер CF такой конфигурации?
Почему нельзя воспользоваться vanessa-runner и сохранить конфигурацию в CF и загрузить CF на каждую базу?
2. Bitnikov 386 15.07.22 17:40 Сейчас в теме
(1) Размер cf 200 Мб. Выгруженные xml файлы этой конфигурации 1.2 Гб.
ibcmd будет быстрее, наверное даже гораздо быстрее, чем подготовка cf обновление через конфигуратор.
Если есть возможность проверить на время vanessa-runner с ibcmd и написать результат - было бы здорово.
Дмитрий74Чел; +1 Ответить
14. fatman78 17 28.07.22 20:42 Сейчас в теме
(2) Каким образом наличие дополнительного компонента MSSQLServer в связке с ibcmd ускоряет процесс конвертации? Чем использование файлового варианта ibcmd не устроило?

upd: Судя по всему в статье имеется ввиду обновление конфигурации баз 1С из файлов проекта EDT на тестовом сервере или ни дай бог на Проде в автоматическом режиме . Если нет, и это делается для обновления конфигураций локальных баз разработчиков, то я не совсем понимаю зачем это нужно пихать в jenkins и делать в автоматическом режиме. Напишите пож-та для каких типов баз это используется.
15. Bitnikov 386 04.08.22 11:01 Сейчас в теме
(14) У нас разработка ведется на серверных базах MS SQL. Суть указана в заголовке статьи - быстрое обновление базы 1С (из ветки GITа). Прирост скорости обновления ощутим. В основном, в целях тестирования доработок. Jenkins тут для удобства. Можно эти скрипты использовать в любой другой системе для автоматизации процесса разработки.
fatman78; +1 Ответить
3. Бэнни 203 16.07.22 07:17 Сейчас в теме
Можно было и покороче написать статью) без растекания мыслью. Ведь основная суть в 3.1, 3.2, 3.3, 3.4
check2; Dach; +2 1 Ответить
17. Дмитрий74Чел 234 18.08.22 11:39 Сейчас в теме
(3) нормальная статья, подробная. Человек старался.
Хотя конечно можно было скопировать эти пункты в начало под кат.
NotSure; Bitnikov; +2 Ответить
4. kamisov 150 17.07.22 12:04 Сейчас в теме
В 8.3.21 использование ibcmd превращается в тот ещё квест. Надо теперь указывать кучу параметров, есть проверка лицензии, просто так в базу уже не лезет.
8. Bitnikov 386 18.07.22 11:58 Сейчас в теме
(4) Работаем пока в 8.3.20, планируем скоро переходить на 8.3.21, проведем тестирование в части ibcmd. Куча параметров не проблема, главное чтобы обновлял так же быстро и без ошибок.
5. cdiamond 233 18.07.22 06:26 Сейчас в теме
с 8.3.21 еще хуже стало у меня: выгрузка в XML и CF ,из одной и той же базы расходятся на два десятка обьектоа конфигурации. Кто еще сталкивался?
6. alex_bob 246 18.07.22 09:33 Сейчас в теме
(5) А можно подробнее, что с чем расходится?
7. cdiamond 233 18.07.22 10:49 Сейчас в теме
(6) Работаю с большими типовыми снятыми с поддержки. Последовательность проверки простая, советую всем его проделать:
1) выгружаем в CF
2) выгружаем в XML
3) загружаем обратно из XML из 2 пункта, уже на этом пункте у меня предупреждения
4) сравниваем с CF из 1 пункта.
Должно быть пусто, но расхождение было всегда, а на новой 8.3.21 их количество начало зашкаливать. Разница может быть на любом объекте конфигурации - на роли, макете, документе, регистре.
Проверял на платформах Windows и Linux - поведение платформы одинаковое. Пока не было и нет внятного объяснения этому чуду, в продуктив технологию выгрузки/загрузки XML не внедряю, а те кто используют возможно сильно рискуют.
PolinkaKMS; Dach; teyana; EliasShy; +4 Ответить
9. Bitnikov 386 18.07.22 14:32 Сейчас в теме
(7) EDT только в таком формате и работает.
Проделал ради эксперимента эти шаги - различий между CF и XML выгрузки не обнаружено.
Писал выше: Размер cf 200 Мб. Выгруженные xml файлы этой конфигурации 1.2 Гб
10. cdiamond 233 18.07.22 16:17 Сейчас в теме
(9) у EDT под капотом все тот же конфигуратор, но в XML он вроде выгружает самостоятельно, в отличие от CF.
11. Dach 372 19.07.22 13:18 Сейчас в теме
(7) на 8.3.20 сталкивался, если выгрузить расширение в файлы и обратно загрузить - слетает часть обработчиков событий элементов форм. Сам код то на месте, в модуле формы, а вот связка кода с конкретным обработчиком действий элемента пропадает.

Ну и отличия при выгрузке-загрузке cf - тоже видел неоднократно.

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

Так что механизм тот еще
16. fatman78 17 04.08.22 15:19 Сейчас в теме
(7)Видел такое - там под капотом формат xml опять сменился - 2.14 стал на платформе 8.3.21. Если пойти еще дальше и сконвертировать XML в формат EDT используя ring 2022.1.0, то при обратной конвертации в xml и загрузке в конфигуратор, появляются битые ссылки (пропадает часть картинок из встроенных библиотек). О чем конфигуратор нам радостно сообщает в виде предупреждений во время загрузки.
12. user1817380 19.07.22 16:39 Сейчас в теме
Добрый день. Подскажите "чайнику", давно не обновляла 1с, что сначала обновлять Конфигурацию или Платформу?
13. user591389_aska_rabota 20.07.22 00:53 Сейчас в теме
Можно в принципе обновить только конфигурацию, обычно этого достаточно.
Платформа обновляется крайне редко, в исключительных случаях


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

Советую обновлять через Конфигурация-поддержка-обновить конфигурацию (меньше вероятность что-либо сломать)
18. 1cnik2 08.12.22 16:50 Сейчас в теме
Всем привет! Коллеги, кто-нибудь сравнивал производительность ibcmd config import и vrunner compile? Что быстрее?
19. PerlAmutor 129 07.01.23 18:23 Сейчас в теме
Сравнил производительность ibcmd по сравнению с Конфигуратором с использованием файлов выгрузки XML ERP 2.5.8. Результаты сильно порадовали.

Загрузка из XML файлов в файловую базу:

Через конфигуратор: 55 минут
Через ibcmd: 10 минут

Сохранение в .cf файл с помощью ibcmd из файловой базы данных: 1 минута (файл 2Гб)

Вот команды на случай, если захочется повторить:

// Создание YML файла для файловой базы данных:
ibcmd server config init --db-path="E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309" --db-name="ERP 2.5.8.295+2.5.8.309" "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml"


// Загрузка из XML с использованием ранее созданного файла настроек YML
ibcmd infobase config import -c "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml" "E:\git_conf_update_258_295_309\src"


// Выгрузка в .cf файл
ibcmd infobase config save -c "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml" "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.cf"


Стоит отметить особенности:
1. В случае загрузки из XML антивирус может потреблять больше чем сам ibcmd или конфигуратор и сильно тормозить процесс (рекомендуется на время отключить)
2. При загрузке XML файлов через Конфигуратор на последнем этапе также создается кэш конфигурации, что в последствии позволяет быстро открыть конфигуратор. Этого не происходит при использовании ibcmd, что в итоге может отнять дополнительное время. Поэтому 10 минут цифра не окончательная, т.к. вам придется подождать создания кэша при входе в конфигуратор. Но это происходит все равно гораздо быстрее, чем грузить XML файлы полностью через Конфигуратор.
worker1c; Bitnikov; +2 Ответить
Оставьте свое сообщение