1s dan com ulanishi orqali ma'lumotlarni qabul qilish. COM ob'ektlari bilan ishlashning uchta ustuni. COM ulanishi orqali ishlash siz o'ylagandan ko'ra osonroq. OLE ulanishini o'rnating

Chop etish (Ctrl+P)

1C ma'lumotlar bazalari o'rtasida ma'lumot almashish variantlaridan biri COM ulanishi orqali almashishdir. COM ulanishidan foydalanib, siz bir 1C ma'lumotlar bazasidan boshqasiga ulanishingiz va ma'lumotlarni o'qishingiz yoki yozishingiz mumkin. Ushbu usul ma'lumotlar bazalarining mijoz-server versiyalarida ham, fayl ma'lumotlar bazalarida ham qo'llanilishi mumkin. Ushbu maqolada ushbu turdagi ulanishlar 8.3 platformasida muhokama qilinadi

com ulanish

1C ilovasi uchun ikki turdagi COM ob'ektlarini yaratishingiz mumkin. Bu ole ulanishlar V83.Ilova va com ulanishlari V83.COMConnector . bo'lsa V83.Ilova 1C ilovasining deyarli to'liq nusxasi ishga tushirildi. Foydalanish holatida V83.COMConnector Kichik server qismi ishga tushirildi. Bu holda ishlash tezligi yuqoriroq, ammo ba'zi funktsiyalar mavjud bo'lmasligi mumkin. Xususan, tashqi ulanishlar bilan ishlash xususiyati o'rnatilmagan shakllar va umumiy modullar bilan ishlash. Ko'pincha siz foydalanishingiz kerak V83.COMConnector va faqat funksionallik yo'qligida V83.Ilova. Ishlash tezligidagi farq, ayniqsa, katta hajmli ma'lumotlar bazalarida sezilarli bo'lishi mumkin. 8.2 platformasi uchun foydalaniladi V82.Application yoki V82.COMConnector

OLE ulanishini o'rnating

Ulanish = Yangi COMObject(“V83.Application” );

COM ulanishini o'rnating

Ulanish = Yangi COMObject(“V83.COMConnector” );

Ulanish qatori

//Mijoz-server varianti uchun
Ulanish qatori= “Srvr = ““ServerName” “;Ref = “ “BaseName” ;
//Fayl rejimi opsiyasi uchun:
Ulanish qatori= "Fayl = ""PathKBase" “; Usr = Foydalanuvchi nomi; Pwd = Parol";
Urinish
Ulanish = Ulanish . Ulanmoq(ConnectionString);
Istisno
Xabar = Yangi MessageToUser;
Xabar . Matn = "Ma'lumotlar bazasiga ulanib bo'lmadi" + TavsifErrors(); Xabar . Hisobot uchun();
EndAttempt;

Aloqani uzish

Ulanish = Aniqlanmagan;
Ob'ekt uchun V83.Ilova Ulanishni to'xtatish kerak, aks holda to'liq bo'lmagan seans qoladi, keyin uni qo'lda o'chirish kerak bo'ladi. bo'lsa V83.COMConnector ulanish amalga oshirilgan protsedura tugagach, ulanish avtomatik ravishda uziladi Va yana bitta kichik nuqta bor. Ulanish amalga oshirilayotgan foydalanuvchi uchun uning sozlamalarida "Dasturni yopishda tasdiqlashni so'rash" katakchasi o'chirilgan bo'lishi kerak.

NewObject() usuli

Yangi ob'ekt yaratish uchun siz NewObject() usulidan foydalanishingiz mumkin, masalan:

Uchun V83.COMConnector

RequestCOM = Ulanish. NewObject( "So'rov") ;
TableCOM = Ulanish. NewObject( "Qiymatlar jadvali") ;
ArrayCOM = Ulanish. NewObject (“Masiv”);

ViewCOM =Connection.NewObject

Uchun V83.Ilova

RequestOLE = Ulanish. NewObject(" so'rov ") ;
TableOLE = Ulanish. NewObject("Qiymatlar jadvali") ;
ArrayOLE = Connection.NewObject("massiv");
ViewCOM =Connection.NewObject(“UniqueIdentifier”, StringUID);

RequestCOM . Matn ="TANLANG
| Tashkilotlarning pozitsiyalari Kodeks,
| Tashkilotlarning pozitsiyalari.Nomi
|FROM | Katalog.Tashkilotlarning pozitsiyalari
TASHKILOTLARNI QANDAY JOYLASH MUMKIN”;

Natija = RequestCOM. Run();
Namuna = Natija. () ni tanlang;
Salom tanlov. Keyingisi()Velosiped
EndCycle;
Shuningdek, siz konfiguratsiya ob'ekti menejerlaridan foydalanishingiz mumkin:
DirectoryCOM = Ulanish. Kataloglar. DirectoryName;
DocumentCOM = Ulanish. Hujjatlar. Hujjat nomi;
RegisterCOM = Ulanish. Axborot registrlari. RegisterName;

COM ulanishi orqali sanab olish va solishtirish

Konfiguratsiyada belgilangan ro'yxatga olish elementlarining qiymatlarini solishtirish uchun ushbu elementlarni taqqoslash oson bo'lgan ibtidoiy turlardan biriga aylantirish kerak. Bunday turlar sonli yoki bo'lishi mumkin string turi. Siz raqamlash elementining qiymatini quyidagi kabi raqamli turga o'zgartirishingiz mumkin:

Enum element = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum Values;

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));

Agar EnumerationItemNumber = 0 bo'lsa, hisobot bering( “Raqam qiymati1”);

ElseIfEnumerationItemNumber = 1 Keyin Hisobot ("EnumerationValue2");

endIf;

Identifikator bo'yicha COM orqali ob'ektni olish

Konfiguratsiya ob'ekti menejerlari orqali biz com ob'ektini olamiz, masalan:
DocumentCOM = Ulanish. Hujjatlar. Hujjat nomi;

Keyin biz noyob identifikator qatorini olamiz:

StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

Identifikator = Yangi U noyob identifikator (StringUID);
BILAN linkByIdentifier = Hujjatlar[DocumentName].GetLink(Identifikator);

Agar siz identifikator bo'yicha hujjat bo'yicha com ob'ektini topishingiz kerak bo'lsa, unda siz shunday yozishingiz kerak:

WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Salom Khabrachans!

