ВК NativeAPI на Lazarus/FreePascal - теперь и для 1С 8.3 на Linux!

14.03.13

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

Расширенная версия 1CNativeLib - бесплатной библиотеки для создания внешних компонент (ВК) для 1С по технологии Native API, позволяющая компилировать ВК для целевой платформы Linux.

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

Наименование Файл Версия Размер
napi_demo.zip
.zip 77,74Kb
236
.zip 77,74Kb 236 Скачать

Данная разработка основывается на публикации ВК NativeAPI на Delphi и FreePascal автора v77 (за которую ему огромный плюс).

Главное отличие от оригинала - интерфейсный модуль переработан, и теперь позволяет компилировать компоненты для Linux. Более того, он сделан кросс-платформенным, и теперь с помощью данной версии можно собирать компоненты для всех поддерживаемых 1С на текущий момент платформ:

  1. Windows_x86 (1С 8.2-8.3 клиент+сервер);
  2. Windows_x86_64 (1С 8.2-8.3 сервер);
  3. Linux_x86 (1С 8.2 сервер, 1С 8.3 клиент+сервер);
  4. Linux_x86_64 (1С 8.2 сервер, 1С 8.3 клиент+сервер).

Также исправлены некоторые неточности и ошибки, и добавлено несколько функций по чтению/записи значений из V8Variant.

В прилагаемом архиве содержится демонстрационный пример компоненты с исходниками для Lazarus, а также тестовая обработка для 1С.

См. также

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

Разработка внешних компонент 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 29.04.13 09:32 Сейчас в теме
Под виндой компилится х32 х64 отлично.
Под линуксом только под х32, по х64 валит ошибку, линкер ругается на
  ClassNamesString: WideString = '';
  ClassNamesStringPWC: PWideChar = nil;

Пока что еще не нашел способа исправить.
Помогает
Type
   WideString = String;

Но с PWideChar не прокатило.

А вот здесь немного поправил, т.к. под виндой все работает норм, а если под линухом вызвать
V8SetWString(RetValue,''); то получаем Access Violation
function TV8UserObject.V8SetWString(V: PV8Variant;
  Value: WideString): boolean;
var
  L, SZ: longword;
begin

  if Value='' then
     Value := #0;

  result := (PWideChar(Value) = nil);
  if result then
    Exit;
Показать
2. Resha 19.05.13 16:51 Сейчас в теме
quick,

Не сразу прочитал твой комент и убил на это же целый день :-(

Компилилилось оно нормально под виндой, но при попытке считать строковое свойство, которое равно "" - 1С вылетала

Реализовал немного по другому:
function TV8UserObject.V8SetWString(V: PV8Variant;
  Value: WideString): boolean;
var
  L, SZ: longword;
begin

  result := (PWideChar(Value) = nil);
  if result then
    Exit;

  V8ClearVar(V);
  V.vt := VTYPE_PWSTR;
  L := Length(Value);
  SZ := L + L + 2;

  result := V8MM.AllocMemory(@(V.VarEnum.vtRecWideString.pwstrVal), SZ);
  if result then
  begin
    if L <> 0 then
      Move(Value[1], V.VarEnum.vtRecWideString.pwstrVal^, SZ);
    V.VarEnum.vtRecWideString.wstrLen := L;
  end;
end;
Показать


Т.е. добавлено (при выделении памяти там уже #0 в первом байте):
if L <> 0 then
3. ras2004a 23.10.13 19:48 Сейчас в теме
4. ras2004a 23.10.13 19:49 Сейчас в теме
Подскажите кто подключал торговое оборудование для linux клиента 1С 8.3, как это сделать?
Есть сканер штрихкода, считыватель карт с магнитной лентой и фискальник штрих-м-фр-к.
Под windows есть драйвер ScanOPOS, для Linux не могу найти аналог.
Для штрих-м-фр-к нашел исходники драйвера, как скомпилировать и завязать с 1С пока непонятно.
5. bashinsky 133 07.08.14 15:08 Сейчас в теме
При компиляции минимального проекта, который указан в этой публикации, на lazarus, вылетает ошибка на коде регистрации функции
AddFunc('Hello', 'Привет', @TMyClass.Hello, 0);


miniVK.lpr(24,49) Error: Incompatible type for arg no. 3: Got "<address of function(PV8Variant,PV8ParamArray,const LongInt):Boolean of object;Register>", expected "PV8CallAsFunc"


Пробовал на win 7 32бит и 64бит.
Может кто-нибудь помочь? подсказать в чем ошибка?
Прикрепленные файлы:
6. andrewks 1367 07.08.14 15:56 Сейчас в теме
(5) а интерфейсный модуль Вы используете оттуда, или из моей публикации?
7. bashinsky 133 08.08.14 12:28 Сейчас в теме
(6) использовал и вашу и из той публикации
8. bashinsky 133 25.08.14 09:23 Сейчас в теме
(6) можете подсказать что-нибудь по данной ошибке?
9. kirlog 101 26.08.14 16:10 Сейчас в теме
Под виндой действительно все отлично!
Но под линуксом x64 (конкретно UBUNTU 12.04 LTS x64) есть проблемы:
1. Компилировать надо с ключем -Cg (или -fPIC)
И компилируется тогда нормально.

2. Но не работает:(
Компонента в 1С грузится, методы вызываются, но параметры не передаются.
Все числовые видны в компоненте как VTYPE_EMPTY. Все что ни передашь обратно в 1С - Неопределено.
Передача строковых параметров приводит к краху 1С.

Очевидно, есть беда с разрядностью.
10. kirlog 101 26.08.14 16:14 Сейчас в теме
Проект отличный! Очень нужный, т.к. позволит разработать под линукс компоненты для работы с торговым оборудованием, которых сейчас очень не достает. Их много написано в дельфях и можно было бы портировать без труда.

Вот, если бы под линуксом x64 заработал бы, цены бы не было.
11. andrewks 1367 26.08.14 17:00 Сейчас в теме
(10) kirlog, конкретно проверял под следующими платформами:
win x32
win x64
linux x32

под ними всё работает.

под linux x64 не проверял.

а какой версией лазарус компилируете?
12. mvernig 16.01.15 16:35 Сейчас в теме
Помогите пожалуйста! Не проходит "ПодключитьВнешнююКомпоненту". В чем может быть причина? Пробовал под разными клиентами, пересобрать, под правами админа... 8.3.5.1383, вин 8-64. Кстати, а почему используете файл SO, а не DLL?
13. andrewks 1367 20.01.15 11:27 Сейчас в теме
(12) mvernig,
а почему используете файл SO, а не DLL?
so - это для linux, dll - для windows

(12) mvernig,
Не проходит "ПодключитьВнешнююКомпоненту"

не проходит именно с моей длл-кой, или сами собирали?
14. AlexO 135 23.03.15 16:54 Сейчас в теме
(0) в общем, эйфория прошла от 8.3, тема ВК тихо умерла?
15. andrewks 1367 24.03.15 16:39 Сейчас в теме
16. AlexO 135 24.03.15 16:51 Сейчас в теме
(15) так нет ВК никаких. Посмотрите, что сделали ВК из 7.7: целый отдельный продукт 1С++.
А что сделали ВК в 8-ке? ))
Хотя, если вы придерживаетесь идеи, что "в восьмерке все есть и все отлично проработано, поэтому ничего дорабатывать не нужно" - тогда вы правы. Но.
Но тогда замкнутый круг - о какой нише доработок в 1С8 может идти речь, для которой в принципе понадобится писать ВК ? ))
17. quick 583 27.03.15 12:39 Сейчас в теме
После мучений с этими ВК пришел к тому, что лучше всего использовать связку SOAP - Внешняя программа. Одну компоненту вообще вынес во внешний бинарник и сделал компоненту которая только делает запуск этой проги без отображения терминала, и анализирует вывод в консоль, но для пользователя все это проходит скрытно. Так я с одной стороны прикрываю лазейки с утечками памяти в процессе 1с, которые приводят к краху процесса сервера, а с другой намного легче тестировать обычное консольное приложение нежели компоненту. Под виндой в большинстве случаев перешел на использование COM обьектов на Python. Это быстро, легко тестируется, не глючит.
18. AlexO 135 27.03.15 13:02 Сейчас в теме
(17) quick,
Под виндой в большинстве случаев перешел на использование COM обьектов на Python
Да уж, очень логично ))
19. AlexO 135 27.03.15 13:04 Сейчас в теме
(17) quick,
сделал компоненту которая только делает запуск этой проги без отображения терминала
А что делает сама компонента?
Так я с одной стороны прикрываю лазейки с утечками памяти в процессе 1с
Утечки по какому поводу были?
обычное консольное приложение
Что за приложение?
20. quick 583 01.04.15 17:02 Сейчас в теме
(19) AlexO,
Утечки были в компоненте под linux x64, да и намешано там было достаточно много сторонних компонент. Все это компилировалось в FreePascal (Code Typhon) и в итоге не всегда, но время от времени что нибудь вылетало и тянуло с собой процесс сервера 1С.
Компонента о которой я говорю имеет один метод Выполнить(Команда) и возвращала результат выполнения строкой. Если внутри дочернего процесса что то ломалось, то теперь уже не вылетала 1С, я просто получал некое сообщение о ошибке в качестве результата.

Да и в довесок. Если на питоне сделать СОМ и передать в качестве параметра ссылку на экземпляр класса 1С++ (в 7-ке) или ссылку на обработку/отчет/форму (в 8-ке) то внутри питона можно вызывать методы этого класса, У меня таким образом реализован JSON адаптер который асинхронно оповещает о завершении задачи в celery. Здорово тем что можно вызвать действие, при этом интерфейс 1С остается рабочим, а в COM объекте питона запускается поток с ожиданием, по завершению которого отработает нужный метод. Под линуксом конечно такое не пройдет, все подумываю как бы задействовать HTML контрол для интеграции.. можно же по идее использовать локальный сервер вместо компоненты и jquery...
21. Demanoidos 64 18.06.15 14:56 Сейчас в теме
Ребята, бросьте в меня этим файлом, у меня нет возможности его скачать, инфостарт просит денег. Заранее благодарю.
22. user1122235 01.01.19 22:25 Сейчас в теме
При работе в серверном контексте, компонента самопроизвольно выгружается из платформы или работает до закрытия пользовательского сеанса, под которым была поднята? Обычно, платформа самопроизвольно выгружает компоненту, как тут?
23. trim89 107 21.08.19 07:12 Сейчас в теме
Не работает. Выдаёт ошибки. К примеру

[Error] v8napi_64.pas(505): Operator not applicable to this operand type
[Error] v8napi_64.pas(505): Pointer type required

на строке

Move(ZeroChar, (pMemory^ + CountByte - SizeOf(WideChar))^, SizeOf(WideChar));

Как решить проблему?
26. andrewks 1367 22.05.20 23:49 Сейчас в теме
(23) покажите ваш проект полностью и уточните, на какой платформе и какой версией компилируете
27. kirlog 101 23.05.20 03:37 Сейчас в теме
У меня, например, компилится нормально.
Вопрос, планируется ли развивать проект?
28. andrewks 1367 23.05.20 08:44 Сейчас в теме
(27) выдалось немного свободного времени, проверил на ubuntu x64 - собирается нормально с FPC 3.0.
на других версиях не пробовал, но, по крайней мере, на ubuntu x32 с FPC 2.6 проект собирался и отрабатывал нормально.

по поводу проблемы при работе с параметрами на linux x64 - да, действительно, не передаются. проблема, скорее всего, из-за выравнивания данных - нужно немого "раздвинуть" V8Variant
сейчас тестирую, чуть позже выложу подправленную версию интерфейсного модуля
24. kirlog 101 02.09.19 20:06 Сейчас в теме
Не появилось ли решения тех проблем с архитектурой LINUX_64, что были изначально у данного проекта?
Там, напомню, все компилировалось, запускалось, но параметры никакие не передавались ни из 1С в компоненту, ни обратно.
30. andrewks 1367 23.05.20 09:45 Сейчас в теме
(24) попробуйте эту версию интерфейсного модуля
Прикрепленные файлы:
v8napi.7z
31. kirlog 101 23.05.20 13:11 Сейчас в теме
(30)
Спасибо большое!
Попробую и отпишусь.
32. andrewks 1367 06.06.20 21:03 Сейчас в теме
33. kirlog 101 07.06.20 00:45 Сейчас в теме
(32)пока нет. Но обязательно попробую
34. user1122235 23.04.21 02:08 Сейчас в теме
Скомпилировал в лазарусе 2.0.12, х64 под убунтой 20.
Не работает передача более чем одного параметра в метод компоненты.
Например, в 1С вызывается метод компоненты и передается два параметра true, true.
В обработчике компоненты доступен только первый, второй всегда пустой.
Еще одна проблема - V.vt постоянно = 0 для всех параметров.
При этом, под windows все отлично с тем же кодом.
25. quick 583 06.09.19 09:50 Сейчас в теме
Похоже проще начать использовать C++ чем возиться дальше с паскалем.
aleksey2; +1 Ответить
29. andrewks 1367 23.05.20 08:54 Сейчас в теме
на ubuntu 14.x надо использовать версии Lazarus с FPC не выше 3.0
т.к. в более старших версиях возникает конфликт с линкером ld из binutils
( у FPC выше 3.0 модули скомпилированы с использованием некоторых свежих возможностей стандартов, которые не понимаются старыми версиями ld, при этом для версии ubuntu 14.x невозможно штатными методами обновить binutils до нужной версии).
выхода два - или обновить ubuntu, или использовать FPC не старше 3.0
есть ещё, конечно, вариантик вручную собрать binutils нужной версии и прописать так, чтобы сборка происходила именно с линкером ld более свежей версии, нежели имеющийся в системе штатно. но это если есть свободное время, я не проверял
35. user1122235 08.06.21 23:09 Сейчас в теме
(29) У вас работала передача в компоненту больше 1 параметра?
37. axae 109 31.08.21 10:01 Сейчас в теме
36. axae 109 31.08.21 09:22 Сейчас в теме
Здравствуйте! А есть ли пример создания внешнего события? Пример из статьи работает, но там нет примера по внешнему событию и внешнее событие в 1С не появляется. Хотя в шаблоне компоненты для дельфи https://infostart.ru/public/81644/ работало
38. user1122235 09.01.22 14:42 Сейчас в теме
Под 8.3.21 (без совместимости) win64 случается ошибка при попытке вызова методов с вх. параметрами (дв. данные).
Видимо, структуру данных изменили в платформе.
39. darky1984 05.08.22 10:27 Сейчас в теме
Есть ли работающий пример на win64 - v8napi ?
40. paxer 27.10.22 19:38 Сейчас в теме
Windows_x86_64 (1С 8.2-8.3 сервер);
А клиент под х64 существует?
Оставьте свое сообщение