На основе разработки участника Крипич //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
А есть ли к ней описание методов?
Скачал, описание есть. За исходники спасибо. Функционал явно бедный, Sleep — можно делать и через вызов VBScipt, балоны вызывать удобнее
http://infostart.ru/public/20531/
http://infostart.ru/public/18821/
http://dev.1tsm.ru/project/110 — на мой взгляд самая продвинутая
ShowTray
Tray1C
MiracleV8
а ПереключитьРаскладкуКлавиатуры и ЗапуститьПриложение для меня всегда было загадкой в 1С
Так что выглядит как перепевки уже страых решений, возможно я и не прав, если автор готов объснить для чего все это?
(2) вы перечисляете ВК на старой методике. а это новая — NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь
Пригодится как пример и шаблон для разработки своих ВК. Однозначно плюсую!
(2) послушайте 3, это native ВК — так, что не путайте, …были у меня кое-какие дельфийские примочки,нативная работа с excel и т.д. надо будет попробовать эти ВК…
(6) Не придирайтесь, а прочитайте название «ВК для 1С:Предприятие 8.2 NativeAPI » Куда яснее уж…
cool.vlad4,
Да не было и в мыслях, я не разработчик ВК (когда то пытался, но не впечатлило), хотя плотно ими пользуюсь, тем не менее мне ничего не говорит надпись «ВК для 1С:Предприятие 8.2 NativeAPI», кроме того что она:
1. ВК
2. для 1С 8.2
3. называется NativeAPI
А т.к. пользуюсь другими то вот и спрашиваю автора, а в чем принципиальная разница? Нигде не указано что это «проба пера» — тогда было бы ясно, так что пока очередной «велосипед»
Думаю другим также будет непонятно, так что думаю вопрос закономерен и не бесполезен
(8) NativeAPI это технология внешней компоненты.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.
А я тут что по вашему делаю? Или мне нужно каждое незнакомое слово гуглить? в описании сложно сказать об этом или все должны догадываться? Может эта разработка только для разработчиков ВК?
(10) Ну в таком случае Вам сюда:http://v8.1c.ru/overview/Term_000000545.htm
Diversus, Это уже лучше, а чем же отличается это от того что в ShowTray, Tray1C, MiracleV8? они написаны без этого?
😀 😥 😮 (12) берете ИТС и находите ТСВК — технология создания ВК
(12) Это можете, как справедливо заметил cool.vlad4, прочитать на диске ИТС либо в интернете.
Мда, получается разговор барана с воротами — непонятно кто прав, но не один не уступит. Я вам говорю про элементарные вроде вещи, что если выкладывается разработка нужно указать в чем ее преимущества/отличия перед уже имеющимися (зарекомендованными). А вы мне в ответ: разбирайся сам. Зачем тогда это все человеку который не увидел преимущества? Ведь проще использовать уже имеющееся чем перенастраивать. Как говорилось в фильме «Пароль Рыба-меч» — «Тема-то не раскрыта».
(15) Но ведь слово NativeAPI — это и есть описание преимуществ/отличий перед уже имеющимися. Если вы не хотите посмотреть, что это такое, как угадать какие слова в описании вас устроят.
(16)Я уже давно глянул и прочитал, вот только никак не пойму каким образом незнакомое слово в названии разработки может дать понимание того что это какая то технология которую нужно найти в поисковике и прочитать про нее. Если бы так рекламировали продукты 1С, Microsoft и другие то их никто бы не знал, т.к. название ни о чем не говорит, а говорит об этом описание которого у данной обработки не наблюдается. Вот что я хотел бы сказать, но что то никто не поймет меня, может потому что все уже знают что такое NativeAPI, а я до этого не знал. Но это никак не дает понимание разработки для других «непосвященных» в создание ВК. Вообще странно отсылать к разработке ВК для того чтобы понять ее преимущества, исходя из этой логики чтобы понять что такое 1С мне нужно сначала пройти курсы бухгалтера, поработать без ПК 1-2 годика, потом пройти курсы программирования на C++, поработать программистом и только потом я вдруг пойму что такое 1С и для чего она нужна и как ее сделали. Но вроде для этого есть понятие гиперссылки которые ведут на другие ресуры с пояснениями — вот чего я хотел в описании. Вроде тривиально, ан нет…
(17) Платите автору ВК деньги как платят деньги производителям проприетарного софта (1С, микрософт) и будет вам описание и реклама…а так нахаляву, вам на блюдечке преподносят пример-шаблон ВК, будьте добры хоть посидеть, почитать, разобратся…задача программиста заключается в постановке цели и ее исследовании, и ее достижение, а не в слепом следовании пунктам чьих-то руководств…
(19) Вы серьезно? Не потроллить? КАКАЯ нафиг документация, два с половиной метода, в описании все есть, сделано явно как пример для обучения, тем, кто будет разрабатывать ВК, но вы не собираетесь ни вникать, ни разрабатывать, так, что проходите мимо.
(20)Не надо так наезжать. Где это вам удалось увидеть у меня слово «документация»? Я сказал вцелом документирование, а не применительно к данному случаю. В данном случае я думаю всем пользователям разработки будет полезно знать в чем ее преимущество перед уже имеющимися. Если это просто пример разработки то где это написано? Или это рабочий вариант? Я уже начинаюсь сомневаться что оно вообще работает раз тут столько говорят про разработку, а не про использование. Про личные догадки не надо говорить, т.к. выводы каждого инивидума его личные проблемы. Выходит разработка относится к категории «разберись сам и пойми нужно ли оно тебе». Очень занятный подход.
Спасибо romix за реакцию на просьбы пользователей!
проверка
—
много флуда.
вещь нужная — спс
а перехват нажатий клавиш (чтоб потом вызвать событие) буит?
платформа 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»); выдает ошибку «тип не определен»
Не подскажите в чем ошибка
платформа 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»); выдает ошибку «тип не определен»
Не подскажите в чем ошибка
Показать
вопрос снят, разобрался.
а как можно изменить иконку появления в трее?
Подскажите наилучший вариант кода , чтоб отловить событие нажатия клавиш «+++» на Delfi для этой компонеты
Если, конечно, это возможно
Здравствуйте, сложно данный пример переделать для работы с COM портами? если все функции и процедуры готовые есть, правда из СОМ объекта. и где нужно вставлять данные функции и процедуры?
(19) CaSH_2004,
ну про барана тут все понятно 🙂
спасибо за пример.
есть вопрос.
когда мы вызываем насильственно ошибку Raise Exception.Create(‘Ошибка записи в порт’);
она обрабатывается и вызывается процедура: addError(1006, ‘Внешняя компонента’, pWideChar(err), E_FAIL);
она, как я понял напрямую выводит сообщение в окно сообщений 1С.
можно ли сделать так что-бы описание ошибки попадало в 1с-методы «ИнформацияОбОшибке()» или «ОписаниеОшибки()»?
(19) минус за «о непрофессионализме и неуважении» — по отношению к автору публикации это ваще не гуд
Почитал достаточно всего, инет порыл.
Вопрос остался без ответа(ибо уровень ввода в тему все равно на уровне 0 почти).
Есть ли возможность манипулировать данными базы 1С из внешней компоненты(не создавая OLE или Com соединение специально в компоненте).
К примеру в документе есть реквизит Сумма, нажали команду Изменить компоненты Native API и у нас выполнилась процедура, кот. без возвращаемых значений изменила значение этого реквизита ?
Или к примеру выполнить функцию общего модуля 1С
/***********************
Прошел еще раз документацию/
Правильно я понял, что это возможно только в COM-компонентах ?
спасибо автору за пример,
но такой вопрос, как запустить такую компоненту на 64х сервере?
пробовал перекомпилировать dll, приложение падает при выполнении ПодключитьВнешнююКомпоненту.
(2) CaSH_2004,
Да уж фиг нормальный слип через него сделаешь. Сам скрипт будет просто запускаться минимум миллисекунд 50-200
Пробовал я ради интереса.
Присоединяюсь к antoni
Компилирую для x64 и сервер падает при вызове ПодключитьВнешнююКомпоненту
Может быть нужно что-нибудь в manifest.xml подправить
Нужно написать ВК для 64 сервера.
Кто сталкивался — отзовитесь…
Проблема с x64 явно в стандартах вызова (stdcall), если убрать stdcall из процедуры _Init, то падает и на win32.
Сделал полный лог каждой строчки, так вот на win64 тормозится перед _Init.
Что делать — пока ума не приложу, кто сталкивался?
(38) Если пойти дальше, то Пауза на сервере через Джаву вообще не отработает по политике безопасности 🙂
Что не говори, но если есть возможность написать паузу через ВК, что в тонком клиенте это лучше не упустить 🙂
спасибо, хорошая программа.
Спасибо, то что нужно для быстрого старта.
8.3.5.1570 при запуске тестовой базы вываливается с ошибкой {МодульУправляемогоПриложения(9)}: Тип не определен (AddIn.DemoLib.ExecExtention)
Спасибо автору! Исходник очень помог, но как мне задать для некоторых функций значения по умолчанию? В исходнике Крипича есть такой пример, но при вызове функций без параметров 1С завершает работу с ошибкой… Сделал в Вашем исходнике как в примере у Кирпича:
Тоже вылетает, что ожидаемо… Нумерацию с 1-це тоже делал — не помогает. Было бы хорошо если бы в пример включили пример вызова с параметрами по умолчанию. Кстати в 1С вызываю так:
Что бы было понятней о каком участке кода идет речь:
Показать
Ребята, а что же человеку (CaSH_2004) никто так и не объяснил, в чём отличие NatveAPI компонент от COM? Там же всё просто — в NativeAPI кроссплатформенность достигается зп счет отказа от COM технологий.
COM, он же ActiveX, он же OLE — это одна и та же технология, построенная на использовании так называемых интерфейсов. Ну а поскольку эта технология (COM) — разработка компании Microsoft, то и работать она будет только под управлением OS Windows!.
NaitiveAPI не позволяет использовать интерфейсы, поэтому и кроссплатформенная, и будет работать под всеми OS.
Ну и минусы: все объекты ссылочного типа в 1С — это COM объекты. Поэтому из компонент, созданных по технологии NativeAPI в них попросту нельзя будет использовать.
Какую технологию написания внешней компоненты использовать зависит только от того, будет ли компонента работать с объектами 1С ссылочного типа или нет. Если да — несомненно COM, иначе — NativeAPI (поскольку кроссплатформенная).
Кстати, прикольно, 1С в примерах ВК по технологии NativeAPI тоже использует терминологию интерфесов. Только их там нет. Есть указатели на классы и куча подключаемых библиотек, которые, если писать по технологии СОМ, уже входят в поставку операционной системы (если, конечно писать на «чистом» С или С++ без использования фрэймворков).
Поздно посмотрел на дату публикации ))) Полчаса коту под хвост )))
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:
Показать
Переменная 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
Файлы проекта во вложении.
Спасибо.
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:
Показать
Переменная 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
Файлы проекта во вложении.
Спасибо.
Добрый день.
Прошу помощи ещё раз.
Компоненту наваял — всё работает.
Но когда дошло дело до внедрения на СЕРВЕРЕ — при подключении компоненты возвращает ложь.
На х32 сервере — всё ОК.
Как собирать компоненту под х64 — не подскажете ?
в этом модуле проблема с типами под х64 (думаю связано с разрядностью)
есть на инфостарте пример с модулем под х64
(51) да — там есть немного — спасибо за наводку.
Почитал — надо ставить новую среду (XE).
Поставил XE8, но появилась новая проблема:
мною используемый компонент dsPack использует в коде ASM, а гибридное содержимое в 64 компиляторе запрещено.
Переписывать dsPack я не решился.
А вот логику работы на клиент перенести — оказалось проще.
(39)
Еще актуально?
(50)
В ТВК вроде так написано:
Интерфейс 1С:Предприятия
При инициализации объекта компоненты, ему передается указатель на интерфейс 1С:Предприятия, с помощью которого можно вызывать ниже перечисленные методы. Следует помнить, что эти методы не будут работать на сервере приложений.
Добрый день.
Может подскажете, поможет ли мне эта компонента, или совет дадите :
мне необходимо из одной программы :
— желательно кодом на C# передать в 1С параметр (строку)
— в 1С отловить это событие
— обработать
— каким то макаром вернуть результат обработки в вызвавшую событие программу(пока не знаю как это реализовать)
И поясните, если не сложно :
1) 1С без внешней компоненты не может перехватить внешнее событие?
2) Какие есть варианты возврата результата обработки из 1С ? Не хочется проверять периодически на наличие файла с результатом…