Terminalda xarici komponentlərin qeydiyyatı ilə bağlı problemlərin həlli. Xarici komponentlərin və platforma uzantılarının quraşdırılması Xarici komponentlərin birləşdirilməsi 1s 8.3

Çox vaxt proqramçılar, istifadəçilər 1C ilə işləyərkən, terminal vasitəsilə serverə qoşulduqda, xarici komponentləri (məsələn, kommersiya avadanlıqları üçün sürücülər) birləşdirməkdə problem yaşayırlar.

Bu, ConnectExternalComponent() qlobal kontekst funksiyasının bəzi xüsusiyyətləri ilə bağlıdır.

Bu halda istifadəçilər, məsələn, məqalənin elanında təqdim olunan şəkli görürlər.

Yerli kompüterlərdən işləyərkən xarici komponentlərin qoşulmasında heç bir problem yoxdur.

Bu nə ilə bağlıdır? Bunun səbəbi, istifadəçilərin terminal serveri vasitəsilə işlədiyi zaman yerli kompüterdə işlədiyindən daha az hüquqa malik olmasıdır.

Terminal serverinə inzibati hüquqlara malik hesabla daxil olsanız, bunu asanlıqla yoxlaya bilərsiniz.

Bu fərqin səbəbi istifadəçi normal hüquqlar altında terminalda işləyərkən 1C reyestrdə xarici komponenti qeyd edə bilməməsidir, çünki adi istifadəçinin sistemin reyestr şöbəsinə yazmaq icazəsi yoxdur HKEY_CLASSES_ROOT.

Terminalda xarici komponentlərin birləşdirilməsi mövzusunda nəşrlər bu problemin həlli üçün müxtəlif üsullar təklif edir.

Məsələn, bunlar:

1. İnzibati hüquqlar altında ilk dəfə 1C-ni işə salın.

Bu seçim həmişə işləmir. Səbəbini aşağıda izah edəcəyəm.

2. Adi terminal istifadəçilərinə sistemin reyestr şöbəsinə yazmaq icazəsi verin HKEY_CLASSES_ROOT.

Kifayət qədər inkişaf etmiş istifadəçilər bunu etməməlidir, əks halda problemlər yarana bilər.

3. Müxtəlif gadgetlardan istifadə edərək, tam hüquqlu bir istifadəçi adından VK-nı qeydiyyatdan keçirin.

Bu da yaxşı deyil.

Bəs bu vəziyyətdən çıxmağın ən yaxşı yolu nədir?

Bu problemin həllini təklif edirəm. Məncə, o, sadə və gözəldir, əvvəllər Lancer-də təklif olunmayıb.

Bu problemi araşdırarkən özümə sual verdim: niyə 1C hətta yeni bir yoldan istifadə edərək VK-nı qeydiyyatdan keçirməyə çalışır? Axı o, artıq sistemdə qeydiyyatdan keçib.

Məsələ burasında oldu ki, tipik 1C konfiqurasiyalarında (məsələn, “Ticarətin idarə edilməsi”) qlobal kontekst metodunun aşağıdakı sintaksisi istifadə olunur. ConnectExternalComponent():

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

Gördüyünüz kimi, sürücü VC "Connected Equipment" kataloqunun "ATOLBarcode Scanner Driver" layoutundan qoşulmuşdur.

Sonra nə olur?

1C komponenti istifadəçinin müvəqqəti qovluğunda saxlayır, məsələn "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

və onu bu yol boyunca HKEY_CLASSES_ROOT reyestr açarında qeyd etməyə çalışır.

Terminalda adi istifadəçilərin bu qeyd şöbəsini dəyişdirmək hüququ yoxdur, buna görə komponent onlara qoşulmur.

İndi bu vəziyyətdən necə çıxacağından danışaq.

Qlobal kontekst metodu ConnectExternalComponent() bir neçə sintaksis seçiminə malikdir. İstifadə edəcəyimiz budur.

Beləliklə, addım-addım:

1. 32-bit ƏS üçün C:\WINDOWS\SYSTEM32 qovluğunda və ya 64-bit ƏS üçün C:\WINDOWS\SYSWOW64 qovluğunda terminal serverində regsvr32.exe yardım proqramından istifadə edərək xarici komponenti qeydiyyatdan keçirin.

2. ConnectExternalComponent() metodu üçün iki əlavə sintaksis variantından birini istifadə edin:

Seçim 1:

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

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

Seçim 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = Yeni (ProgID);

Məncə, 2 nömrəli seçimə üstünlük verilir.

Eyni zamanda, 1C reyestrdə yeni bir yoldan istifadə edərək VK-nı yenidən qeydiyyata almağa çalışmır və beləliklə, bütün problemlər həll olunur.

Yaxşı, hamısı budur. İşdə uğurlar!

/
İstifadəçi interfeysinin inkişafı

Xarici komponentlərin və platforma uzantılarının quraşdırılması

1.1. Xarici komponentlərin və platforma uzantılarının quraşdırılması interaktiv olmalıdır. İstifadəçi quraşdırma ilə bağlı öz qərarını verməlidir. Quraşdırma dialoqu komponentin (uzantının) nə üçün lazım olduğunu və quraşdırılmadıqda nəyin işləməyəcəyini göstərməlidir.

Məsələn, kimi konstruksiyalardan istifadə etmək düzgün deyil

Xarici Komponenti (...) Qoşmursunuzsa, Xarici Komponenti Quraşdırın(...)

İstifadəçiyə açıq şəkildə sual vermək düzgündür:

İşə davam etmək üçün xarici komponent quraşdırmalısınız. Xarici komponent hesabatla işləməyə imkan verəcəkdir. Komponenti quraşdırmaq üçün "Quraşdır" düyməsini basın. Quraşdırma tamamlandıqdan sonra Davam et klikləyin.

  • İstifadəçi “Hesabat göndər” əmrindən istifadə etdi
  • Bu konfiqurasiya bəzi xarici komponentlərin quraşdırılmasını tələb edir.
  • Konfiqurasiya komponentin quraşdırılıb-quraşdırılmadığını yoxlayır.
  • Komponent quraşdırılmayıbsa, istifadəçiyə hesabat göndərmək üçün komponentin quraşdırılmalı olduğu məlumatı və komponentin quraşdırılmasına səbəb olan düymə göstərilir.
  • İstifadəçi düyməni sıxır, quraşdırma həyata keçirilir.
  • Quraşdırıldıqdan sonra istifadəçi “Hesabat göndərməyə davam et” düyməsini klikləyir
  • Proqram hesabat göndərməyə davam edir.

Bu ssenari komponentlərin (uzantıların) brauzer də daxil olmaqla, dəstəklənən bütün brauzerlərdə problemsiz quraşdırılmasını təmin edəcək. FireFox.

2. Tətbiq həlli istifadəçiyə əməliyyat zamanı istənilən vaxt xarici komponentləri və genişləndirmələri quraşdırmaq üçün alətlər təqdim etməlidir. Beləliklə, onlar yalnız bəzi tapşırıqların həlli zamanı deyil, həm də ayrıca bir hərəkət şəklində (bəzi inzibati rejimdən) quraşdırıla bilər.

Konfiqurasiyada istifadə edildikdə Standart alt sistem kitabxanaları fayllarla işləmək üçün bir uzantı quraşdırmaq üçün ümumi əmrdən istifadə edin InstallExtension Fayllarla İş, istifadəçinin şəxsi parametrlər formasında yerləşdirilməsi tövsiyə olunur (ümumi forma bax _DemoMySettings demo konfiqurasiyada). Eyni formada istifadəçiyə iş zamanı lazım ola biləcək xarici komponentləri quraşdırmaq üçün əmrlər yerləşdirmək tövsiyə olunur.


Bu, ConnectExternalComponent() qlobal kontekst funksiyasının bəzi xüsusiyyətləri ilə bağlıdır.

Çox vaxt proqramçılar, istifadəçilər 1C ilə işləyərkən, terminal vasitəsilə serverə qoşulduqda, xarici komponentləri (məsələn, kommersiya avadanlıqları üçün sürücülər) birləşdirməkdə problem yaşayırlar.

Bu vəziyyətdə istifadəçilər, məsələn, bu şəkli görürlər:

Yerli kompüterlərdən işləyərkən xarici komponentlərin qoşulmasında heç bir problem yoxdur.

Bu nə ilə bağlıdır? Bunun səbəbi, istifadəçilərin terminal serveri vasitəsilə işlədiyi zaman yerli kompüterdə işlədiyindən daha az hüquqa malik olmasıdır.

Terminal serverinə inzibati hüquqlara malik hesabla daxil olsanız, bunu asanlıqla yoxlaya bilərsiniz.

Bu fərqin səbəbi istifadəçi normal hüquqlar altında terminalda işləyərkən 1C reyestrdə xarici komponenti qeyd edə bilməməsidir, çünki adi istifadəçinin sistemin reyestr şöbəsinə yazmaq icazəsi yoxdur HKEY_CLASSES_ROOT.

Terminalda xarici komponentlərin birləşdirilməsi mövzusunda nəşrlər bu problemin həlli üçün müxtəlif üsullar təklif edir.

Məsələn, bunlar:

1. İnzibati hüquqlar altında ilk dəfə 1C-ni işə salın.

Bu seçim həmişə işləmir. Səbəbini aşağıda izah edəcəyəm.

2. Adi terminal istifadəçilərinə sistemin reyestr şöbəsinə yazmaq icazəsi verin HKEY_CLASSES_ROOT.

Kifayət qədər inkişaf etmiş istifadəçilər bunu etməməlidir, əks halda problemlər yarana bilər.

3. Müxtəlif gadgetlardan istifadə edərək, tam hüquqlu bir istifadəçi adından VK-nı qeydiyyatdan keçirin.

Bu da yaxşı deyil.

Bəs bu vəziyyətdən çıxmağın ən yaxşı yolu nədir?

Bu problemin həllini təklif edirəm. Mənim fikrimcə - sadə və gözəl.

Bu problemi araşdırarkən özümə sual verdim: niyə 1C hətta yeni bir yoldan istifadə edərək VK-nı qeydiyyatdan keçirməyə çalışır? Axı o, artıq sistemdə qeydiyyatdan keçib.

Məsələ burasında oldu ki, tipik 1C konfiqurasiyalarında (məsələn, “Ticarətin İdarə Edilməsi”) Xarici Komponentə qoşulun() qlobal kontekst metodu üçün aşağıdakı sintaksis istifadə olunur:

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

Gördüyünüz kimi, sürücü VC "Connected Equipment" kataloqunun "ATOLBarcode Scanner Driver" layoutundan qoşulmuşdur.

Sonra nə olur?

1C komponenti istifadəçinin müvəqqəti qovluğunda saxlayır, məsələn "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

və reyestr şöbəsində qeydiyyatdan keçirməyə çalışır HKEY_CLASSES_ROOT məhz bu yolda.

Terminalda adi istifadəçilərin bu qeyd şöbəsini dəyişdirmək hüququ yoxdur, buna görə komponent onlara qoşulmur.

İndi bu vəziyyətdən necə çıxacağından danışaq.

Qlobal kontekst metodu ConnectExternalComponent() bir neçə sintaksis seçiminə malikdir. İstifadə edəcəyimiz budur.

Beləliklə, addım-addım:

1. 32-bit ƏS üçün C:\WINDOWS\SYSTEM32 qovluğunda və ya 64-bit ƏS üçün C:\WINDOWS\SYSWOW64 qovluğunda terminal serverində regsvr32.exe yardım proqramından istifadə edərək xarici komponenti qeydiyyatdan keçirin.

2. ConnectExternalComponent() metodu üçün iki əlavə sintaksis variantından birini istifadə edin:

Seçim 1:

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

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

Seçim 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = Yeni (ProgID);

Məncə, 2 nömrəli seçimə üstünlük verilir.

Eyni zamanda, 1C reyestrdə yeni bir yoldan istifadə edərək VK-nı yenidən qeydiyyata almağa çalışmır və beləliklə, bütün problemlər həll olunur.

Yaxşı, hamısı budur. İşdə uğurlar!

[linkə baxmaq üçün qeydiyyatdan keçməlisiniz]

Sual: Xarici komponentin quraşdırılması


Xahiş edirəm xarici komponentin necə qurulacağını söyləyin. Aşağıdakı kodu yerinə yetirərkən xəta verilir. Düzendə NameDecl.dll tapın

ExternalComponent ("GeneralLayout.Layout") təyin etməyə çalışır; İstisna EndTry ;
Xəta: Xarici komponentin quraşdırılması uğursuz oldu!

Cavab: ()
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) FALSE qaytarır.
Yeni("AddIn.NameDecl.CNameDecl", Müəyyən edilməmiş) = (()): Müəyyən edilməmiş yazın (AddIn.NameDecl.NameDecl)

Sual: 1s 8.3.6 və Win8-də xarici komponentin qoşulması


Xarici Komponent vk_rs232.dll-ni öz-özünə yazılmış konfiqurasiyaya qoşmalısınız. Görünür, regsvr32.exe vasitəsilə qeydiyyatdan keçib. "Görünür" çünki "komponent qeydə alınıb, lakin firewallda səhv var" mesajı aldım. Mesajın birinci yarısına güvənərək kodu 1C-də yazıram
AfterConnecting = Yeni Xəbərdarlıq Təsviri("AfterConnectingVK", ThisForm); StartInstallingExternalComponents(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponents(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scales");
və mən bu səhvi alıram
"Xarici komponentin quraşdırılması uğursuz oldu! İstifadə etdiyiniz müştəri tətbiqi üçün komponent çatışmır!".

İndi başa düşmürəm:
1. Bəlkə komponent reyestrdə qeydiyyatdan keçməyib - orada necə yoxlaya bilərəm?
2. Ola bilsin ki, onun “versiya”sı Win8 altında işləmir, baxmayaraq ki, məndə 32 bit var.
3. Bəlkə 1C özü çox yenidir, yəni. Müvafiq olaraq, bu dll ilə işləyə bilməz?
4. Yaxşı, mənasızdır - mən səhv bir şey yazıram.

Cavab: Və bütün bunlar məni növbəti problemə gətirib çıxardı. VneshComp quraşdırılıb, indi onu birləşdirməlisiniz. Və burada hər iki variant var
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Tərəzi")
ConnectExternalComponent("GeneralLayout.Layout","Tərəzi")

YALAN verirlər!!!

Sual: Xarici komponent.dll


Hər kəsə xeyirli gün.
Sual.
1C 7.7-də əla işləyən dll komponenti
1s 8.1 ümumiyyətlə yükləmək istəmir...
Mən onu C:\Program Files\1cv81\bin\cache1c.dll-ə yapışdırmağa cəhd etdim.
Mən regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll" istifadə edərək qeydiyyatdan keçməyə çalışdım.
Problemsiz qeydiyyatdan keçir.
Ona daxil olmaq istəyəndə xəta mesajı alıram:

Xarici komponenti yükləmə xətası! cache1c.dll
Prosedur ButonuExecutePress(Button) Xarici Komponenti Yükləməyə cəhd( "C:\Proqram Faylları\1cv81\bin\cache1c.dll"); İstisna Hesabatı( "Xarici komponenti yükləmə xətası!"+ "cache1c.dll" ); EndAttempt; Cəhd // Komponent obyektini əldə edin. // m = Yeni ("cache1c.GTMcmd" ); m = Yeni COMObject("cache1c.GTMcmd" ); İstisna Hesabatı(); EndAttempt; EndProcedure

Cavab: Bu qeyri-mümkün qədər bayağıdır...
Zənglər arasında fasilə verməlisiniz (millisaniyələr)...
Prosedur ButtonExecutePress(Button) cəhdi // Komponent obyekti alın. m = Yeni COMObject("cache1c.GTMcmd" ); İstisna Hesabatı( "Xarici komponent obyekti yaratmaq alınmadı"); EndAttempt; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330; m.Connect(); m.Pauza(100); ...... və s
1c 7.7 üçün - bu lazım deyil, işin daha sürətli olduğu ortaya çıxır.

Sual: 1C 8.3-də Linux (Ubuntu x64) üçün C++-da Native Api xarici komponenti


Mən VK-ya yazıram, amma ubuntu-da 1c-yə qoşula bilmirəm. Hətta 1c-dən icra olunan proqram da qoşulmur. Beləliklə, bununla bağlı bir sual:

1) Mən məqalədə verilmiş VNCOMPS nümunəsindən VK-nı bağlamağa çalışıram

(link ən sonunda tapıla bilər: "Kopyalama").
NativeApi layihəsinin daxilində makefile var. Onun köməyi ilə mən Ununtu-da .so kitabxanası qururam.
Ancaq "Xarici Komponenti birləşdirin" 1c qəzaya uğradıqda.
Eyni şəkildə, əgər mən "build.sh" (layihənin kökündə) istifadə edərək qururamsa.

Makefile-nin özündə bayrağı m32-dən m64-ə dəyişirəm, çünki 1c və x64 sisteminin özü. (parametr m32 ilə onsuz da qoşulmur)
1C 8.3-dən VK-ya zəng etmək üçün bir nümunə:
Bağlantı tamamlandı = Xarici Komponentə qoşulun("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Yalnız bu mövzuda bir məqalə var.
Ancaq gördüyüm qədər, bütün bu məqamlar VNCOMPS nümunəsində artıq nəzərə alınmış və düzəldilmişdir.

Amma mahiyyətcə bu kompilyasiya parametrləri məsələsidir. MB 32-bit xarici komponent normal olaraq 32-bit 1c-yə qoşulur, lakin mən onu Ubuntu x64 1c enterprise83 8.3.5-1486 amd64-də yerləşdirdim. Və mən onunla VK-da əlaqə qurmaq istəyirəm.

Bu problemi həll etmək üçün hər hansı bir fikri olan varmı?)
VNCOMPS nümunəsi işləməlidir, lakin qurma parametrləri tənzimlənməlidir və ya sınaqdan keçirdiyim platformanın özü səhvdir.

Cavab: Maraqlıdır, Java-da xarici komponent yazmaq olarmı?

Sual: 1C serveri ilə xarici komponentlə işləmək...


Günortanız Xeyir,

C++ dilində yazılmış xarici komponent var ki, onun vəzifəsi xarici verilənlər bazasından məlumat əldə etmək və sorğunun nəticəsini 1C-də Dəyərlər Cədvəli şəklində qaytarmaqdır.
Cari anda dəyərlər cədvəlini yaratmaq üçün Init() funksiyasında parametr kimi qəbul edilən IDispatch* pBackConnection interfeysindən istifadə olunur. Sonra, dəyərlər cədvəlini yaratmaq, onu doldurmaq və CallAsFunc(...)-da ikinci parametrə qaytarmaq üçün sadəcə 1C funksiyalarından istifadə edirəm.
Problemlər 1C nazik müştərilərə keçidlə başladı. Server tərəfində xarici komponent həqiqətən işə düşmür. Siz onu müştəri tərəfində işlədə bilərsiniz, lakin hamısı qoltuqağası kimi görünür və 1C-də ümumi “müştəri-server” məntiqindən kənara çıxır. Məsələn, müştəri dəyər cədvəlinin nə olduğunu başa düşmür, “qlobal” dəyişənlərlə bağlı problemlər, sessiyalar və s.
NativeAPI bu baxımdan daha da məhduddur.
Dəflə rəqs etmək ona gətirib çıxardı ki, mən 1C serveri altında xarici komponenti işə sala bildim, AMMA iş pBackConnection-da Invoke-a zəng etməyə cəhd edilənə qədər davam edir. 8.2 serverinin 64-bit versiyası, vaxtı bitənə qədər bir şey etməyə çalışır, 32-bit versiya (VK təbii olaraq 32-bitdir) dərhal düşür.
Güman edirəm ki, 1C server bu iş rejimini dəstəkləmir.
Buna görə suallar yaranır: bu müvəqqətidir, yoxsa 1C məntiqi bu iş sxemini ləğv etmək üçün qaynayır? Bu şəkildə daxili 1C strukturlarını (dəyərlər cədvəli) yaratmaq mümkün deyilsə, C++-da onu yaratmağa çalışmaq üçün, prinsipcə, sistem səviyyəsində dəyərlər cədvəlinin nə olduğunun təsviri varmı? onu doldurun və sonra onu qaytarma parametri kimi sadəcə 1C-yə sürüşdürün? İstərdim ki, heç olmasa hansı istiqamətdə qazılacaq bir istiqamət alayım.

Çox sağ ol.

Cavab:

Bir şey yazırsan və başqa bir şey nəzərdə tutursan.
1C mühitində müxtəlif seanslarda görünəcək dəyişənlərin elan edilməsi indi mümkün deyil və əvvəllər belə imkan yox idi. Başqa bir seans fiziki cəhətdən fərqli bir prosesdir.
Sessiya verilənlər bazasına qoşulan sessiyadır, yəni. istifadəçi sessiyası. Yoxsa bu konsepsiyaya özünüzdən nəsə qoyursunuz?

Bir seans ərzində seans modulunda müxtəlif yerlərdən seans daxilində yaşayacaq və görünəcək dəyişənləri elan etmək mümkün idi və indi də mümkündür... əslində bunlardan 4-ü var.
- Sessiya modulu;
- Daimi proqram modulu;
- İdarə olunan proqram modulu;
- Xarici əlaqə modulu.

Yaxşı, əlbəttə ki, konteksti xatırlamaq lazımdır. Server kontekstinə birbaşa müştəri tərəfində və əksinə daxil olmaq mümkün deyil.

Əslində, 1C arxitekturası məlumat mübadiləsinin aşağıdakı kimi gedəcəyini nəzərdə tutur:
- parametrlər/prosedurların/funksiyaların qaytarılması vasitəsilə;
- sözdə seans parametrləri vasitəsilə (obyektlər ola bilməz, lakin palitrada faktiki olaraq görünür).

Formadakı cədvəl... hansısa obyekt cədvəlinə bağlıdır (məsələn, emal olunur)? ya yox. Əgər belədirsə, o zaman serverdə (&OnServer) mövcuddur və orada redaktə edin....

Yenə də, bəli, Dəyər Cədvəli müştəri tərəfində UV-də mövcud deyil. Yaxşı, 1C qərar verdi.

Hadi! Excel ilə işləyir, FSO və bir çox başqa şeylərlə işləyir, lakin burada işləmir. Səhvi tut və təhlil et...

Cəhd
...
hərəkətləriniz
...
İstisna
str = ErrorDescription();
EndAttempt;

Müasir aparat imkanları ilə bu, heç də mübahisə deyil.

Tamamilə şəxsi fikrinizdir. Reallıqla heç bir əlaqəsi yoxdur. Heç bir şəkildə yox. Bir daha təkrar edirəm, 1C COM ilə əla işləyir. Həm in-proc, həm də out-proc ilə.

Zəhmət olmasa yükləmək üçün istifadə etdiyiniz kodu təqdim edin və VK ilə əlaqə saxlayın.

Yeri gəlmişkən, VK... sizin vəziyyətinizdə COM və ya Native API?
Əgər COM-dursa, onda siz onu regsvr32 vasitəsilə... kimi qeydiyyatdan keçirirsiniz... onda bit dərinliyi məsələsini necə “həll edirsiniz”?

Sual: 1C8 və Native tipli xarici komponent


Günortanız Xeyir.
Mənim BP 3.0.50.12 konfiqurasiyasım var və Vesy-Soft şirkətindən UniServerAuto-dan istifadə edərək çəki ölçməni həyata keçirmək istəyim var.
Tərtibatçılar komponenti Windows 32 və 64 üçün Native-də tərtib etdilər və onu ən böyük faylla arxivləşdirdilər. 1C üçün çəkinin necə hesablana biləcəyinə dair bir nümunə də var. İçərisində, ikili məlumatlarla bir tərtibatdan istifadə edərək, başa düşdüyüm kimi, bu arxiv göstərilir. Nümunədə hər şey yaxşıdır: komponent quraşdırılır, birləşdirilir, sonra əlaqə qurulur və çəki oxunur.
Amma 1C-yə köçürməyə başlayan kimi çəki oxunmur. Hər şey sadə yazılmış kimi görünür, amma dırmıq harda olduğunu başa düşmürəm.
Kimin bir az vaxtı varsa - kömək edin, bir gözlə baxın, bəlkə həll səthdədir, amma mən səhv yerə gedirəm və səhv edirəm. Mən əvvəllər heç vaxt Native texnologiyası ilə işləməli olmamışam...

Və əlavədə mənim emal mətnim var

Cavab:

Yaxşı xəbərim var...
Sadəcə addım-addım görməyə başladım ki, hansı nöqtədə uğursuzluğa düçar olacaq. Bunun üçün boş verilənlər bazası yaratdım və əmrlə onu emal etdim. Təchizatçının nümunəsi ilə bənzətmə ilə, tərtibatı yeni bir konfiqurasiyaya köçürdüm - ikinci dəfə işləyir. Bunlar. birinci dəfə yox, ikinci dəfə bəli. Bu, bizim emalımızda hələ də komponentin və obyektin əlaqəsini müxtəlif prosedurlara görə ayırmağın lazım olacağı fikrini doğurdu.
Sonra onu layout bağlantısı ilə verilənlər bazasıma köçürdüm - işləyir. Vay, bu yaxşıdır.... Amma konfiqurasiyada dəyişiklik etmədən istərdim, ona görə də davam edək.

Mən tərtibatı emala əlavə etməyə çalışıram. Onun ölçüsü dərhal 10kb-dan 3mb-ə qədər artır və əməliyyatda əhəmiyyətli bir yavaşlama müşahidə olunur - bu uyğun deyil. Mən dll vasitəsilə komponentləri birləşdirməyə başlayıram. Bunlar. mahiyyətcə başladığım yerlə eynidir. Ancaq bir "AMMA" var: istifadəçinin qovluğunda dll adını axtararkən, bu dll-nin 1C-də qeydiyyatdan keçmiş dll-lərin əlavə olunduğu yerdə olduğunu gördüm:
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
Müvafiq olaraq, dll-nin tam yolundan istifadə etməyə ehtiyac yoxdur, sadəcə adını daxil edə bilərsiniz:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Mən cəhd edirəm... qeydiyyatda and içir, amma ölçmə nəticəsini qaytarır. Belə çıxır ki, dll artıq qeydiyyatdan keçib və bu o deməkdir ki, sadəcə onu qoşmaq lazımdır. Mən onu çıxarıram və hər şey işləyir.
Xülasə etmək üçün:
1. Çəkinin işlənməsi zamanı AtOpening proseduruna xarici komponentin qoşulması və obyektə qoşulması daxildir.
2. Dll-yə gedən yol mən yazmamışam, sadəcə adını qeyd etmişəm.

İndi oturub fikirləşirəm ki, 1C-də dll nə vaxt quraşdırılıb? Proqram təminatının quraşdırılması zamanı? Çətin ki... Bu dll-nin tərtibatçı konfiqurasiyası işə salınarkən, forma açılanda harada quraşdırılır? Bilmirəm, amma mənə yaxın görünür... Nə düşünürsən?
İkincisi, yeni yerdə, eyni terminalın quraşdırılmasına ehtiyac olduqda, hər şeyin işləməsi üçün nə etmək lazımdır? Proqramı tamamilə quraşdırmalı, əməliyyatı yoxlamaq üçün satıcı konfiqurasiyasını işə salmalı və sonra (nəzəri olaraq) emal işləməlidirmi? Nəsə bir qədər mürəkkəbdir... Yoxsa proqramı quraşdırdıqdan sonra emal zamanı bir dəfə Xarici Komponent Quraşdırmalıyam?

Bu mövzuda fikirlərinizi eşitmək istərdim...

Sual: Kodun bir hissəsinin xarici komponentə köçürülməsi


Emalın qorunması ilə bağlı bir çox məqalə kodun bir hissəsinin xarici komponentə köçürüldüyünü təsvir edir, lakin proqramçının belə hallarda dəqiq necə hərəkət etdiyi aydın deyil.
Bunu edən və ya oxşar hökmlərlə qarşılaşan hər kəs sadə bir nümunə ilə prinsipin özünü izah etsin. Görünür, hər şey xarici komponentləri birləşdirməklə aydındır.

// Qiymətlər cədvəlinin doldurulması nümunəsi TK.Clear(); Sorğu = Yeni Sorğu; Query.Text = "SEÇ | Nomenklatura.Link NECƏ Nomenklatura |FROM | Directory.Nomenclature AS Nomenklatura"; Sorğu Nəticəsi = Sorğu.İcra(); Seçim = Sorğu Nəticəsi.Select(); Seçim zamanı.Next() Cycle Page = TK.Add(); FillPropertyValues(Səhifə, Seçim); EndCycle;
Kodun hansı hissəsinin adətən çıxarıldığını izah etmək üçün bu nümunədən istifadə edə bilərsinizmi? Sorğu olan hissəni silmək məntiqli olardı, bəs o zaman platformadan yan keçərək xarici komponentdən verilənlər bazasına necə daxil ola bilərik? Mətni çıxarmağın mənası yoxdur. Və ya cədvəl hissəsinin formalaşmasını çıxarın. Bununla qarşılaşan hər kəslə təcrübənizi paylaşın.

Cavab: Və "Uyğunsuz" sözü həmişə "Pis" sözünü bildirir? Bəli, mənə elə gəlir ki, üslubumu “1C: Təbiətdə mövcud olan bu skript mühərrikində ən pis proqramlaşdırma (ədəbi dilə tərcümə edilmiş)!” adlandırsaydım! və sonra yəqin ki, bu heyvanı yoxlamaq istəyənlər olacaq. Və klassik kimi görünür: "Mən Pasternakı oxumamışam, amma onunla tamamilə razı deyiləm!"

Sual: Delphi-də xarici komponent r 1C-yə qoşula bilmirəm


Xarici Komponentin nümunə layihəsini tərtib etdi

DLL aldım.
Sistemdə qeydiyyatdan keçib (Regsvr32 testvk.dll)
İndi onu 1C-də istifadə etməlisiniz. Bunu etmək üçün xarici emal yazdım və içərisində:

&OnClient
Prosedur Əmr 1 (Əmr)
path="C:\1\VK Şablon\TestVK\DLL\testvk.dll";
a=ConnectExternalComponent(PATH);
LoadExternalComponent(Path);
OB = Yeni ("Addln.TestVK" Sual: 1s üçün xarici komponentlər 7.7


Salam. Mən c#-da 1c7.7 üçün komponent yazıram, onu 1c-yə qoşuram, hər şey qaydasındadır, amma 1c üçün metod və ya xassələri çağırmaq istəyəndə, sazlayıcıdan istifadə edərək, “agregat obyekt sahəsi tapılmadı” deyir. Bildim ki, ILanguageExtender interfeysinin metodları çağırılmır, IInitDone interfeysini tətbiq etdikdən sonra yenidən konstruktor sinifləri komponentləri adlanır, xarici komponentlərin yazılması nəzəriyyəsinə görə 1C, VK ən azı iki interfeys tətbiq etməlidir - IInitDone və ILanguageExtender, I bunları həyata keçirin, amma problemin nə olduğunu başa düşə bilmirəm bəlkə kimsə fikri var???

Cavab: Mövzu bağlandı, problem həll olundu.

Sual: v7: C#-da 1C7 üçün xarici komponent


Visual studio 2010-dan başlayaraq C# dilində 1C7 üçün komponentlər yaratmaq üçün sadə nümunəyə haradan baxa bilərəm?

Cavab:

Bax
C# dilində Xarici Komponentləri sürətlə yaradın. Qlobal Kontekst, IAsyncEvent, IEextWndsSupport, WinForms və WPF-dən istifadə nümunələri



Əlaqədar nəşrlər