Internet Windows Android
Kengaytirish

Tashqi ma'lumot manbasiga ulanish 1s 8.3. Tashqi ma'lumotlar manbalari

8.2.14.533 versiyasi nihoyat platformaning 14-chi versiyasining ko'proq yoki kamroq barqaror versiyasidir. Va nihoyat, ajoyib imkoniyatni - "tashqi ma'lumotlar manbalarini" sinab ko'rish imkoniyati paydo bo'ldi.

Nega bu imkoniyat shunchalik qiziqish uyg'otadi? 1C-da dasturlashtirgan va SQL-ni yaxshi biladigan va hech bo'lmaganda biznes ilovalari uchun boshqa texnologik platformalarning arxitekturasi va rivojlanish tamoyillari bilan tanish bo'lgan har qanday odam sizga 1C haqida eng ko'p nimani yoqtirishini qat'iy ishonch bilan aytib beradi. Albatta, so'rovlar yaratuvchisi men shaxsan duch kelgan relyatsion tuzilmalardan ma'lumotlarni olish uchun so'rovlarni yozish uchun eng qulay va puxta o'ylangan mexanizmdir. Va endi 1C bizga nafaqat 1C, balki boshqa jadvallar bilan ham foydalanish uchun ajoyib imkoniyatni berdi. Shunchaki, bu "asal barrelida" juda ko'p "malhamda chivinlar" bor. Birinchi narsalar:

1) O'rnatish va ishlatish - "daf ​​bilan raqsga tushmasdan" ishlamaydi

A) Tashqi ma'lumotlar manbasini qo'shing - bu murakkab ko'rinmaydi
b) "Ro'yxatdan tanlash" katagiga belgi qo'ying - majburiy - bu funktsiyani boshida tekshirish uchun kerak va sizni keraksiz muammolardan qutqaradi.
V)
(IMG: http://pics.livejournal.com/comol/pic/0000cr1r.png)
- "..." tugmasini bosganingizga ishonch hosil qiling - ulanish ODBC. Hammamiz o'rganib qolganimizdek OLEDB emas, balki bir daraja pastroq

Lekin shu yerda bo'l JUDA DIQQAT.

Bu ODBC drayveri - agar siz mijoz-server versiyasidan foydalansangiz, u serverda bo'lishi kerak. Agar siz bitta tizimda rivojlanayotgan bo'lsangiz va boshqasida ishlayotgan bo'lsangiz (odatda bo'lgani kabi), sizni hech qanday kutilmagan hodisalar kutmasligiga ishonch hosil qiling. G'alati tavsiya, lekin agar siz tezlik haqida qayg'urmasangiz va SQL92 standarti imkoniyatlaridan tashqariga chiqmoqchi bo'lmasangiz, eng qadimgi yoki eng keng tarqalgan drayverni tanlang. Bu sizga yaxshiroq moslikni beradi. Misol uchun, SQL Server 2008 uchun eng yaxshi drayver SQL Server Native Client 11 bo'ladi, lekin men faqat SQL Serverni tanlashni tavsiya qilaman, aks holda bu juda mahalliy mijoz serverda yoki barcha mijoz mashinalarida o'rnatilishi kerak bo'ladi (agar foydalanilayotgan bo'lsa). fayl versiyasi) va foyda oddiy uchun maxsus, u sizga hech qanday vazifa bermaydi.

E) Standart Server tanlash dialog oynalari

G) Jadval va tafsilotlarni tanlang... ajoyib imkoniyat - siz uni darhol xohlaganingizcha o'zgartirishingiz mumkin (tafsilotlar ham) va xususiyatlarda siz ma'lumotlar manbasi maydonlarining nomlarini ko'rasiz.

Z) Endi siz uni ishga tushirasiz, so'rovlar dizaynerini oching - ahmoqona jadval va OPAdagi barcha yozuvlarni tanlang - xato. Nima qilish kerak? Agar sizda boshqariladigan interfeys mavjud bo'lsa, xizmat menyusiga qarang va oddiy bo'lsa...
Men shaxsan ushbu kodni ishlatganman:

Parametrlar = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = Rost;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;MA'lumotlar bazasi=ma'lumotlar bazasi";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();

Ba'zi qismlar kerak bo'lmasligi mumkin, lekin u ishlaydi. Siz kodni ishga tushirishingiz kerak BIR MARTA. Shundan so'ng ulanish normal bo'ladi ... tasavvuf albatta - bu nima uchun kerakligi aniq emas ...

2) Faqat o'qish uchun mo'ljallangan ma'lumotlar manbalari
Ha, mo''jizalar sodir bo'lmaydi ... lekin ba'zida siz buni shunday qilishni xohlaysiz ....

3) ULARNING ICHKI MA'LUMOT MANBALARI BILAN FOYDALANISH MUMKIN emas
Shaxsan, bu fakt meni joyida o'ldirdi.

Qanday qilib bu shunday bo'lishi mumkin ... biz kutgan va allaqachon tasavvur qilgan va lablarimizni yalab qo'ygan edik, biz endi ma'lumotlarimizni 1C bilan qanday qilib bitta so'rovda birlashtiramiz, uni yig'amiz - guruhlashtiramiz, hisobotga kiritamiz, lekin bu emas. ish...

