Запуск русско-язычного кода 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)
 

См. также

Перенос данных из Парус 8 в ЗГУ 3

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

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

84000 руб.

19.08.2020    22449    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

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

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

60000 руб.

05.10.2022    9208    9    8    

10

Перенос данных из Парус 7.хх в ЗГУ ред.3

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

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

24000 руб.

24.04.2017    48702    97    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81567    128    123    

147

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

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

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

24000 руб.

16.11.2018    30002    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

7200 руб.

24.06.2021    19127    52    50    

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

Было бы еще хорошо, приведенный в статье листинг приерепить в виде готового файла.
3. cool.vlad4 2 28.11.11 13:08 Сейчас в теме
интересна обратная тема - использовать питон к 1С-е. Шикарно если в нативапи, под сервером. А использование 1С комконнектора - я думаю в любом языке примерно однотипно. Но за решение проблемы киррилицы +
4. quick 583 22.08.13 11:31 Сейчас в теме
Зачетное извращение! Получил неподдельное удовольствие читая код :)
5. zekrus 151 21.01.15 13:48 Сейчас в теме
Интересно, а кто нибудь пробовал сделать редактор кода python в 1с?
6. Vovan58 65 26.02.18 12:47 Сейчас в теме
А javascript зачем? Извратно.
7. Vovan58 65 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()
Показать
Оставьте свое сообщение