Командная строка - это просто, или три примера автоматизации рутины

31.01.23

База данных - Администрирование СУБД

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

Введение

 
 Небольшой дисклеймер

 Статья нацелена на то, чтобы показать примеры работы с 1С из командной строки. Если вы ничего не знаете про параметры командной строки, то предварительно можно ознакомиться с документацией на ИТС: Приложение 7. Параметры командной строки запуска «1С:Предприятия».

Работа с 1С из командной строки - хороший способ автоматизировать рутину и экономить своё время. Но мало знать, что инструмент существует, важно понимать, кто и как его использовать. Именно поэтому я решил написать эту статьи и показать то, с чего начинал работать я.

 

Пример 1 - автовход в предприятие, конфигуратор и хранилище

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

rem вход в файловую базу в конфигуратор
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123"

rem вход в файловую базу в предприятие
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" ENTERPRISE /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123"

rem вход в серверную базу в конфигуратор
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /s"server\testbase" /u"Администратор" /p"123"

rem вход в базу и авторизация в хранилище
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123" /ConfigurationRepositoryF"tcp://test:1849/ERP/ERPdev" /ConfigurationRepositoryN "testUser" /ConfigurationRepositoryP "testPasswd"

 

Пример 2 - Обновление из хранилища базы разработки с созданием резервной копии

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

rem Обновить конфигурацию-источник из хранилища до последней версии и автоматически обновим базу данных
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123" /ConfigurationRepositoryF"tcp://test:1849/ERP/ERPdev" /ConfigurationRepositoryN "testUser" /ConfigurationRepositoryP "testPasswd" /ConfigurationRepositoryUpdateCfg -force /UpdateDBCfg

А перед обновлением неплохо бы сохранить себе свою конфигурацию.

rem Создаём копию текущей конфигурации
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123" /ConfigurationRepositoryF"tcp://test:1849/ERP/ERPdev" /ConfigurationRepositoryN "testUser" /ConfigurationRepositoryP "testPasswd" /DumpCfg"C:\tmp\tempCFG.cf"

 

Пример 3 - разворачивание новой конфигурации для разработки, создание хранилища и пары ролей к нему

Бывает, что для разработки под задачу необходимо создавать отдельное хранилище. Или это нужно делать для каждого нового разработчика. А значит, есть простор для автоматизации.

