ВК для 1С:Предприятие 8.2 NativeAPI на Delphi (запуск приложений, раскладка клавиатуры, события и др.)

Публикация № 88060

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

Внешняя компонента на основе разработки Крипича http://infostart.ru/public/81644/ - NativeAPI на Delphi реализует запуск процесса с заданным приоритетом и видимостью окна, переключение раскладки клавиатуры, всплывающие сообщения в трее, паузу sleep без загрузки процессора и внешние события.

На основе разработки участника Крипич //infostart.ru/public/81644/ сделана компонента, которая выполняет несколько полезных действий. Исходный код, тестовая конфигурация и страница с подробным описанием приведены в комплекте. Реализует следующие методы:

ПереключитьРаскладкуКлавиатуры - позволяет программно включить требуемую языковую раскладку клавиатуры.

ЗапуститьПриложение - запускает приложение, чтобы обойти ограничения 1с. Позволяет выставить видимость окна, приоритет и процессоры.

ПоказатьСообщениеВТрее
  - показывает всплывающие сообщения в трее Windows (рядом с часами).

Сон (Sleep) - делает паузу на указанное количество миллисекунд, не нагружая процессор.

ВнешнееСобытие - инициирует внешнее событие

В шаблон _CallAsFunc и _CallAsProc и др. модуля v8napi.pas добавлена обработка исключения и добавлен параметр для вызова событий.

UPD: NativeAPI - это новая технология для внешних компонент без использования COM, которая появилась в 1С 8.2. На диске ИТС 1С выложила образец в папке VNCOMP82 только для C++ (не написали чем компилить, но методом исключения - VS 2008), участник Кирпич (см. ссылку выше) изготовил образец для Delphi, который собственно тут и применен. Список методов скорее всего будет дополняться, это первое что пришло в голову (переключатель языка клавиатуры попросили, т.к. через WScrpit.Shell не сделаешь, и с запуском внешних приложений была у коллеги проблема).

А чем может быть удобна NativeAPI для конечных пользователей и распространителей решений - COM создает известные проблемы для пользователей, у которых нет расширенных (админских) прав в системе, и соответственно компоненты то работают, то не работают, то загружаются, то не загружаются, то загружаются неизвестно откуда и т.д. В 8.2 проблемы с этим устранены путем отказа от технологии COM в пользу более традиционной технологии DLL, для которой не нужны права на запись к реестру. Также можно из браузера FF и IE (пока не проверял) эти новые компоненты вызывать.

Сам код компоненты выглядит намного яснее.

UPD2: Добавлены внешние события, тестовая конфигурация и подробное описание (readme.html) в комплекте. Страница обсуждения на форуме mista.ru: http://forum.mista.ru/topic.php?id=562506

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

Наименование Файл Версия Размер
1CNativeExec.zip

.zip 101,49Kb
08.08.11
1399
.zip 101,49Kb 1399 Скачать бесплатно

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CaSH_2004 362 02.08.11 00:27 Сейчас в теме
А есть ли к ней описание методов?
2. CaSH_2004 362 02.08.11 00:39 Сейчас в теме
Скачал, описание есть. За исходники спасибо. Функционал явно бедный, Sleep - можно делать и через вызов VBScipt, балоны вызывать удобнее
ShowTray http://infostart.ru/public/20531/
Tray1C http://infostart.ru/public/18821/
MiracleV8 http://dev.1tsm.ru/project/110 - на мой взгляд самая продвинутая
а ПереключитьРаскладкуКлавиатуры и ЗапуститьПриложение для меня всегда было загадкой в 1С
Так что выглядит как перепевки уже страых решений, возможно я и не прав, если автор готов объснить для чего все это?
3. Serj1C 479 02.08.11 07:10 Сейчас в теме
(2) вы перечисляете ВК на старой методике. а это новая - NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь
5. cool.vlad4 45 02.08.11 10:13 Сейчас в теме
(2) послушайте 3, это native ВК - так, что не путайте, ...были у меня кое-какие дельфийские примочки,нативная работа с excel и т.д. надо будет попробовать эти ВК...
6. CaSH_2004 362 02.08.11 10:41 Сейчас в теме
Serj1C пишет:

(2) вы перечисляете ВК на старой методике. а это новая - NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь

Странно тогда что это нигде не отражено в описании, обращаю ваше внимание на то как это выглядит со стороны - "изобретение велосипеда", если хотите быть оригинальным хотя бы выделите то новое что вы предлагаете в своей разработке, минус не ставлю т.к. есть исходники, но оформление в целом не ахти
7. cool.vlad4 45 02.08.11 10:45 Сейчас в теме
(6) Не придирайтесь, а прочитайте название "ВК для 1С:Предприятие 8.2 NativeAPI " Куда яснее уж...
Ovrfox; Захаров_Николай; Diversus; +3 Ответить
38. Abadonna 3871 15.06.12 11:16 Сейчас в теме
(2) CaSH_2004,
Sleep - можно делать и через вызов VBScipt