Lekin, albatta, bu tajribali odamlarni to'xtatmaydi ... qanday fikr keldi? To'g'ri - vaqtinchalik jadvallar:

4) ULARNI VAQTINCHI JADLLAR BILAN BIRGA FOYDALANISH MUMKIN emas

Ammo bu endi texnologik qiyinchiliklarga o'xshamaydi, balki "hayot jannatga o'xshamasligi uchun" bizdan qilishimizni xohlagan narsaga o'xshaydi (IMG :).

5) Faqat ACS ulanishlarida foydalanish mumkin

Bilmaganlar uchun bu "Ma'lumotlar to'plami havolalari" yorlig'idagi ACS-da. Siz ulardan tez-tez foydalanasizmi? Qulaymi? Ko'rinishidan, ular bizni ulardan tez-tez foydalanishga majburlamoqchi. Faqat "Aloqa holati" va "Aloqa parametri" ustuni mavjud. Men hech qanday standart konfiguratsiyada ulardan foydalanish misolini topmadim va qandaydir tarzda hujjatlarda ham, Xrustalevaning ishida ham hamma narsa shaffof emas. Kimdir menga "ulanish sharti" qanday ishlashini tushuntira oladimi? Agar siz u erda Manba atributlari = Qabul qiluvchining atributlarini yozsangiz, u ishlamaydi. Albatta, shartni "Ifoda" maydoniga yozish mumkin - ko'p hollarda bu etarli ... lekin qandaydir tarzda bu juda oson ishlamaydi.

Umuman olganda, bu muammo ilgari shunday bir joyda hal qilingan:

Funktsiya InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Agar DataCon > "20100101" bo'lsa
DataCon = "20100101";
endIf;

CN = Yangi saralash raqamlari (15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Yangi massiv();
ArrayNumber.Add(Type("Raqam"));

ArrayString = Yangi massiv();
ArrayString.Add(Type("String"));

ArrayData = Yangi massiv();
ArrayDate.Add(Type("Sana"));

//Buxgalteriya xarajatlarini jadvalga to'ldiramiz
TypeNumber = Yangi TavsifTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//SQL dan ma'lumotlarni yuklash uchun jadval
TZ = Yangi qiymatlar jadvali();
TK.Columns.Add("Nomenklatura kodi", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Davr", SanaType);

TK.Indices.Add("Davr");

//SQL ga ulaning
Ulanish qatori = "Provayder=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Ma’lumotlar manbai=;Use Protsed for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Foydalanish Ma'lumotlar uchun shifrlash=Yolg'on;Imkon bo'lganda ustunlarni taqqoslash bilan teg qo'ying=False;Boshlang'ich katalog=Hisobotlar";
Ulanish = Yangi COMObject("ADODB.Connection");
Buyruq = Yangi COMObject("ADODB.Buyruq");
RecordSet = Yangi COMObject("ADODB.RecordSet");
Sana = "";
Urinish
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Ulanish;
Command.CommandText = "PH dan * ni tanlang, bu erda davr >= "" + String(Format(SanaStart, "DF=yyyyMMdd")) + "" va davr RecordSet = Command.Execute();
RecordSet.MoveFirst();
Istisno
Texnik shartlarni qaytarish;
EndAttempt;

While RecordSet.EOF = False Loop
Chiziq = TK.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

So'rov = Yangi so'rov();
VrTable = Yangi TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Boshlanish sanasi", Boshlanish sanasi);
Request.SetParameter("DataCon", DateCon);
Query.Text = "Tanlash
| vrDataTable.Nomenklatura kodi,
| vrDataTable.Qnty,
| vrDataTable.Period
|Ma’lumotlar jadvalini joylashtirish
|FROM
| &vDataTable AS vrDataTable
|QAYERDA
| vrDataTable.Period >= &DateStart
| Va vrDataTable.Period Query.Execute();
TZ = Aniqlanmagan;

So'rov = Yangi so'rov;
Query.TemporaryTableManager = VrTable;
Query.Text = "Bu erda o'zgaruvchan jadvalni o'z ichiga olgan so'rov";

Natija = Query.Run();
Natijani qaytarish;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = new Structure();
DataSet.Insert("SQL Table", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, DataSet);

Aslida, kod qatorlari ko'p emas va ular juda standartdir ... bu holda siz so'rovlar dizaynerining to'liq funksiyasidan foydalanishingiz mumkin va ACSga faqat MA'LUMOTLAR TARKIBI funksiyasini berishingiz mumkin.

Lekin bu, albatta, unchalik yoqimli ko'rinmaydi... va har safar qiymatlarni jadvalga yuklash uchun kod yozishingiz va tafsilotlar nomida xato qilganingizni tekshirishingiz kerak ... va bizga nima berilganligini tekshirishingiz kerak. 1C qandaydir tarzda yarim ko'rinadi. Qaysi biri foydalanish qulayroq ekanligini hali hal qilmadim. Siz qaror qilasiz va qarorlaringiz va sizni ularga nima undaganligi haqida yozasiz.

[havolani ko'rish uchun ro'yxatdan o'tishingiz kerak]

Nega bu imkoniyat shunchalik qiziqish uyg'otadi? 1C-da dasturlashtirgan va SQL-ni yaxshi biladigan va hech bo'lmaganda biznes ilovalari uchun boshqa texnologik platformalarning arxitekturasi va rivojlanish tamoyillari bilan tanish bo'lgan har qanday odam sizga 1C haqida eng ko'p nimani yoqtirishini qat'iy ishonch bilan aytib beradi. Albatta, so'rovlar yaratuvchisi men shaxsan duch kelgan relyatsion tuzilmalardan ma'lumotlarni olish uchun so'rovlarni yozish uchun eng qulay va puxta o'ylangan mexanizmdir. Va endi 1C bizga nafaqat 1C, balki boshqa jadvallar bilan ham foydalanish uchun ajoyib imkoniyatni berdi. Shunchaki, bu "asal barrelida" juda ko'p "malhamda chivinlar" bor. Birinchi narsalar:

1) O'rnatish va foydalanish- "daf ​​bilan raqsga tushmasdan" ishlamaydi
a) Tashqi ma'lumotlar manbasini qo'shing - bu murakkab ko'rinmaydi
b) "Ro'yxatdan tanlash" katagiga belgi qo'ying - majburiy - bu funktsiyani boshida tekshirish uchun kerak va sizni keraksiz muammolardan qutqaradi.
c) - "..." tugmasini bosganingizga ishonch hosil qiling - ulanish ODBC. Hammamiz o'rganib qolganimizdek OLEDB emas, balki bir daraja pastroq

