Пример использования 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С.

12000 руб.

02.09.2020    171577    960    403    

924

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

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

8400 руб.

20.08.2024    14178    107    46    

107

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

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

9360 руб.

17.05.2024    27207    96    48    

137

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

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

22200 руб.

06.10.2023    17228    43    15    

75

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

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

15000 руб.

10.11.2023    11867    45    27    

67

SALE! %

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

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191118    1152    0    

920

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

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

3600 руб.

27.12.2024    1100    2    0    

5

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104103    244    100    

307
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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".
Оставьте свое сообщение