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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

28500 руб.

15.11.2022    30607    42    49    

46

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

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

84000 руб.

05.10.2022    13193    15    8    

16

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

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

122000 руб.

19.08.2020    29339    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    53642    121    107    

83

Внешние источники данных Программист Бизнес-аналитик 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    8466    21    4    

18

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

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

4880 руб.

16.08.2023    3793    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()
Показать
Для отправки сообщения требуется регистрация/авторизация