D) Lekin bu erda juda ehtiyot bo'ling.

Bu ODBC drayveri - agar siz mijoz-server versiyasidan foydalansangiz, u serverda bo'lishi kerak. Agar siz bitta tizimda rivojlanayotgan bo'lsangiz va boshqasida ishlayotgan bo'lsangiz (odatda bo'lgani kabi), sizni hech qanday kutilmagan hodisalar kutmasligiga ishonch hosil qiling. G'alati tavsiya, lekin agar siz tezlik haqida qayg'urmasangiz va SQL92 standarti imkoniyatlaridan tashqariga chiqmoqchi bo'lmasangiz, eng qadimgi yoki eng keng tarqalgan drayverni tanlang. Bu sizga yaxshiroq moslikni beradi. Misol uchun, SQL Server 2008 uchun eng yaxshi drayver SQL Server Native Client 11 bo'ladi, lekin men faqat SQL Serverni tanlashni tavsiya qilaman, aks holda bu juda mahalliy mijoz serverda yoki barcha mijoz mashinalarida o'rnatilishi kerak bo'ladi (agar foydalanilayotgan bo'lsa). fayl versiyasi) va foyda oddiy uchun maxsus, u sizga hech qanday vazifa bermaydi.
e) Standart Server tanlash dialog oynalari

va JB

f) Parolni saqlash haqidagi savolga “ha” deb javob berishni tavsiya qilaman, aks holda siz bu biznesni boshlay olmaysiz.
g) Jadval va tafsilotlarni tanlang... ajoyib imkoniyat - siz uni darhol xohlaganingizcha o'zgartirishingiz mumkin (tafsilotlar ham) va xususiyatlarda siz ma'lumotlar manbai maydonlarining nomlarini ko'rasiz.


h) Endi siz uni ishga tushirasiz, so'rovlar dizaynerini oching - ahmoqona jadvaldagi barcha yozuvlarni tanlang va OPA - xato. Nima qilish kerak? Agar sizda boshqariladigan interfeys mavjud bo'lsa, xizmat menyusiga qarang va oddiy bo'lsa...
Men shaxsan ushbu kodni ishlatganman:
Code 1C v 8.x Parameters = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = Rost;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;MA'lumotlar bazasi=ma'lumotlar bazasi";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();
Ba'zi qismlar kerak bo'lmasligi mumkin, lekin u ishlaydi.
Kodni BIR marta ishga tushirishingiz kerak. Shundan so'ng ulanish normal bo'ladi ... tasavvuf, albatta - bu nima uchun kerakligi aniq emas ...

2) Faqat o'qish uchun mo'ljallangan ma'lumotlar manbalari- Ha, mo''jizalar sodir bo'lmaydi ... lekin ba'zida siz buni xohlaysiz ...

3) ULARNING ICHKI MA'LUMOT MANBALARI BILAN FOYDALANISH MUMKIN emas
Shaxsan, bu fakt meni joyida o'ldirdi.

Qanday qilib bu shunday bo'lishi mumkin ... biz kutgan va allaqachon tasavvur qilgan va lablarimizni yalab qo'ygan edik, biz endi ma'lumotlarimizni 1C bilan qanday qilib bitta so'rovda birlashtiramiz, uni yig'amiz - guruhlashtiramiz, hisobotga kiritamiz, lekin bu emas. ish...
Lekin, albatta, bu tajribali odamlarni to'xtatmaydi ... qanday fikr keldi? To'g'ri - vaqtinchalik jadvallar:

4) ULARNI VAQTINCHI JADLLAR BILAN BIRGA FOYDALANISH MUMKIN emas


Ammo bu endi texnologik qiyinchiliklarga o'xshamaydi, balki "hayot jannatga o'xshamasligi uchun" bizdan qilishimizni xohlagan narsaga o'xshaydi.

