Пример использования 1С-Automation и скриптов AutoIT

28.06.12

Разработка - Инструментарий разработчика

В данной статье приводится пример использования скрипта AutoIT в качестве клиента для 1С-Automation сервера.

Чтобы показать возможности такого решения, в приведенном примере выполняются смешанные операции: соединение с 1С-Automation сервером, вызов процедур глобального контекста (в том числе из общего пользовательского модуля), запуск 1С-предприятия в командной строке (выгрузка БД в режиме конфигуратора).

      Функциональность примера понятна из текста программы:  мы производим выгрузку  файловой базы данных (запуская 1С в пакетном режиме через RunWhite / RunAsWhite ), при этом, заносим информацию об этом событии в журнал регистрации  БД и, через функцию общего модуля, дополнительную информации помещаем в независимый регистр сведений.

Код скрипта приведен ниже:

#RequireAdmin

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****

#AutoIt3Wrapper_Compile_Both=y

#AutoIt3Wrapper_UseX64=y

#AutoIt3Wrapper_Res_Comment=Пример использования AutoIT

#AutoIt3Wrapper_Res_Description=Пример использования AutoIT

#AutoIt3Wrapper_Res_Fileversion=1.1.2

#AutoIt3Wrapper_Run_Obfuscator=y

#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;--------------------------------------------------------------------------------------

;                       Пример использования 1С Automation Server

;--------------------------------------------------------------------------------------

; Используем 1С как Automation сервер. Присоединяемся к файловой БД. Блокируем сеансы.

; Выгружаем БД через запуск приложения в командной строке. Пишем лог в журнал БД.

; Для запуска скрипта с правами Администратора, нужно использовать RunAsWait().

; Так как код можно скомпилировать в исполняемое приложение (используя обфускатор),

; то явно имени и пароля видно не будет (защита от дураков).

;--------------------------------------------------------------------------------------

;                       Последние изменения:   26.06.2012

;                       Автор -- LexSeIch www.LexSeIch.ru

;--------------------------------------------------------------------------------------

#include

 

;--------------------------------------------------------------------------------------

;                       Задаем параметры скрипта

;--------------------------------------------------------------------------------------

$sDBaseFile                = "C:\TST\1C"                                    ; Место расположения БД

$sDBaseUser              = "User"                                                          ; Имя пользователя БД

$sDBasePass   = "userpass"                                                                ; Пароль пользователя БД

 

$sKeyCode                 = "123"                                                           ; Код блокировки ( /UC )

$sArchFile                   = "C:\TST\1C\Base.DT"                                 ; Архивный файл для выгрузки

 

$sAdminUser               = "Администратор"                                      ; Пользователь администратор

$sAdminPass               = "passadmin"                                                  ; Пароль пользователя администратора

$sDomen                     = "MyDomen"                                     ; Домен

 

;--------------------------------------------------------------------------------------

;                       Создаем объект V82.Application

;--------------------------------------------------------------------------------------

$o1CObject = ObjCreate("V82.Application")                        ; Создаем 1С объект

if @error then

                        Msgbox (0,"1С Application","Ошибка создания V82.Application. Код ошибки: " & @error)

                        exit

endif

;--------------------------------------------------------------------------------------

 

 

;--------------------------------------------------------------------------------------

;                       Устанавливаем соединение с БД

;--------------------------------------------------------------------------------------

$o1CObject.Connect("File="& $sDBaseFile &";Usr="& $sDBaseUser &";Pwd="& $sDBasePass ) ; коннектимся к базе

 

if @error then

                        Msgbox (0,"Соединение с 1С базой","Ошибка соединения. Код ошибки: " & @error, 5)

                        exit

else

                        $o1CObject.Visible = False    ; интерфейс не нужен - скрываем его

endif

;--------------------------------------------------------------------------------------

 

;--------------------------------------------------------------------------------------

;                       Формируем статистику для записи в журнал

;--------------------------------------------------------------------------------------

$tCurTime = _Date_Time_GetSystemTime()                          ; текущее системное время

 

$sUserObj = $o1CObject.UserName                                                ; Пользователь БД

$sUserSys = @UserName                                                                 ; Пользователь системы

 

$sCompObj = $o1CObject.ComputerName                                      ; Компьютер БД

$sCompSys = @ComputerName                                                       ; Компютер системы

 

$sBase = $o1CObject.InfoBaseConnectionString                               ; Путь к БД

;--------------------------------------------------------------------------------------

 

;--------------------------------------------------------------------------------------

;                       Устанавливаем блокировку сеансов

;--------------------------------------------------------------------------------------

 

$oSessionLock = $o1CObject.GetSessionsLock()                 ; получаем блокировку сеансов

 

If Not $oSessionLock.Use Then                                             ; блокировки еще нет

                        $oSessionLock.Message = "Техническое обслуживание БД" & @CRLF & $sBase

                        $oSessionLock.KeyCode = $sKeyCode        ; Код для /UC

                        $oSessionLock.Use = True                             ; ставим флаг блокировки сеансов

                        $o1CObject.SetSessionsLock($oSessionLock)                      ; блокируем сессии...

;Msgbox (0,"Блокировка","Установили блокировку: " & $oSessionLock.KeyCode, 5); --

Else

            Msgbox (0,"Блокировка","Блокировка уже установлена.", 5)

            exit

EndIf

 

;--------------------------------------------------------------------------------------

;           Выгружаем базу

