Native API компонента для использования установленного в системе интерпретатора Python

10.10.15

Разработка - Разработка внешних компонент

Компонента позволяет подключать к платформе 1С python-модули, оформленные в стиле внешней компоненты. Кроме этого, она позволяет запускать небольшие фрагменты python-кода прямо из модулей 1С. На данный момент поддерживаются платформы 8.2 — 8.3 x86 Windows.

Скачать файлы

Наименование Файл Версия Размер
Компонента и документация
.zip 363,16Kb
126
.zip 2.0 lite 363,16Kb 126 Скачать

В системе должен присутствовать совместимый интерпретатор Python. В данном случае это Python 3.3, инсталлятор которого можно скачать на официальном сайте разработчиков: http://www.python.org/ftp/python/3.3.5/python-3.3.5.msi

Интерфейс взаимодействия позволяет оформлять модули расширения максимально просто и наглядно. Для примера, вот функциональный аналог образца Native ВК от ИТС:

# -*- coding: utf-8 -*-

from interfacing import *
from time import sleep, monotonic 
from threading import Thread


class Timer(Thread):
    def __init__(self, ent):
        self.done = False
        self.ent = ent
        Thread.__init__(self)

    def run(self):
        while not self.done:
            self.ent.ExternalEvent('ComponentNative', 'Timer', str(monotonic()))
            sleep(5)
        self.done = False


@Component
class CAddInNative:
    
    def __init__(self):
        self.m_boolEnabled = False
        self.AsyncEvent = Timer(self.Enterprise)
    
    @Readable('IsEnabled', 'Включен')
    @property
    def ePropIsEnabled(self):
        return self.m_boolEnabled
    
    @Writable
    @ePropIsEnabled.setter
    def ePropIsEnabled(self, value):
        self.m_boolEnabled = value
        
    @Readable('IsTimerPresent', 'ЕстьТаймер')
    @property
    def ePropIsTimerPresent(self):
        return True
    
    @Procedure('Enable', 'Включить')
    def eMethEnable(self):
        self.m_boolEnabled = True
    
    @Procedure('Disable', 'Выключить')
    def eMethDisable(self):
        self.m_boolEnabled = False
    
    @Procedure('ShowInStatusLine', 'ПоказатьВСтрокеСтатуса')
    def eMethShowInStatusLine(self, var):
        self.Enterprise.SetStatusLine(var)
        sleep(5)
    
    @Procedure('StartTimer', 'СтартТаймер')
    def eMethStartTimer(self):
        self.AsyncEvent.start()
    
    @Procedure('StopTimer', 'СтопТаймер')
    def eMethStopTimer(self):
        self.AsyncEvent.done = True
    
    @Function('LoadPicture', 'ЗагрузитьКартинку')    
    def eMethLoadPicture(self, name):
        with open(name, 'rb') as f:
            return f.read()

    @Procedure('ShowMessageBox', 'ПоказатьСообщение')
    def eMethShowMsgBox(self):
        info = self.Enterprise.GetInterface(EC_IPlatformInfo)
        imsgbox = self.Enterprise.GetInterface(EC_IMsgBox)
        if info is None or imsgbox is None:
            return
        if imsgbox.Confirm(info.GetPlatformInfo()[0]):
            imsgbox.Alert('OK')
        else:
            imsgbox.Alert('Cancel')

    def ExplicitDone(self):
        self.AsyncEvent.done = True
        self.AsyncEvent.join()

 В архиве есть достаточно подробная документация и комплект для тестирования.

Тестовая конфигурация

Чтобы запустить тест, нужно указать путь к компоненте, по которому должен лежать и OnePyTest.py.

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52055    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26160    131    99    

82

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35011    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    53968    35    14    

68

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44897    116    64    

60

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30821    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    3903    starik-2005    28    

52

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    4680    starik-2005    32    