5) Faqat ACS ulanishlarida foydalanish mumkin
Bilmaganlar uchun bu "Ma'lumotlar to'plami havolalari" yorlig'idagi ACS-da. Siz ulardan tez-tez foydalanasizmi? Qulaymi? Ko'rinishidan, ular bizni ulardan tez-tez foydalanishga majburlamoqchi. Faqat "Aloqa holati" va "Aloqa parametri" ustuni mavjud. Men hech qanday standart konfiguratsiyada ulardan foydalanish misolini topmadim va qandaydir tarzda hujjatlarda ham, Xrustalevaning ishida ham hamma narsa shaffof emas. Kimdir menga "ulanish sharti" qanday ishlashini tushuntira oladimi? Agar siz u yerga Manba atributlari = Qabul qiluvchining atributlarini yozsangiz, u ishlamaydi. Albatta, shartni "Ifoda" maydoniga yozish mumkin - ko'p hollarda bu etarli ... lekin qandaydir tarzda bu juda oson ishlamaydi.

Umuman olganda, bu muammo ilgari shunday bir joyda hal qilingan:
Code 1C v 8.x Function InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Agar DataCon > "20100101" bo'lsa
DataCon = "20100101";
endIf;

CN = Yangi saralash raqamlari (15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Yangi massiv();
ArrayNumber.Add(Type("Raqam"));

ArrayString = Yangi massiv();
ArrayString.Add(Type("String"));

ArrayData = Yangi massiv();
ArrayDate.Add(Type("Sana"));

//Buxgalteriya xarajatlarini jadvalga to'ldiramiz
TypeNumber = Yangi TavsifTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//SQL dan ma'lumotlarni yuklash uchun jadval
TZ = Yangi qiymatlar jadvali();
TK.Columns.Add("Nomenklatura kodi", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Davr", SanaType);

TK.Indices.Add("Davr");

//SQL ga ulaning
Ulanish qatori = "Provayder=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Ma’lumotlar manbai=;Use Protsed for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Foydalanish Ma'lumotlar uchun shifrlash=Yolg'on;Imkon bo'lganda ustunlarni taqqoslash bilan teg qo'ying=False;Boshlang'ich katalog=Hisobotlar";
Ulanish = Yangi COMObject("ADODB.Connection");
Buyruq = Yangi COMObject("ADODB.Buyruq");
RecordSet = Yangi COMObject("ADODB.RecordSet");
Sana = "";
Urinish
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Ulanish;
Command.CommandText = "S_elect * PH dan bu erda davr >= "" + String(Format(StartDate, "DF=yyyyMMdd")) + "" va nuqta<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Istisno
Texnik xususiyatlarni qaytarish;
EndAttempt;

While RecordSet.EOF = False Loop
Chiziq = TK.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

So'rov = Yangi so'rov();
VrTable = Yangi TemporaryTableManager();

Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Boshlanish sanasi", Boshlanish sanasi);
Request.SetParameter("DataCon", DateCon);
Query.Text = "Tanlash
| vrDataTable.Nomenklatura kodi,
| vrDataTable.Qnty,
| vrDataTable.Period
|Ma’lumotlar jadvalini joylashtirish
|FROM
| &vDataTable AS vrDataTable
|QAYERDA
| vrDataTable.Period >= &DateStart
| Va vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Aniqlanmagan;

So'rov = Yangi so'rov;
Query.TemporaryTableManager = VrTable;
Query.Text = "Bu erda o'zgaruvchan jadvalni o'z ichiga olgan so'rov";

Natija = Query.Run();
Natijani qaytarish;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = new Structure();
DataSet.Insert("SQL Table", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, DataSet);

Aslida, kod qatorlari ko'p emas va ular juda standartdir ... bu holda siz so'rovlar dizaynerining to'liq funksiyasidan foydalanishingiz mumkin va ACSga faqat MA'LUMOT TARKIBI funksiyasini berishingiz mumkin.

Lekin bu, albatta, unchalik yoqimli ko'rinmaydi... va har safar qiymatlarni jadvalga yuklash uchun kod yozishingiz va tafsilotlar nomida xato qilganingizni tekshirishingiz kerak ... va bizga nima berilganligini tekshirishingiz kerak. 1C qandaydir tarzda yarim ko'rinadi. Qaysi biri foydalanish qulayroq ekanligini hali hal qilmadim. Siz qaror qilasiz va qarorlaringiz va sizni ularga nima undaganligi haqida yozasiz.
Muallif.

8.3.5 versiyasidan boshlab platforma tashqi ma'lumotlar manbalari jadvallariga ma'lumotlarni yozish imkoniyatini joriy qildi. Maqolada konfiguratsiyani uchinchi tomon tizimlari bilan integratsiya qilish uchun mavjud imkoniyatlarni kengaytiradigan ushbu funksionallik muhokama qilinadi.

Qo'llanilishi

Maqolada 1C 8.3.5 platformasi muhokama qilinadi. Materiallar joriy platforma relizlari uchun ham tegishli.

1C: Enterprise 8 da tashqi ma'lumotlar manbalariga yozib olish

8.2.14 platformasida metadata daraxtiga yangi ob'ekt - tashqi ma'lumotlar manbalari qo'shildi. Ushbu mexanizmning maqsadi 1C ga nisbatan tashqi ma'lumotlar bazalaridan ma'lumotlarni olishdir.

Yangi platforma relizlarining chiqarilishi bilan tashqi ma'lumotlar manbalari rivojlandi, masalan, ularni vaqtinchalik jadvallarga joylashtirish va oddiy jadvallar bilan ulanishlarni amalga oshirish mumkin bo'ldi.

Ushbu maqolada ishlab chiquvchi tashqi ma'lumotlar manbalariga qanday vositalarni yozib olishi kerakligini ko'rib chiqamiz.

Barcha harakatlar Microsoft SQL Server 2008 R2 DBMS da amalga oshirildi.

8.3.4 platformasi tashqi ma'lumotlar manbalarida tasvirlangan funksiyalardan foydalanish imkoniyatini taqdim etdi.

Bu xususiyat SQL Server tomonida saqlangan protseduralarni ishga tushirishga va ularning yordami bilan tashqi manbalardan ma'lumotlarga, jumladan yozishga kirish imkonini beradi.

Keling, bir misolni ko'rib chiqaylik. SQL Management Studio dasturidan foydalanib, kursy_test nomli yangi ma'lumotlar bazasini yaratamiz. Unda keyingi barcha tajribalar o'tkaziladi.

Ushbu ma'lumotlar bazasida biz jadval nomenklaturasini yaratamiz, buning uchun biz quyidagi tarkibga ega skript yozamiz:

FOYDALANISH [kursy_test]
BOSH
JADVAL YARATING [dbo]. [nomenklatura](
[id] [int] NULL EMAS,
[ tavsif ] [ nvarchar ](150) NULL EMAS,
[narx] [raqamli](15, 2) NULL,
CHEKLASH [ PK_id ] ASOSIY KALT ([ id ])
BOSH

Bajarish natijasida quyidagi tuzilishga ega jadval tuziladi:

Endi biz ikkita saqlangan protsedurani yaratishimiz kerak, ular yordamida ma'lumotlarni o'zgartirish amalga oshiriladi.

Birinchi protsedurani insert_nomenklatura deb ataymiz. U jadvalga yangi qator qo'shish uchun mo'ljallangan. Uni yaratish uchun skript quyidagicha ko'rinadi:

FOYDALANISH [kursy_test]
BOSH
TARTIBI YARATING insert_nomenklatura
@id int
@description nvarchar(150),
@narx raqamli (15, 2)
AS
BOSHLANISHI
INSERT INTO [kursy_test].dbo. [nomenklatura] ([ id ], [ tavsif ],[ narx ])
VALUES (@id, @tavsif, @narx)
OXIRI
BOSH

update_nomenklatura deb nomlangan ikkinchi protsedura jadvaldagi mavjud yozuvni yangilaydi. Uni yaratish uchun quyidagi skript ishga tushirildi:

Ob'ekt brauzerida yaratilgan jadval va ikkita saqlangan protsedura quyidagicha ko'rinadi:

Biz Microsoft SQL Server tomonidagi barcha tayyorgarlik bosqichlarini yakunladik, endi biz 1C: Enterprise 8 konfiguratoriga o'tamiz.

Nomenklatura nomli yangi tashqi ma'lumotlar manbasini yarating. Ushbu ma'lumot manbasida yangi jadval yaratishda biz ma'lumotlar manbasiga ulanish uchun quyidagi parametrlarni belgilaymiz:

Biz quyidagi ulanish qatorini belgilaymiz:

Haydovchi = (SQL Server); Server =(mahalliy); Ma'lumotlar bazasi = kursy_test ; Foydalanuvchi identifikatori = sa; Parol =;

Agar foydalanuvchi parolga ega bo'lsa, u ulanish liniyasining Parol parametrida ko'rsatilishi kerak.

Agar barcha ulanish parametrlari to'g'ri ko'rsatilgan bo'lsa, OK tugmasini bosganingizda, ma'lumotlar manbasida mavjud jadvallarni o'z ichiga olgan oyna ochiladi:

Bizni qiziqtirgan jadval maydonlarini belgilaymiz. Tugma bosilganda Tayyor dbo_nomenklatura jadvali Nomenklatura tashqi ma'lumotlar manbasida yaratiladi:

Endi biz ma'lumotlar manbamizning "Funktsiyalar" yorlig'iga o'tamiz.

Shunga o'xshash sehrgardan foydalanib, biz ikkita saqlangan protsedurani qo'shamiz:

Biz "Funktsiyalar" yorlig'ining quyidagi ko'rinishini olamiz:

Endi tashqi ma'lumotlar manbai bilan ishlash uchun foydalanuvchi interfeysini dasturlashtiramiz.

Buyruqlar panelidagi ro'yxat shaklida biz quyidagi ishlov beruvchi bilan "Qo'shish" tugmasini joylashtiramiz:

&OnClient
Jarayon qo'shish()
Ogohlantirish = Yangi Tavsif Ogohlantirishlar("OpenTableComplete", ThisObject);
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
Ogohlantirish, FormWindowOpenMode.LockEntireInterface);
Jarayonning oxiri

&OnClient
Jarayonni saqlash (buyruq)
SaveOnServer();
Jarayonning oxiri & Serverni yoqish
Jarayon SaveOnServer()
Agar Ob'ekt.Link.Bo'sh() Keyin
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Aks holda
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id, Object.description, Object.price);
EndIf;
Jarayonning oxiri

Korxona rejimida ro'yxat shakli quyidagicha ko'rinadi:

Ob'ektning shakli quyida ko'rsatilgan:

Kattalashtirish uchun rasm ustiga bosing.

Shunday qilib, saqlangan protseduralardan foydalanib, biz tashqi ma'lumotlar manbalariga yozib olishni amalga oshirdik.

8.3.5 platformasida yangi xususiyat paydo bo'ldi - yuqorida muhokama qilingan saqlangan protsedura mexanizmini chetlab o'tib, bevosita tashqi ma'lumotlar manbalariga yozish.

Ma'lumotlar dasturiy yoki interaktiv tarzda tahrirlanishi mumkin. Va bizning misolimiz uchun konfiguratsiyaga murojaat qilishning hojati yo'q.

Buyruqlar panellarida va "Ko'proq" menyusida siz "Yaratish", "Nusxalash", "Tahrirlash" kabi standart tugmalarni ko'rishingiz mumkin.

Kattalashtirish uchun rasm ustiga bosing.

Ob'ekt shaklida "Saqlash" va "Saqlash va yopish" tugmalari paydo bo'ldi:

Ko'rib turganingizdek, endi tashqi manbalar bilan ishlash ma'lumotnomalar, hujjatlar va boshqalar bilan ishlashga o'xshaydi.

Keling, tashqi ma'lumotlar manbalariga yozish imkoniyatini yaratish uchun metadata darajasida qanday o'zgarishlar kiritilganligini ko'rib chiqaylik.

Ma'lumotlar jadvaliga yangi xususiyat qo'shildi Faqat o'qish(turi - mantiqiy).

Agar bu xususiyat "True" ga o'rnatilgan bo'lsa, platforma asboblari yordamida ushbu jadvalga ma'lumotlarni yozish mumkin emas.

Ma'lumotlar jadvali maydoni endi quyidagi xususiyatlarga ega:

  • Faqat o'qish(turi - mantiqiy) - bu sohadagi ma'lumotlarni o'zgartirish mumkinmi;
  • AllowNull(turi - mantiqiy) - bu maydonda NULL qiymatini saqlash mumkinmi.

Mulk Faqat o'qish ga sozlanishi kerak To'g'ri avtomatik o'zgarishlarga ega ma'lumotlar bazasi maydonlari uchun, avtomatik ravishda yaratilgan kalit maydonlar, hisoblangan maydonlar va boshqalar.

O'rnatilgan til yordamida tashqi manbalarga ma'lumotlarni qo'shishingiz, o'zgartirishingiz va o'chirishingiz mumkin.

Buning uchun ob'ektlar ExternalDataSourceTableRecordSet Va ExternalDataSourceTableObject yangi usullar joriy etildi Yozing() Va O'chirish().

Yuqorida muhokama qilingan tashqi ma'lumotlar manbai uchun yangi yozuvni dasturiy jihatdan qo'shish misolini ko'rib chiqaylik.

&OnClient
Jarayon Dasturiy ravishda yarating(jamoa)
Dasturiy ravishda OnServer yarating();
Jarayonning oxiri & Serverni yoqish

Jarayon Dasturiy ravishda OnServer yarating()
WritableObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WriteableObject.id= 5 ;
WriteableObject.description= “Shkaf”;
WritableObject.price= 5000 ;
WriteableObject.Write();
Jarayonning oxiri

Tashqi ma'lumotlar manbasi jadvali ob'ekt modulida endi siz yozish hodisasi ishlov beruvchilarini belgilashingiz mumkin, masalan BeforeWrite(), OnWrite() va hokazo.:

Ushbu maqola tashqi ma'lumotlar manbalariga ma'lumotlarni yozishning ikkita variantini ko'rib chiqdi - saqlangan protseduralardan foydalanish va 8.3.5 platformasining yangi mexanizmlaridan foydalanish.

Shunday qilib, platforma endi tashqi ilovalar bilan to'liq integratsiya qilish mexanizmlarini amalga oshiradi.

8.3.6 versiyada yuqorida tavsiflangan funksionallik GetModifiableFields() va SetModifiableFields() yangi maxsus usullari yordamida kengaytirildi. Ulardan foydalanib, konfiguratorda faqat o'qish uchun deb belgilangan VIEW jadvalining maydonlarida yozish operatsiyasini bajarish mumkin. Buning yordamida VIEW jadvalining alohida maydonlariga yozish faqat dasturning biznes mantiqiga muvofiq zarur bo'lgan hollarda mumkin bo'lgan stsenariyni amalga oshirish mumkin bo'ldi.

8.3.7 versiyasida VIEW jadvallarining qaysi maxsus maydonlarida NULL qiymatlari bo'lishi mumkinligini aniqlash mexanizmi takomillashtirildi. Shu nuqtaga qadar barcha VIEW jadvallari bu qiymatni qabul qilishi mumkin edi. Ushbu o'zgarish dinamik ro'yxatlarni ushbu maydonlar bo'yicha saralash tezligining oshishi bilan bog'liq.

8.3.8 versiyasida nihoyat tashqi ma'lumotlar manbai tranzaksiya holatida ekanligini aniqlash mumkin bo'ldi. Bu funksiya yangi usul ExternalDataSourceManager.TransactionActive() tomonidan taqdim etilgan.

Xulosa qilib shuni ta'kidlaymizki, tashqi ma'lumotlar manbalari uchun yuqorida ko'rsatilganidek, klassik relyatsion modeldagi ma'lumotlar jadvallari tasvirlangan. Platforma ma'lumotlar bilan ishlash uchun boshqa paradigmadan foydalanadi, ishlab chiquvchiga ma'lum turdagi amaliy ob'ektlarni (kataloglar, hujjatlar, registrlar va boshqalar) taklif qiladi. Shuning uchun tizim tashqi ma'lumotlar manbalari jadvallari bilan ishlashda uning "mahalliy" ob'ektlariga xos bo'lgan ko'pgina funktsiyalarni qo'llab-quvvatlamaydi. Shuning uchun, agar bu mavjud tizimlar bilan integratsiyalashuv vazifalari bilan bog'liq bo'lmasa, VID jadvallarini qo'llashni hisobga olgan holda, har qanday biznes mantig'ini ishlab chiqishdan voz kechish tavsiya etiladi. Yoki sodda qilib aytganda, ilovangizda faol foydalaniladigan ma'lumotlarni, agar ushbu tizim tomonidan foydalanilmasa, tashqi tizimning boshqa jadvalida saqlashdan qochishga harakat qilishingiz kerak.

Keyingi maqolada biz 1C: Enterprise tizimida tashqi ma'lumotlar manbalari texnologiyasidan foydalanishning mantiqiy davomini ko'rib chiqamiz.

1C dasturining 8-versiyasida ishlab chiquvchilar COM ulanishlari va OLE ob'ektlaridan foydalanmasdan uchinchi tomon ma'lumotlar bazalarini ulash va ulardan to'g'ridan-to'g'ri konfiguratordan ma'lumot olish imkoniyatini qo'shdilar. Ushbu xususiyat yangi ob'ekt yordamida amalga oshiriladi - "Tashqi ma'lumotlar manbalari"

1C-dagi tashqi ma'lumotlar manbalari tizimdagi boshqa jadvallar bilan bir xil tarzda ishlatilishi mumkin:

  1. Ma'lumotlar tarkibi tizimi (DCS) yordamida hisobotlar va hisob-kitoblarni yaratishda;
  2. Uchinchi tomon manbalarida saqlangan ma'lumotlarga havolalarni olish;
  3. Jadvallarda saqlangan ma'lumotlarni o'zgartirish uchun;
  4. So'rovlarni yaratishda.

Ushbu mexanizm boshqa 1C ma'lumotlar bazalari bilan ishlash uchun mo'ljallanmaganligini bilish muhimdir, chunki 1C.Enterprise operatsion modelining o'zi jismoniy jadvallar darajasidagi ma'lumotlarga aralashuvni anglatmaydi.

Yangi manba yaratish

Dasturga yangi tashqi manba qo'shish "Konfigurator" rejimida sodir bo'ladi. Konfiguratsiya daraxtida mos keladigan filial mavjud (1-rasm)

Yangi ob'ekt shaklida faqat to'rtta yorliq mavjud bo'lishiga qaramay, yangi manba yaratishda siz qattiq ishlashingiz kerak bo'ladi:

  1. Asosiy;
  2. Ma'lumotlar;
  3. Funktsiyalar;
  4. Huquqlar.

Birinchi yorliqda faqat bitta qiziqarli parametr mavjud - qulfni boshqarish rejimi. Agar tranzaktsiyalarda ma'lumotlarni blokirovka qilish yoki axborot oqimlarini parallellashtirishning nozik jihatlari bo'yicha savollaringiz bo'lmasa, ushbu parametrni avtomatik blokirovka rejimida qoldirishingiz mumkin. Biroq, bunday yondashuv haddan tashqari cheklovlarga olib kelishi mumkin (masalan, alohida yozuv o'rniga dastur butun jismoniy jadvalni qulflab, boshqa foydalanuvchilarni u bilan ishlash qobiliyatidan mahrum qilganda).

Boshqariladigan qulflar, avtomatik qulflardan farqli o'laroq, ma'lumotlar bazasi tizimida emas, balki dasturning o'ziga xos bo'lgan tranzaksiya mexanizmidan foydalanadi, bu esa jadvalni yozib olishni ancha past darajaga o'tkazish imkonini beradi.

Ushbu parametrni "Avtomatik va boshqariladigan" ga o'rnatish orqali biz tizimga har bir aniq jadval uchun o'xshash xususiyatga bevosita kirish orqali qaysi rejimdan foydalanishni aniqlash imkoniyatini beramiz.

Tashqi manba xususiyatlari shaklining "Ma'lumotlar" yorlig'i

"Ma'lumotlar" yorlig'ining shakli rasmda ko'rsatilgan. 2

Guruch. 2

Bu erda biz tashqi manba jadvallari va kublarni qo'shishimiz mumkin. Jadvalni qo'shishning ikki yo'li mavjud:

  1. Qo'lda, keyin oldimizda jadval qo'shish shakli ochiladi (3-rasm);

Guruch. 3

  1. Yoki jismoniy manba jadvallari ro'yxatidan tanlang (4-rasm), bu holda bizning oldimizda maxsus konstruktor ochiladi.

Guruch. 4

Keling, jadval qo'shish formasini batafsil ko'rib chiqaylik. “Name” xususiyati konfiguratsiyadagi obyektni yagona aniqlash uchun ishlatiladi.

