Пример использования 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   доступно любому, кто умеет работать с текстовым редактором.

 

См. также

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    124494    681    389    

732

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    7705    24    6    

42

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    4220    12    2    

36

SALE! %

PowerTools

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

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

3600 2880 руб.

14.01.2013    178545    1083    0    

861

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99576    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18341    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

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

2400 руб.

24.09.2019    23836    16    15    

33

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28290    3    10    

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