Ushbu maqolada men tashkilotimda 1C platformasi bilan integratsiya qanday tashkil etilganligi haqida gapirmoqchiman. Meni bunga undagan narsa deyarli to'liq yo'qligim edi texnik ma'lumotlar bu mavzu haqida. 1C-ni har qanday axborot tizimiga ulash mavzusidagi turli maqolalar va hisobotlarni o'qib chiqib, siz qayta-qayta amin bo'lasizki, ularning barchasi marketing, namoyish xarakteriga ega va hech qachon texnik xususiyatga ega emas, muammo va uni hal qilishning mohiyatini aks ettiradi.

Men sizni ogohlantiraman, bu usul hech qanday tarzda universal deb da'vo qilmaydi. Chunki 1C konfiguratsiyasining o'zlari ko'p va axborot tizimlari, tillar va platformalar - bundan ham ko'proq, mumkin bo'lgan kombinatsiyalar soni juda katta. Mening maqsadim bitta mumkin bo'lgan yechimni ko'rsatishdir.


Men 1C bilan birlashtirilgan til sifatida Pythonni tanladim. Bu jarayonni avtomatlashtirish uchun juda mos keladi. Bunga sintaksisning minimalizmi yordam beradi (kod juda tez teriladi), boy standart kutubxona(uchinchi tomon modullariga kamroq ehtiyoj), o'zaro faoliyat platformalar - yuqori ehtimollik bilan Linix OS-da yozilgan kod Windows-da muvaffaqiyatli ishlaydi.

Boshlash uchun men ishlayotgan ma'lumotlarni sanab o'taman. Tashkilot Uzoq Sharq mintaqasida energiya sotuvchi kompaniya hisoblanadi - u taxminan 400 ming abonentga xizmat ko'rsatadi, 1C ma'lumotlar bazasi maxsus konfiguratsiyaga asoslangan. Har bir abonent uchun uning to'lovlari, to'lovlari, iste'mol qilingan xizmatlari va hisoblash sxemalari, hisoblagichlar, ko'rsatkichlar va boshqa ko'plab ma'lumotlar saqlanadi.

Bir paytlar biror tashkilot Delphida yozilgan va MSSQL/Firebird ma'lumotlar bazasi sifatida ishlatadigan dasturga ega edi. O'sha ajoyib vaqtlarda siz istalgan tilda ma'lumotlar bazasiga ulanishingiz va ko'plab amallarni bajarishingiz mumkin edi - qarzdor abonentlarni tanlash, qabul qilingan to'lovlarni joylashtirish, asboblar ko'rsatkichlarini yozib olish. Kun tartibini avtomatlashtiradigan skriptlar to'plami doimiy ravishda o'sib borayotgani ajablanarli emas. Dasturchilar dasturning o'zini ochmasdan har qanday amalni bajarishlari mumkin edi.

Afsuski, 1C ga o'tish bilan bepul dastur tugadi - endi ma'lumotlar bazasiga to'g'ridan-to'g'ri ulanish imkoni yo'q edi. Umuman olganda, 1C platformasining o'zi bo'linmaydi va boshqa tizimlar bilan integratsiyaga yaxshi mos kelmaydi. U, ular aytganidek, o'zida bir narsa. Ma'lumotni 1C-ga yuklayotganda, uni u erdan olish unchalik oson bo'lmasligini yodda tutishingiz kerak. Ammo tashkilot to'lov tizimlarini joriy etishi kerakligi sababli va Shaxsiy kabinet, bunga qandaydir yechim topish kerak edi.

Mening oldimdagi asosiy vazifalar aniq bir narsa bo'yicha ma'lumotlarni tezda olish qobiliyati edi shaxsiy hisob- To'liq ism, manzil, hisobga olish asboblari, hisoblagich ko'rsatkichlari, to'lovlar, to'lovlar. Bundan tashqari, hujjatlarni yaratish - solishtirish hisoboti, to'lov kvitansiyasi. Shunday qilib, ma'lumotlar bazasiga to'g'ridan-to'g'ri ulanish imkoniyati yo'q - SQL serveridagi 1C ma'lumotlar bazasini ko'rib chiqqan har bir kishi aaa1, aaa2 kabi jadvallar massasini tushunish qiyinligini ko'rdi. Va bunday jadval va maydon nomlari bilan so'rovlarni yaratish shunchaki haqiqiy emas. Bundan tashqari, ko'plab 1C jadvallari (ayniqsa, eng muhimlari, masalan, eng so'nggi, balanslar va inqiloblar) virtual bo'lib, turli jismoniy jadvallar bo'ylab tarqalib, bir nechta qo'shilish orqali to'planadi. Bu usul mos emas.

1C platformasi unga MAQOMOTI ulanishi orqali ulanish imkoniyatini beradi. Ko'pgina Windows dasturlari singari, 1C ni o'rnatish paytida tizimda ikkita MAQOMOTI ob'ekti ro'yxatga olinadi - Automation Server va COM Connector. Ikkala ob'ekt ham MAQOMOTI texnologiyasini qo'llab-quvvatlaydigan til yordamida ishlashi mumkin.

Avtomatlashtirish serveri ob'ekti 1C ilovasi bo'lib, oddiy mijoz ilovasidan deyarli farq qilmaydi. Farqi shundaki, qo'shimcha imkoniyat mavjud dastur nazorati ilova namunasi. COM Connector ob'ekti bilan ishlashda 1C ilovasining engil versiyasi ishga tushiriladi, unda shakllar, shuningdek interfeys va vizual effektlar bilan bog'liq funktsiyalar va usullar mavjud emas. Ilovaning o'zi "Tashqi ulanish" rejimida boshlanadi. Global o'zgaruvchilarni ishga tushirish (masalan, aniqlash joriy foydalanuvchi va uning sozlamalari) 1C tashqi ulanish modulida bajarilishi kerak. Agar tashqi ulanish rejimida kod ushbu rejimda mavjud bo'lmagan funksiyani chaqirsa, istisno chiqariladi (bu bizning Python skriptimizga o'tkaziladi). Xavfli funktsiyalarga qo'ng'iroqlar shakl konstruktsiyalari bilan tuzilishi kerak

#Agar tashqi qo'shilish bo'lmasa, ogohlantirish ("Salom!"); #EndIf

MAQOMOTI ob'ektlari bilan ishlash faqat Windows texnologiyasi bo'lganligi sababli, u standart Python distributiviga kiritilmaganligi ajablanarli emas. Siz kengaytmani o'rnatishingiz kerak bo'ladi - Python-da Windows ostida dasturlash uchun barcha zarur funktsiyalarni ta'minlaydigan modullar to'plami. Uni oldindan o'rnatilgan exe o'rnatuvchi sifatida yuklab olish mumkin. Kengaytmaning o'zi ro'yxatga olish kitobi, xizmatlar, ODBC, COM ob'ektlari va boshqalarga kirishni ta'minlaydi. Shu bilan bir qatorda siz darhol Win32 kengaytmasi bilan birga kelgan ActiveState Python distributivini o'rnatishingiz mumkin.

Bir muncha vaqt men veb-ilovalarni, xususan, shaxsiy hisobni ishlab chiqishda COM ulanishini sinab ko'rdim. Quyidagi kamchiliklar aniqlandi:

COM ulanishi sekin. Kam ishlash COM texnologiyasining taniqli kamchiligidir.
- 1C bilan ulanishni o'rnatish jarayoni, konfiguratsiyaga qarab, 1 dan 8 soniyagacha davom etishi mumkin (mening holimda - 6 soniya). Aytishga hojat yo'q, har bir so'rov uchun ulanish o'rnatilishi har bir sahifani yuklash uchun 8 soniya vaqt ketishiga olib keladi.
- Python-dagi veb-ilovalar mustaqil serverlar sifatida ishlaganligi sababli, oldingi nuqta ulanishni ba'zi global o'zgaruvchilarda saqlash va xatolik yuz berganda uni qayta tiklash orqali qoplanishi mumkin. Rostini aytsam, men hali PHP-da ulanishni qanday saqlash haqida o'ylamaganman.
- Veb-ilovaning platformalararo funksiyasi yo'qoladi.

Yuqorida sanab o'tilgan fikrlarga asoslanib, o'zaro ta'sir tamoyilini o'zgartirishga qaror qilindi, uni 2 qismga bo'lish - birinchi platformaga bog'liq (Oynaga asoslangan), 1C ma'lumotlarini istalgan qulay formatga yuklash va ikkinchisi, platformadan mustaqil, printsipial jihatdan 1C haqida hech narsaga shubha qilmasdan ma'lumotlar bilan ishlashga qodir.

Harakatlar strategiyasi quyidagicha: Python skripti 1C ga ulanadi, kerakli so'rovlarni bajaradi va ma'lumotlarni SQLite ma'lumotlar bazasiga yuklaydi. Ushbu ma'lumotlar bazasiga Python, PHP, Java-dan ulanishingiz mumkin. Loyihalarimizning aksariyati Python da ishlaydi va men SQL so'rovlarini qo'lda yozishga dosh berolmayman, SQLite ma'lumotlar bazasi bilan barcha ishlar SQLAlchemy ORM orqali amalga oshiriladi. Ma'lumotlar bazasi ma'lumotlar tuzilmasini deklarativ uslubda tasvirlash talab qilingan yagona narsa edi:

sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Ustun, Integer, Numeric, DateTime, Unicode, Boolean, LargeBinary, ForeignKey Base = declarative_base() klassi Abonent(Base): __tablename__, Primer Co.__ ="key Rost) hisob = Ustun(Unicode(32), indeks=True) kod = Ustun(Unicode(32)) manzil = Ustun(Unicode(512)) fio = Ustun(Unicode(256)) manba = Ustun(Unicode(16) ) psu = Ustun(Unicode(256)) tso = Ustun(Unicode(256)) np = Ustun(Unicode(256)) ko'cha = Ustun(Unicode(256)) uy = Ustun(Integer) flat = Column(Integer) mro = Ustun(Unicode(256)) klassi Toʻlov(Asosiy): __jadval nomi__ = "toʻlovlar" # va hokazo...

Endi siz ushbu modulni istalgan Python loyihasiga import qilishingiz kerak va siz ma'lumotlar bilan ishlashingiz mumkin.

Men sizning savolingizni oldindan bilaman - "nima uchun SQLite"? Asosiy sabab shundaki, ma'lumotlar bazasi faqat o'qish uchun mo'ljallangan, shuning uchun SQLite-ga yozish bilan bog'liq muammolar bizni tashvishlantirmasligi kerak. Ikkinchidan, ushbu DBMS formati qulay - uni ko'rish qulayroq (ko'p bepul kommunal xizmatlar, shu jumladan FireFox uchun super kengaytma). Uchinchidan, ba'zi hollarda MySQL serveriga ulanmagan mashinalardan abonentlarga kirish huquqiga ega bo'lish kerak edi. Bunday holda, SQLite ma'lumotlar bazasi faylini nusxalash kifoya qiladi va bu mashina barcha ma'lumotlarga kirish huquqiga ega bo'ladi.

Tushirish kuniga bir marta kechasi sodir bo'ladi. 1C ga ma'lumotlarni kiritish xuddi shu tarzda avtomatlashtirilishi mumkin. Masalan, shaxsiy hisob veb-saytida abonentlar qoldirgan o'qishlarni yozib olish talab qilinadi. Bunday holda, biz yana 1C ga ulanamiz va dasturiy ravishda "O'qishlar akti" hujjatini yaratamiz va joylashtiramiz. Men quyida kodni beraman.

Pythonda COM ob'ektlari bilan ishlash biroz g'ayrioddiy. Birinchidan, kodning "Pythonicity" yo'qoladi - 1C-da o'zgaruvchilar va funktsiyalarni nomlash qoidalari, yumshoq qilib aytganda, Python Zen-ga mos kelmaydi. Ikkinchidan, hamma biladiki, 1C ob'ektlari ko'pincha kirill harflari bilan nomlanadi, bu Python-da ishlab chiqishda muammolarga olib keladi ... lekin ularni hal qilish mumkin. Men sizga kodni ko'rib chiqishni taklif qilaman:

Import pythoncom import win32com.client V82_CONN_STRING = "Srvr=v8_server;Ref=v8_db;Usr=username;Pwd=megapass;" pythoncom.CoInitialize() V82 = win32com.client.Dispatch("V82.COMConnector").Ulanish(V82_CONN_STRING)

Koddan ko'rinib turibdiki, mijoz 1C bilan ishlash uchun ishga tushirilgan. MAQOMOTI ob'ekti "V82.COMConnector" nomi bilan aniqlanadi. E'tibor bering, bu nom V8.2 platformasi uchun amal qiladi, agar sizda 8.1 versiyasi bo'lsa, u holda nom "V81.COMConnector" bo'ladi.

Biz ishga tushirilgan mijozda Connect() usulini chaqiramiz va unga ulanish satrini uzatamiz. Satr server nomi, ma'lumotlar bazasi, foydalanuvchi va paroldan iborat. Olingan V82 ob'ekti 1C ilovasiga ulanishni saqlaydi. Unda Disconnect() usuli yoki shunga o'xshash narsa yo'q. Ma'lumotlar bazasidan uzish uchun del() funksiyasi yordamida ob'ektni xotiradan o'chirish yoki uni None o'zgaruvchisiga belgilash kifoya.

Ob'ektga ega bo'lgan holda, siz 1C global kontekstining har qanday maydonlari va usullariga kirishingiz, TabularDocument, ValueTable va boshqalar kabi universal ob'ektlar bilan ishlashingiz mumkin. Shuni ta'kidlash kerakki, MAQOMOTI ulanishi orqali ishlaganda 1C "Tashqi ulanish" rejimida ishlaydi. U qalqib chiquvchi dialoglar, bildirishnomalar va eng muhimi, shakllar kabi interaktiv funksiyalarga ruxsat bermaydi. Ishonchim komilki, siz hujjat shakli modulidagi Button1Press() protsedurasining eng muhim funksiyalarini qamrab olgan konfiguratsiyani ishlab chiquvchilarni bir necha marta la'natlaysiz.

Keling, kirill atributlari kabi muhim narsa haqida gapiraylik. 1C ikki tilli muhit va har bir rus usuli uchun ingliz tilidagi analog mavjud bo'lishiga qaramay, ertami-kechmi siz kirill atributiga murojaat qilishingiz kerak bo'ladi. Agar bu PHP yoki VBSCript tillarida hech qanday muammo tug'dirmasa,

Set Con = CreateObject("v81.COMConnector") Set v8 =Con.Connect("Connection string") Set AccountsManager = v8.Documents.Accounts.... Set AccountsRecord= AccountsManager.CreateItem() AccountsRecord.Account = ... ... ... AccountsRecord.Write()

Keyin Python kodi sintaksis xatosi bilan ishdan chiqadi. Nima qilsa bo'ladi? Konfiguratsiya tahrirlansinmi? Yo'q, getattr va setattr usullaridan foydalanish kifoya. COM ob'ektini va atributning kirillcha nomini ushbu funktsiyalarga o'tkazish orqali siz shunga mos ravishda qiymatlarni olishingiz va o'rnatishingiz mumkin:

#coding=cp1251 katalogi = getattr(V82.Kataloglar, "Shaxsiy hisoblar")

Quyidagilar muhim: tafsilotlarning nomlari, shuningdek funktsiyalar va usullarning parametrlari cp1251 kodlashda uzatilishi kerak. Shuning uchun, kodlash bilan oldindan chalkashmaslik uchun uni faylning boshida e'lon qilish mantiqan to'g'ri keladi: #coding=cp1251. Keyin ularni kodlash haqida qayg'urmasdan satrlarni o'tkazishingiz mumkin. Lekin! 1C dan olingan barcha satrlar (chaqiruv funktsiyalari, so'rovlar natijalari) UTF-8 kodlashda bo'ladi.