39
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. quick 583 15.05.13 15:26 Сейчас в теме
потрясно.. а я только начал ее делать.
2. Принт 83 15.05.13 17:47 Сейчас в теме
Интересно было бы посмотреть на другое решение.
Ядро компоненты питоновское, так что его у меня достаточно быстро получилось портировать из предыдущей дотнетной версии.
3. stanru1 91 15.05.13 18:08 Сейчас в теме
ставлю плюс за идею, но практического смысла не вижу :))
6. zan_od 54 15.05.13 21:51 Сейчас в теме
(3) stanru1, имхо практический смысл в использовании готовых питоновских библиотек. Взять хотя-бы эту - готовая библиотека для работы с API гугловских служб. Иначе приходится выкручиваться вот так - через http-запросы методом научного тыка.

P.S. Эх, если бы можно было Java в 1С-ке использовать.
SkyLink2012; +1 Ответить
7. andrewks 1367 17.05.13 17:20 Сейчас в теме
(6) zan_od, имеете в виду чистую Java, или JS?
8. zan_od 54 17.05.13 22:55 Сейчас в теме
(7) andrewks, именно Java (наподобие Elisy .Net Bridge)
12. Stamper 43 23.06.13 21:08 Сейчас в теме
(7) andrewks, JS кое-как можно использовать в хелпе и в HTML-документе на форме.
4. Принт 83 15.05.13 18:14 Сейчас в теме
Спасибо. Мне кажется, практический смысл тот же, что и у ВК вообще.
5. Принт 83 15.05.13 18:24 Сейчас в теме
(как же здесь изменяются аватары?)
9. zan_od 54 23.05.13 13:34 Сейчас в теме
2 homebody, не могу запустить компоненту

Установил python (по ссылке, указанной в статье), прописал в PATH, проверил в командной строке - запускается версия 3.3. В 1С-ке функция ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "Компонента", ТипВнешнейКомпоненты.Native) возвращает Ложь. В чем может быть дело?
10. Принт 83 23.05.13 17:04 Сейчас в теме
Если путь к компоненте задан точно, тогда:
Питон устанавливался "для всех пользователей"? <системный диск>:\windows\system32\python33.dll присутствует? (для 64-х разрядной системы путь соответственно другой) А так же в реестре, в HKLM\Software\Python\PythonCore\3.3\InstallPath (HKLM\Software\Wow6432Node\Python\PythonCore\3.3\InstallPath) путь указан верно?
Какая версия платформы? Режим приложения?
11. Принт 83 23.05.13 18:57 Сейчас в теме
Меж тем, проверил на 3.3.2: тоже работает.
13. altcavs 15.12.15 14:13 Сейчас в теме
На клиенте работает на ура!!, а на сервере только один первый раз.
Как запустить на сервере???
14. Принт 83 16.12.15 23:23 Сейчас в теме
На сервере совсем не тестировалось - нужно разбираться.
15. altcavs 22.12.15 18:06 Сейчас в теме
(14) Принт,
Native API только и нужно для сервера!!!
А что внутри, embeded Python API ?
16. Принт 83 22.12.15 22:18 Сейчас в теме
Оно, конечно, да и даже компонента ориентировалась для работы на сервере, но разработчики 1С взяли курс в другую сторону от своего же NativeAPI. Сейчас мне кажется более правильным перенос ВК в отдельный процесс с сопутствующим IPC. По крайней мере это относится к питону.
Внутри там что-то вроде http://habrahabr.ru/post/273401/
17. Serginio 938 29.12.15 14:21 Сейчас в теме
Вот здесь есть ВК для использования Питона https://github.com/mrprint/OnePy

Кстати можно выполнять скрипты на IronPython
http://metanit.com/sharp/tutorial/9.3.php
18. cool.vlad4 2 29.12.15 15:51 Сейчас в теме
(17) Serginio, там не Native ВК (и там вроде IronPython а не питон)
а насчет IronPython, IronPython!=Python. была какая-то попытка сделать взаимодействие между ними, но по моему так и не взлетело (IronЧего-тоТам называлась , на гуглкоде). так что на аналоги публикации данной это не тянет
19. Serginio 938 29.12.15 16:01 Сейчас в теме
(18) Я просто дал ссылку на аналогичные разработки. Только и всего

Мне IronPython интересен как возможность динамического исполнения кода.