Да уж фиг нормальный слип через него сделаешь. Сам скрипт будет просто запускаться минимум миллисекунд 50-200
Пробовал я ради интереса.
DrZombi; hogik; +2 Ответить
41. DrZombi 175 08.09.14 07:50 Сейчас в теме
(38) Если пойти дальше, то Пауза на сервере через Джаву вообще не отработает по политике безопасности :)
Что не говори, но если есть возможность написать паузу через ВК, что в тонком клиенте это лучше не упустить :)
4. DrAku1a 1407 02.08.11 09:27 Сейчас в теме
Пригодится как пример и шаблон для разработки своих ВК. Однозначно плюсую!
NewLifeMan; Ksu; +2 Ответить
8. CaSH_2004 362 02.08.11 10:50 Сейчас в теме
cool.vlad4,
Да не было и в мыслях, я не разработчик ВК (когда то пытался, но не впечатлило), хотя плотно ими пользуюсь, тем не менее мне ничего не говорит надпись "ВК для 1С:Предприятие 8.2 NativeAPI", кроме того что она:
1. ВК
2. для 1С 8.2
3. называется NativeAPI
А т.к. пользуюсь другими то вот и спрашиваю автора, а в чем принципиальная разница? Нигде не указано что это "проба пера" - тогда было бы ясно, так что пока очередной "велосипед"
Думаю другим также будет непонятно, так что думаю вопрос закономерен и не бесполезен
9. Diversus 2121 02.08.11 11:01 Сейчас в теме
(8) NativeAPI это технология внешней компоненты.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.
44. Alien_job 177 08.05.15 14:28 Сейчас в теме
8.3.5.1570 при запуске тестовой базы вываливается с ошибкой {МодульУправляемогоПриложения(9)}: Тип не определен (AddIn.DemoLib.ExecExtention)
10. CaSH_2004 362 02.08.11 11:12 Сейчас в теме
Diversus пишет:
(8) NativeAPI это технология внешней компоненты.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.

А я тут что по вашему делаю? Или мне нужно каждое незнакомое слово гуглить? в описании сложно сказать об этом или все должны догадываться? Может эта разработка только для разработчиков ВК?
11. Diversus 2121 02.08.11 11:16 Сейчас в теме
12. CaSH_2004 362 02.08.11 11:23 Сейчас в теме
Diversus, Это уже лучше, а чем же отличается это от того что в ShowTray, Tray1C, MiracleV8? они написаны без этого?
13. cool.vlad4 45 02.08.11 11:25 Сейчас в теме
:D :cry: :o (12) берете ИТС и находите ТСВК - технология создания ВК
14. Diversus 2121 02.08.11 11:38 Сейчас в теме
(12) Это можете, как справедливо заметил cool.vlad4, прочитать на диске ИТС либо в интернете.
15. CaSH_2004 362 02.08.11 12:04 Сейчас в теме
Мда, получается разговор барана с воротами - непонятно кто прав, но не один не уступит. Я вам говорю про элементарные вроде вещи, что если выкладывается разработка нужно указать в чем ее преимущества/отличия перед уже имеющимися (зарекомендованными). А вы мне в ответ: разбирайся сам. Зачем тогда это все человеку который не увидел преимущества? Ведь проще использовать уже имеющееся чем перенастраивать. Как говорилось в фильме "Пароль Рыба-меч" - "Тема-то не раскрыта".
16. K_A_O 529 02.08.11 13:09 Сейчас в теме
(15) Но ведь слово NativeAPI - это и есть описание преимуществ/отличий перед уже имеющимися. Если вы не хотите посмотреть, что это такое, как угадать какие слова в описании вас устроят.
17. CaSH_2004 362 02.08.11 14:55 Сейчас в теме
(16)Я уже давно глянул и прочитал, вот только никак не пойму каким образом незнакомое слово в названии разработки может дать понимание того что это какая то технология которую нужно найти в поисковике и прочитать про нее. Если бы так рекламировали продукты 1С, Microsoft и другие то их никто бы не знал, т.к. название ни о чем не говорит, а говорит об этом описание которого у данной обработки не наблюдается. Вот что я хотел бы сказать, но что то никто не поймет меня, может потому что все уже знают что такое NativeAPI, а я до этого не знал. Но это никак не дает понимание разработки для других "непосвященных" в создание ВК. Вообще странно отсылать к разработке ВК для того чтобы понять ее преимущества, исходя из этой логики чтобы понять что такое 1С мне нужно сначала пройти курсы бухгалтера, поработать без ПК 1-2 годика, потом пройти курсы программирования на C++, поработать программистом и только потом я вдруг пойму что такое 1С и для чего она нужна и как ее сделали. Но вроде для этого есть понятие гиперссылки которые ведут на другие ресуры с пояснениями - вот чего я хотел в описании. Вроде тривиально, ан нет...
18. cool.vlad4 45 02.08.11 15:02 Сейчас в теме
(17) Платите автору ВК деньги как платят деньги производителям проприетарного софта (1С, микрософт) и будет вам описание и реклама...а так нахаляву, вам на блюдечке преподносят пример-шаблон ВК, будьте добры хоть посидеть, почитать, разобратся...задача программиста заключается в постановке цели и ее исследовании, и ее достижение, а не в слепом следовании пунктам чьих-то руководств...
19. CaSH_2004 362 02.08.11 15:17 Сейчас в теме
(18)Вот так и знал, все банально сведут к деньгам. А как же куча бесплатного софта (из популярного OpenOfice.org) которое сделано вроде как (т.к. сильно не копал) нормально, и без претензий что кто-то должен заплатить. Я лично придерживаюсь правила - "если делаеш, то делай хорошо или вообще не делай". А деньги можно требовать даже за бесплатное - тут видел ссылку на прайс 1С где продается OpenOfice.org по лицензионно и за немалые деньги! Зачем мне разбираться в шаблоне? Я же не собираюсь разрабатывать ВК, я это уже писал. Как и любой программист я хотел бы получить инструмент с какой-то сжатой инструкцией в чем его особенности, а не как вы говорите "разбирайся" по куче описаний, я это делаю когда нужно вникнуть в детали. Я понимаю что это напряжно объяснить другим то до чего сам уже дошел - у 99% прогеров проблемы с документированием своего творчества. Именно поэтому зарабатывают продажники, а программисты кодят. Когда совмещается обе стороны это БОМБА!
ИМХО: выкидывать головоломки чтобы другие разбирались это, помоему, говорит только о непрофессионализме и неуважении к времени других.
ЗЫ: реклама в данном контексте=описание, не надо цеплятся за слова.
20. cool.vlad4 45 02.08.11 15:30 Сейчас в теме
(19) Вы серьезно? Не потроллить? КАКАЯ нафиг документация, два с половиной метода, в описании все есть, сделано явно как пример для обучения, тем, кто будет разрабатывать ВК, но вы не собираетесь ни вникать, ни разрабатывать, так, что проходите мимо.
21. CaSH_2004 362 02.08.11 15:42 Сейчас в теме
(20)Не надо так наезжать. Где это вам удалось увидеть у меня слово "документация"? Я сказал вцелом документирование, а не применительно к данному случаю. В данном случае я думаю всем пользователям разработки будет полезно знать в чем ее преимущество перед уже имеющимися. Если это просто пример разработки то где это написано? Или это рабочий вариант? Я уже начинаюсь сомневаться что оно вообще работает раз тут столько говорят про разработку, а не про использование. Про личные догадки не надо говорить, т.к. выводы каждого инивидума его личные проблемы. Выходит разработка относится к категории "разберись сам и пойми нужно ли оно тебе". Очень занятный подход.
32. slaviksoft 73 23.01.12 17:11 Сейчас в теме
(19) CaSH_2004,

ну про барана тут все понятно :-)
35. tango 490 23.01.12 21:08 Сейчас в теме
(19) минус за "о непрофессионализме и неуважении" - по отношению к автору публикации это ваще не гуд
22. CaSH_2004 362 03.08.11 11:57 Сейчас в теме
Спасибо romix за реакцию на просьбы пользователей!
23. nicxxx 239 09.08.11 05:47 Сейчас в теме
24. I_G_O_R 63 11.08.11 23:13 Сейчас в теме
25. Собеседник 178 12.08.11 00:19 Сейчас в теме
много флуда.

вещь нужная - спс

а перехват нажатий клавиш (чтоб потом вызвать событие) буит?
26. pulpik 106 21.09.11 14:00 Сейчас в теме
платформа 8.2.14.533
использую описанный на ИТС от 1С метод загрузки из конфигурации (из макета с двоичными данными)
создал архив из dll + файл манифест xml
<?xml version="1.0" encoding="utf-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">
<component os="Windows" path="exec82.dll" type="native" arch="i386" />
<component os="Windows" path="exec82.dll" type="native" arch="x86_64" />
</bundle>
установка и подключение проходят без ошибок, но при создании объекта ОбъектВК = Новый("AddIn.DemoLib.ExecExtention"); выдает ошибку "тип не определен"
Не подскажите в чем ошибка
27. pulpik 106 21.09.11 14:21 Сейчас в теме
pulpik пишет:

платформа 8.2.14.533

использую описанный на ИТС от 1С метод загрузки из конфигурации (из макета с двоичными данными)

создал архив из dll + файл манифест xml

<?xml version="1.0" encoding="utf-8"?>



<component os="Windows" path="exec82.dll" type="native" arch="i386" />

<component os="Windows" path="exec82.dll" type="native" arch="x86_64" />



установка и подключение проходят без ошибок, но при создании объекта ОбъектВК = Новый("AddIn.DemoLib.ExecExtention"); выдает ошибку "тип не определен"

Не подскажите в чем ошибка
Показать



вопрос снят, разобрался.
28. pulpik 106 21.09.11 16:45 Сейчас в теме
а как можно изменить иконку появления в трее?
29. zahar33 17.10.11 18:12 Сейчас в теме
Подскажите наилучший вариант кода , чтоб отловить событие нажатия клавиш "+++" на Delfi для этой компонеты
30. zahar33 17.10.11 18:13 Сейчас в теме
Если, конечно, это возможно
31. mur611 25.10.11 14:12 Сейчас в теме
Здравствуйте, сложно данный пример переделать для работы с COM портами? если все функции и процедуры готовые есть, правда из СОМ объекта. и где нужно вставлять данные функции и процедуры?
34. slaviksoft 73 23.01.12 17:20 Сейчас в теме
(31) mur611,
TMyClass = class(TV8UserObject)
private
p_Port: BYTE;
p_BaudRate: DWORD;
p_ByteSize: BYTE;
p_Parity: BYTE;
p_StopBits: BYTE;
p_ReadIntervalTimeout: DWORD;
p_ReadTotalTimeoutMultiplier: DWORD;
p_ReadTotalTimeoutConstant: DWORD;
p_WriteTotalTimeoutMultiplier: DWORD;
p_WriteTotalTimeoutConstant: DWORD;
p_CRC16: boolean; //контролировать crc
p_TimeOut: cardinal; //максимальное время ожидания ответа

readBuffer: string; //буфер для считанных символов
hCom: DWORD; //дескриптор Com-порта
dcb: TDCB; //uses Windows
cto: TCommTimeOuts; //uses Windows
bPortIsOpen: Boolean; //признак открытия порта
setingCRC:boolean;