1C muhitida so'rovni bajaradigan, natijani takrorlaydigan va ma'lumotlar bazasini SQLite-da saqlaydigan kod misoli:

#coding=cp1251 q = """ Shaxsiy hisoblarni tanlang. Kod AS kodi, Shaxsiy hisoblar. Bino. Hisob-kitob. Ism + ", " + Shaxsiy hisoblar. Qisqa manzil AS manzili, Shaxsiy hisoblar. Abonent. Ism AS fio, Shaxsiy hisoblar. Bo‘lim nomi AS psu, EXPRESS (Shaxsiy hisoblar bo‘limining oxirgi qismi. Qiymati AS katalogi. Hududiy tarmoq tashkilotlari). Nomi AS tso, Shaxsiy hisoblar. Bino. Aholi punkti. Nomi AS np, Shaxsiy hisoblar. Bino. Ko‘cha. Nomi AS ko'chasi, Shaxsiy hisoblar. Bino. Uy AS uy, Shaxsiy kabinet a.Asosiy xona.XonaNumber AS kvartira , PersonalAccounts.Division.Parent.Name AS mro FROM Directory.PersonalAccounts AS Personal Accounts ULANISHNI CHAPLADI Ro'yxatdan o'tish ma'lumotlari. = VALUE(Directory.Types of Characteristics.Territorial Network Organization)) AS CharacteristicsL PersonalAccountsSliceLast dasturiy ta'minot PersonalAccounts.Link = CharacteristicsPersonalAccountsSliceLast.Object """ so'rovi = V82.NewObject",(Ex)quose("quose"). ) CONN = db.connect() CONN.query(models.Abonent).delete() tanlash paytida.Next(): abonent = models.Abonent() abonent.account = selection.code.strip() abonent.code = tanlash .code abonent.fio = selection.fio abonent.address = selection.address abonent.psu = selection.psu abonent.tso = tanlash. tso abonent.source = u"ASRN" abonent.np = selection.np abonent.street = tanlash .ko'cha abonent.uy = tanlov.uy abonent.flat = tanlov.kvartira abonent.mro = select.mro CONN.add(abonent) CONN.commit()

Bu erda CONN - bu SQLite ma'lumotlar bazasi bilan ulanish seansi. So'rov ob'ekti yaratiladi va uning matni to'ldiriladi. Yuqorida ta'kidlab o'tilganidek, so'rov matni cp1251 da bo'lishi kerak, buning uchun kodlash birinchi bo'lib e'lon qilinadi. So'rov bajarilgandan so'ng, dublikatlarni qo'shmaslik uchun barcha abonentlar ma'lumotlar bazasida o'chiriladi, keyin ular tsiklga qo'shiladi va yakuniy majburiyat bajariladi.

So'rovlar bilan ishlashda men quyidagi qoidalarni topdim.

