Язык Python, обладая богатейшей библиотекой готовых пакетов и имея довольно простой и приятный синтаксис, является удобным инструментом для автоматизации рутинных операций.
Несмотря на то, что в качестве кодировки скриптов может выступать Unicode, использование кириллицы в коде Python напрямую пока невозможно (исключение разве что консоль редактора IDLE).
Однако, кириллицу возможно использовать в коде cкриптов JavaScript и VBasic, входящих в поставку MS ScriptControl. Но возможности этих языков, на мой взгляд, скудны по сравнению с Python.
Далее предлагается простой модуль Python для запуска кода 1С, содержащего кириллицу, в режиме внешнего соединения с использованием MS ScriptControl.
Для запуска примера потребуется:
- Установленный 1С:Предприятие 8.1 или 8.2 (указываем в переменной ver)
- Интерпритатор Python
- Пакет pywin32
# -*- coding: utf-8 -*-
'''
py1c_wrapper.py
'''
import win32com.client
def connect_to_ib(Path,ver='82',User='',Password='',UC=''):
'''
Return MSScriptControl.ScriptControl object. Further code of 1C:Enterprise 8 should use
infobase's object "ib", like
ib.Метаданные.Версия;
'''
try:
ScriptControl = win32com.client.Dispatch("MSScriptControl.ScriptControl")
ScriptControl.Language = "javascript"
con = '''
var cntr = new ActiveXObject("V%s.COMConnector");
var ib = cntr.Connect('File="%s"; Usr="%s";Pwd="%s";UC="%s"');''' % (ver, Path, User, Password,UC)
ScriptControl.ExecuteStatement(con)
return ScriptControl
except Exception, val:
print val
return val
def Eval(code,ScriptControl):
'''
Evaluate and return result for one-line code (unicode) on JavaScript via MSScriptControl.
'''
try:
return ScriptControl.Eval(code)
except Exception, val:
print val
return val
def ExecuteStatement(code,ScriptControl):
'''
Execute statement (unicode) on JavaScript via MSScriptControl
'''
try:
ScriptControl.ExecuteStatement(code)
except Exception, val:
print val
# протестируем
ver = '82'
Path = ur'D:\\bases\\clients\\clean\\accounting82'
User = u'admin'
Password = u'12345678'
sc = connect_to_ib(Path,ver,User,Password)
print u"Имя конфигурации: ", Eval(u"ib.Метаданные.Имя;",sc)
code = ur'''
function get_version(i)
{
return i.Метаданные.Версия;
}'''
ExecuteStatement(code,sc)
print u"Версия конфигурации:", Eval(u"get_version(ib)",sc)