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

10.03.11

Интеграция - Внешние источники данных

Предлагается простой модуль 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С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    30501    42    49    

46

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

122000 руб.

19.08.2020    29178    27    3    

28

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    53522    121    107    

83

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    13103    14    8    

16

Внешние источники данных Программист Бизнес-аналитик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, в шину данных с поддержкой REST API (CSV, JSON. SQL), в локальные файлы (CSV, JSON, XLS, XLSX) или в Google Sheets. Это дополнительная подключаемая обработка.

18000 руб.

21.08.2024    8314    21    4    

18

Внешние источники данных Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Платные (руб)

Быстро и легко. Выгрузка всех элементов и групп номенклатуры (с их иерархией), кроме помеченных на удаление. Без использования COM-объектов.

4880 руб.

16.08.2023    3740    7    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. NDM 717 16.03.11 11:26 Сейчас в теме
Python это тема!
На днях попробую воспользоваться вашим примером, спасибо за интересную тему.
2. metmetmet 82 28.11.11 13:00 Сейчас в теме
Круть! Давно хотел, да времени небыло!

Было бы еще хорошо, приведенный в статье листинг приерепить в виде готового файла.
3. cool.vlad4 2 28.11.11 13:08 Сейчас в теме
интересна обратная тема - использовать питон к 1С-е. Шикарно если в нативапи, под сервером. А использование 1С комконнектора - я думаю в любом языке примерно однотипно. Но за решение проблемы киррилицы +
4. quick 586 22.08.13 11:31 Сейчас в теме
Зачетное извращение! Получил неподдельное удовольствие читая код :)
5. zekrus 152 21.01.15 13:48 Сейчас в теме
Интересно, а кто нибудь пробовал сделать редактор кода python в 1с?
6. Vovan58 64 26.02.18 12:47 Сейчас в теме
А javascript зачем? Извратно.
7. Vovan58 64 08.03.18 12:16 Сейчас в теме
Может быть будет кому-то полезно (и чтобы самому не забыть:) ) :
import win32com.client
from datetime import date, datetime, timedelta
from json import dumps
from httplib import HTTPConnection
from urllib import urlencode

SERVER = "192.168.0.1"
URL = "/post/"
KEY="SecretKey"
days_upload=10
con_str = 'File="C:\\DB";Usr="com";Pwd="com"'

v82 = win32com.client.Dispatch("V82.COMConnector").Connect(con_str)

get = lambda obj,attr: getattr(obj, attr.encode('cp1251'))

d_start = date.today()-timedelta(days=days_upload)
d_end = date.today()

invoices = []
contractors = {}

sel = get(v82.Documents, u"СчетНаОплатуПокупателю").Select(d_start, d_end)

while sel.Next():
doc = sel.GetObject()
contr = get(doc,u"Контрагент")
if not get(contr, u'Код') in contractors:
c = {
'code': get(contr, u'Код'),
'name': get(contr, u"Наименование"),
}
contractors[c['code']] = c
dt = {
"number": doc.Number,
"date": "%s" % doc.Date,
"amount": get(doc, u"СуммаДокумента"),
"contr": get(contr, u"Код"),
"text": get(doc, u'Комментарий')
}
invoices.append(dt)

params ={"invoices": dumps(invoices), "contractors": dumps(contractors), "key":KEY}

con = HTTPConnection(SERVER)
con.request("POST", URL, urlencode(params))
r = con.getresponse()
print r.status, r.reason
f = open("response.html","w+")
f.write(r.read())
f.close()
con.close()
Показать
Для отправки сообщения требуется регистрация/авторизация