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

08.08.11

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

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

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

Наименование Файл Версия Размер
1CNativeExec.zip
.zip 101,49Kb
1452
.zip 101,49Kb 1452 Скачать бесплатно

На основе разработки участника Крипич //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

См. также

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

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52105    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

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

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26244    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

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

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44977    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

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

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

1500 руб.

17.09.2018    35081    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

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

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    54000    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

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

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30840    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

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

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4039    starik-2005    28    

52

Внешние компоненты 1С и язык C++

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

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

26.01.2024    4781    starik-2005    32    

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

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

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

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

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

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

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

Что делать - пока ума не приложу, кто сталкивался?
42. uvsd2014 4 18.02.15 10:32 Сейчас в теме
спасибо, хорошая программа.
43. capitan 2466 27.03.15 16:39 Сейчас в теме
Спасибо, то что нужно для быстрого старта.
45. frkbvfnjh 785 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 785 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 204 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 69 06.02.17 14:45 Сейчас в теме
Добрый день.
Прошу помощи ещё раз.
Компоненту наваял - всё работает.
Но когда дошло дело до внедрения на СЕРВЕРЕ - при подключении компоненты возвращает ложь.
На х32 сервере - всё ОК.
Как собирать компоненту под х64 - не подскажете ?
54. DJ_Codebase 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 69 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.
Показать
Оставьте свое сообщение