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

14.03.13

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
napi_demo.zip
.zip 77,74Kb
238
238 Скачать (1 SM) Купить за 1 850 руб.

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

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать 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    77515    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    28655    138    100    

91

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

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

14.01.2025    1815    bayselonarrend    10    

44

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

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

04.12.2024    4715    kovalevdmv    26    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quick 584 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 147 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 1375 07.08.14 15:56 Сейчас в теме
(5) а интерфейсный модуль Вы используете оттуда, или из моей публикации?
7. bashinsky 147 08.08.14 12:28 Сейчас в теме
(6) использовал и вашу и из той публикации
8. bashinsky 147 25.08.14 09:23 Сейчас в теме
(6) можете подсказать что-нибудь по данной ошибке?
9. kirlog 134 26.08.14 16:10 Сейчас в теме
Под виндой действительно все отлично!
Но под линуксом x64 (конкретно UBUNTU 12.04 LTS x64) есть проблемы:
1. Компилировать надо с ключем -Cg (или -fPIC)
И компилируется тогда нормально.

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

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

Вот, если бы под линуксом x64 заработал бы, цены бы не было.
11. andrewks 1375 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 1375 20.01.15 11:27 Сейчас в теме
(12) mvernig,
а почему используете файл SO, а не DLL?
so - это для linux, dll - для windows

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

не проходит именно с моей длл-кой, или сами собирали?
14. AlexO 136 23.03.15 16:54 Сейчас в теме
(0) в общем, эйфория прошла от 8.3, тема ВК тихо умерла?
15. andrewks 1375 24.03.15 16:39 Сейчас в теме
16. AlexO 136 24.03.15 16:51 Сейчас в теме
(15) так нет ВК никаких. Посмотрите, что сделали ВК из 7.7: целый отдельный продукт 1С++.
А что сделали ВК в 8-ке? ))
Хотя, если вы придерживаетесь идеи, что "в восьмерке все есть и все отлично проработано, поэтому ничего дорабатывать не нужно" - тогда вы правы. Но.
Но тогда замкнутый круг - о какой нише доработок в 1С8 может идти речь, для которой в принципе понадобится писать ВК ? ))
17. quick 584 27.03.15 12:39 Сейчас в теме
После мучений с этими ВК пришел к тому, что лучше всего использовать связку SOAP - Внешняя программа. Одну компоненту вообще вынес во внешний бинарник и сделал компоненту которая только делает запуск этой проги без отображения терминала, и анализирует вывод в консоль, но для пользователя все это проходит скрытно. Так я с одной стороны прикрываю лазейки с утечками памяти в процессе 1с, которые приводят к краху процесса сервера, а с другой намного легче тестировать обычное консольное приложение нежели компоненту. Под виндой в большинстве случаев перешел на использование COM обьектов на Python. Это быстро, легко тестируется, не глючит.
18. AlexO 136 27.03.15 13:02 Сейчас в теме
(17) quick,
Под виндой в большинстве случаев перешел на использование COM обьектов на Python
Да уж, очень логично ))
19. AlexO 136 27.03.15 13:04 Сейчас в теме
(17) quick,
сделал компоненту которая только делает запуск этой проги без отображения терминала
А что делает сама компонента?
Так я с одной стороны прикрываю лазейки с утечками памяти в процессе 1с
Утечки по какому поводу были?
обычное консольное приложение
Что за приложение?
20. quick 584 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 110 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 1375 22.05.20 23:49 Сейчас в теме
(23) покажите ваш проект полностью и уточните, на какой платформе и какой версией компилируете
27. kirlog 134 23.05.20 03:37 Сейчас в теме
У меня, например, компилится нормально.
Вопрос, планируется ли развивать проект?
28. andrewks 1375 23.05.20 08:44 Сейчас в теме
(27) выдалось немного свободного времени, проверил на ubuntu x64 - собирается нормально с FPC 3.0.
на других версиях не пробовал, но, по крайней мере, на ubuntu x32 с FPC 2.6 проект собирался и отрабатывал нормально.

по поводу проблемы при работе с параметрами на linux x64 - да, действительно, не передаются. проблема, скорее всего, из-за выравнивания данных - нужно немого "раздвинуть" V8Variant
сейчас тестирую, чуть позже выложу подправленную версию интерфейсного модуля
24. kirlog 134 02.09.19 20:06 Сейчас в теме
Не появилось ли решения тех проблем с архитектурой LINUX_64, что были изначально у данного проекта?
Там, напомню, все компилировалось, запускалось, но параметры никакие не передавались ни из 1С в компоненту, ни обратно.
30. andrewks 1375 23.05.20 09:45 Сейчас в теме
(24) попробуйте эту версию интерфейсного модуля
Прикрепленные файлы:
v8napi.7z
31. kirlog 134 23.05.20 13:11 Сейчас в теме
(30)
Спасибо большое!
Попробую и отпишусь.
32. andrewks 1375 06.06.20 21:03 Сейчас в теме
33. kirlog 134 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 584 06.09.19 09:50 Сейчас в теме
Похоже проще начать использовать C++ чем возиться дальше с паскалем.
aleksey2; +1 Ответить
29. andrewks 1375 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 110 31.08.21 10:01 Сейчас в теме
36. axae 110 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 существует?
Оставьте свое сообщение