Metama'lumotlar ob'ekti va yakuniy jismoniy jadvalni taqqoslash "Kengaytirilgan" yorlig'ida joylashgan "Ma'lumotlar manbasida nom" xususiyati orqali amalga oshiriladi (5-rasm).

Guruch. 5

Keyinchalik, jadvalning turini, aniqrog'i uning ob'ektivligini aniqlashimiz kerak. Agar strukturada saqlangan ma'lumotlar har qanday maydon orqali yagona aniqlanishi mumkin bo'lsa, jadval ob'ekt bo'lishi mumkin. Agar yozuvning individualligi kalit maydonlar to'plami bilan aniqlansa, jadval ob'ekt bo'lmagan turga ega bo'lishi kerak.

Bunday jadvallarni boshqa metadata ob'ektlari bilan taqqoslab, quyidagi o'xshashlikni keltirish mumkin:

  • Ob'ektlar jadvallari - ma'lumotnomalar;
  • Ob'ekt bo'lmaganlar axborot registrlaridir.

Kalit maydonlar to'plami keyingi shakl parametrida ("Kalit maydonlar") aniqlanadi. Ushbu maydon talab qilinadi, agar siz uni bo'sh qoldirsangiz, konfiguratsiyani saqlash muvaffaqiyatsiz bo'ladi.

