gifts2017

Запуск русско-язычного кода 1С в Python

Опубликовал dinya (dinya) в раздел Программирование - Практика программирования

Предлагается простой модуль Python для запуска кода 1С, содержащего кириллицу, в режиме внешнего соединения.

Язык Python, обладая богатейшей библиотекой готовых пакетов и имея довольно простой и приятный синтаксис, является удобным инструментом для автоматизации рутинных операций.

Несмотря на то, что в качестве кодировки скриптов может выступать Unicode, использование кириллицы в коде Python напрямую пока невозможно (исключение разве что консоль редактора IDLE).

Однако, кириллицу возможно использовать в коде cкриптов JavaScript и VBasic, входящих в поставку MS ScriptControl. Но возможности этих языков, на мой взгляд, скудны по сравнению с Python.

Далее предлагается простой модуль Python для запуска кода 1С, содержащего кириллицу, в режиме внешнего соединения с использованием MS ScriptControl.

Для запуска примера потребуется:

  1. Установленный 1С:Предприятие 8.1 или 8.2 (указываем в переменной ver)
  2. Интерпритатор Python
  3. Пакет 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)
 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Dmitry Nakonechniy (NDM) 16.03.11 11:26
Python это тема!
На днях попробую воспользоваться вашим примером, спасибо за интересную тему.
2. metal doctor (metmetmet) 28.11.11 13:00
Круть! Давно хотел, да времени небыло!

Было бы еще хорошо, приведенный в статье листинг приерепить в виде готового файла.
3. Ийон Тихий (cool.vlad4) 28.11.11 13:08
интересна обратная тема - использовать питон к 1С-е. Шикарно если в нативапи, под сервером. А использование 1С комконнектора - я думаю в любом языке примерно однотипно. Но за решение проблемы киррилицы +
4. Евгений Стоянов (quick) 22.08.13 11:31
Зачетное извращение! Получил неподдельное удовольствие читая код :)
5. Николай Зевеке (zekrus) 21.01.15 13:48
Интересно, а кто нибудь пробовал сделать редактор кода python в 1с?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа