V8: COM bağlantısı. V8: COM bağlantısı Xarici əlaqə 1s

1C verilənlər bazası arasında məlumat mübadiləsi variantlarından biri COM bağlantısı vasitəsilə mübadilədir.

COM bağlantısından istifadə edərək bir 1C verilənlər bazasından digərinə qoşula və məlumatları oxuya və ya yaza bilərsiniz. Bu üsul həm verilənlər bazalarının müştəri-server versiyalarında, həm də fayl verilənlər bazalarında istifadə edilə bilər. Bu yazıda bu tip əlaqə nümunələrinə baxacağıq. Nümunələr platforma 8.2-dən istifadə edir.

1C tətbiqi üçün iki növ COM obyekti yarada bilərsiniz. Bu V82. TətbiqV82.COMConnector. halda V82. Tətbiq 1C tətbiqinin demək olar ki, tam hüquqlu bir nüsxəsi istifadəyə verildi. istifadə edildiyi halda V82.COMConnector Kiçik bir server hissəsi işə salınır.
Bu vəziyyətdə işləmə sürəti daha yüksəkdir, lakin bəzi funksiyalar mövcud olmaya bilər. Xüsusilə, xarici əlaqələrlə işləmək xüsusiyyətinin təyin olunmadığı formalar və ümumi modullarla işləmək. Əsasən istifadə etməlisiniz V82.COMConnector və yalnız funksionallıq olmaması halında V82. Tətbiq. Əməliyyat sürətindəki fərq böyük həcmli verilənlər bazalarında xüsusilə nəzərə çarpa bilər.

Beləliklə, başlayaq

  1. COM obyekti yaradaq
    • üçün V82. Tətbiq Bağlantı = Yeni COMObject("V82.Application" );
    • üçün V82.COMConnector Bağlantı = Yeni COMObject("V82.COMConnector" );
  2. Bir əlaqə sətri yaradaq
    • verilənlər bazasının server versiyası üçün ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • verilənlər bazasının fayl versiyası üçün ConnectionString = "Fayl = " "PathKBase" "; Usr = İstifadəçi adı; Pwd = Parol";
  3. Verilənlər bazasına qoşulma Bağlantı cəhdi = Bağlantı. Connect(ConnectionString);
  4. İstisna Mesajı = New MessageToUser; Mesaj. Mətn = + ErrorDescription() ;

    Mesaj. Report(); V82. Tətbiq EndAttempt; V82.COMConnector Verilənlər bazası ilə əlaqə kəsilir

    Əlaqə = Müəyyən edilməmişdir;

Obyekt üçün

Bağlantını dayandırmaq lazımdır, əks halda natamam seans asılacaq, sonra əl ilə silinməli olacaq. halda əlaqənin həyata keçirildiyi prosedur tamamlandıqda əlaqə avtomatik olaraq pozulur və daha bir kiçik nöqtə var. Bağlantı qurulan istifadəçi üçün onun parametrlərində "Proqramı bağlayarkən təsdiq tələb et" qutusu söndürülməlidir. //ConnectionString = "Fayl = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Bağlantı cəhdi = Bağlantı. Connect(ConnectionString); İstisna Mesajı = New MessageToUser; Mesaj. Mətn =

"Verilənlər bazasına qoşulmaq mümkün olmadı" V82. Tətbiq+ Təsvir Xətası(); V82.COMConnector Mesaj. Report(); EndAttempt;Əlaqə = Müəyyən edilməmişdir;

Bağlantı növü üçün üsul ilkin olaraq yaradılmış COM obyekti və üçün istifadə olunur V82.COMConnector əlaqə üsulu tətbiq edilir. sorğu gəlirləri ilə sonrakı iş üsul ilkin olaraq yaradılmış COM obyekti və üçün istifadə olunur V82. Tətbiq standart vasitələr 1C. kodda belə görünür: Sorğu = Bağlantı. NewObject("Sorğu");// Üçün Sorğu = Bağlantı. NewObject("Sorğu"); Sorğu. Mətn = "SEÇ

| Təşkilatların Vəzifələri, | Təşkilatların Vəzifələri.Adı|FROM | Təşkilatların Vəzifələri AS Təşkilatların Vəzifələri"..

;

  • Nəticə = Sorğu. Run();
  • Nümunə = Nəticə. seçin(); Salam Seçim. Next() Loop EndLoop ;
  • 1C: Enterprise 8.3 versiyası üçün hər şey dəyişməz qalır, istisna olmaqla, COM obyektlərini yaratarkən istifadə etməlisiniz
  • "V83.COMConnector"

və ya

"V83. Tətbiq"

Eyni zamanda bir neçə cədvəldən məlumatları görmək istədikdə, yəni. bir neçə cədvəli bir yerə toplamaq üçün cədvəlləri birləşdirən anlayış və onlar arasında əlaqələr yaranır. Dörd növ əlaqə var:

sol;

sağ,
daxili;
tam.
Mücərrəd bir nümunədən istifadə edərək hər bir növə baxacağıq. 2 cədvəl var, birincidə maddə haqqında təsviri məlumatları, ikincisində onun qalıqları haqqında məlumat saxlayırıq:
Bu cədvəllərdən birini əldə etmək üçün hansı sahələri, hansı şərtlə və tiplə birləşdirəcəyimizi açıq şəkildə göstərməliyik. İndi daha aydın olacaq.
Sol əlaqə
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:

";

İstək. Mətn =

Sol birləşmə təqribən bir dövrə daxilində döngə kimi işləyir - o, sol cədvəldən ilk qeydi götürür və əlaqə şərtinin təmin olunmasını təmin etmək üçün sağdakı cədvəldən bütün qeydləri keçir. Sonra sol cədvəldən ikinci qeyd götürülür və s. Əgər birdən sağ cədvəldən bir neçə qeyd əlaqə şərtini ödəyirsə, onda əldə edilən cədvələ bir neçə sətir əlavə olunacaq (gördüyünüz kimi, nəticədə əldə olunan cədvəl informativ deyil, məlumatlar əks olunmur). Əsl mahiyyət, ona görə də bu cədvəlləri iki sahə ilə birləşdirmək daha yaxşıdır: Məhsul və Rəng, yalnız bu dəfə NULL-ləri idarə edəcəyik:

sağ,
daxili;
tam.
| Nomenklatura.Rəng,
| ISNULL(Qalan.Kəmiyyət, 0) Kəmiyyət AS
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:
| Nomenklatura AS Nomenklatura
| SOL QOŞULUN Qalanları Qalıqlar KİMİ
| Proqram Nomenklaturası.Məhsul = Qalan.Məhsul

Düzgün əlaqə

Sağ əlaqə mahiyyətcə soldan fərqlənmir. Cədvəlləri dəyişdirsəniz, sağ birləşmə sol birləşməyə çevriləcək, üstəlik, konstruktordan istifadə edərkən, sistem özü bütün sağ birləşmələri sol birləşmələrə çevirir;

Daxili birləşmə

Daxili birləşmədən istifadə edərək, sistemə deyirik ki, nəticədə həm sağ, həm də sol cədvəldən yalnız əlaqə şərtini təmin edən qeydləri görmək istəyirik. Beləliklə, əldə edilən qeydlərin sayı birləşmədə iştirak edən ən qısa cədvəlin qeydlərinin sayından az və ya ona bərabər olacaqdır. Cədvəllərimizin Məhsul və Rəng sahələrinə daxili birləşmə tətbiq edək:

sağ,
daxili;
tam.
| Nomenklatura.Rəng,
| Qalanlar. Miqdar Kəmiyyət AS
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:
| Nomenklatura AS Nomenklatura
| INNER JOIN Qalıqları Qalıqlar KİMİ
| Proqram Nomenklaturası.Məhsul = Qalan.Məhsul
| Və Nomenklatura.Rəng = Qalan.Rəng";

Tam əlaqə

Tam qoşulma hər iki cədvəldəki bütün qeydlərlə nəticələnəcək, əlaqə şərtini təmin edən qeydlər birləşdiriləcək, əlaqə şərtini təmin etməyən qeydlər hələ də sorğunun nəticəsi ilə bitəcək, lakin bəzi NULL sahələri ilə. Tam birdə sol və sağ əlaqələr kimidir.

Bu mövzuda bir çox problem ola bilər, onlardan birini həll etməyə çalışaq. Təşkilatımız 2 mebel fabrikinin dileridir: “Zarya” və “Rassvet”. Fabriklərin hər birinin qiyməti ilə çeşid müxtəlif cədvəllərdə saxlanılır. Vahid qiymət siyahısı yaratmaq və minimum qiymətə məhsulları daxil etmək lazımdır:

Gəlin bütün sahələrin seçimi ilə tam birləşmədən istifadə edək, məhsula görə qoşulacağıq:

sağ,
daxili;
| NomenklaturaZarya.Product AS ProductZarya,
| NomenklaturaZarya.Qiymət AS QiymətZarya,
| Nomenklatura Rassvet Product AS Product Rassvet,
| NomenklaturaRassvet.Qiymət AS PriceRassvet
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:

Bizə tam olaraq bu lazım deyil, gəlin məhsul sahəsini birinə birləşdirək və NULL-ləri emal edək:

sağ,
daxili;
//ISNULL konstruksiyası sorğu dili funksiyaları bölməsində müzakirə edilmişdir
//qiymət müəyyən edilməyibsə, onu işə salın
//niyə 1000000 aşağıda izahata baxın
| ISNULL(NomenklaturaZarya.Qiymət, 1000000) AS QiymətZarya,
| ISNULL(NomenklaturaRassvet.Qiymət, 1000000) AS PriceRassvet
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:
| NomenklaturaZarya AS NomenklaturaZarya
| TAM ƏLAQƏ NomenklaturaŞəfəq AS NomenklaturaŞəfəq
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

Yalnız minimum qiyməti seçmək qalır. Son sorğu mətni belə görünəcək:

sağ,
daxili;
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS Məhsul,
| SEÇİM
| VAXT OLAN ISNULL(NomenklaturaZarya.Qiymət, 1000000) > ISNULL(NomenklaturaRassvet.Qiymət, 1000000)
| SONRA ISNULL(NomenklaturaRassvet.Qiymət, 1000000)
| ELSE ISNULL(NomenklaturaZarya.Qiymət, 1000000)
| QİYMƏT KİMİ BİTİR
Sol birləşmədən istifadə edərək, sistemə bildiririk ki, nəticədə sol cədvəldən bütün qeydləri, sağdan isə əlaqə şərtini ödəyən qeydləri görmək istəyirik. Deyək ki, məhsul sahəsi üzrə cədvəlləri bərabər şərtlə birləşdiririk, onda belə bir cədvəl alacağıq:
| NomenklaturaZarya AS NomenklaturaZarya
| TAM ƏLAQƏ NomenklaturaŞəfəq AS NomenklaturaŞəfəq
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

Qiymət müəyyən edilməyibsə (NULL), o zaman müəyyən dəyərlə işə salınmalıdır, əks halda daha çox/az üçün müqayisə əməliyyatı xəta ilə uğursuz olacaq. Qiyməti qeyri-real böyük məbləğlə başlayırıq ki, müqayisə əməliyyatında “itirsin”, çünki problemin şərtlərinə uyğun olaraq ən aşağı qiyməti seçirik.

← 1C sorğu dilinin funksiyaları 8 | 1C 8 sorğularına qoşulur →

Məlumatları bir 1C konfiqurasiyasından digərinə ötürməyin bir yolu proqram təminatı bağlantısı COM istifadə edərək. Bir çox şirkətlər bir neçə fərqli verilənlər bazasından istifadə edirlər, onların arasında müəyyən əlaqələr və asılılıqlar olmalıdır. Yalnız məlumatları ötürmək deyil, həm də müəyyən məlumat emalını həyata keçirmək lazımdırsa, COM bağlantısı optimal mexanizm olacaqdır. Başqa bir 1C verilənlər bazasından məlumatları təhlil etmək bacarığı hər hansı bir tərtibatçı üçün faydalıdır.

COM vasitəsilə 1C verilənlər bazasına qoşuluruq

1C-də COM əlaqəsini həyata keçirmək üçün COMConnector adlı xüsusi mexanizm istifadə olunur. Bu obyekt platforma ilə birlikdə quraşdırılır və infobazaları birləşdirmək üçün istifadə olunur. Qeyd etmək lazımdır ki, 8.2 və 8.3 versiyaları üçün müxtəlif adlara malik obyektlərdən istifadə olunur - müvafiq olaraq “V82.COMConnector” və “V83.COMConnector”.

Unutmayın ki, COM-un verilənlər bazasına qoşulma müddəti lisenziyaya başa gəlir - bir neçə əlaqənin eyni vaxtda icrası ilə məşğul olmayın. Bu, məhdud sayda lisenziyaya malik olan təşkilatlar üçün xüsusilə vacibdir. Bu problemi istifadə edərək həll etmək olar rutin vəzifələr infobaza ilə aktiv istifadəçi əlaqəsi olmadıqda icra edilir.

Başqa verilənlər bazasına qoşulmaq və lazımi məlumatları tələb etmək üçün aşağıdakı məlumatları bilməlisiniz:

  1. Bu hansı növdür - fayl və ya müştəri-server;
  2. Harada yerləşir;
  3. Daxil olmaq üçün hansı ad və paroldan istifadə edə bilərsiniz?
  4. Hansı məlumatlar sizi maraqlandırır?

İlk üç nöqtədən COM əlaqəsini həyata keçirmək üçün bir sıra parametrlər yaratmalısınız. İnformasiya təhlükəsizliyinin növündən asılı olaraq, fərqli olacaq görünüş. Alınan sətirdən istifadə edərək, hər hansı bir üsuldan istifadə edərək təhlil və emal üçün başqa bir verilənlər bazasından məlumat toplaya biləcəyiniz bir əlaqə qurulur.

Bağlantı ParametrləriFileIB = "Fayl=""Məlumat bazasına_yol""; Usr=""İstifadəçi_adı"";Pwd=""Parol"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Parol""";

Bağlantı funksiyası sadədir və bütün parametrlər düzgün göstərildiyi təqdirdə heç bir sual yaratmamalıdır. Sazlama və təhlili sürətləndirmək üçün mümkün səhvlərəlaqəni "Cəhd et" konstruksiyasına əlavə etmək daha yaxşıdır. Funksiya lazımi məlumatları əldə etmək üçün işləyəcəyiniz "COM obyekti" tipli bir dəyəri qaytaracaq.

&OnServer Funksiyası ConnectToBase() exportConnectionIB Parametrləri = "Fayl=""E:\1c verilənlər bazası\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Yeni COMObject("V83.COMConnector"); Geri qayıtmağa cəhd V83COMCon.Connect(IB Bağlantı Parametrləri); İstisna Hesabatı (ErrorDescription());

Müəyyən edilməmiş qayıt; EndAttempt; EndFunction COM bağlantısı vasitəsilə siz nəinki məlumatları seçə, həm də onu qoşulduğunuz verilənlər bazasına əlavə edə bilərsiniz. Unutmayın ki, biz COM 4 vasitəsilə obyekti köçürə bilərik primitiv tip

data. Digər növlər platformanın daxili axtarış funksiyalarından istifadə etməklə müəyyən edilməlidir. Nəzərə alın ki, qlobal platforma funksiyaları COM bağlantısı vasitəsilə də çağırılır.

Biz 1C verilənlər bazasından məlumat alırıq

&OnServer Proseduru TestCOMOnServer() Əlaqəsi = ConnectToBase(); Əgər TypeValue(Connection) Type("Qeyri-müəyyən") Əgər RequestBPZO = Connection.NewObject("Sorğu");

RequestBPZO.Text = "İlk 15-i SEÇ | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Seçin = RequestBPZO.Execute().select(); While Selection.next() loop Report(Selection.Number);

  • EndCycle; endIf; Prosedurun Sonu >
  • Məsələn, müəyyən bir şöbənin istifadəçiləri haqqında məlumat əldə etmək üçün sorğuda parametrlər vasitəsilə şərt qoyacağıq. Parametrlərdən biri sadə tipli olacaq - sətir, bölmə isə "Müəssisə strukturu" kataloq elementinə keçid olacaq. Sorğunun nəticəsi COM əlaqəsinin baş verdiyi verilənlər bazasında mövcud olan tipli sadalanan sahələrin olduğu bir cədvəldir. Onları başqa növlərə çevirmək lazımdırsa, istifadə edin
  • standart xüsusiyyətlər
platformalar:

Xətt();

RequestBPZO = Connection.NewObject.("Sorğu"); RequestBPZO.Text = "İlk 15 SEÇ | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I HERE | DirectoryUser.Department B (&NecessaryDepartment) | And DirectoryUser.Name like ""%"" + &NecessaryName+ ""%" " "; Departamentlər massivi = Connection.NewObject("Masivi"); Departamentlər massivi. Əlavə et(Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000023")); Departamentlər Massivi.Əlavə (Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000038")); Departamentlər Massivi.Əlavə (Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000046")); BPZO.SetParameter sorğusu ("Tələb olunan şöbə", Departamentlər massivi); RequestBPZO.SetParameter("Tələb olunanAd","Ekaterina"); Seçin = RequestBPZO.Execute().select(); While Selection.next() loop Report(Selection.Name); EndCycle;

Sənədləri və ya kataloq elementlərini köçürərkən, müəyyən bir obyektin ötürülməsinə nəzarət etmək məsələsi həmişə ortaya çıxır. COM birləşmələrinin köməyi ilə bu cür problemlər unikal identifikator vasitəsilə həll edilə bilər. Siz “GetLink” funksiyasından istifadə edərək, identifikatordan sətir kimi istifadə edərək cari informasiya təhlükəsizliyindən identifikatorla plug-in verilənlər bazasında obyekt tapmalısınız. Biri tapılmadıqda, onu COM bağlantısından istifadə edərək yarada bilərsiniz.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Əgər ValueFilled DEYİLsə(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) onda NewUser = Connection.Directories.Users.CreateItem();

NewUser.Name = Directories.Users.FindByCode("00-0000313").Ad; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Fərdi; NewUser.Write(); endIf;

Həmçinin, COM bağlantısı prosedur və funksiyalardan istifadə etmək hüququna malikdir

1C-də başqa bir verilənlər bazası ilə xarici əlaqə imkanları olduqca genişdir və bir çox işi yerinə yetirməyə imkan verə bilər. Alətləri düzgün qiymətləndirməyi və seçməyi bacarmaq vacibdir optimal həll. Əksər hallarda bu bacarıq yalnız təcrübə ilə və ya təcrübəli mütəxəssislərin işinin nümunələrini öyrənməklə ortaya çıxır.

) Düzdür

Eyni zamanda, 10 bala belə çatmayan nəşrlərin sadəcə olaraq “tutduğunu” dəfələrlə görmüşəm.
Niyə bu baş verdi? Görünür, ona görə ki, kimsə onları açıq-aydın bəyənib.


Dediyim budur ki, reytinq məqaləsini oxumadan ona nə qədər ehtiyacınız olduğunu başa düşmək və ya o qədər də primitiv deyil +/- qiymətləndirmək yaxşı olardı. Bəyəndiyimə gəlincə, bunu belə düzəldərdim: ulduzların düzülməsi və sayta çoxlu insanların toplaşması və çoxlarının bəyənməsi səbəbindən o qədər qazandı ki, özünüz də başa düşürsünüz ki, bu bir şans məsələsidir, çünki Məqalə əsas səhifədən çıxan kimi onu yalnız sorğu ilə tapmaq olar və beləliklə, hər kəs səsvermə yolu ilə keçib. Və başa düşdüyüm qədər, daimi şərhlər = məqalənin təbliği onu əsas səhifədə saxlamağa imkan verir.
Məhz buna görə də dükanları ictimai küçələrə qoyurlar - axı, çox vaxt vacib olan malın keyfiyyəti və aktuallığı deyil, gəzintiyə çıxan insanlar tez-tez səhəri gün atacaqları bir şey alırlar; prosesin xatirinə. Bu, hər kəsə çoxdan məlum olan bir xəstəlikdir - alış-veriş asılılığı. Və ya sadəcə axını artırmaq doğru alıcının ehtimalını artırır.

Və müsbət və mənfi cəhətləri ... - bu, sərf olunan vaxt və iş üçün bir növ "təşəkkür edirəm"


Bunlar. Minus da “təşəkkür edirəm” sayılırmı? Fikrinizi öyrənmək istədim ki, belə hallarda istifadə etmək lazımdırmı və başqaları necə maraqlı düşünür? Məqalə sizin üçün zərərli/pis olduqda və ya sadəcə olaraq yararsız/boş olduqda onu qoymalısınız?
Fikrimcə, məqalə sadə bir reytinq artımına bənzəyir, çünki:
1. Sadaladığım tiplərlə bağlı problem müəllif tərəfindən tamamilə diqqətdən kənarda qaldı, baxmayaraq ki, bir dəstə şərh yazmağa tənbəllik etmədi.
2. Məqalədə aşkar qeyri-dəqiqlik var: deyirlər ki, bu, yeganə yoldur

V82 = Yeni COMObject("V82.ComConnector"); Kod = AccountCOM.Code;


lakin mən bunu belə emaldan istifadə edərək asanlıqla edə bilərəm:

Hesabat(Baza. Kataloqlar. Qarşı tərəflər. Adı üzrə tap("MMC"). Kod);


və hər şey yaxşıdır! Və mən V82.ComConnector bağlantısını seçirəm
Nədənsə qəribədir ki, müəllif məqaləsində qeyd olunan problemlərin olmasına heç əhəmiyyət vermir, lakin heç bir şəkildə reaksiya vermir.
3. “Sinif yoxdur” xətası görünəndə hələ də problem var
4. Amma 8.2 quraşdırıldıqda, sonra isə 8.1 quraşdırıldıqda problem yaranır - standart UT-BP mübadiləsi ilə OLE/COM vasitəsilə mübadilə etməyə cəhd edin!
5. Saytda OLE/COM vasitəsilə universal əlaqə yaratmağa imkan verən əsas emalları göstərə bilərsinizmi ki, yeni başlayanlar vaxt itirməsin, siz onlar üçün yazın! Yeri gəlmişkən, nədənsə onun şəkli ekranınızdadır, niyə? Və nəticədə mahiyyəti üzrə 2 söz, pərdə arxasında isə daha 6 söz.

Ümumiyyətlə, palçıq atmıram, ancaq xüsusi boşluqları qeyd edirəm, amma sıfır reaksiya var. Əgər bu sizin paylaşdığınız təcrübədirsə, deməli, bir növ səhv və natamamdır.
Demək istədiyim odur ki, əgər müəllifin bütün qüsurları toplamaq istəyi olsaydı, o, heç olmasa başqalarının təcrübəsinə qulaq asa bilər və şərhlərə qulaq asmaya bilər. Dərhal elə bir vəziyyət yaranır ki, onu oxuyan müəllifdən daha çox bilir, ona deyirlər (bəzən yanlış), o da cavab verir. Nəticədə, bütün məlumatlar məqalədə deyil, şərhlərdədir! Gülməli! Bu, tez-tez olur, ancaq ən yaxşısını istədiyinizə diqqət yetirməyə ehtiyac yoxdur - mən ən yaxşısını göstərirəm, başqaları da göstərir! Bunu məqaləyə daxil edin və hər kəs bu atışmanı oxumaqda maraqlı deyil;


Açar sözlər: COM, əlaqə, xarici, OLE, Automation, Connect, ComConnector, Srvr

Məlumata daxil olmaq üçün 1C: Enterprise 8.0 COM bağlantılarından istifadə edərkən Avtomatlaşdırma serverindən istifadə ilə müqayisədə aşağıdakı üstünlüklər mövcuddur:

  1. Daha çox sürətli quraşdırmaəlaqələr, çünki ayrı bir proses yaratmağa ehtiyac yoxdur əməliyyat sistemi, və bütün hərəkətlər zəng prosesi çərçivəsində həyata keçirilir;

  2. 1C:Müəssisə obyektlərinin xassələrinə və metodlarına daha sürətli çıxış, çünki girişin təşkili proseslərarası əlaqə tələb etmir;
  3. Əməliyyat sistemi resurslarının daha az istehlakı.

Ümumiyyətlə, COM bağlantısı vasitəsilə 1C: Enterprise 8.0 ilə işləmək serverin avtomatlaşdırılması rejimində 1C: Enterprise ilə işləməyə bənzəyir. Əsas fərqlər aşağıdakılardır:

  1. Avtomatlaşdırma serveri vəziyyətində, tam hüquqlu 1C: Enterprise 8.0 proqramı işə salınır və COM bağlantısı vəziyyətində, nisbətən kiçik bir prosesdə olan COM server işə salınır.

  2. COM bağlantısı ilə işləyərkən mövcud deyil funksionallıq bir şəkildə 1C: Enterprise 8.0 istifadəçi interfeysinin təşkili ilə əlaqəli;
  3. COM bağlantısı işləyərkən 1C: Enterprise 8.0 konfiqurasiya proqram modulu istifadə edilmir. COM bağlantısı ilə işləyərkən onun rolunu xarici əlaqə modulu oynayır.

1.1 COM əlaqəsinin qurulması proseduru

COM bağlantısı vasitəsilə 1C: Enterprise 8.0 məlumatlarına girişi təşkil etmək üçün aşağıdakı hərəkətlər ardıcıllığı yerinə yetirilir:

  1. V8.COMConnector identifikatoru ilə COM obyekti yaradılır, onun köməyi ilə əlaqə qurulur;

  2. əvvəl yaradılmış V8.COMConnector obyektinin Connect metodu çağırılır. Connect metodu ilə COM əlaqə obyektinə istinad qaytarır məlumat bazası 1C: Enterprise 8.0;
  3. Qəbul edilən COM əlaqə obyekti vasitəsilə əlaqənin qurulduğu infobazanın etibarlı metodlarına, xassələrinə və obyektlərinə daxil olur.

Vacibdir! COM əlaqəsində istifadəçi interfeysinin olmaması səbəbindən COM əlaqəsində bütün obyektlər, xüsusiyyətlər və metodlar istifadə edilə bilməz.

1C: COM bağlantısı vasitəsilə xaricdən əldə edilə bilən müəssisə obyektləri:

  1. Xarici birləşmə modulunun ixrac edilən dəyişənləri və prosedurları/funksiyaları

  2. İxrac edilmiş dəyişənlər və ümumi modulların prosedurları/funksiyaları
  3. Ümumi modulların xüsusiyyətlərini təyin etməklə bütün modulları daxil etmək və istisna etmək

  4. Preprosessordan istifadə edərək ümumi modulların fraqmentlərinin daxil edilməsi və xaric edilməsi
  5. Qlobal kontekst 1C: Müəssisə 8.0, müştəri tətbiqi ilə sıx əlaqəli obyektlər istisna olmaqla (TextDocument, TabularDocument, ...)

1.2 Xarici əlaqə modulu

Artıq qeyd edildiyi kimi, COM bağlantısı ilə işləyərkən tətbiq modulunun vəzifələri xarici əlaqə modulu tərəfindən yerinə yetirilir. Bu modulda müvafiq olaraq əlaqənin işə salınması və dayandırılması zamanı yerinə yetirilən hərəkətləri ehtiva edən SystemStarts() və WhenSystemCompletes() hadisələr idarəedici prosedurları ola bilər.

Xarici birləşmə modulunda müəyyən edilmiş prosedurlar, funksiyalar və qlobal dəyişənlər açar sözİxrac, tətbiq modulunda olduğu kimi, qlobal kontekstin bir hissəsinə çevrilir.

1.3 Ümumi modullar

Ümumi modullar üçün "Müştəri", "Server" və "Xarici Əlaqə" xassələri təqdim edilmişdir. Onlar konfiqurasiyada modulların müştəri-server versiyasında və COM əlaqə rejimində istifadəsini müəyyən etmək üçün nəzərdə tutulub.

1.4 Obyekt "V8.COMConnector"

V8.COMConnector COM obyekti tərəfindən həll edilən yeganə vəzifə 1C: Enterprise 8.0 məlumat bazası ilə COM əlaqəsinin qurulmasıdır. V8.COMConnector obyektinin bir nümunəsindən istifadə etməklə qeyri-məhdud sayda əlaqə qurmaq olar. V8.COMConnector obyekti 1C: Enterprise 8.0 məlumat bazası ilə COM əlaqəsi yaratmaq üçün nəzərdə tutulmuş vahid Connect metoduna malikdir.

<СтрокаСоединенияИБ>

İnformasiya təhlükəsizliyi sistemi ilə əlaqə xətti Parametr=Dəyər formasında fraqmentlər silsiləsi təşkil edir. Fraqmentlər bir-birindən ";" ilə ayrılır. Dəyərdə boşluq varsa, o, içəriyə daxil edilməlidir ikiqat sitatlar (").

Ümumi parametrlər:

Usr - istifadəçi adı;
Pwd - parol.

Fayl versiyası üçün aşağıdakı parametr müəyyən edilmişdir:

Fayl - məlumat bazası kataloqu.

Müştəri-server seçimi üçün aşağıdakı parametrlər müəyyən edilmişdir:

Srvr - 1C:Müəssisə serverinin adı;
Ref - serverdəki məlumat bazasının adı.

Qoşulma metodu 1C: Enterprise 8.0 infobazasına COM əlaqəsi yaradır və COM əlaqə obyektinə keçidi qaytarır.

// Bağlayıcı obyekt yaradıldı
V8 = Yeni COMObject("V8.COMConnector");
// COM əlaqə obyekti yaradılır
Əlaqə = V8.Connect("Fayl=""c:\InfoBases\Trade""; Usr=""Director"";")

1.5 COM əlaqə obyekti

COM-un 1C: Enterprise məlumat bazasına qoşulması tərəfindən təmin edilir tam giriş qlobal kontekstinə uyğun olaraq (bax: "İcra konteksti proqram modulu"). Buna görə də, bir COM bağlantısı öz üsulları kimi ola bilər: sistem sabitləri, menecerlərdən istifadə edərək əldə edilən obyektlərin konfiquratorunda göstərilən dəyərlər (məsələn, sabitlər, siyahılar, kataloqlar, sənədlər, sənəd jurnalları, hesabatlar, emal, növlər üçün planlar). xüsusiyyətlərin, planların hesablarının, hesablama növlərinin planlarının, registrlərin), həmçinin Export açar sözü ilə xarici əlaqə modulunda elan edilmiş dəyişənlərin.

Bundan əlavə, COM bağlantısı müəyyən növlərin dəyərlərini yaratmaq üçün istifadə edilə bilən əlavə NewObject metoduna malikdir.

tk = Bağlantı. NewObject("Dəyər Cədvəli");

String metodu 1C:Enterprise dəyərlərinin sətir təsvirlərini əldə etməyə imkan verir.

Görünüş = Connection.String(Data.UniqueIdentifier());

1.6. COM bağlantısı ilə işləmək xüsusiyyətləri

Avtomatlaşdırmada və COM əlaqəsində TRUE və FALSE aşağıdakı dəyərlərə malikdir: -1 (mənfi bir) və 0.

COM əlaqələrinin hovuzunu təşkil etmək mümkündür. Eyni zamanda, qəbul edən server 1C: Enterprise-də bir neçə COM əlaqə obyekti ƏVVƏLDƏ yaradılır və yeni obyekt yaratmağa ehtiyac olmadığı üçün əlaqə yaratmaq daha da az vaxt tələb edir.

Müəyyən edilmiş parametrlər əsasında sorğu mətnləri yaratmaq üçün nəzərdə tutulmuş yeni Query Builder obyekti tətbiq edilmişdir. Bu obyekt hesabatın elektron cədvəl sənədinə çıxarılması və digər tapşırıqlarla əlaqəli olmayan hesabat qurucusunun funksionallığını dəstəkləyir. istifadəçi interfeysi. Bu obyekt 1C: Enterprise serverində və COM bağlantısında istifadə edilə bilər.

1C: Enterprise serverində daxili dili işləyərkən COM obyektlərindən istifadə edə bilərsiniz.

COM xətaları daxili dil istisnalarına çevrilir.

Konfiqurasiya etibarsız obyekt yaratmağa cəhd edərsə, məs. elektron cədvəl sənədi, xarici əlaqə modulunda, paylaşılan modulda və ya obyekt modulunda COM bağlantısı istisna hal kimi qurulmaya və ya kəsilə bilər.

Təlimatlar