5-rasmdan ko'rinib turibdiki, formaning ba'zi maydonlari va tugmalarini tahrirlash mumkin emas:

  • Ma'lumotlar manbasida ifodalash;
  • Jadval ma'lumotlari turi;
  • Taqdimot maydoni;
  • Ishlovchilarni ko'rish.

Ulardan faqat jadval maydonlarini to'ldirganimizdan, ularning turini aniqlaganimizdan va ularga identifikatorlar tayinlaganimizdan keyin foydalanish mumkin (6-rasm).

Guruch. 6

Bu erda siz "Nulga ruxsat berish" parametriga e'tibor berishingiz kerak, agar ushbu katakcha belgilansa, bunday maydonni kalit sifatida ishlatish tavsiya etilmaydi.

Stol quruvchi

Ehtimol, tashqi manbalar bilan ishlashda eng muhim va qiziqarli nuqta ulanish qatorini yaratishdir. "Ulanish qatori" parametri yonidagi uchta nuqtali tugmani bosganingizda uning konstruktori ochiladi.

Avvalo, bizdan ulanish uchun ishlatiladigan drayver haqida qaror qabul qilish so'raladi (7-rasm).

Guruch. 7

Ushbu parametrning noto'g'ri ta'rifi sizga uchinchi tomon ma'lumotlar bazasiga ulanishga imkon bermaydi. Bundan tashqari, ochiladigan ro'yxatda ko'rsatilgan barcha drayverlar ulanish satrini avtomatik ravishda yaratish uchun ishlatilmasligini tushunishingiz kerak. Agar platforma xatolik yuzaga kelsa (8-rasm), u holda ulanish qatorini qo'lda kiritish kerak bo'ladi.