rem Создание информационной базы
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" CREATEINFOBASE "File=""C:\Work\1c_bases\test"""

rem Обновить конфигурацию-источник из хранилища до последней версии
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123" /ConfigurationRepositoryF"tcp://test:1849/ERP/ERPdev" /ConfigurationRepositoryN "testUser" /ConfigurationRepositoryP "testPasswd" /ConfigurationRepositoryUpdateCfg -force /UpdateDBCfg

rem Выгрузить конфигурацию-источник в файл
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\testHran" /u"Администратор" /p"123" /ConfigurationRepositoryF"tcp://test:1849/ERP/ERPdev" /ConfigurationRepositoryN "testUser" /ConfigurationRepositoryP "testPasswd" /DumpCfg"C:\tmp\tempCFG.cf"


rem Загрузить конфигурацию источника в конфигурацию-приёмник
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\test" /LoadCfg "C:\tmp\tempCFG.cf"
  
rem обновить базу данных после загрузки
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\test" /UpdateDBCfg

rem отвязать загруженную конфигурацию от хранилища
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\test" /ConfigurationRepositoryUnbindCfg -force

rem Создание хранилища конфигурации
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\test" /ConfigurationRepositoryCreate /ConfigurationRepositoryF"tcp://test/ERP/test/test" /ConfigurationRepositoryN "Администратор" /ConfigurationRepositoryP "123"

rem Создание пользователя
"C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe" DESIGNER  /f"C:\Work\1c_bases\test" /ConfigurationRepositoryF"tcp://test/ERP/test/test" /ConfigurationRepositoryN "Администратор" /ConfigurationRepositoryP "123" /ConfigurationRepositoryAddUser -User tests -Pwd test -Rights ReadOnly
 
 То же самое, но с параметрами бат-файла

 

set PATH_Platform="C:\Program Files\1cv8\8.3.18.1334\bin\1cv8.exe"
set PATH_To_NewFileBase="C:\Work\1c_bases\test"
set PATH_To_FileBaseWorkHran="tcp://test:1849/ERP/ERPdev"
set PATH_To_TMPCF="C:\tmp\tempCFG.cf"

set DefaultUser="Администратор"
set DefaultPassword=""

set PATH_To_WorkHran="tcp://test:1842/ERP/dev"
set WorkHranUser="Администратор"
set WorkHranPassword=""

rem set PATH_To_NewHran="tcp://test:1849/ERP/testdev"
set PATH_To_NewHran="C:\Work\1c_hran\test_new"
set NewHranUser="Администратор"
set NewHranPassword="123"

rem Создание информационной базы
%PATH_Platform% CREATEINFOBASE "File=%PATH_To_NewFileBase%"

rem Обновить конфигурацию-источник из хранилища до последней версии
%PATH_Platform% DESIGNER  /f%PATH_To_FileBaseWorkHran% /n%DefaultUser% /p%DefaultPassword% /ConfigurationRepositoryF%PATH_To_WorkHran% /ConfigurationRepositoryN%WorkHranUser% /ConfigurationRepositoryP%WorkHranPassword% /ConfigurationRepositoryUpdateCfg -force /UpdateDBCfg /DisableStartupDialogs

rem Выгрузить конфигурацию-источник в файл
%PATH_Platform% DESIGNER  /f%PATH_To_FileBaseWorkHran% /n%DefaultUser% /p%DefaultPassword% /ConfigurationRepositoryF%PATH_To_WorkHran% /ConfigurationRepositoryN%WorkHranUser% /ConfigurationRepositoryP%WorkHranPassword%  /DumpCfg%PATH_To_TMPCF% /DisableStartupDialogs

rem Загрузить конфигурацию источника в конфигурацию-приёмник
%PATH_Platform% DESIGNER  /f%PATH_To_NewFileBase% /LoadCfg%PATH_To_TMPCF% /DisableStartupDialogs

rem обновить базу данных после загрузки
%PATH_Platform% DESIGNER  /f%PATH_To_NewFileBase% /UpdateDBCfg /DisableStartupDialogs

rem отвязать загруженную конфигурацию от хранилища
%PATH_Platform% DESIGNER  /f%PATH_To_NewFileBase% /ConfigurationRepositoryUnbindCfg -force /DisableStartupDialogs

rem Создание хранилища конфигурации
%PATH_Platform% DESIGNER  /f%PATH_To_NewFileBase% /ConfigurationRepositoryF%PATH_To_NewHran% /ConfigurationRepositoryN%NewHranUser% /ConfigurationRepositoryP%NewHranPassword% /ConfigurationRepositoryCreate /DisableStartupDialogs

rem Создание пользователя "ТолькоПросмотр"
%PATH_Platform% DESIGNER  /f%PATH_To_NewFileBase% /ConfigurationRepositoryF%PATH_To_NewHran% /ConfigurationRepositoryN%NewHranUser% /ConfigurationRepositoryP%NewHranPassword% /ConfigurationRepositoryAddUser -User"ТолькоПросмотр" -Pwd"" -Rights ReadOnly /DisableStartupDialogs


 

А что дальше?

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

У фирмы 1с есть "1с:Исполнитель" - продукт, который так же можно использовать для автоматизации связанных с 1С действий.

Если oScript, а к нему vrunner и множество других полезных инструментов.

 

А зачем?

При наличии замечательных инструментов, описанных выше, - зачем знать, как пользоваться командной строкой?

Как говорит Роберт Мартин - "зависимость от деталей реализации - это плохо". Под данную задачу трактовать это можно так: необходимо уметь делать автоматизацию с использованием любых доступных инструментов, а не только с одним конкретным.

А ещё на практике мне часто попадались случаи, когда клиенту нельзя поставить ничего лишнего. И тогда остаётся только использовать возможности командной строки. 

 

Заключение

Автоматизация своей работы позволяют вам экономить самое важное - экономить своё и не только своё время. А что может быть лучше?

С уважением, Вдовенко Сергей.

 

Послесловие и использованные источники

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

1. Приложение 7. Параметры командной строки запуска «1С:Предприятия».

2. Виктория Коршанова (Chif13) - Параметры командной строки 1С:Предприятие

3. Франко Деллиани (Franco) - Работа с хранилищем конфигураций из командной строки

4. Мои заметки в гитхабе про командную строку 

Хранилище Командная строка Автоматизация

См. также

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Пользовался ранее https://infostart.ru/1c/articles/1120161/#, но она устарела, т.к. службы запускаются через systemctl, да и сами службы слегка изменились. Возможно, где-то на ИТС уже есть нужная инструкция, но мне не попалась.

15.11.2024    301    Baser    2    

1

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    830    Tantor    19    

14

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    3148    Tantor    38    

34

Администрирование СУБД Системный администратор Программист Бесплатно (free)

CDC - очень мощный механизм, который можно использовать во многих сценариях, возможность развернуть его в Docker показывает простоту и лёгкость данной технологии.

08.10.2024    734    AlexSvoykin    1    

7

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ и решение ошибок СУБД. Во время реиндексации базы Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Во время проверки целостности Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._RefSInf21806".

19.09.2024    4349    Xershi    10    

17

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    2971    1CUnlimited    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. avbolshakov 31.01.23 14:51 Сейчас в теме
Не оч. понял про вход в систему - так вы как автоматизировали это? в командной строке алиасы какие-то добавили? или батник?
2. zeltyr 607 01.02.23 11:02 Сейчас в теме
(1) Я пользуюсь фаром - там есть пользовательское меню, где можно команды запуска прописывать.
Прикрепленные файлы:
3. teller 03.02.23 07:55 Сейчас в теме
(2) фар здесь лишний, достаточно ярлык к батнику с мешюшкой команд
5. zeltyr 607 03.02.23 11:31 Сейчас в теме
(3) В моём случае - фар инструмент работы с файлами, совместно с проводником. И наличие такого меню - приятная добавка, которой и пользуюсь. А в целом вы правы, достаточно и батника с меню.
4. nosferatu20913 48 03.02.23 09:19 Сейчас в теме
Лучше использовать для запуска не физический путь а, "/IBName"
6. Seraph6 27.03.23 13:43 Сейчас в теме
Использовал батники для автоматизации сохранения DTшников. Версия платформы была 8.3.16. Все прекрасно работало, из 1 батника запускался последовательно Конфигуратор в quiet режиме, сохранял базу в DTшник, лог тоже складывал в папочку. Если вдруг чего не так, просто записывал ошибку в лог и шел обрабатывать следующую базу.

Теперь пришлось обновить платформу до 8.3.22. Тот же самый батник запускает полноценный Конфигуратор с интерфейсом и всеми делами. Если дальше все нормально, то фиг с ним, база сохраняется. А вот если ошибка, то все встает, окно с ошибкой вылезает в Конфигураторе и пока его руками не закроешь, дальше батник не исполняется.

Вопрос - какой-то ключ или параметр есть для запуска в фоновом "тихом" режиме без интерфейса? Или как заставить новую платформу отрабатывать батник по старой схеме?
7. mybracho 03.04.23 10:47 Сейчас в теме
а почему пользователь обозначается с ключом /u, если было вроде /n ?
проверил, с u не работает, с n работает
Оставьте свое сообщение