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

10.10.15

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Компонента и документация
.zip 363,16Kb ver:2.0 lite
130
130 Скачать (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    54039    9    69    

46

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

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1126    3    4    

3

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

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

2400 руб.

04.05.2018    47297    124    66    

67

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

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

4600 руб.

27.06.2023    3598    3    0    

5

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

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77514    72    257    

191

Разработка внешних компонент Программист Платформа 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    28653    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    1800    bayselonarrend    10    

44

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4713    kovalevdmv    26    

75
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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. И исходники есть.
Оставьте свое сообщение