;--------------------------------------------------------------------------------------

;----------------------- Для запуска с правами администратора --------------------------

; Необходимо задать дополнительные параметры: пользователь, домен, пароль

; $pid = RunAsWait($sAdminUser, $sDomen, $sAdminPasw, 0,"C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F" & $sDBaseFile & "/DumpIB" & $sArchFile)

;---------------------------------------------------------------------------------------

 

$sCommandLine = "C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F " & $sDBaseFile & " /DumpIB " & $sArchFile & " /N "& $sDBaseUser  &" /P " & $sDBasePass

;$sCommandLine = "C:\Program Files\1cv82\common\1cestart.exe DESIGNER /F C:\TST\1C /N User /P userpass"

 

$pid = RunWait($sCommandLine);

 

If @error Then

                        Msgbox (0,"Выгрузка базы","Ошибка выгрузки. Код ошибки: " & @error, 5)

Else

                        ProcessWaitClose($pid)

EndIf

 

;--------------------------------------------------------------------------------------

;                       Регистрируем событие выгрузки БД в журнале

;--------------------------------------------------------------------------------------

 

$o1CObject.WriteLogEvent("Выгрузка БД пользователем: " & $sUserSys)

 

$o1CObject.MyFunction.SetLog( @UserName, $sCompSys )          ; вызываем функцию SetLog из общего модуля MyFunction

 

;--------------------------------------------------------------------------------------

;                       Снимаем блокировку

;--------------------------------------------------------------------------------------

            $oSessionLock = $o1CObject.GetSessionsLock()                 ; получаем блокировку сеансов

 

If  $oSessionLock.Use Then                                                               ; блокировка установлена

                        $oSessionLock.Message = "Сняли блокировку"

                        $oSessionLock.Use = False                                        ; ставим флаг снятия блокировки сеансов

                        $o1CObject.SetSessionsLock($oSessionLock)          ; разблокируем сессии...

;Msgbox (0,"Блокировка","Сняли блокировку: ", 5); --

EndIf

 

;--------------------------------------------------------------------------------------

;                       Окончание работы

;--------------------------------------------------------------------------------------

 

$o1CObject=""                                                                                                                     ; Освобождаем память

exit

 

 

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

 

//--------------------------------------------------------------------------------------

// Экспортная процедура общего не глобального модуля MyFunction

//--------------------------------------------------------------------------------------

Процедура  SetLog( User, Comp )  Экспорт

   // фиксируем пользователя и компьютер в нашем журнале

   РегистрыСведений.ЖурналВыгрузки.ДобавитьНовыйЛог(User, Comp);

   

КонецПроцедуры

 

Кроме того, запись идет во внутренний «ЖурналВыгрузки» на базе непериодического независимого регистра сведений:

 

//------------------------------------------------------------------------------------------

// Непериодический независимый регистр сведений "ЖурналВыгрузки".

 

// Измерения:

//          Номер (Число)

// Ресурсы:

//          Пользователь (Строка)

//          Компьютер (Строка)

 

// Процедуры модуля менеджера:

//-----------------------------------------------------------------------------------------

Процедура ДобавитьНовыйЛог(Пользователь, Компьютер)  Экспорт

       НоваяЗапись =  РегистрыСведений.ЖурналВыгрузки.СоздатьМенеджерЗаписи();

               НоваяЗапись.Пользователь = Пользователь;

               НоваяЗапись.Компьютер = Компьютер;

       НоваяЗапись.Номер = ПолучитьНовыйНомер();

               НоваяЗапись.Записать();

 

КонецПроцедуры

  

Функция ПолучитьНовыйНомер()

 

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ ПЕРВЫЕ 1

                        |           МАКСИМУМ(ЖурналВыгрузки.Номер) + 1 КАК Номер

                        |ИЗ

                        |           РегистрСведений.ЖурналВыгрузки КАК ЖурналВыгрузки";

 

            Результат = Запрос.Выполнить();

 

            ВыборкаДетальныеЗаписи = Результат.Выбрать();

           

            Если  НЕ ВыборкаДетальныеЗаписи.Следующий() Тогда

                        Возврат 1;

            Иначе

                        Возврат ВыборкаДетальныеЗаписи.Номер;        

            КонецЕсли; 

 

КонецФункции //

 

//---------------------------------------------------------------------------------------------

 

 

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

 

По моему мнению, написание скриптов (особенно простых, связанных с запуском внешних приложений) на AutoIT   доступно любому, кто умеет работать с текстовым редактором.

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    178083    988    403    

945

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    19594    131    70    

131

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    18839    50    19    

82

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    12872    53    33    

72

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    29024    100    48    

146

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18655    7    32    

43

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1748    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SiAl 76 13.07.15 08:14 Сейчас в теме
Для защиты не от дураков советую использовать Windows-авторизацию. А скрипт либо запускать через runas, либо в планировщике у задания указать необходимого пользователя. Тогда в самом скрипте не будет никаких паролей.
2. user1804771 19.07.22 13:27 Сейчас в теме
Проблема в том, что при запуске конфигуратора из командной строки открывается окно соединения с хранилищем требующее нажатия кнопок на чем собственно работа и останавливается...
3. memfree 5 06.04.23 11:26 Сейчас в теме
(2) Для истории:
Используйте пакетный режим с параметрами "/DisableStartupMessages", "/DisableStartupDialogs".
Оставьте свое сообщение