ВК 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С.

См. также

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

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

4600 руб.

27.06.2023    3794    3    0    

5

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

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

3600 руб.

02.09.2010    77764    73    257    

191

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

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

1500 руб.

17.09.2018    37120    115    128    

116

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

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

2400 руб.

25.06.2024    1301    3    4    

3

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

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

14.01.2025    2602    bayselonarrend    14    

48

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

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

04.12.2024    5351    kovalevdmv    26    

77

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

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

26.01.2024    7772    starik-2005    40    

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

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

Очевидно, есть беда с разрядностью.
10. kirlog 135 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 135 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 135 02.09.19 20:06 Сейчас в теме
Не появилось ли решения тех проблем с архитектурой LINUX_64, что были изначально у данного проекта?
Там, напомню, все компилировалось, запускалось, но параметры никакие не передавались ни из 1С в компоненту, ни обратно.
30. andrewks 1375 23.05.20 09:45 Сейчас в теме
(24) попробуйте эту версию интерфейсного модуля
Прикрепленные файлы:
v8napi.7z
31. kirlog 135 23.05.20 13:11 Сейчас в теме
(30)
Спасибо большое!
Попробую и отпишусь.
32. andrewks 1375 06.06.20 21:03 Сейчас в теме
33. kirlog 135 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 существует?
Оставьте свое сообщение