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

10.10.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Компонента и документация
.zip 363,16Kb ver:2.0 lite
129
129 Скачать (1 SM) Купить за 1 850 руб.

В системе должен присутствовать совместимый интерпретатор 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 и маркетинг Управленческий учет Платные (руб)

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

18000 руб.

30.05.2017    53736    9    69    

45

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

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

2400 руб.

04.05.2018    46853    122    66    

66

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

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

3000 руб.

12.05.2020    28287    138    100    

90

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

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3423    2    0    

4

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

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    18170    18    33    

22

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

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

1500 руб.

17.09.2018    36514    113    127    

114

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

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

26.01.2024    6856    starik-2005    32    

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

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

Установил python (по ссылке, указанной в статье), прописал в PATH, проверил в командной строке - запускается версия 3.3. В 1С-ке функция ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "Компонента", ТипВнешнейКомпоненты.Native) возвращает Ложь. В чем может быть дело?
10. Принт 84 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. Принт 84 23.05.13 18:57 Сейчас в теме
Меж тем, проверил на 3.3.2: тоже работает.
13. altcavs 15.12.15 14:13 Сейчас в теме
На клиенте работает на ура!!, а на сервере только один первый раз.
Как запустить на сервере???
14. Принт 84 16.12.15 23:23 Сейчас в теме
На сервере совсем не тестировалось - нужно разбираться.
15. altcavs 22.12.15 18:06 Сейчас в теме
(14) Принт,
Native API только и нужно для сервера!!!
А что внутри, embeded Python API ?
16. Принт 84 22.12.15 22:18 Сейчас в теме
Оно, конечно, да и даже компонента ориентировалась для работы на сервере, но разработчики 1С взяли курс в другую сторону от своего же NativeAPI. Сейчас мне кажется более правильным перенос ВК в отдельный процесс с сопутствующим IPC. По крайней мере это относится к питону.
Внутри там что-то вроде http://habrahabr.ru/post/273401/
17. Serginio 941 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 941 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 941 29.12.15 16:47 Сейчас в теме
(20) Он был в бэте. Сейчас релиз
22. cool.vlad4 2 29.12.15 17:07 Сейчас в теме
23. Serginio 941 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. Принт 84 29.12.15 18:38 Сейчас в теме
(17) Там мой репозиторий и моя разработка, но поскольку считаю её безперспективной, то и оставляю за кадром. Ведь почти всё хорошее, что есть для Питона гвоздями прибито к CPython.
(23) У меня есть рабочий черновик для Linux x86.
cool.vlad4; +1 Ответить
30. Принт 84 14.06.16 19:24 Сейчас в теме
(17) Опубликовал полные исходники компоненты под IronPython. Проект не развивался, я только замазал несколько самых очевидных ляпов.

upd
Если кому нужны сборки для текущих питонов Windows x86 - x64, напишите в личку!
26. Serginio 941 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. Принт 84 17.03.16 19:02 Сейчас в теме
(27) komradz, Нет, не будет. Но можно рядом с 3.4 установить 3.3, без прописывания путей и интеграции в проводник.
(28) Infactum, Там макаронного кода много, а комментариев мало. ) Я подумаю. Если будет совсем лень двигать проект вперёд, тогда открою.
28. Infactum 318 17.03.16 09:12 Сейчас в теме
Исходники бы :)
vers139; ardarik; izidakg; утюгчеловек; +4 Ответить
31. aou1c 13 11.03.21 09:04 Сейчас в теме
А зачем нужны все эти nativAPI, можно ведь и так https://infostart.ru/public/1399812/
Любой python. И исходники есть.
Оставьте свое сообщение