Maydonlarni tanlashda ularga lotin harflarida nom bering, ularga getattr() o'rniga selektor (nuqta) orqali kirish ancha qulayroq bo'ladi.
- Faqat ibtidoiy ma'lumotlar turlarini tanlang: satrlar, raqamlar, sana va mantiqiy. Hech qachon ob'ektga (hujjat, ma'lumotnoma) havolalarni tanlamang! Shu nuqtai nazardan, sizga havolalar mutlaqo kerak emas va hatto zararlidir, chunki havola tayanchi yoki usuliga har qanday qo'ng'iroq MAQOMOTI ulanishi orqali so'rovga olib keladi. Agar siz tsikldagi havola atributlariga kirsangiz, u juda sekin bo'ladi.
- Agar sana turidagi maydonni tanlasangiz, u PyTime obyekti sifatida qaytariladi. Bu MAQOMOTI ulanishida sana-vaqtni uzatish uchun maxsus ma'lumotlar turi. U bilan ishlash odatiy sana bilan ishlash unchalik qulay emas. Agar siz ushbu ob'ektni int() ga o'tkazsangiz, u vaqt tamg'asini qaytaradi, undan so'ng fromtimestamp() usuli yordamida sana vaqtini olishingiz mumkin.

Endi bosma hujjatlar qanday shakllantirilishini ko'rib chiqamiz. Gap shundaki, iste'molchiga oldindan tayyorlangan hujjatlarni, masalan, to'lov kvitansiyasi yoki solishtirish hisobotini yuklab olish imkoniyati berilishi kerak. Ushbu hujjatlar belgilangan talablarga muvofiq 1C da yaratilgan, ularni Python-da amalga oshirish juda ko'p vaqtni oladi. Shuning uchun hujjatlarni 1C da yaratish va ularni saqlash yaxshiroqdir Excel formati.

Shunday qilib, yarashuv dalolatnomasi hujjati maxsus tomonidan tuziladi tashqi ishlov berish. 1C terminologiyasi bilan tanish bo'lmaganlar uchun: ishlov berish - bu 1C muhitida ishlash uchun mo'ljallangan o'z moduli, shakllari, shablonlariga ega bo'lgan mustaqil dastur. Qayta ishlashni boshlash, uning tafsilotlarini to'ldirish va bizga 1C da ko'rish uchun mo'ljallangan elektron jadval hujjatini qaytaradigan funktsiyani chaqirish kerak. Ushbu hujjat Excel formatida saqlanishi va serverga ko'chirilishi yoki ma'lumotlar bazasiga yozilishi kerak.

Havola = getattr(V82.Kataloglar, "Tizim hisobotlari").FindByDescription("Ellen kelishuv hisoboti") nav_url = V82.GetURL(havola, "Hisobot") nomi = V82.ExternalReports.Connect(nav_url) Tashqi hisobot = V82.Tashqi hisobot Yaratish (nom) setattr(Tashqi hisobot, "PersonalAccount", mos yozuvlar) table_doc = ExternalReport.GetDoc() path = V82.GetTempFileName("xls") table_doc.Write(yo'l, V82 .SpreadsheetDocumentFileType.XLS) hisoboti() = modellar.Report hisobot .hisob = referans.Code.strip() report.type = u"act" report.document = open(yo'l, "rb").read() CONN.add(hisobot)

Yuqoridagi fragment quyidagilarni bajaradi: Hujjatni yaratadigan ishlov berish ulanadi. Qayta ishlash konfiguratsiyaga kiritilishi mumkin, diskda yoki 1C ma'lumotlar bazasida (ba'zi kataloglarda) saqlanishi mumkin. Qayta ishlash tez-tez o'zgarganligi sababli, konfiguratsiyani har safar yangilamaslik uchun, eng tez-tez o'zgarib turadigan ishlov berish "Tizim hisobotlari" katalogida, Hisobot nomli "qiymatni saqlash" atributida saqlanadi. Qayta ishlash uni ma'lumotlar bazasidan diskka tushirish va yuklash yoki GetURL() usuli yordamida ishga tushirilishi mumkin, unga katalog elementi va atribut nomiga havolani o'tkazish kerak. Qabul qilingan ishlov berish ob'ektiga ma'lumotlarning qiymatlarini tayinlaymiz, eksport qilingan GetDoc() funktsiyasini chaqiramiz va vaqtinchalik Excel fayliga saqlangan elektron jadval hujjatini olamiz. Ushbu faylning mazmuni SQlite ma'lumotlar bazasiga yozilgan.

Ko'rib chiqilishi kerak bo'lgan oxirgi narsa - ma'lumotlarni 1C ga dasturiy ravishda kiritish. Aytaylik, siz obunachilarning guvohliklarini kiritishingiz kerak. Buni amalga oshirish uchun "Gudolik akti" hujjatini yaratish va amalga oshirish kifoya:

#coding=cp1251 acts = getattr(V82.Documents, "Act of Guvolik") akt = acts.CreateDocument() setattr(akt, "Guvohlik", 1024.23) setattr(akt, "Abonent", "Ivanov") # To'ldirish boshqa tafsilotlarda ... act.Write()
Endi ma'lumotlarni kiritish avtomatlashtirilgan.

Shunday qilib, men COM ulanishi yordamida ma'lumotlarni dasturiy yuklash va yuklab olishga asoslangan usulni aytib berdim. Bu usul mening tashkilotimda deyarli bir yildan beri muvaffaqiyatli ishlamoqda. 1C-dan tashkil topgan ma'lumotlar bazasi 3 ta to'lov tizimiga, Internet-ekvayringga (Internet orqali kartalar orqali to'lov), shuningdek, shaxsiy kabinetga xizmat ko'rsatadi. Bundan tashqari, ular ma'lumotlar bazasiga ulanadi turli skriptlar tartibni avtomatlashtirish uchun.

Usulning kamchiliklariga qaramay (sekin MAQOMOTI ulanish tezligi), umuman olganda u barqaror ishlaydi. Bizda platformadan mustaqil shakldagi (SQLite) maʼlumotlar mavjud boʻlib, ular bilan istalgan tilda ishlash mumkin. Kodning asosiy qismi esa Python-da yozilgan, ya'ni 1C da orzu ham qila olmaydigan ko'plab vositalar va texnikalar mavjud.

Bu biri mumkin bo'lgan usullar 1C bilan o'zaro ta'sir. Ishonchim komilki, bu yangi emas va ehtimol kimdir tomonidan sinovdan o'tgan va optimallashtirilgan. Biroq, men sizni o'zim qadam bosgan tuzoqlardan himoya qilish uchun jarayonning iloji boricha ko'proq tafsilotlarini taqdim etishga harakat qildim.

Barchangizga omad tilayman va esda tutingki, 1C o'ylagandek qo'rqinchli emas!

1C ma'lumotlar bazalari o'rtasida ma'lumot almashish variantlaridan biri COM ulanishi orqali almashishdir.

COM ulanishidan foydalanib, siz bir 1C ma'lumotlar bazasidan boshqasiga ulanishingiz va ma'lumotlarni o'qishingiz yoki yozishingiz mumkin. Ushbu usul ma'lumotlar bazalarining mijoz-server versiyalarida ham, fayl ma'lumotlar bazalarida ham qo'llanilishi mumkin. Ushbu maqolada biz ushbu turdagi ulanishning misollarini ko'rib chiqamiz. Misollar 8.2 platformasidan foydalanadi.