Сейчас есть уже вышла Scripting API
http://blogs.msdn.com/b/cdndevs/archive/2015/12/01/adding-csharp-scripting-part-1.aspx
https://joshvarty.wordpress.com/2015/10/15/learn-roslyn-now-part-14-intro-to-the-scripting-api/
https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples


Например http://infostart.ru/public/417830/
20. cool.vlad4 2 29.12.15 16:31 Сейчас в теме
(19) Serginio, сейчас?) scriptcs я еще в позапрошлом году видел. и даже как-то использовал касательно 1с (формирование word документов). просто наконец Roslyn вышел в релиз. так-то его можно было и до этого использовать в простейших сценариях.
21. Serginio 938 29.12.15 16:47 Сейчас в теме
(20) Он был в бэте. Сейчас релиз
22. cool.vlad4 2 29.12.15 17:07 Сейчас в теме
23. Serginio 938 29.12.15 17:26 Сейчас в теме
(18) Кстати а какой профит от NativeApi если
На данный момент поддерживаются платформы 8.2 — 8.3 x86 Windows.
25. cool.vlad4 2 29.12.15 19:46 Сейчас в теме
(23) Serginio, ну это вопрос к автору, почему только x86. профит от Native как минимум в ненужности что либо регистрировать . ты, конечно, ответишь, что можно же зарегистрировать только одну твою компоненту-фабрику. а Native вообще ненужно регистрировать .
24. Принт 83 29.12.15 18:38 Сейчас в теме
(17) Там мой репозиторий и моя разработка, но поскольку считаю её безперспективной, то и оставляю за кадром. Ведь почти всё хорошее, что есть для Питона гвоздями прибито к CPython.
(23) У меня есть рабочий черновик для Linux x86.
cool.vlad4; +1 Ответить
30. Принт 83 14.06.16 19:24 Сейчас в теме
(17) Опубликовал полные исходники компоненты под IronPython. Проект не развивался, я только замазал несколько самых очевидных ляпов.

upd
Если кому нужны сборки для текущих питонов Windows x86 - x64, напишите в личку!
26. Serginio 938 29.12.15 22:40 Сейчас в теме
Нет не скажу. Но скажу другое. В 7.7 есть vkloader. Но я не пойму почему в 1С не сделают загрузку из фабрики по clsid зная путь к файлу. Вот код на C# для получение IDispatch

public static object ЗагрузитьОбъект(string ИмяФайла, System.Guid clsid)
        {

            var module = Win32NativeMethods.LoadLibraryEx(ИмяФайла, IntPtr.Zero, 8);
            var proc = Win32NativeMethods.GetProcAddress(module, "DllGetClassObject");
            var gco = Marshal.GetDelegateForFunctionPointer(proc,
                typeof(Win32NativeMethods.DllGetClassObjectDelegate))
                as Win32NativeMethods.DllGetClassObjectDelegate;

        
            object unknown;
            gco(clsid, typeof(IClassFactory).GUID, out unknown);
            var factory = unknown as IClassFactory;

            //var iid = typeof(IFilter).GUID;
            //var filter = factory.CreateInstance(null, ref iid) as IFilter;

            var iid = typeof(IDispatch).GUID;
            return factory.CreateInstance(null, iid);


        }
Показать
27. komradz 67 17.03.16 08:12 Сейчас в теме
Вопрос, будет ли она работать с python 3.4 ?!
29. Принт 83 17.03.16 19:02 Сейчас в теме
(27) komradz, Нет, не будет. Но можно рядом с 3.4 установить 3.3, без прописывания путей и интеграции в проводник.
(28) Infactum, Там макаронного кода много, а комментариев мало. ) Я подумаю. Если будет совсем лень двигать проект вперёд, тогда открою.
28. Infactum 314 17.03.16 09:12 Сейчас в теме
Исходники бы :)
vers139; ardarik; izidakg; утюгчеловек; +4 Ответить
31. aou1c 12 11.03.21 09:04 Сейчас в теме
А зачем нужны все эти nativAPI, можно ведь и так https://infostart.ru/public/1399812/
Любой python. И исходники есть.
Оставьте свое сообщение