BufferIsEmpty: Boolean;
timer:TTimer;
lastCommand:WideString;

function ReadString(var crc16:WORD):string;
procedure WriteString(buff:string);
function WaitForReady(ExternalEvent:boolean):WideString;

public
procedure AddReadData(Sender: TObject);

//функции
function SleepFunc(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function CreateEventFunc(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function OpenPort(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function ClosePort(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function Send(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function SendAndWait(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function SetCRC16Control(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;

//свойства
function Property_Port_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_BaudRate_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ByteSize_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_Parity_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_StopBits_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadIntervalTimeout_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadTotalTimeoutMultiplier_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadTotalTimeoutConstant_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_WriteTotalTimeoutMultiplier_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_WriteTotalTimeoutConstant_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;

function Property_CRC16_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_TimeOut_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_Opened_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;

procedure done; override;
constructor Create; override;
//destructor Destroy; override;
end;
33. slaviksoft 73 23.01.12 17:15 Сейчас в теме
спасибо за пример.
есть вопрос.

когда мы вызываем насильственно ошибку Raise Exception.Create('Ошибка записи в порт');
она обрабатывается и вызывается процедура: addError(1006, 'Внешняя компонента', pWideChar(err), E_FAIL);

она, как я понял напрямую выводит сообщение в окно сообщений 1С.
можно ли сделать так что-бы описание ошибки попадало в 1с-методы "ИнформацияОбОшибке()" или "ОписаниеОшибки()"?
36. gavrikprog 112 03.03.12 00:37 Сейчас в теме
Почитал достаточно всего, инет порыл.
Вопрос остался без ответа(ибо уровень ввода в тему все равно на уровне 0 почти).

Есть ли возможность манипулировать данными базы 1С из внешней компоненты(не создавая OLE или Com соединение специально в компоненте).
К примеру в документе есть реквизит Сумма, нажали команду Изменить компоненты Native API и у нас выполнилась процедура, кот. без возвращаемых значений изменила значение этого реквизита ?

Или к примеру выполнить функцию общего модуля 1С
/***********************
Прошел еще раз документацию/

Правильно я понял, что это возможно только в COM-компонентах ?
37. h_ex_ak_74@mail.ru 10.03.12 23:52 Сейчас в теме
спасибо автору за пример,
но такой вопрос, как запустить такую компоненту на 64х сервере?
пробовал перекомпилировать dll, приложение падает при выполнении ПодключитьВнешнююКомпоненту.
39. phabi0z 14.08.12 17:48 Сейчас в теме
Присоединяюсь к antoni

Компилирую для x64 и сервер падает при вызове ПодключитьВнешнююКомпоненту
Может быть нужно что-нибудь в manifest.xml подправить

Нужно написать ВК для 64 сервера.
Кто сталкивался - отзовитесь...
53. raider-rec@ya.ru 30.11.17 20:37 Сейчас в теме
40. vladon 21 25.09.12 13:44 Сейчас в теме
Проблема с x64 явно в стандартах вызова (stdcall), если убрать stdcall из процедуры _Init, то падает и на win32.

Сделал полный лог каждой строчки, так вот на win64 тормозится перед _Init.

Что делать - пока ума не приложу, кто сталкивался?
42. uvsd2014 4 18.02.15 10:32 Сейчас в теме
спасибо, хорошая программа.
43. capitan 1773 27.03.15 16:39 Сейчас в теме
Спасибо, то что нужно для быстрого старта.
45. frkbvfnjh 597 24.07.15 17:17 Сейчас в теме
Спасибо автору! Исходник очень помог, но как мне задать для некоторых функций значения по умолчанию? В исходнике Крипича есть такой пример, но при вызове функций без параметров 1С завершает работу с ошибкой... Сделал в Вашем исходнике как в примере у Кирпича:
with AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3) do
    begin
        DefParams.AddWString('Первый Параметр', 0);
        DefParams.AddWString('Второй Параметр', 1);
        DefParams.AddWString('Первый Параметр', 2);
    end;

Тоже вылетает, что ожидаемо... Нумерацию с 1-це тоже делал - не помогает. Было бы хорошо если бы в пример включили пример вызова с параметрами по умолчанию. Кстати в 1С вызываю так:
ОбъектВК.ВнешнееСобытие(, , );
46. frkbvfnjh 597 24.07.15 17:19 Сейчас в теме
Что бы было понятней о каком участке кода идет речь:
begin
  with ClassRegList.RegisterClass(TMyClass, 'ExecExtention', 'TMyClass') do
  begin
    AddFunc('RunApp', 'ЗапуститьПриложение', @TMyClass.ExecFunc, 3);
    AddFunc('Sleep', 'Сон', @TMyClass.SleepFunc, 1);
    AddFunc('ActivateKeyboardLayout', 'ПереключитьРаскладкуКлавиатуры', @TMyClass.ActivateKeyboardLayoutFunc, 1);
    AddFunc('ShowBalloon', 'ПоказатьСообщениеВТрее', @TMyClass.ShowBalloonFunc, 3);
    with AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3) do
    begin
        DefParams.AddWString('Первый Параметр', 0);
        DefParams.AddWString('Второй Параметр', 1);
        DefParams.AddWString('Первый Параметр', 2);
    end;
    //AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3);
    AddFunc('SetStatusLine', 'УстановкаСтатуснойСтроки', @TMyClass.SetStatusLineFunc, 1);

    AddProp('Visible','Видимость',True,True, @TMyClass.PropertyVisibleGetSet);
    AddProp('Priority','Приоритет',True,True, @TMyClass.PropertyPriorityGetSet);
    AddProp('Processors','Процессоры',True,True, @TMyClass.PropertyProcessorsGetSet);
    AddProp('EventBufferDepth','ГлубинаБуфераСобытий',True,True, @TMyClass.PropertyEventBufferDepthGetSet);
  end;


end.
Показать
47. premierex 31.07.15 23:39 Сейчас в теме
Ребята, а что же человеку (CaSH_2004) никто так и не объяснил, в чём отличие NatveAPI компонент от COM? Там же всё просто - в NativeAPI кроссплатформенность достигается зп счет отказа от COM технологий.
COM, он же ActiveX, он же OLE - это одна и та же технология, построенная на использовании так называемых интерфейсов. Ну а поскольку эта технология (COM) - разработка компании Microsoft, то и работать она будет только под управлением OS Windows!.
NaitiveAPI не позволяет использовать интерфейсы, поэтому и кроссплатформенная, и будет работать под всеми OS.
Ну и минусы: все объекты ссылочного типа в 1С - это COM объекты. Поэтому из компонент, созданных по технологии NativeAPI в них попросту нельзя будет использовать.
Какую технологию написания внешней компоненты использовать зависит только от того, будет ли компонента работать с объектами 1С ссылочного типа или нет. Если да - несомненно COM, иначе - NativeAPI (поскольку кроссплатформенная).
Кстати, прикольно, 1С в примерах ВК по технологии NativeAPI тоже использует терминологию интерфесов. Только их там нет. Есть указатели на классы и куча подключаемых библиотек, которые, если писать по технологии СОМ, уже входят в поставку операционной системы (если, конечно писать на "чистом" С или С++ без использования фрэймворков).
Поздно посмотрел на дату публикации ))) Полчаса коту под хвост )))
48. vla.dik67 30.05.16 13:34 Сейчас в теме
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:

function _V8String(V8MM: TV8MemoryManager; W: WideString): PWideChar;
var
  L: longword;
begin
  result := nil;
  if Pointer(V8MM) = nil then
    Log('  _V8String: Pointer(V8MM) = nil')
  else
    begin
      L := Length(W);
      L := L + L + 2;
      if V8MM.AllocMemory(@result, L) then
        begin
          if Pointer(result) = nil then
            Log('_V8String:  result = nil !!!')
          else
            Move(W[1], result^, L);
        end
      else
        Log('_V8String:  NO AllocMemory !!!')
    end;
end;
Показать


Переменная result - всегда равна nil после вызова V8MM.AllocMemory(@result, L).
Такое ощущение, что AllocMemory не вызывается.

Последовательность вызовов такая:
_Init
_setMemManager
_SetLocale
_GetInfo
_RegisterExtensionAs
_V8String: result = nil !!!

В Turbo Delphi Explorer всё нормально работает.

Версия Lazarus - 1.6
Версия 1С - 8.3.7.1917
Windows 7 Pro 32 bit
Файлы проекта во вложении.

Спасибо.
Прикрепленные файлы:
1CNativeHello.zip
49. vla.dik67 30.05.16 13:34 Сейчас в теме
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:

function _V8String(V8MM: TV8MemoryManager; W: WideString): PWideChar;
var
  L: longword;
begin
  result := nil;
  if Pointer(V8MM) = nil then
    Log('  _V8String: Pointer(V8MM) = nil')
  else
    begin
      L := Length(W);
      L := L + L + 2;
      if V8MM.AllocMemory(@result, L) then
        begin
          if Pointer(result) = nil then
            Log('_V8String:  result = nil !!!')
          else
            Move(W[1], result^, L);
        end
      else
        Log('_V8String:  NO AllocMemory !!!')
    end;
end;
Показать


Переменная result - всегда равна nil после вызова V8MM.AllocMemory(@result, L).
Такое ощущение, что AllocMemory не вызывается.

Последовательность вызовов такая:
_Init
_setMemManager
_SetLocale
_GetInfo
_RegisterExtensionAs
_V8String: result = nil !!!

В Turbo Delphi Explorer всё нормально работает.

Версия Lazarus - 1.6
Версия 1С - 8.3.7.1917
Windows 7 Pro 32 bit
Файлы проекта во вложении.

Спасибо.
Прикрепленные файлы:
1CNativeHello.zip
50. 7OH 32 06.02.17 14:45 Сейчас в теме
Добрый день.
Прошу помощи ещё раз.
Компоненту наваял - всё работает.
Но когда дошло дело до внедрения на СЕРВЕРЕ - при подключении компоненты возвращает ложь.
На х32 сервере - всё ОК.
Как собирать компоненту под х64 - не подскажете ?
54. raider-rec@ya.ru 30.11.17 20:43 Сейчас в теме
(50)
Но когда дошло дело до внедрения на СЕРВЕРЕ - при подключении компоненты возвращает ложь.

В ТВК вроде так написано:

Интерфейс 1С:Предприятия

При инициализации объекта компоненты, ему передается указатель на интерфейс 1С:Предприятия, с помощью которого можно вызывать ниже перечисленные методы. Следует помнить, что эти методы не будут работать на сервере приложений.
51. slaviksoft 73 06.02.17 19:00 Сейчас в теме
в этом модуле проблема с типами под х64 (думаю связано с разрядностью)
есть на инфостарте пример с модулем под х64

http://infostart.ru/public/81644/
52. 7OH 32 09.02.17 16:34 Сейчас в теме
(51) да - там есть немного - спасибо за наводку.
Почитал - надо ставить новую среду (XE).
Поставил XE8, но появилась новая проблема:
мною используемый компонент dsPack использует в коде ASM, а гибридное содержимое в 64 компиляторе запрещено.
Переписывать dsPack я не решился.
А вот логику работы на клиент перенести - оказалось проще.
55. and60 27.04.18 11:25 Сейчас в теме
Добрый день.
Может подскажете, поможет ли мне эта компонента, или совет дадите :
мне необходимо из одной программы :
- желательно кодом на C# передать в 1С параметр (строку)
- в 1С отловить это событие
- обработать
- каким то макаром вернуть результат обработки в вызвавшую событие программу(пока не знаю как это реализовать)

И поясните, если не сложно :
1) 1С без внешней компоненты не может перехватить внешнее событие?
2) Какие есть варианты возврата результата обработки из 1С ? Не хочется проверять периодически на наличие файла с результатом...
56. Prisian 04.01.20 13:25 Сейчас в теме
Добрый день! Такой вопрос: в СОМ варианте ДЛЛ запись значений в параметры я делал так:
DeviceID := g_cp.p_DeviceID;
      PutNParam(paParams,0, DeviceID);

и все нормально возвращалось в 1С. Как здесь записать значение в параметр, точнее в массив парамтеров?
57. Prisian 05.01.20 00:53 Сейчас в теме
(56)Получилось. Вот код, может кому-то понадобится:

procedure SetParamAString(const V: PAnsiChar; Num: integer; Params: PV8ParamArray);
var
  L: integer;
begin

  with Params[Num] do
    begin
      L := length(V);
      vt := VTYPE_PSTR;
      VarEnum.vtRecString.strLen := L;
      VarEnum.vtRecString.pstrVal := pChar(V);
    end;

end;

function TMyClass.GetLastError(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): longword;
begin
  try
      SetParamAString(pChar(g_cp.LastError), 1, Params);
....
  except
...
  end;
  GetLastError := S_FALSE;
end;

Показать


Но осталась еще одна проблема: обязательная функция GetVersion(ПолучитьНомерВерсии) не имеет параметров, но должна возвращать строковое значение. Так у меня ложится 1С после выполнения метода.
Вот код, может подскажите как сделать так, чтобы 1С не вылетала.

function TMyClass.GetVersion(RetValue: PV8Variant; Params: PV8ParamArray;  const ParamCount: integer; var v8:TV8AddInDefBase): string;
begin
  //SetParamAString(pChar('1.0.0.1'), 1, Params);
  //V8SetString(RetValue, '1.0.0.1');
  result := '1.0.0.1';
  //GetVersion:= '1.0.0.1';
end; 

.
.
.
begin
  with ClassRegList.RegisterClass(TMyClass, 'ScalePromDeviceNative', 'TMyClass') do
  begin
    AddFunc('GetVersion', 'ПолучитьНомерВерсии', @TMyClass.GetVersion, 0);
  end;
end.
Показать
Оставьте свое сообщение

См. также

Miracle Native - ВК для V8 Промо

Разработка внешних компонент v8 Россия Бесплатно (free)

Настоящая ВК написана по технологии 1С-Native. По методам и свойствам является наследницей MIracveV8 с планируемым развитием функционала. Версия 1.2.1.1 Не триальная, подправлена некорректная работа под х64

23.04.2012    32631    0    Abadonna    81    

PinkRabbitMQ - Native API компонента 1С с открытым исходным кодом, для обмена сообщениями через RabbitMQ

Разработка внешних компонент v8 Бесплатно (free)

PinkRabbitMQ представляет собой Native API компоненту для 1С Предприятия 8 (Windows 32bit и 64bit) с открытым исходным кодом на с++ (можно собрать компоненту самостоятельно). PinkRabbitMQ это низкоуровневая компонента которая реализует обмен по протоколу AMQP с брокером сообщений RabbitMQ. Для организации высокоуровнего обмена между информационными базами предназначен Адаптер. Компонента разрабатывается в рамках проекта Адаптер.

29.07.2019    16999    0    Begemoth80    154    

Native внешняя компонента для передачи по UDP

Разработка внешних компонент v8 УТ10 Россия Абонемент ($m)

Внешняя компонента Native-API для организации передачи с использованием UDP.

1 стартмани

29.07.2019    4394    4    axae    0    

Внешняя компонента для ping (под win)

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Цель: выполнение ping из 1С без использования команд системы. Может быть полезна разработчикам для проверки доступности компьютеров.

05.01.2019    5970    3    milut    4    

Внешняя компонента для сжатия/распаковки файлов, двоичных данных и строк по алгоритму Zlib, Deflate и GZip

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя компонента для сжатия/распаковки файлов, двоичных данных и строк по алгоритму Zlib, Deflate и GZip.

1 стартмани

15.03.2016    32941    134    frkbvfnjh    103    

Мини-Эверест: Native ВК для 8.х

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Список и свойства HDD, список и свойства ОЗУ, список запущенных процессов (для терминала - всех пользователей с указанием номера сессии), список запущенных сервисов, характеристики BIOS

20.08.2014    16802    0    Abadonna    7    

ВК для работы с файлами FilesNative.dll

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Компонента реализует некоторые методы работы с файлами (архивами). Поддерживаемые форматы распаковки архивов: ZIP, JAR, XPI, BZ2, BZIP2, TBZ2,TBZ,RAR, R00, ARJ, Z, TAZ, LZH, LHA, 7Z, CAB, LZMA, LZMA86, ISO, XAR, MSI,RPM, TAR, GZ, TGZ, TPZ

18.06.2014    17702    0    Abadonna    9    

NetNative: ВК для работы с сетью

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Прослушивание UDP-портов, посылка UDP-сообщений, возможность организации UDP-чата, некоторые сетевые команды. Написана по технологии Native

23.02.2014    19648    0    Abadonna    10    

Отслеживание изменений каталога в REAL-TIME: Native ВК для 8.х

Разработка внешних компонент v8 Россия Бесплатно (free)

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

09.10.2013    20891    0    Abadonna    38    

Трей-мессенджер: Native ВK для 8.х

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Иконка 1С в трее с popup-mеnu, баллуны, оповещения, обратная связь. Выполнена по технологии Native, не требует регистрации в реестре и особых прав пользователя. Имеет обратную связь с 1С через генерацию внешних событий. Имеет popup-menu на иконке в трее для управления окном 1С (закрыть, скрыть, показать+ 2 пункта генерации событий). Есть возможность убрать кнопку главного окна из панели задач.

23.09.2013    26638    0    Abadonna    121    

Внешняя компонента для работы со строками

Разработка внешних компонент v8 Россия Бесплатно (free)

ВК по технологии Native для работы со строками: хеши по различным алгоритмам, крутое шифрование, вычисление релевантности (схожести) строк. Событие переключения подсистем.

20.03.2013    25987    0    Abadonna    105    

Драйвер клавиатурного сканера

Разработка внешних компонент v8 Россия Бесплатно (free)

Драйвер сканеров USB-HID (эмуляция клавиатуры) для 1С Предприятие 8.2. Дополнительно может отсылать текст на дисплей покупателя Posiflex PD2601.

13.07.2011    10718    0    Ma_X_X    12    

Thermal Print Library - ActiveX библиотека для печати на термопринтерах Godex BZB2/EZ2/EZ4, C.Itoh EZ2/EZ4, Citizen CLP-521/621

Разработка внешних компонент v8 1cv8.cf 1cv7.md Россия Бесплатно (free)

Библиотека Thermal Print Library является COM сервером и предназначается для использования в любых средах, которые в состоянии выступить в роли OLE-клиента (MS Office, 1С Предприятие, VB, VBScript, и т.д.). Допускается применение со следующими моделями термопринтеров : Godex BZB2/EZ2/EZ4, C.Itoh EZ2/EZ4, Citizen CLP-521/621.

20.09.2010    22103    0    GreenLab    23    

[BackgroundWorker] - Фоновые задания в файловом режиме 1С 8.x

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

ActiveX-компонента позволяет выполнять задачи в фоне с индикацией прогресса и возможностью прерывания выполнения. Также работает и клиент/серверном варианте, в качестве альтернативы типовым фоновым заданиям

04.03.2010    23314    0    Душелов    15    

Архивация базы 1С-Предприятие

Разработка внешних компонент Архивирование (backup) v8 1cv8.cf Россия Бесплатно (free)

Используем стандартный планировщик Windows и файл Visual Basic Script с файлом настроек, для плановой выгрузки базы данных.

29.12.2009    10926    0    alves    4    

ActiveX - плейер для 1С

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Для тех, кто любит всё внутри 1С ;) Форматы: mp3 и wav

01.12.2009    17679    0    Abadonna    39    

Использование визуальных (ActiveX) компонент в тонком клиенте 1С 8.2

Разработка внешних компонент Администрирование данных 1С v8 1cv8.cf Россия Бесплатно (free)

В данной статье рассматривается вопрос использования визуальных компонент (ActiveX) на форме тонкого клиента 1С 8.2 и веб-клиента на базе MS Internet Explorer.

19.11.2009    40790    0    Душелов    59    

Хранитель COM - объектов

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

Позволяет сохранять COM - объект между серверными вызовами в 8.2. Сохраняет и получает ссылку на объект в ROT (Running Object Table). БЕТА!

18.11.2009    12566    0    Hadgehogs    14    

[SendGoogleSMS] Отправка SMS уведомлений через сервис Google Calendar

WEB SMS рассылки Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента генерирует события в Google Calendar с извещением по SMS. В архивах ВК для 7.7 (работает и в 8-ке) и ActiveX - для работы в контексте сервера 1С 8.х

07.08.2009    29673    0    Душелов    37    

[PDF Viewer] - Просмотр PDF в 1С

Разработка внешних компонент Работа с интерфейсом v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

ActiveX-компонента для просмотра PDF. Позволяет сохранить в виде текста, картинки и PostScript. Реализованы механизмы поиска текста и печати.

15.07.2009    34917    0    Душелов    57    

Подпись к полю ввода в самом поле

Работа с интерфейсом Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

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

30.04.2009    16584    0    Stepa86    22    

[IFilter] Поиск в содержании файлов из 1С (ВК, .NET)

Разработка внешних компонент Поиск данных v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента для работы с фильтрами поисковых систем. Получает текст из файла по установленном в системе фильтрам. Индексирует и ищет файлы по их содержанию (аналог Desktop Search) Поддерживает *.doc, *.xls, *.txt, *.ppt. Дополнительные фильтры можно скачать с http://www.ifilter.org/Links.htm

24.03.2009    32863    0    Душелов    44    

[Сервер событий] Клиент + Сервер + Внешние события

Разработка внешних компонент Перенос данных из 1C8 в 1C8 1С7.7<->1C7.7 v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Средство для генерирования событий между разными сеансами, базами и платформами 1С

17.03.2009    20863    0    Душелов    32    

[RClassMngr] ООП для V8. Добавляем наследование v.1.1

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Посвящается 1С++. Добавляем в V8 наследование свойств и методов объектов.

15.03.2009    18282    0    Robert    94    

[Генератор внешних событий] Внешняя компонента для 1С

Практика программирования Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента генерирует внешние события с заданным интервалом и с заданными значениями.

06.03.2009    38738    0    Душелов    81    

[Мониторинг изменения файлов] - ActiveX-компонента для 1С 8.х + ВК для 7.7

Практика программирования Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента следит за изменениями файлов в заданных каталогах, без таймеров и опросов файловой системы. Использует события Windows.

05.03.2009    24576    0    Душелов    53    

[Проверка правописания] - ActiveX-компонента для 1С

Практика программирования Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента проверяет правописание текста. Основана на технологии OpenOffice MySpell. Не требует установленного офиса. В комплекте словари для 5 языков, включая русский (с "ё").

09.02.2009    29033    0    Душелов    66    

[ExcelEditor] Чтение/запись файла Excel напрямую из 1С без Excel (формат 97/2003)

Загрузка и выгрузка в Excel Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Чтение и запись файла Excel напрямую из 1С Компонента читает и редактирует напрямую файл Excel без загрузки самого Excel (формат Microsoft Office 97/2003)

08.01.2009    46664    0    Душелов    92    

Защита информации при обмене данными между информационными базами "Управление производственным предприятием"

Защита и шифрование Разработка внешних компонент Обмен через XML v8 УПП1 Бесплатно (free)

Защита информации при обмене с распределенной базой данных. В крупной фирме имеется одна центральная информационная база 1С:Предприятие 8.1 "Управление производственным предприятием" и несколько периферийных баз, обмен данными происходит через файлы XML. После выявления многочисленных случаев несанкционированного доступа к конфиденциальной информации, а именно кассовым и банковским документам при обмене данными, руководством было решено защитить данные при обмене информацией между центральной базой и периферийными базами. Перемещение данных между базами происходит через файлы XML, по нескольким каналам связи FTP, HTTP, POP, SMTP, а также на сменных носителях (типа USB Flash Drive). В связи с этим решено использовать внешнюю компоненту для шифрования файлов XML и небольшой доработки конфигурации баз данных.

25.11.2008    14614    0    astracrypt    13    

"Захват окон" - ActiveX-компонента для 1С

Разработка внешних компонент Работа с интерфейсом v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Захватывает открытые окна и помещает их в 1С, так же получает скриншот выбранного окна. Хотите играть в пасьянс в 1С, смотреть кино или просматривать секретные документы ;) и не светить эти окна на рабочем столе, тогда эта компонента для Вас :)

20.11.2008    23974    0    Душелов    64    

"WebCam" - ActiveX-компонента для 1С

WEB Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Компонента работает с устройствами, поддерживающими Twain32 драйвер (вебкамеры, фотоаппараты и др.)

28.09.2008    41663    0    Душелов    77    

COM-объект, реализующий метод Sleep

Разработка внешних компонент Универсальные функции v8 1cv8.cf Бесплатно (free)

COM-объект, реализующий метод Sleep. Может использоваться на сервере 1С, в win x86 и x64

13.08.2008    19581    0    ValeriVP    26    

1С: Предприятие 8, не работает прерывание по Ctrl+Break

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

В 1С: Предприятии 8 для прерывания выполнения операций используется комбинация клавиш <Ctrl>+<Break>. На практике, на некоторых компьютерах эта комбинация не работатет, что вызывает некоторые неудобства (нет возможности прервать длительную операцию).

31.07.2008    19472    0    vovk_v    3    

"Аналоговые часы" - ActiveX-компонента для 1С

Разработка внешних компонент Работа с интерфейсом v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

"Аналоговые часы" - ActiveX-компонента для 1С 8.х Небольшое "украшательство" для форм 1С.

20.05.2008    21457    0    Душелов    23    

НЕТЛЕНКА

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Многообъектная внешняя компонента дополнительного функционала.

06.03.2008    49969    0    Hadgehogs    152    

ВК дополнительного функционала

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Дополнительный функционал для 1С. Работа с окнами, событиями Windows, звуком, и.т.д.

26.12.2007    55391    0    Hadgehogs    30    

Перехватчик нажатий клавиш (ActiveX)

Разработка внешних компонент Сканер штрих-кода Розничная торговля Розничная торговля v8 1cv8.cf 1cv7.md Россия Бесплатно (free)

Примитивная компонента ActiveX, перехватывающая нажатия клавиш и принудительно возвращающая фокус компоненте при его потере. Искал в свое время для внедрения в интерфейс кассира. Может, кому еще пригодится.

14.12.2007    20525    0    MRAK    18    

Плагин TotalCommander-а просмотра файлов 1C v8

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

lister-plugin для TotalCommander-а для просмотра содержимого файлов 1С 8-й версии. v1.0.0.14

04.12.2007    32246    0    MMF    112    

Внешняя компонента Симплекс-метод

Математика и алгоритмы Разработка внешних компонент v8 1cv8.cf 1cv7.md Бесплатно (free)

Внешняя компонента 1С для решения задач оптимизации (задачи линейного программирования) с помощью симплекс-метода.

17.01.2007    9368    0    lavrik    12