Итак, сразу к делу.
Методы выгрузки конфигурации в файлы
Выгрузить конфигурацию в файлы можно:
- Вручную из конфигуратора (Конфигурация – Выгрузить конфигурацию в файлы…) Этот вариант нам не интересен, так как он не автоматизируется.
- Библиотека precommit1c (precommit1c) проекта OneScript. Этот вариант не рассматривается, так как по моему мнению он не актуален для конфигураций на управляемых формах.
- BATH Выгрузка используя пакетный режим запуска конфигуратора (Приложение 7. Параметры командной строки запуска «1С:Предприятия»)
- AGENT Выгрузка используя конфигуратор в режиме агента SSH (Приложение 7. Параметры командной строки запуска «1С:Предприятия» и еще тут Приложение 4. Вспомогательные утилиты)
- IBCMD Выгрузка используя автономный сервер 1С Предприятие (Глава 7. Автономный сервер)
Вопрос?
Если я упустил какой-то метод выгрузки конфигурации, расширения, внешней обработки в файлы, обязательно напишите мне. Будет полезно дополнить статью новой информацией, обогатить, так сказать.
Важно!
Для повторения эксперимента на своей машине, требуется при установке платформы отмечать установку сервера 1С Предприятие, иначе автономный сервер работать не будет. Я советую, всем кто не знаком с автономным сервером посмотреть видео Первого учебного центра 1С, а именно уроки с 37 по 40:
Платформы, участвующие в забеге
Сегодня на нашей арене за звание "Самая быстрая" соревнуются платформы:
- 8.3.18.1902 от 20.09.2022
- 8.3.19.1665 от 19.09.2022
- 8.3.20.2076 от 19.09.2022
- 8.3.21.1607 от 28.10.2022
- 8.3.22.1681 (beta) от 04.11.2022
Как видите, самый свежак. Все для вас.
Платформы будут тестироваться под операционной системой Windows 11.
Вы скажете, почему в забеге не участвует 8.3.17? Я думаю, эта версия уходит из эксплуатации. Старушка - сверстница COVID-19. Похоже, пора ей на покой, как ни как с апреля 2020 года вкалывает.
Информация!
Статья была подготовлена до массового выпуска исправительных версий платформ. Подробнее: Срочное сообщение от фирмы «1С»: обновите платформу как можно скорее. Я не стал перезапускать тестирование на этих новых платформах. Судя по письмам от компании 1С в этих версиях исправлялась уязвимость без развития платформы.
Как будем испытывать?
Эксперимент будет построен следующим образом: каждая платформа участвующая в забеге выполнит следующие действия:
- Пять раз выгрузка конфигурации методом BATH
- Пять раз выгрузка конфигурации методом AGENT
- Пять раз выгрузка конфигурации методом IBCMD
Почему пять раз? Причины две:
- Сгладить погрешность измерения
- Уменьшить влияние «прогрева» системы при выгрузке
В качестве подопытной конфигурации, которую мы будем выгружать в файлы, аж целых 75 раз выступает ЗУП редакции 3.1.24.25 от 27.10.2022. Подключаться будем к файловой ИБ, которая располагается на SSD диске.
Вы спросите, почему именно ЗУП? Хорошо, я отвечу. Во-первых, в этой конфигурации почти нет бинариников. Это вам не УТ11 с сотней драйверов торгового оборудования. Во-вторых, как не странно, это очень небольшая конфигурация. Она меньше БП, УТ, УНФ. Признаюсь, сперва я тестировал выгрузку на конфигурации, которая идет в составе БСП, но она очень маленькая и на ней не так ярко видны колебания времени выгрузки.
Важно!
Для повторения эксперимента на своей машине вам потребуется в базе ЗУП добавить пользователя с полными правами, с именем “admin” и паролем “123”
Кто будет испытывать
Конечно, 75 раз запускать разные командные строки, это так себе удовольствие. Поэтому пишем скрипт. Да не просто скрипт, а на новом Исполнителе 2.0. Вауу!
Детали скрипта будут разобраны ниже.
Результат испытаний
Как всегда самое интересное в конце, ну почти в конце.
И так, перед вами результат гонки конфигураторов. В двух словах, что вы видите.
Во-первых, сводная таблица с результатами замеров. По вертикали наши платформы, которые из-за всех сил старались победить. По горизонтали метод выгрузки. Ну и на пересечении среднее время выгрузки за пять попыток. Время в таблице представлено в миллисекундах, то есть 61532мс нужно читать как 61 секунда с половиной.
Во-вторых, диаграмма, где по горизонтали отображены наши платформы, а по вертикали среднее время выгрузки конфигурации в файлы в миллисекундах. Цветом столбца выделен метод выгрузки. Обратите внимание на легенду "Mode" справа от диаграммы.
В-третьих, для самых пытливых, под спойлером приведены исходные данные измерений.
Вывод и итог
Во всех хороших статьях есть выводы. Моя статья хорошая.
И так выводы.
- Есть прогрев конфигуратора. То есть, вторая и далее выгрузка происходят быстрее первой. Чьи кэши заполняются при прогреве конфигуратора или Windows не понятно.
- Новые версии конфигуратора работают быстрее во всех режимах. Браво!
- Автономный сервер на платформах с 8.3.20 самый быстрый! Это работает многопоточный режим выгрузки. В процессе выгрузки в диспетчере задач видно, как процессор шуршит всеми своими ядрами.
- Начиная с версии 8.3.20 скорость выгрузки в пакетном режиме и в режиме агента практически сравнялись. Думаю, в первую очередь это произошло из-за уменьшения времени открытия окна конфигуратора в пакетном режиме.
- Конфигуратор в режиме агента показывает самые маленькие колебания времени от версии к версии.
- Даже самая медленная выгрузка конфигурации в файлы вполне терпимая.
Экзекутор
В процессе тестирования нам все время помогал Исполнитель 2.0. Пришло и его время. И так, подробнее о скрипте, который выгружал конфигурацию.
Исполнитель 2.0
В статье использовался Исполнитель 2.0.1.16, который вышел 18.10.2022
Документация: (1С:Исполнитель)
Объектная модель (1C:Исполнитель)
Книжка от ХРУСТАЛЕВОЙ (кем бы она не была) (1С:Предприятие.Элемент)
Разработка и отладка
Разработка скриптов ведется в ЛУЧШЕМ редакторе кода, а именно в VSCode (Visual Studio Code)
Для комфортной разработки потребуются установить плагины:
- 1C:Executor (1C:Executor - Visual Studio Marketplace) Вся магия синтаксис помощника, рефакторинга и отладки содержится в нем.
- Интерфейс на русском языке в VSCode сделает расширение Russian Language Pack for Visual Studio Code (Russian Language Pack for Visual Studio Code - Visual Studio Marketplace)
- У кого по русскому в школе были двойки поможет Russian - Code Spell Checker (Russian - Code Spell Checker - Visual Studio Marketplace и Code Spell Checker - Visual Studio Marketplace)
- Кто дружит с git или кто собирается подружиться, лучший клиент git на свете - Git Graph (Git Graph - Visual Studio Marketplace) Не забывайте про командную строку git. Познай силу, Люк.
- Кто хочет от git 100% мощности ставит GitLens — Git supercharged (GitLens — Git supercharged - Visual Studio Marketplace)
Скрипт для тестирования платформ различных версий
Скрипт помимо статьи так же выложен на GitHub.
Структура скрипта:
- Метод Скрипт – стартовая точка. Содержит настройки путей и версии тестируемых платформ
- Метод bath – выгрузка конфигурации используя пакетный режим
- Метод agent – выгрузка конфигурации используя режим агента конфигуратора
- Метод ibcmd – выгрузка конфигурации с использованием автономного сервера
- Метод ОчиститьКаталог – очистка каталога с файлами выгруженной конфигурации
- Метод ЗаписатьВЛог – запись результатов тестирования в текстовый лог файл
Любителям этого самого, интересного
Скрипт для тестирования выгрузки конфигурации в файлы был написан в качестве учебного примера при освоении мною нового языка.
Ниже приведу несколько моментов, на которые я обратил внимание при написании скрипта.
Литералы в массивах
Очень удобная вещь. В одной строке массив объявляется и инициализируется данными. Исполнитель сам определяет размерность массива, а так же сам выводит тип элементов массива.
знч ВерсииПлатформы = ["8.3.18.1902", "8.3.19.1665", "8.3.20.2076", "8.3.21.1607", "8.3.22.1681"]
Компактность языка
Эта фишка из той темы, что пока сам не попробуешь не поймешь. Оказывается, очень приятно НЕ писать «Тогда - КонецЕсли» и «Цикл - КонецЦикла»
Теперь можно писать так.
если ЛогФайл.Существует()
Файлы.Удалить(ПолныйПутьКЛогФайлу)
;
Красота!
Интерполяция строк
Незаменимая вещь в скриптах. Посмотрите, как изящно можно писать:
пер Аргументы = ["DESIGNER", "/F %ИБ", "/N admin", "/P 123", "/DumpConfigToFiles %CF_FILES"]
При исполнении в строки на места %ИБ и %CF_FILES подставятся значения соответствующих переменных. Вот так просто и удобно. Подсаживаешься на интерполяцию сразу.
Управляющие последовательности
Еще про строки. В Исполнителе в строках работают управляющие последовательности, например «\т» для табуляции. Как результат, красивый вывод результата работы скрипта. За вывод в терминал отвечает следующий код:
пер РезультатВыгрузки =
"IBCMD\т%ВерсияПлатформы\т$ВремяСтарта\т$ВремяЗавершения\т%Длительность\т%{Длительность.ВМиллисекундах()}"
Консоль.Записать(РезультатВыгрузки)
Соединение по SSH
Стандартная библиотека Исполнителя имеет объекты для подключения к удаленным серверам по SSH. Можно подключиться к серверу Linux или, как в скрипте, к конфигуратору, который работает в режиме агента.
исп СоединениеSsh = новый СоединениеSsh("127.0.0.1", 1543, "admin", "123")
После того, как Исполнитель подключился к удаленному серверу он может на этом сервере открыть консоль.
исп КонсольSsh = СоединениеSsh.ОткрытьКонсоль()
А дальше Исполнитель может посылать команды в консоль а так же понимать, что посланная в консоль команда закончила свое выполнение и сейчас терминале выводится строка приглашения.
КонсольSsh.СтрокаПриглашения = "designer> "
КонсольSsh.ОжидатьПриглашение(5с)
КонсольSsh.Выполнить("common connect-ib", 2с)
Тип Длительность
Удобный тип для передачи в объекты информации о длительности. У типа есть человеко-читаемый литерал, например 73с или 1м13с.
КонсольSsh.ОжидатьПриглашение(5с)
Отладка
Плагин 1C:Executor для VSCode имеет полноценный отладчик, который умеет все, а именно:
- Точка останова
- Информация о переменных в окне "Локальные переменные". Причем, обратите внимание, если переменная это объект то полноценно показываются значения свойств этого объекта
- Информация о стеке вызова в окне "Стек вызовов"
- Информация о точках останова в окне "Точки останова"
- Шагания с заходом и без захода в метод
- В json файле в котором описывается конфигурация отладки можно указать аргументы командной строки и отлаживать скрипт с передачей в него параметров.
Ну и скриншот, как это все выглядит:
Итог и вывод
Статью пора завершать. Итак, какой можно подвести итог:
- Исполнитель, как скриптовый язык очень неплох. Язык имеет развитую систему типов и богатую стандартную библиотеку.
- Писать на Исполнителе легко и приятно. Язык компактный. Написанный код легко читается.
- Порог входа очень небольшой. Опытный программист начинает писать код сразу.
- Есть поддержка в Телеграмм чате https://t.me/e1c_executor/2
Всем спасибо, кто дочитал статью до конца. К статье приложен файл с кодом программы скрипта и Excel файл с результатами тестирования. Вы можете скачать эти файлы в качестве благодарности за мою статью.
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.65