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

Публикация № 88060 Дата создания: 01.08.11 17:46

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

Внешняя компонента на основе разработки Крипича 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
1289
.zip 101,49Kb 1289 Скачать бесплатно

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CaSH_2004 365 02.08.11 00:27 Сейчас в теме
А есть ли к ней описание методов?
2. CaSH_2004 365 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 480 02.08.11 07:10 Сейчас в теме
(2) вы перечисляете ВК на старой методике. а это новая - NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь
5. cool.vlad4 45 02.08.11 10:13 Сейчас в теме
(2) послушайте 3, это native ВК - так, что не путайте, ...были у меня кое-какие дельфийские примочки,нативная работа с excel и т.д. надо будет попробовать эти ВК...
6. CaSH_2004 365 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 3897 15.06.12 11:16 Сейчас в теме
(2) CaSH_2004,
Sleep - можно делать и через вызов VBScipt

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

А я тут что по вашему делаю? Или мне нужно каждое незнакомое слово гуглить? в описании сложно сказать об этом или все должны догадываться? Может эта разработка только для разработчиков ВК?
11. Diversus 2161 02.08.11 11:16 Сейчас в теме
12. CaSH_2004 365 02.08.11 11:23 Сейчас в теме
Diversus, Это уже лучше, а чем же отличается это от того что в ShowTray, Tray1C, MiracleV8? они написаны без этого?
13. cool.vlad4 45 02.08.11 11:25 Сейчас в теме
:D :cry: :o (12) берете ИТС и находите ТСВК - технология создания ВК
14. Diversus 2161 02.08.11 11:38 Сейчас в теме
(12) Это можете, как справедливо заметил cool.vlad4, прочитать на диске ИТС либо в интернете.
15. CaSH_2004 365 02.08.11 12:04 Сейчас в теме
Мда, получается разговор барана с воротами - непонятно кто прав, но не один не уступит. Я вам говорю про элементарные вроде вещи, что если выкладывается разработка нужно указать в чем ее преимущества/отличия перед уже имеющимися (зарекомендованными). А вы мне в ответ: разбирайся сам. Зачем тогда это все человеку который не увидел преимущества? Ведь проще использовать уже имеющееся чем перенастраивать. Как говорилось в фильме "Пароль Рыба-меч" - "Тема-то не раскрыта".
16. K_A_O 529 02.08.11 13:09 Сейчас в теме
(15) Но ведь слово NativeAPI - это и есть описание преимуществ/отличий перед уже имеющимися. Если вы не хотите посмотреть, что это такое, как угадать какие слова в описании вас устроят.
17. CaSH_2004 365 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 365 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 365 02.08.11 15:42 Сейчас в теме
(20)Не надо так наезжать. Где это вам удалось увидеть у меня слово "документация"? Я сказал вцелом документирование, а не применительно к данному случаю. В данном случае я думаю всем пользователям разработки будет полезно знать в чем ее преимущество перед уже имеющимися. Если это просто пример разработки то где это написано? Или это рабочий вариант? Я уже начинаюсь сомневаться что оно вообще работает раз тут столько говорят про разработку, а не про использование. Про личные догадки не надо говорить, т.к. выводы каждого инивидума его личные проблемы. Выходит разработка относится к категории "разберись сам и пойми нужно ли оно тебе". Очень занятный подход.
32. slaviksoft 74 23.01.12 17:11 Сейчас в теме
(19) CaSH_2004,

ну про барана тут все понятно :-)
35. tango 493 23.01.12 21:08 Сейчас в теме
(19) минус за "о непрофессионализме и неуважении" - по отношению к автору публикации это ваще не гуд
22. CaSH_2004 365 03.08.11 11:57 Сейчас в теме
Спасибо romix за реакцию на просьбы пользователей!
23. nicxxx 239 09.08.11 05:47 Сейчас в теме
24. I_G_O_R 65 11.08.11 23:13 Сейчас в теме
25. Собеседник 179 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 74 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 74 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 22 25.09.12 13:44 Сейчас в теме
Проблема с x64 явно в стандартах вызова (stdcall), если убрать stdcall из процедуры _Init, то падает и на win32.

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

Что делать - пока ума не приложу, кто сталкивался?
42. uvsd2014 4 18.02.15 10:32 Сейчас в теме
спасибо, хорошая программа.
43. capitan 2038 27.03.15 16:39 Сейчас в теме
Спасибо, то что нужно для быстрого старта.
45. frkbvfnjh 609 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 609 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 74 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.
Показать
Оставьте свое сообщение

См. также

GraphViz1С: внешняя компонента 1С Native API для построения графов Промо

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

Внешняя компонента Native API для Windows с исходными кодами на C++ для построения графов посредством библиотеки GraphViz. Граф строится на основании текстового описания в формате dot. Реализован экспорт в большинство графических форматов. Поддерживаются версии платформы от 8.3.14 и выше до 8.3.18.

22.12.2020    4569    119    kandr    8    

Внешняя компонента для копирования изображения в буфер обмена

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

Компонента позволяет получить в буфер обмена табличный документ.

1 стартмани

16.03.2021    955    0    axae    0    

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

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

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

29.07.2019    24063    1101    Begemoth80    173    

Native внешняя компонента для передачи/получения по UDP (теперь с Base64)

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

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

1 стартмани

29.07.2019    6091    13    axae    2    

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

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

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

23.04.2012    34794    659    Abadonna    81    

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

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

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

05.01.2019    7481    37    milut    4    

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

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

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

1 стартмани

15.03.2016    35749    142    frkbvfnjh    109    

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

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

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

20.08.2014    17853    44    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    18843    90    Abadonna    9    

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

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

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

23.02.2014    21154    162    Abadonna    10    

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

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

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

09.10.2013    22265    259    Abadonna    38    

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

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

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

23.09.2013    27968    413    Abadonna    121    

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

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

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

20.03.2013    27554    491    Abadonna    105    

Шаблон для Web ВК 1С:Предприятие 8.2 Com Управляемое приложение (Веб) на Delphi XE2 и пример инсталлятора для IE

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

Работающие шаблоны для создания внешних компонент COM на Delphi XE2, а также NativeAPI (на основе разработки romix http://infostart.ru/public/88060/ и Крипича http://infostart.ru/public/81644/ ) с примерами рабочих инсталляторов (для MSVS9 2008) для Internet Explorer.

2 стартмани

09.08.2012    16031    63    kest_    2    

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

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

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

13.07.2011    11948    418    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    23812    265    GreenLab    23    

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

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

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

04.03.2010    25111    418    Душелов    15    

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

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

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

29.12.2009    12119    271    alves    4    

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

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

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

01.12.2009    19153    206    Abadonna    39    

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

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

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

19.11.2009    43391    603    Душелов    59    

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

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

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

18.11.2009    13875    78    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    31389    557    Душелов    37    

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

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

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

15.07.2009    37673    908    Душелов    57    

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

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

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

30.04.2009    18118    314    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    34578    142    Душелов    44    

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

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

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

17.03.2009    22742    146    Душелов    32    

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

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

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

15.03.2009    19588    324    Robert    94    

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

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

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

06.03.2009    41112    1095    Душелов    82    

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

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

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

05.03.2009    26584    518    Душелов    53    

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

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

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

09.02.2009    31196    1092    Душелов    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    50078    1212    Душелов    92    

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

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

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

25.11.2008    16137    143    astracrypt    13    

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

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

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

20.11.2008    25476    235    Душелов    64    

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

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

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

28.09.2008    44660    1114    Душелов    77    

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

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

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

13.08.2008    21441    250    ValeriVP    26    

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

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

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

31.07.2008    21394    314    vovk_v    3    

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

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

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

20.05.2008    23179    208    Душелов    23    

НЕТЛЕНКА

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

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

06.03.2008    52845    4793    Hadgehogs    154    

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

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

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

26.12.2007    59097    1542    Hadgehogs    30    

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

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

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

14.12.2007    22255    924    MRAK    18