8-rasm

Guruch. 9

Chiziqning o'zi qat'iy tartibga solingan qurilishdir.

Misol ulanish qatori

Microsoft Access da yaratilgan va D diskining ildizida joylashgan uchinchi tomon ma'lumotlar bazasini ko'rib chiqamiz. Ushbu ma'lumotlar bazasini ulash uchun biz tegishli drayverdan foydalanishimiz kerak, lekin uni qator konstruktorida tanlash xatolikka olib keladi 8-rasm.

Ulanish parametrlarini o'zimiz o'rnatamiz.

Driver=(Microsoft Access Driver (*.mdb)) – qatorning birinchi qismi shunday ko'rinadi. Jingalak qavslarda biz haydovchini aniqladik.

Excel fayllari uchun (Microsoft Excel Driver (*.xls)) kabi ko'rinadi, 2003 yildan eski ofisda yaratilgan Excel fayllari uchun drayverlar qatori (Microsoft Excel Driver (*.xls, *.xlsx, *.) kabi ko'rinadi. xlsm, *.xlsb)).

Ushbu parametrni keyingisidan vergul bilan ajratib, biz saqlashimiz manzilini kiritishimiz kerak (bizning holimizda DBQ=D:\Database1.mdb).

Ushbu ikkita parametrni qo'shib, biz Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb ni olamiz. Ushbu parametrni yozish orqali biz ushbu ma'lumotlar bazasining ichki tuzilmalariga kirish huquqiga ega bo'lamiz.

"Tashqi manba" ob'ekti uchun uni konfiguratsiyada yaratish kifoya emas, u "Korxona" rejimida ham ulanishi kerak. Buni "Barcha funksiyalar">Tashqi manbalar menyusidan amalga oshirish mumkin. Jadvalimizga birinchi marta kirganda, biz "Korxona" rejimida bir xil ulanish qatorini kiritishimiz kerak.