1C ilovasi uchun ikki turdagi COM ob'ektlarini yaratishingiz mumkin. Bu V82.Ilova Va V82.COMConnector. bo'lsa V82.Ilova 1C ilovasining deyarli to'liq nusxasi ishga tushirildi. foydalanilgan taqdirda V82.COMConnector Kichik server qismi ishga tushirildi.
Bu holda ishlash tezligi yuqoriroq, ammo ba'zi funktsiyalar mavjud bo'lmasligi mumkin. Xususan, tashqi ulanishlar bilan ishlash xususiyati o'rnatilmagan shakllar va umumiy modullar bilan ishlash. Ko'pincha siz foydalanishingiz kerak V82.COMConnector va faqat funksionallik yo'qligida V82.Ilova. Ishlash tezligidagi farq, ayniqsa, katta hajmli ma'lumotlar bazalarida sezilarli bo'lishi mumkin.

Shunday qilib, keling, boshlaylik

  1. COM ob'ektini yarataylik
    • Uchun V82.Ilova Ulanish = Yangi COMObject("V82.Application" );
    • Uchun V82.COMConnector Ulanish = Yangi COMObject("V82.COMConnector" );
  2. Keling, ulanish qatorini yarataylik
    • ma'lumotlar bazasi server versiyasi uchun ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • ma'lumotlar bazasining fayl versiyasi uchun ConnectionString = "File = " "PathKBase" "; Usr = foydalanuvchi nomi; Pwd = parol";
  3. Ma'lumotlar bazasiga ulanish Ulanishga urinish = Ulanish. Connect (ConnectionString) ; Istisno xabari = New MessageToUser; Xabar. Matn = + ErrorDescription(); Xabar. Hisobot qilish (); EndAttempt;
  4. Ma'lumotlar bazasidan uzilish Ulanish = Aniqlanmagan;

    Ob'ekt uchun V82.Ilova Ulanishni to'xtatish kerak, aks holda to'liq bo'lmagan seans qoladi, keyin uni qo'lda o'chirish kerak bo'ladi. bo'lsa V82.COMConnector ulanish amalga oshirilgan protsedura tugagach, ulanish avtomatik ravishda uziladi Va yana bitta kichik nuqta bor.

    Ulanish amalga oshirilayotgan foydalanuvchi uchun uning sozlamalarida "Dasturni yopishda tasdiqlashni so'rash" katakchasi o'chirilgan bo'lishi kerak.

Endi barcha kodlarni birlashtiramiz

Ulanish = Yangi COMObject("V82.Application" ); //Ulanish = Yangi COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Fayl = ""S:\MyBase""; Usr = Petya; Pwd = 123"; Ulanishga urinish = Ulanish. Connect (ConnectionString) ; Istisno xabari = New MessageToUser; Xabar. Matn = "Ma'lumotlar bazasiga ulanib bo'lmadi"+ DescriptionError(); Xabar. Hisobot qilish (); EndAttempt; Ulanish = Aniqlanmagan;

Ulanish turi uchun V82.Ilova usul dastlab yaratilgan MAQOMOTI ob'ekti uchun va uchun ishlatiladi V82.COMConnector usuli ulanish uchun qo'llaniladi. so'rov daromadlari bilan keyingi ish standart vositalar 1C. kodda shunday ko'rinadi:

So'rov = Ulanish. NewObject("So'rov"); // Uchun V82.COMConnector So'rov = Ulanish. NewObject("So'rov"); // Uchun V82.Ilova So'rov. Matn = "Tanlash | Tashkilotlarning pozitsiyalari Kodeks, | Tashkilotlarning pozitsiyalari.Nomi|FROM | Ma'lumotnoma. Tashkilotlarning pozitsiyalari AS Tashkilotlarning pozitsiyalari"; Natija = so'rov. Run(); Namuna = Natija. Choose(); Salom tanlov. Next() Loop EndLoop ;

1C: Enterprise 8.3 versiyasi uchun hamma narsa o'zgarishsiz qoladi, bundan mustasno COM ob'ektlarini yaratishda siz foydalanishingiz kerak "V83.COMConnector" yoki "V83. Ilova".

)Hammasi to'g'ri

Shu bilan birga, men 10 ballga ham yetmagan nashrlar shunchaki "ko'tarilganini" bir necha bor ko'rganman.
Nima uchun bu sodir bo'ldi? Ko'rinishidan, kimdir ularni aniq yoqtirganligi sababli.


Men shuni aytmoqchimanki, reyting maqolasini o'qimay turib, sizga qanchalik kerakligini tushunish yoki uni oddiy emas +/- baholash yaxshi bo'lar edi. Menga yoqqan narsaga kelsak, men buni shunday tuzatgan bo'lardim: yulduzlar to'g'ri kelishi va ko'pchilik saytga to'plangani va ko'pchilikka yoqqanligi tufayli u shunchalik ko'p foyda oldi, buni o'zingiz tushunasiz, chunki bu tasodifiy masala, chunki maqola chiqib ketishi bilanoq bosh sahifa keyin uni faqat so'rov bo'yicha topish mumkin va shuning uchun hamma ovoz berish orqali o'tadi. Va men tushunganimdek, doimiy sharhlar = maqolani targ'ib qilish uni asosiy sahifada saqlashga imkon beradi.
Aynan shuning uchun ular do'konlarni jamoat ko'chalariga qo'yishadi - axir, ko'pincha tovarlarning sifati va dolzarbligi emas, balki joyning harakatchanligi muhim; piyoda yurgan odamlar ko'pincha ertasi kuni tashlab yuboradigan narsalarni sotib olishadi, shunchaki jarayon uchun. Bu uzoq vaqtdan beri hammaga ma'lum bo'lgan kasallik - xarid qilish, giyohvandlik. Yoki oddiygina oqimni oshirish to'g'ri xaridorning ehtimolini oshiradi.

Va ijobiy va salbiy tomonlari ... - bu sarflangan vaqt va mehnat uchun o'ziga xos "rahmat"


Bular. Minus ham "rahmat" deb hisoblanadimi? Men sizning fikringizni bilmoqchi edim, bu kabi holatlarda foydalanish kerakmi va boshqalar qanday qiziqarli deb o'ylashadi? Maqola zararli/yomon bo'lsa yoki shunchaki foydasiz/bo'sh bo'lganda qo'yish kerakmi?
Menimcha, maqola oddiy reyting o'sishiga o'xshaydi, chunki:
1. Men keltirgan turlar bilan bog'liq muammo muallif tomonidan butunlay e'tibordan chetda qoldi, garchi u ko'plab sharhlar yozishga dangasa emas edi.
2. Maqolada yaqqol noaniqlik bor: buning yagona yo‘li, deyiladi

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


