Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Пишу плотную интеграцию 7ки с python для веба и веб сервисов (число прочтений - 7285 )
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Пишу плотную интеграцию 7ки с python для веба и веб сервисов
10. Ноября 2014 :: 15:38
Печать  
Привествую коллеги!
Сразу предупреждаю, не занимаюсь изготовлением аналога 1С 7.7. Пытаюсь сделать удобную библиотеку для работы с базой 7-ки с помощью Python как под windows так и под Linux, последнее приоритетней. Мне по работе потребовалось для того что бы увязывать 7-ку с 8-кой через SOAP (чудесная либа spyne), а так же использовать данные 7-ки на внутреннем сайте написанном на Flask (можно использовать и Django).
Пока что как демонстация возможностей
[IMG SRC=http://f5.s.qip.ru/16IxPIa4Z.png]

Особенности:
Главная фича в том что работа идет с 1cv7.md файлом. Считываю информацию о метаданных из него. Для конечного потребления это будет выглядеть так
Код
Выбрать все
from v7 import Application, MS_Proxy
v7app = Application()
v7app.load_1cv7_md(default_config.md_path)
v7app.db = MS_Proxy('worktest','192.168.1.30', 'sa', 'xxxxxx') 


После этого я могу преобразовать любой запрос и выполнить получая как результат курсор на выборку
v7app.prepare_query(sql) - возращает подготовленный скл выполнения в бд
v7app.query(sql) - преобразует и выполняет запрос, возращая курсор
v7app.metadata.get_by_path("Справочник.Номенклатура.КодПроизводителя") - возращает обьект поля, справочника или документа, смотря куда дойдет рекурсия.
v7app.metadata.getFieldByNameSql('SP101') - находит объект метаданных для скл представления (использую для получения имен полей после запроса)
Пока что запросы достаточно простые, но уже поддерживаются справочники и документы, а так же распознаются поля как шапки так и табличной части через приставку # (так же через нее выбирается ТабличнаяЧасть)
Примеры
Код
Выбрать все
"select avto.Наименование, avto.Код from $Справочник.Автомобили avto"
"select d.#Товар * from $Документ.#ИзменениеДопЦен as d " 


В планах еще добавить регистры с метаподстановками для запроса остатков.
Ну а в мечтах конечно еще парсить формы и сразу генерировать веб интерфейс и будет управляемое приложение для 7-ки Улыбка.
Но никаких конфигураторов я делать конечно же не собираюсь ибо велосипед.
Исходники выложу позже на какой нибудь github.. сейчас еще много надо рефракторинга провести.
Если у кого есть какие велосипеды в этом направлении, поделитель, прикручу ваши колеса к итоговой версии Улыбка
  
Наверх
ICQ  
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #1 - 11. Ноября 2014 :: 10:29
Печать  
Добавил возможность вызывать запросы по SOAP
Код
Выбрать все
from suds.client import Client
client = Client("http://127.0.0.1:888/service/query?wsdl")
client.service.prepare(u"select * from $Справочник.Номенклатура")
client.service.execute(u"select top 10 * from $Справочник.Номенклатура")
 


Теперь уже веселей, можно юзать 7-ку из других языков, а так же нативным клиентом 8-ки
  
Наверх
ICQ  
IP записан
 
kandellak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 12. Ноября 2014
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #2 - 12. Ноября 2014 :: 08:59
Печать  
никаких COM, OLE и прочего? только работа с MD и трансляция запросов напрямую?
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #3 - 12. Ноября 2014 :: 14:11
Печать  
kandellak писал(а) 12. Ноября 2014 :: 08:59:
никаких COM, OLE и прочего? только работа с MD и трансляция запросов напрямую?

совершенно точно, никаких COM, чтения MD файла напрямую и запросы через pyodbc
  
Наверх
ICQ  
IP записан
 
thesasa
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 28. Мая 2015
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #4 - 28. Мая 2015 :: 06:51
Печать  
Вопрос не в тему, как 1Снику и питонщику.
Пробую написать COM-сервер на Питоне для вызова из 1С.
Но вот такой простой пример не работает:
01      class ShowMeDoDemo:
02          _public_methods_ = [ 'Factorial', 'Hello' ]
03          _reg_progid_ = "ShowMeDo.Demo"
04          # use
05          # import pythoncom
06          # print pythoncom.CreateGuid()
07          # to make a GUID as they are machine-specific
08          _reg_clsid_ = "" # e.g. "{4D93DCBC-DE99-4D5A- CC-44F82BDB9889}"
09  
10          def Hello(self):
11              "say Hello"
12              return "Hello World!"
13          
14          def Factorial(self, n):
15              "calculate n!"
16              result = 1
17              for value in range(2,n+1):
18                  result = result * value
19              #1/0 # generates a ZeroDivision exception
20              return result
21
         
22      if __name__ == "__main__":
23          # use 'python com.py' to register the COM server
24          # use 'python com.py --unregister' to unregister it
25          print "Registering COM server..."
26          import win32com.server.register
27          win32com.server.register.UseCommandLine(ShowMeDoDemo)
28          
29      
30      
31      #In [2]: import pythoncom
32      #In [3]: pythoncom.CreateGuid()
33      #Out[3]: IID('{4D93DCBC-DE99-4D5A-ACFC-44F82BDB9889}')

Т.е. COM-сервер создается, из EXCELя, к примеру все работает, а из 1С - нет.
Не подскажете, в чем может быть причина?
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #5 - 01. Июля 2015 :: 09:39
Печать  
thesasa писал(а) 28. Мая 2015 :: 06:51:
Вопрос не в тему, как 1Снику и питонщику.
Пробую написать COM-сервер на Питоне для вызова из 1С.
Но вот такой простой пример не работает:

01      class ShowMeDoDemo:
02          _public_methods_ = [ 'Factorial', 'Hello' ]
03          _reg_progid_ = "ShowMeDo.Demo"
08          _reg_clsid_ = "{4D93DCBC-DE11-4D5A- CC-44F82BDB9889}" # <- путь будет

Т.е. COM-сервер создается, из EXCELя, к примеру все работает, а из 1С - нет.
Не подскажете, в чем может быть причина?


Возможно в этом, попробуйте
  
Наверх
ICQ  
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #6 - 01. Июля 2015 :: 09:41
Печать  
В общем прошло много времени с начальной версии либы и теперь пришел к мысли что надо делать автоматическую привязку базы 7-ки через SQLAlchemy, брать конфиг, парсить и генерировать небольшой костяк на базовых классах, это позволить в том числе писать модули проведения и достаточно просто делать веб интерфейс
  
Наверх
ICQ  
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #7 - 02. Июля 2015 :: 07:43
Печать  
Что-то из ваших изобретений можно потрогать руками?
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #8 - 29. Сентября 2015 :: 15:39
Печать  
Это рабочая версия, в ней еще много чего почистить, оптимизировать, но уже можно использовать.

https://github.com/WorldException/v7py
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #9 - 15. Октября 2015 :: 10:37
Печать  
Можно пойти другим путём. Автоматически генерить view-шки для каждого 1С-объекта, и писать запросы на нормальном русском языке, без всяких метапарсеров. В итоге, один и тот же запрос выглядит везде одинаково, и работает в любой среде. Например, вот реальный кусок реального запроса
Код
Выбрать все
SELECT
	жДок.ДатаДок День,
	0 БуднийДень,
	0 ЛимитПЕ,
	0 ЛимитПО,
	0 ЛимитПлощадь,
	ДокСП.КоличествоПроизводственныхЕдиниц ПЕ,
	ДокСП.ПолейОстекления ПО,
	ДокСП.Площадь,
	ДокСП.ВремяНаИзготовление Время
FROM
	ЖурналДокументов жДок
	LEFT JOIN докСрокПроизводства ДокСП ON ДокСП.идДок9 = жДок.идДок9
WHERE
	жДок.ВидДок = $ВидДокумента.СрокПроизводства
	AND жДок.IsMark = 0
	AND ДокСП.фНеУчитыватьПриРассчетеЗагрузкиУчастка != 1
	AND ДокСП.фНеПоказыватьВГрафике != 1
	AND ДокСП.ТипКонструкции = $Перечисление.ТипыКонструкций.ПВХСтандартная
	AND ДокСП.ПроизводственноеПодразделение = $Перечисление.ПроизводственныеПодразделения.ПВХ
 

Это строится вьюшка, как раз для использования извне.  У нас тут вьюшки уже чуть ли не в пять слоёв местами Улыбка
Крайне полезный инструмент.
Перечисления, если надо, тоже можно оформить в виде табличек + набор функций для конкретных значений. С константами точно то же самое.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Пишу плотную интеграцию 7ки с python для веба и веб сервисов
Ответ #10 - 15. Октября 2015 :: 14:43
Печать  
Вьюшки - хорошо.
Вот мне дополнительный журнал документов понадобился с теми реквизитами, которых нет в общем журнале.
НАчал я мутить с доп таблицей и тригерами так и не замутил - не хватило ума нормальный тригер повесить.
Он у меня работал не так как я хотел.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать