Решаване на проблеми с регистриране на външни компоненти в терминала. Инсталиране на външни компоненти и разширения на платформата Свързване на външни компоненти 1s 8.3

Често програмистите имат проблеми със свързването на външни компоненти (например драйвери за търговско оборудване), когато потребителите работят с 1C, свързвайки се към сървъра чрез терминал.

Това се дължи на някои особености на глобалната контекстна функция ConnectExternalComponent().

В този случай потребителите виждат например снимката, представена в анонса на статията.

Докато при работа от локални компютри няма проблеми със свързването на външни компоненти.

С какво е свързано това? Това е така, защото когато потребителите работят през терминален сървър, те имат по-малко права, отколкото когато работят на локален компютър.

Можете лесно да проверите това, ако влезете в терминалния сървър с акаунт с администраторски права.

Причината за тази разлика е, че 1C не може да регистрира външен компонент в регистъра, когато потребителят работи в терминала с нормални права, т.к. обикновен потребител няма разрешение да пише в клона на системния регистър HKEY_CLASSES_ROOT.

Публикациите по темата за свързване на външни компоненти в терминала предлагат различни методи за решаване на този проблем.

Например тези:

1. Стартирайте 1C за първи път с административни права.

Тази опция не винаги работи. По-долу ще обясня защо.

2. Дайте разрешение на обикновените потребители на терминали да пишат в клона на системния регистър HKEY_CLASSES_ROOT.

Недостатъчно напредналите потребители не трябва да правят това, в противен случай може да има проблеми.

3. Използвайки различни джаджи, регистрирайте VK от името на потребител с пълни права.

И това не е добре.

И така, какъв е най-добрият начин да излезете от тази ситуация?

Предлагам моето решение на този проблем. По мое мнение е прост и красив, не е предлаган преди на Lancer.

Докато проучвах този проблем, си зададох въпроса: защо 1C дори се опитва да регистрира VK по нов път? В крайна сметка тя вече е регистрирана в системата.

Оказа се, че в типичните конфигурации на 1C (например „Управление на търговията“) се използва следният синтаксис на метода на глобалния контекст ConnectExternalComponent():

ConnectExternalComponent("Directory.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

Както можете да видите, драйверът VC е свързан от оформлението "ATOLBarcode Scanner Driver" на директорията "Connected Equipment".

Какво се случва тогава?

1C запазва компонента във временната папка на потребителя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

и се опитва да го регистрира в ключа на системния регистър HKEY_CLASSES_ROOT по този път.

На терминала обикновените потребители нямат права да променят този клон на регистъра, така че компонентът не се свързва с тях.

Сега нека поговорим как да се измъкнем от тази ситуация.

Метод на глобалния контекст ConnectExternalComponent() има няколко опции за синтаксис. Това ще използваме.

И така, стъпка по стъпка:

1. Регистрирайте външния компонент с помощта на помощната програма regsvr32.exe на терминалния сървър в папката C:\WINDOWS\SYSTEM32 за 32-битова ОС или в папката C:\WINDOWS\SYSWOW64 за 64-битова ОС.

2. Използвайте една от двете допълнителни опции за синтаксис за метода ConnectExternalComponent():

Опция 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = New("AddIn.ATOLScanner.Scaner45");

Вариант 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = Нов (ProgID);

Според мен вариант номер 2 е за предпочитане.

В същото време 1C не се опитва да пререгистрира VK, използвайки нов път в регистъра и по този начин всички проблеми са решени.

Е, това е всичко. Успех в работата!

/
Разработка на потребителски интерфейс

Инсталиране на външни компоненти и разширения на платформата

1.1. Инсталирането на външни компоненти и разширения на платформата трябва да бъде интерактивно. Потребителят трябва сам да вземе решение относно инсталирането. Диалоговият прозорец за инсталиране трябва да показва за какво е необходим компонентът (разширението) и какво няма да работи, ако не бъде инсталиран.

Например, неправилно е да се използват конструкции като

Ако не свържете външния компонент (...), тогава инсталирайте външния компонент (...)

Правилно е да зададете въпрос на потребителя изрично:

За да продължите да работите, трябва да инсталирате външен компонент. Външен компонент ще ви позволи да работите с отчитане. За да инсталирате компонента, щракнете върху „Инсталиране“. След като инсталацията приключи, щракнете върху Продължи.

  • Потребителят използва командата „Изпращане на отчет“.
  • Тази конфигурация изисква инсталиране на външен компонент.
  • Конфигурацията проверява дали компонентът е инсталиран.
  • Ако компонентът не е инсталиран, показва на потребителя информация, че за изпращане на отчет компонентът трябва да бъде инсталиран и бутон, който предизвиква инсталирането на компонента.
  • Потребителят натиска бутона, инсталацията се извършва.
  • След инсталирането, потребителят кликва върху бутона „Продължете да изпращате отчет“.
  • Програмата продължава да изпраща отчета.

Този сценарий ще гарантира, че компонентите (разширенията) се инсталират без проблеми във всички поддържани браузъри, включително браузъра FireFox.

2. Приложното решение трябва да предоставя инструменти за потребителя за инсталиране на външни компоненти и разширения по всяко време на работа. По този начин те могат да бъдат инсталирани не само по време на решаването на дадена задача, но и под формата на отделно действие (от някакъв административен режим).

Когато се използва в конфигурация Стандартни подсистемни библиотекиза да инсталирате разширение за работа с файлове, използвайте общата команда InstallExtensionWorking With Files, който се препоръчва да се постави във формуляра за лични настройки на потребителя (вижте общия формуляр _DemoMySettingsв демо конфигурация). В същата форма се препоръчва да поставите команди за инсталиране на външни компоненти, които потребителят може да се нуждае от работата си.


Това се дължи на някои особености на функцията за глобален контекст ConnectExternalComponent().

Често програмистите имат проблеми със свързването на външни компоненти (например драйвери за търговско оборудване), когато потребителите работят с 1C, свързвайки се към сървъра чрез терминал.

В този случай потребителите виждат например тази снимка:

Докато при работа от локални компютри няма проблеми със свързването на външни компоненти.

С какво е свързано това? Това е така, защото когато потребителите работят през терминален сървър, те имат по-малко права, отколкото когато работят на локален компютър.

Можете лесно да проверите това, ако влезете в терминалния сървър с акаунт с администраторски права.

Причината за тази разлика е, че 1C не може да регистрира външен компонент в регистъра, когато потребителят работи в терминала с нормални права, т.к. обикновен потребител няма разрешение да пише в клона на системния регистър HKEY_CLASSES_ROOT.

Публикациите по темата за свързване на външни компоненти в терминала предлагат различни методи за решаване на този проблем.

Например тези:

1. Стартирайте 1C за първи път с административни права.

Тази опция не винаги работи. По-долу ще обясня защо.

2. Дайте разрешение на обикновените потребители на терминали да пишат в клона на системния регистър HKEY_CLASSES_ROOT.

Недостатъчно напредналите потребители не трябва да правят това, в противен случай може да има проблеми.

3. Използвайки различни джаджи, регистрирайте VK от името на потребител с пълни права.

И това не е добре.

И така, какъв е най-добрият начин да излезете от тази ситуация?

Предлагам моето решение на този проблем. Според мен - просто и красиво.

Докато проучвах този проблем, си зададох въпроса: защо 1C дори се опитва да регистрира VK по нов път? В крайна сметка тя вече е регистрирана в системата.

Оказа се, че в типичните конфигурации на 1C (например „Управление на търговията“) се използва следният синтаксис за метода на глобалния контекст Connect External Component():

ConnectExternalComponent("Directory.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

Както можете да видите, драйверът VC е свързан от оформлението "ATOLBarcode Scanner Driver" на директорията "Connected Equipment".

Какво се случва тогава?

1C запазва компонента във временната папка на потребителя, например "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

и се опитва да го регистрира в клона на регистъра HKEY_CLASSES_ROOTточно по този път.

На терминала обикновените потребители нямат права да променят този клон на регистъра, така че компонентът не се свързва с тях.

Сега нека поговорим как да се измъкнем от тази ситуация.

Глобалният контекстен метод ConnectExternalComponent() има няколко опции за синтаксис. Това ще използваме.

И така, стъпка по стъпка:

1. Регистрирайте външния компонент с помощта на помощната програма regsvr32.exe на терминалния сървър в папката C:\WINDOWS\SYSTEM32 за 32-битова ОС или в папката C:\WINDOWS\SYSWOW64 за 64-битова ОС.

2. Използвайте една от двете допълнителни опции за синтаксис за метода ConnectExternalComponent():

Опция 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = New("AddIn.ATOLScanner.Scaner45");

Вариант 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = Нов (ProgID);

Според мен вариант номер 2 е за предпочитане.

В същото време 1C не се опитва да пререгистрира VK, използвайки нов път в регистъра и по този начин всички проблеми са решени.

Е, това е всичко. Успех в работата!

[трябва да се регистрирате, за да видите връзката]

Въпрос: Инсталиране на външен компонент


Моля, кажете ми как да инсталирам външен компонент. При изпълнение на следния код се извежда грешка. В оформлението намерете NameDecl.dll

Опит за SetExternalComponent("GeneralLayout.Layout"); Изключение EndTry;
Грешка: Неуспешно инсталиране на външен компонент!

Отговор: ()
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) връща FALSE.
New("AddIn.NameDecl.CNameDecl", Undefined) = (()): Тип недефиниран (AddIn.NameDecl.NameDecl)

Въпрос: Свързване на външен компонент в 1s 8.3.6 и Win8


Трябва да свържете външния компонент vk_rs232.dll към самонаписаната конфигурация. Изглежда, че е регистриран чрез regsvr32.exe. „Изглежда“, защото получих съобщение, че „компонентът е регистриран, но има нещо нередно със защитната стена“. Разчитайки на първата половина на съобщението, пиша кода в 1C
AfterConnecting = Ново описание на предупреждението ("AfterConnectingVK", ThisForm); StartInstallingExternalComponents(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponents(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scales");
и получавам грешката, че
„Инсталирането на външен компонент е неуспешно! Компонент за клиентското приложение, което използвате, може да липсва!“

И сега не разбирам:
1. Може би компонентът не е регистриран в системния регистър - как мога да го проверя там?
2. Може би неговата „версия“ не работи под Win8, въпреки че го имам 32-битов.
3. Може би самият 1C е твърде нов, т.е. Съответно не може да работи с тази dll?
4. Е, тривиално е - пиша нещо грешно.

Отговор:И всичко това ме доведе до следващия проблем. VneshComp е инсталиран, сега трябва да го свържете. И ето ги и двата варианта
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Libra")
ConnectExternalComponent("GeneralLayout.Layout","Libra")

раздайте НЕВЯР!!!

Въпрос: Външен компонент.dll


Добър ден на всички
Въпрос.
Dll компонент, който работи чудесно в 1C 7.7
1s 8.1 изобщо не иска да стартира...
Опитах да го поставя в C:\Program Files\1cv81\bin\cache1c.dll
Опитах да се регистрирам с помощта на regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll"
Регистрира се без проблеми.
Когато искам да го осъществя, получавам съобщение за грешка:

Грешка при зареждане на външен компонент! cache1c.dll
Процедура ButtonExecutePress(Button) Опит за зареждане на външен компонент( "C:\Програмни файлове\1cv81\bin\cache1c.dll"); Доклад за изключение ( „Грешка при зареждане на външен компонент!“+ "cache1c.dll" ); EndAttempt; Опит // Вземете компонентния обект. // m = Нов ("cache1c.GTMcmd"); m = Нов COMObject("cache1c.GTMcmd"); Доклад за изключение(); EndAttempt; Край на процедурата

Отговор:Банално е до невъзможност...
Трябва да правите пауза между разговорите (милисекунди)...
Процедура ButtonExecutePress(Button) Опит // Получаване на компонентен обект. m = Нов COMObject("cache1c.GTMcmd"); Доклад за изключение ( „Неуспешно създаване на обект на външен компонент“); EndAttempt; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330; m.Connect(); m.Pause(100); ...... и т.н
За 1c 7.7 - това не е необходимо, оказва се, че обработката е по-бърза.

Въпрос: Външен компонент Native Api в C++ за Linux (Ubuntu x64) на 1C 8.3


Пиша на VK, но не мога да се свържа с 1c на ubuntu. Дори изпълнимият файл от 1c не се свързва. Така че въпрос за това:

1) Опитвам се да свържа VK от примера VNCOMPS, даден в статията

(връзката може да бъде намерена в самия край: „Копиране“).
В проекта NativeApi има makefile. С негова помощ изграждам .so библиотека на Ununtu.
Но когато „Свързване на външен компонент“ 1c се срива.
По същия начин, ако изграждам с помощта на "build.sh" (в корена на проекта).

В самия makefile сменям флага от m32 на m64, т.к 1c и самата x64 система. (с параметър m32 така или иначе не се свързва)
Ето пример за извикване на VK от 1C 8.3:
Връзката е извършена = ConnectExternalComponent("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Има статия само по тази тема.
Но доколкото виждам, всички тези точки вече са взети предвид и коригирани в примера на VNCOMPS.

Но по същество това е въпрос на параметри на компилация. MB 32-битов външен компонент се свързва към 32-битов 1c нормално, но аз го внедрих на Ubuntu x64 1c enterprise83 8.3.5-1486 amd64. И искам да се свържа с нея във VK.

Някой има ли идеи как да се реши този проблем?)
Примерът за VNCOMPS трябва да работи, но параметрите на компилация трябва да бъдат коригирани или самата платформа, на която тествам, е неправилна.

Отговор:Чудя се, възможно ли е да напиша външен компонент в Java?

Въпрос: Работа с външен компонент с 1C сървър...


Добър ден,

Има външен компонент, написан на C++, чиято задача е да получи информация от външна база данни и да върне резултата от заявката под формата на таблица със стойности в 1C.
За генериране на таблица със стойности в текущия момент се използва интерфейсът IDispatch* pBackConnection, получен като параметър във функцията Init(). След това просто използвам 1C функции, за да създам таблица със стойности, да я попълня и да я върна към втория параметър в CallAsFunc(...).
Проблемите започнаха с прехода към 1C тънки клиенти. От страната на сървъра външният компонент не се стартира наистина. Можете да го стартирате от страна на клиента, но всичко изглежда като патерици и изпада от общата логика „клиент-сървър“ в 1C. Например, клиентът не разбира какво е таблица със стойности, проблеми с „глобални“ променливи, сесии и т.н.
NativeAPI е още по-ограничен в това отношение.
Танцуването с тамбурина доведе до факта, че успях да стартирам външен компонент под 1C сървъра, НО работата продължава, докато не се направи опит за извикване на Invoke на pBackConnection. 64-битовата версия на сървъра 8.2 се опитва да направи нещо, докато не изтече времето, 32-битовата версия (VK естествено също е 32-битова) просто пада веднага.
Предполагам, че сървърът 1C не поддържа този режим на работа.
Съответно възникват въпроси: това временно ли е или логиката на 1C се свежда до отмяна на тази схема на работа? Ако е невъзможно да се създадат вътрешни 1C структури (таблица със стойности) по този начин, има ли по принцип описание какво представлява таблица със стойности на ниво система, за да се опитаме да я създадем в C++, го попълнете и след това просто го плъзнете в 1C като параметър за връщане? Иска ми се поне да се ориентирам в коя посока да копая.

Благодаря ти.

Отговор:

Пишеш едно, а имаш предвид друго.
В средата на 1C декларирането на променливи, които ще бъдат видими в различни сесии, сега не е невъзможно, а преди не е имало такава възможност. Друга сесия е физически различен процес.
Сесията е сесия, свързваща се с база данни, т.е. потребителска сесия. Или влагате нещо свое в тази концепция?

В рамките на една сесия беше възможно и сега е възможно да се декларират променливи в модула на сесията, които ще живеят и ще бъдат видими в сесията от различни места... всъщност има 4 от тях.
- Сесиен модул;
- Модул за редовно приложение;
- Модул за управлявано приложение;
- Модул за външна връзка.

Е, разбира се, трябва да запомните контекста. Контекстът на сървъра не е директно достъпен от страна на клиента и обратно.

Всъщност архитектурата на 1C предвижда обменът на данни да става по следния начин:
- чрез параметри/връщане на процедури/функции;
- чрез т.нар. параметри на сесията (не могат да бъдат обекти, но реално видими в палитрата).

Таблица във формуляра... свързана ли е с някаква обектна таблица (обработка, например)? или не. Ако отговорът е да, значи е достъпен на сървъра (&OnServer) и редактирайте там....

И все пак, да, таблицата със стойности не е налична в UV от страна на клиента. Е, това реши 1C.

Хайде! Работи с Excel, работи с FSO и куп други неща, но не работи тук. Хванете грешката и анализирайте....

опит
...
вашите действия
...
Изключение
str = ErrorDescription();
EndAttempt;

При съвременните хардуерни възможности това изобщо не е аргумент.

Чисто твое лично мнение. Няма нищо общо с реалността. Не по никакъв начин. Повтарям още веднъж, 1C работи чудесно с COM. Както с in-proc, така и с out-proc.

Моля, предоставете кода, който използвате за изтегляне и се свържете с VK.

Между другото, VK... в твоя случай COM ли е или Native API?
Ако COM, тогава го регистрирате като... чрез regsvr32... как тогава "разрешавате" проблема с битовата дълбочина?

Въпрос: 1C8 и външен компонент с тип Native


Добър ден.
Имам конфигурация BP 3.0.50.12 и желание да внедря претегляне от компанията Vesy-Soft с помощта на UniServerAuto в нея.
Разработчиците компилираха компонента в Native за Windows 32 и 64 и го архивираха с maifest файла. Има и пример за 1C как може да се изчисли теглото. В него, използвайки оформление с двоични данни, този архив е посочен, както разбирам. В примера всичко е наред: компонентът е инсталиран, свързан, след това връзката е установена и теглото е прочетено.
Но веднага щом започнете да го прехвърляте в 1C, теглото не се чете. Всичко изглежда просто написано, но не разбирам къде е рейкът.
Който има малко време - помагайте, погледнете с едно око, може би решението е на повърхността, но аз отивам някъде на грешното място и правя грешното нещо. Никога преди не ми се е налагало да работя с Native технология...

А в прикачения файл е моя текст за обработка

Отговор:

Е, имам новина...
Просто започнах да виждам стъпка по стъпка в кой момент ще започне да се проваля. За да направя това, създадох празна база данни и я обработих с командата. По аналогия с примера на доставчика прехвърлих оформлението в нова конфигурация - работи за втори път. Тези. първия път не, но втория път да. Това подтикна идеята, че при нашата обработка все пак ще е необходимо да се раздели връзката на компонента и обекта според различни процедури.
След това го прехвърлих в моята база данни с връзката на оформлението - работи. Уф, това е добре.... Но бих го искал без да правя промени в конфигурацията, така че нека продължим

Опитвам се да добавя оформлението към обработката. Размерът му веднага се увеличава от 10kb на 3mb и се забелязва значително забавяне на работата - не е подходящ. Започвам да копая към свързване на компоненти чрез dll. Тези. по същество същото като откъдето започнах. Но има едно „НО“: когато търся името на dll в папката на потребителя, забелязах, че тази dll се намира там, където (доколкото разбирам) се добавят dll, регистрирани в 1C:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
Съответно, няма нужда да използвате пълния път до dll, можете просто да въведете името му:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Пробвам... псува при регистрация, но връща резултата от тегленето. Оказва се, че dll вече е регистриран и това означава, че просто трябва да го свържете. Махнах го и всичко работи.
Да го обобщим:
1. При обработката на претеглянето процедурата AtOpening включва свързване на външен компонент и свързване към обект.
2. Път до dll Не съм го написал, просто посочих името му.

Сега седя и си мисля, кога е инсталиран dll в 1C? По време на инсталирането на софтуера? Едва ли... В момента на стартиране на конфигурацията на разработчиците на тази dll, къде се инсталира при отваряне на формата? Не знам, но ми се струва близо... Вие как мислите?
И второ, на ново място, когато има нужда от инсталиране на същия терминал, какво трябва да се направи, за да работи всичко? Трябва ли да инсталирам напълно софтуера, да стартирам конфигурацията на доставчика, за да проверя операцията и след това (на теория) трябва ли моята обработка да работи? Нещо е някак сложно... Или трябва да направя Инсталиране на външен компонент веднъж в моята обработка след инсталиране на софтуера?

Бих искал да чуя вашите мисли по този въпрос...

Въпрос: Преместване на част от кода към външен компонент


Много статии за защита на обработката описват, че част от кода се прехвърля към външен компонент, но не е ясно как точно действа програмистът в такива случаи.
Всеки, който е правил това или се е сблъсквал с подобни решения, може да обясни самия принцип с прост пример. Изглежда, че всичко е ясно със свързването на външни компоненти.

// Пример за попълване на таблицата със стойности TK.Clear(); Заявка = Нова заявка; Query.Text = "ИЗБЕРЕТЕ | Номенклатура.Връзка КАК Номенклатура |ОТ | Directory.Nomenclature AS Nomenclature"; Резултат от заявка = Request.Execute(); Selection = Request Result.Select(); Докато Selection.Next() Cycle Page = TK.Add(); Fill inPropertyValues(Page, Selection); EndCycle;
Бихте ли използвали този пример, за да обясните каква част от кода обикновено се изважда? Би било логично да премахнем частта със заявката, но тогава как можем да получим достъп до базата данни от външния компонент, заобикаляйки платформата? Няма смисъл да вадя текста. Или извадете самото формиране на табличната част. Споделете опита си с всеки, който се е сблъсквал с това.

Отговор:И че думата „Несъвместим“ винаги означава думата „Лош“? Да, струва ми се, че ако нарекох стила си „1C: Най-лошото програмиране на тази скриптова машина, която съществува в природата (преведено на литературен език)!“ и тогава вероятно ще има хора, които искат да проверят този звяр. И изглежда като класика: „Не съм чел Пастернак, но напълно не съм съгласен с него!“ :)

Въпрос: Външен компонент в Delphi Не мога да свържа r 1C


Компилира примерен проект на външен компонент

Получих DLL.
Регистрира го в системата (Regsvr32 testvk.dll)
Сега трябва да го използвате в 1C. За да направя това, написах външна обработка и в нея:

&На клиент
Процедура Команда1(Команда)
път = "C:\1\VK Template\TestVK\DLL\testvk.dll";
a=ConnectExternalComponent(PATH);
LoadExternalComponent(Path);
OB = Нов ("Addln.TestVK"); Въпрос: Външни компоненти за 1s 7.7


Здравейте. Пиша компонент за 1c7.7 в c#, ​​свързвам го с 1c, всичко е наред, но когато искам да извикам методи или свойства за 1c, се казва „полето на агрегатния обект не е намерено“, използвайки дебъгера Разбрах, че методите на интерфейса ILanguageExtender не се извикват, след внедряването на интерфейса IInitDone се извиква отново компоненти на класове конструктори, според теорията за писане на външни компоненти 1C, VK трябва да внедри поне два интерфейса - IInitDone и ILanguageExtender, I реализирайте ги, но не мога да разбера какъв е проблема. Може би някой има идеи???

Отговор:Темата е затворена, проблемът е разрешен.

Въпрос: v7: Външен компонент за 1C7 в C#


Къде мога да видя прост пример за създаване на компоненти за 1C7 в C#, започвайки с Visual studio 2010??

Отговор:

Виж
Бързо създаване на външни компоненти в C#. Примери за използване на Global Context, IAsyncEvent, IExtWndsSupport, WinForms и WPF



Свързани публикации