lekin men buni shunday ishlov berish yordamida osongina qila olaman:

Hisobot (Asosiy. Kataloglar. Qarama-qarshi tomonlar. Nomi bo'yicha topish("MChJ"). Kod);


va hamma narsa yaxshi! Va men V82.ComConnector ulanishini tanlayman
Muallif o'z maqolasida ko'rsatilgan muammolarni o'z ichiga olganiga umuman ahamiyat bermasligi g'alati, lekin u hech qanday munosabat bildirmaydi.
3. Ammo "Sinf mavjud emas" xatosi paydo bo'lganda muammo hali ham mavjud
4. Ammo 8.2 o'rnatilganda, keyin esa 8.1 o'rnatilganda muammo bor - OLE/COM orqali standart UT-BP almashinuvi bilan almashishga harakat qiling!
5. Yangi boshlanuvchilar vaqtni behuda sarf qilmasliklari uchun OLE/COM orqali universal ulanish imkonini beruvchi saytdagi asosiy ishlov berishni ko'rsata olasizmi, siz ular uchun yozasiz! Aytgancha, negadir uning surati sizning ekraningizda, nega? Va natijada, 2 ta so'z mazmuni va yana 6 tasi sahna ortida.

Umuman olganda, men loyni tashlamayman, lekin aniq bo'shliqlarni ko'rsataman, lekin nol reaktsiya mavjud. Agar bu siz baham ko'rayotgan tajriba bo'lsa, unda bu qandaydir xato va to'liq emas.
Mening fikrim shuki, agar muallif barcha kamchiliklarni to'plashni xohlasa, u hech bo'lmaganda boshqalarning tajribasini tinglashi va sharhlarga tushmasligi mumkin edi. Vaziyat darhol paydo bo'ladiki, uni o'qigan odam muallifdan ko'ra ko'proq narsani biladi, ular unga aytadilar (ba'zan noto'g'ri) va u ham javob qaytaradi. Natijada, barcha ma'lumotlar maqolada emas, balki sharhlarda! Qiziq! Bu tez-tez sodir bo'ladi, lekin siz eng yaxshisini xohlaganingizga e'tibor qaratishingiz shart emas - men eng yaxshisini ko'rsataman va boshqalar buni ko'rsatadi! Buni maqolaga qo'shing va bu foydali bo'ladi, hamma ham bu to'qnashuvni o'qishga qiziqmaydi.

Ma'lumotlarni bitta 1C konfiguratsiyasidan boshqasiga o'tkazish usullaridan biri dasturiy ta'minot ulanishi COM yordamida. Ko'pgina kompaniyalar bir nechta turli ma'lumotlar bazalaridan foydalanadilar, ular orasida ma'lum aloqalar va bog'liqliklar bo'lishi kerak. Agar nafaqat ma'lumotlarni uzatish, balki ma'lum ma'lumotlarni qayta ishlashni amalga oshirish kerak bo'lsa, u holda MAQOMOTI ulanishi optimal mexanizm bo'ladi. Boshqa 1C ma'lumotlar bazasidan ma'lumotlarni tahlil qilish qobiliyati har qanday ishlab chiquvchi uchun foydalidir.

Biz COM orqali 1C ma'lumotlar bazasiga ulanamiz

1C da MAQOMOTI ulanishini amalga oshirish uchun COMConnector deb nomlangan maxsus mexanizm qo'llaniladi. Ushbu ob'ekt platforma bilan birga o'rnatiladi va aloqa uchun ishlatiladi axborot bazalari. Shuni ta'kidlash kerakki, 8.2 va 8.3 versiyalari uchun mos ravishda "V82.COMConnector" va "V83.COMConnector" nomli ob'ektlar qo'llaniladi.

Ma'lumotlar bazasiga MAQOMOTI ulanishining davomiyligi litsenziyani talab qilishini unutmang - bir vaqtning o'zida bir nechta ulanishlarni bajarish bilan shug'ullanmang. Bu, ayniqsa, cheklangan miqdordagi litsenziyaga ega bo'lgan tashkilotlar uchun juda muhimdir. Ushbu muammoni yordamida hal qilish mumkin muntazam vazifalar ma'lumotlar bazasiga faol foydalanuvchi ulanishlari bo'lmaganda amalga oshiriladi.

Boshqa ma'lumotlar bazasiga ulanish va kerakli ma'lumotlarni so'rash uchun siz quyidagi ma'lumotlarni bilishingiz kerak:

  1. Bu qanday turdagi - fayl yoki mijoz-server;
  2. U qayerda joylashgan;
  3. Tizimga kirish uchun qanday nom va paroldan foydalanishingiz mumkin?
  4. Sizni qaysi ma'lumotlar qiziqtiradi?

Birinchi uchta nuqtadan boshlab, MAQOMOTI ulanishini amalga oshirish uchun siz parametrlar qatorini yaratishingiz kerak. Axborot xavfsizligi turiga qarab, u farqlanadi ko'rinish. Qabul qilingan satr yordamida ulanish amalga oshiriladi, uning yordamida siz boshqa ma'lumotlar bazasidan har qanday usullar yordamida tahlil qilish va qayta ishlash uchun ma'lumotlarni to'plashingiz mumkin.

Connection ParametersFileIB = "Fayl=""ma'lumotlar bazasiga_yo'l""; Usr=""Foydalanuvchi_nomi"";Pwd=""Parol"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Ma'lumotlar bazasi_Name""; Usr=""Foydalanuvchi_Name""; Pwd=""Parol""";

Ulanish funktsiyasi oddiy va barcha parametrlar to'g'ri ko'rsatilgan bo'lsa, hech qanday savol tug'dirmasligi kerak. Nosozliklarni tuzatish va tahlil qilishni tezlashtirish uchun mumkin bo'lgan xatolar ulanishni "Sinab ko'ring" konstruktsiyasiga yopish yaxshiroqdir. Funktsiya "COM ob'ekti" turidagi qiymatni qaytaradi, uning yordamida siz kerakli ma'lumotlarni olish uchun ishlaysiz.

&OnServer Function ConnectToBase() exportConnectionIB Parametrlari = "Fayl=""E:\1c ma'lumotlar bazasi\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Yangi COMObject("V83.COMConnector"); Qaytishga urinish V83COMCon.Connect(IB ulanish parametrlari); Istisno hisoboti (ErrorDescription()); Qaytish aniqlanmagan; EndAttempt; EndFunction

MAQOMOTI ulanishi orqali siz nafaqat ma'lumotlarni tanlashingiz, balki uni ulanayotgan ma'lumotlar bazasiga ham qo'shishingiz mumkin. Esda tutingki, biz COM ob'ekti orqali 4 ta ibtidoiy ma'lumotlar turini uzatishimiz mumkin. Boshqa turlar platformaning o'rnatilgan qidiruv funksiyalari yordamida belgilanishi kerak. E'tibor bering, global platforma funktsiyalari MAQOMOTI ulanishi orqali ham chaqiriladi.

Biz 1C ma'lumotlar bazasidan ma'lumotlarni olamiz

Istalgan ob'ektni olganingizdan so'ng, siz boshqa ma'lumotlar bazasidan ma'lumotlarni o'qishingiz kerak. Buning uchun biz funktsiyadan "COM ob'ekti" turining qabul qilingan qiymatidan foydalangan holda 1C 8.3 da COM ulanishi orqali so'rovdan foydalanamiz. Avval ma'lumotlar bazasiga ulanish va keyin so'rovni bajarish muhimdir. Bajarish NewObject usuli orqali amalga oshiriladi, ob'ekt turini satr shaklida parametr sifatida ko'rsatadi - "So'rov".

&OnServer protsedurasi TestCOMOnServer() Ulanish = ConnectToBase(); TypeValue(Connection) Type("Aniqlanmagan") bo'lsa, RequestBPZO = Connection.NewObject("So'rov"); RequestBPZO.Text = "Birinchi 15 tasini tanlang | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Tanlang = RequestBPZO.Execute().select(); While Selection.next() sikl hisoboti(Selection.Number); EndCycle; endIf; Jarayonning oxiri >

Masalan, ma'lum bir bo'lim foydalanuvchilari haqida ma'lumot olish uchun parametrlar orqali so'rovda shart qo'yamiz. Bitta parametr oddiy turdagi - string bo'ladi va bo'linish "Korxona tuzilmasi" katalog elementiga havola bo'ladi. So'rov natijasi COM ulanishi sodir bo'lgan ma'lumotlar bazasida mavjud bo'lgan turdagi ro'yxatdagi maydonlar bilan jadvaldir. Agar siz ularni boshqa turlarga aylantirishingiz kerak bo'lsa, standart platforma funktsiyalaridan foydalaning:

  • Line();
  • raqam();
  • Sana().
RequestBPZO = Connection.NewObject("So'rov"); RequestBPZO.Text = "Birinchi 15 tasini tanlang | DirectoryUser.Name AS Nom | FROM | Directory.Users AS DirectoryUser I QAYERDA | DirectoryUser.Department = &RequiredDepartment | Va DirectoryUser.Name kabi ""%"" + &RequiredName+ ""%""" ; Request BPZO.SetParameter("Majburiy bo'lim", Ulanish. Kataloglar. Korxona tuzilmasi. Kod bo'yicha topish("00-000023")); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Tanlang = RequestBPZO.Execute().select(); While Selection.next() sikl hisoboti (Selection.Name); EndCycle;

Agar massivni bir nechta parametrlar, masalan, bo'limlar bo'yicha tanlash uchun ma'lumotlar bazasiga o'tkazish kerak bo'lsa, NewObject buyrug'i ham qo'llaniladi. Xuddi shunday, siz ro'yxat yoki qiymatlar jadvalini ulanish orqali boshqa ma'lumotlar bazasi elementlari bilan to'ldirishingiz mumkin. Platforma ob'ektlari va mexanizmlarining barcha mavjud usullari siz izlash uchun mavjud.

RequestBPZO = Connection.NewObject.("So'rov"); RequestBPZO.Text = "Birinchi 15 tani tanlang | DirectoryUser.Name AS Nom | FROM | Directory.Users AS DirectoryUser I QAYERDA | DirectoryUser.Department B (&NecessaryDepartment) | Va DirectoryUser.Name kabi ""%"" + &NecessaryName+ ""%" " "; Bo'limlar massivi = Connection.NewObject("Masiv"); Bo'limlar massivi.Qo'shish(Ulanish.Directories.Korxona tuzilmasi.Kod bo'yicha toping("00-000023")); Bo'limlar massivi.Qo'shish(Ulanish.Directories.Korxona tuzilmasi.Kod bo'yicha toping("00-000038")); Bo'limlar massivi.Qo'shish(Ulanish.Directories.Korxona tuzilmasi.Kod bo'yicha toping("00-000046")); BPZO.SetParameter so'rovi ("Talab qilinadigan bo'lim", Bo'limlar massivi); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Tanlang = RequestBPZO.Execute().select(); While Selection.next() sikl hisoboti (Selection.Name); EndCycle;

Hujjatlar yoki katalog elementlarini o'tkazishda har doim ma'lum bir ob'ektni uzatishni nazorat qilish masalasi paydo bo'ladi. MAQOMOTI ulanishlari yordamida bunday muammolarni yagona identifikator orqali hal qilish mumkin. Identifikatorni satr sifatida ishlatib, "GetLink" funktsiyasidan foydalangan holda joriy axborot xavfsizligidan identifikator bo'yicha plagin ma'lumotlar bazasida ob'ektni topishingiz kerak. Agar topilmasa, uni MAQOMOTI ulanishi yordamida yaratishingiz mumkin.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Agar NO ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) keyin NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Ism; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NewUser.Write(); endIf;

Shuningdek, MAQOMOTI ulanishi "Tashqi ulanish" xususiyati yoqilgan umumiy 1C modullaridan protseduralar va funktsiyalardan foydalanish huquqiga ega. Ushbu shartga qo'shimcha ravishda, chaqirilgan funksiya yoki protsedura eksport qilinishi kerak va serverda bajarilgan interaktiv harakatlarni o'z ichiga olmaydi. Aks holda, operatsiyaning noto'g'ri ekanligi haqida xatolikni ko'rasiz.

Murakkab..; VariableFunction = Ulanish..; funksiya chaqiruvi>umumiy modul nomi>protsedura chaqiruvi>umumiy modul nomi>

1C-da boshqa ma'lumotlar bazasi bilan tashqi ulanish imkoniyatlari juda keng va sizga ko'p vazifalarni bajarishga imkon beradi. Asboblarni to'g'ri baholash va tanlash imkoniyatiga ega bo'lish muhimdir optimal yechim. Ko'pgina hollarda, bu mahorat faqat tajriba bilan yoki tajribali mutaxassislarning ish namunalarini o'rganish orqali paydo bo'ladi.