Ochiq
Yopish

Tashqi ma'lumotlar manbalari 1s 8.2. Tashqi ma'lumotlar manbalari. Misol ulanish qatori

1C bo'lmagan ma'lumotlar bilan ishlash uchun, masalan: SQL ma'lumotlar bazasi, Access ma'lumotlar bazasi, Excel fayli va boshqalar, 8.2.14 versiyasidan boshlab texnologik platformaga Tashqi ma'lumotlar manbalari deb nomlangan mexanizm (ob'ekt) kiritildi.

Ushbu maqolada keling, ushbu ob'ekt biz o'rganib qolgan Excel fayli bilan qanday aloqada bo'lishini ko'rib chiqamiz. Masalan, *.xls faylidan ma'lumotlarni 1C ma'lumotlar bazasiga ma'lum vaqt oralig'ida o'qish kerak. Agar ilgari biz Com ob'ektlari yordamida ishga tushirishimiz, keyin qiymatlar jadvalini yaratishimiz, ma'lumotlarni satr bo'yicha o'qishimiz kerak bo'lsa, endi bu manipulyatsiyalar yo'qoladi. Tashqi ma'lumotlar manbasidan foydalanganda biz ma'lumotlarni bir zumda so'rashimiz va olishimiz mumkin.

Aytaylik, bizda quyidagi tarkibga ega Excel ish kitobi bor. Undan biz ma'lumotlarni o'qishimiz kerak.

Avvalo, konfigurator rejimida yangi ma'lumotlar manbasini qo'shing va uni Excel deb nomlang.

Endi biz ma'lumotlarni, 1C da bo'ladigan maydonlar bilan jadvalni qo'shishimiz kerak. Keling, ularni faylda ustunlar qanday nomlangan bo'lsa, xuddi shunday yarataylik. Buni amalga oshirish uchun yaratilgan ob'ektga o'ting va Ma'lumotlar yorlig'ida Qo'shish-ni bosing. Bu erda men uni qo'lda yaratishni qat'iy tavsiya qilaman, chunki 1c-ina uni avtomatik ravishda sozlashga harakat qilganda ko'pincha muammolar mavjud.

Jadvalimizga DataTable nom beraylik. Shundan so'ng, Ma'lumotlar yorlig'iga o'ting va maydonlarni yarating (faylga o'xshash).

Har bir maydonning xususiyatlarida siz ma'lumotlar manbasida (fayl bilan bir xil) Ism, Tur va Ismni belgilashingiz kerak.
Ma'lumotlar manbasida ism belgilang. Bu erda biz varaqning nomini * da ko'rsatamiz. xls oxirida "$" qo'shilgan. Bizda 1$ roʻyxati bor.
Kalit maydonlarni belgilaganingizga ishonch hosil qiling. Bu erda ma'lumotlar bazasi nazariyasidan qator butunlay noyob bo'ladigan maydonni ko'rsatish kerak.
Taqdimot maydoni - biz chiziqning qisqacha ko'rinishini ta'minlaydigan maydonni ko'rsatamiz, bizning holatimizda Nomenklatura.

Hammasi! Bu aslida butun sozlash. Keyinchalik, har qanday protsedurada ulanish qatorini ko'rsatishingiz kerak va ulangandan so'ng siz ma'lumotlar manbai bilan ishlashingiz mumkin.

XLSX fayllari uchun ulanish qatori (Office 2007 va undan keyingi versiyalar)

Drayv=(Microsoft Excel drayveri (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;

XLS va oldingi fayllar uchun ulanish qatori.

Haydovchi=(Microsoft Excel drayveri (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;

Keling, ulanadigan va ulanish haqida xabar beradigan yangi tashqi ishlov berishni yarataylik.

Protsedura tugmasiExecutePress(Button)ConnectionParameters = NewConnectionParametersExternalDataSource; Ulanish parametrlari. ConnectionString= “Haydovchi= (Microsoft Excel drayveri (*. xls) ); DriverID = 790; DBQ= D:\meva. xls; "; Tashqi ma'lumotlar manbalari. Excel. SetGeneralConnectionParameters(ConnectionParameters) ; Tashqi ma'lumotlar manbalari. Excel. Ulanishni o'rnatish() ; So'rov = Yangi so'rov(); So'rov. Matn = "Tanlash | Ma'lumotlar jadvali. Kod, | Ma'lumotlar jadvali. Nomenklatura, | Ma'lumotlar jadvali. Birlik, | Ma'lumotlar jadvali. Miqdor | FROM | ExternalDataSource. Excel. Jadval. DataTable AS DataTable"; TK = So'rov. Bajarish ( ). Unload(); Hisobot ("Ulangan"); Jarayonning oxiri

Agar biz to'xtash nuqtasini o'rnatsak va spetsifikatsiyada nima borligini ko'rib chiqsak, biz quyidagilarni ko'ramiz:

P.S. Excel faylining o'zida maydonlar nomlaridan oldin bo'sh qatorlar bo'lmasligi kerak, aks holda odbc xatosi yuzaga keladi. sqlstate 07002 (odbc excel drayveri juda kam parametrlar).

Tashqi ma'lumotlar manbalari 1C - nisbatan yangi metadata ob'ekti 1C 8.3 va 8.2, uning yordamida 1C tashqi ma'lumotlar manbalariga ulanish mumkin: SQL jadvallari, Excel, Access, FoxPro (dbf), boshqa 1C ma'lumotlar bazasi, Oracle, Paradox (db) , - va hatto oddiy txt/csv fayllaridan o'qish.

Bu boshqa tizimlar bilan o'zaro ishlash uchun ko'plab imkoniyatlarni beradi. Keling, batafsil ko'rib chiqaylik.

1C 8 da tashqi ma'lumotlar manbalarini sozlash

Tashqi manbalarni o'rnatish har bir turdagi tizim uchun individualdir. Ammo, qoida tariqasida, sozlashning umumiy qismi bir xil - bu ulanish qatorini o'rnatadi:

1C da 267 ta video darslarni bepul oling:

Agar ulanish qatori to'g'ri ko'rsatilgan bo'lsa, tizim sizga ma'lumotlar bazasidan kerakli jadvalni tanlashni taklif qiladi. Natijada, biz tayyor jadvalni olamiz, unda biz kalit maydonini (noyob maydon) va taqdimot maydonini (yozuv 1Cda qanday aks ettirilishini) belgilashimiz mumkin:

1C 8.3 da tashqi ma'lumotlar manbalaridan foydalanish

1C dagi tashqi ma'lumotlar manbalari boshqa ma'lumotlar bazasi jadvallari kabi ishlatilishi mumkin. Platforma, agar ko'rsatilmagan bo'lsa, ular uchun avtomatik ravishda shakl yaratadi. So'rovlarda tashqi manbalardan olingan ma'lumotlardan foydalanish ham mumkin.

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 - "Tashqi ma'lumotlar manbalari" yordamida amalga oshiriladi.

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 sizda tranzaktsiyalarda ma'lumotlarni blokirovka qilish yoki axborot oqimlarini parallellashtirishning nozik jihatlari bo'yicha savollaringiz bo'lmasa, siz 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 quyidagi shakl parametrida ("Kalit maydonlar") aniqlanadi. Bu maydon talab qilinadi, agar siz uni bo'sh qoldirsangiz, konfiguratsiyani saqlash muvaffaqiyatsiz tugaydi.

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. Uning konstruktori "Ulanish qatori" parametri yonidagi uchta nuqtali tugmani bosgan holda ochiladi.

Avvalo, bizdan ulanish uchun ishlatiladigan drayverni tanlash 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, bu parametrni yozish orqali biz ushbu ma'lumotlar bazasining ichki tuzilmalariga kirish huquqiga ega bo'lamiz.

"Tashqi manba" ob'ekti uchun uni faqat konfiguratsiyada yaratish etarli emas; Buni "Barcha funktsiyalar" menyusi orqali amalga oshirish mumkin ->Tashqi manbalar. Jadvalimizga birinchi marta kirganimizda, biz "Korxona" rejimida bir xil ulanish qatorini kiritishimiz 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'lumot 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 xalos qiladi
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 bir 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

E) 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 (va tafsilotlarni ham) o'zgartirishingiz mumkin va xususiyatlarda siz ma'lumotlar manbai maydonlarining nomlarini ko'rasiz.

Z) Va 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:
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.

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

4) ULARNI VAQTINCHI JADVALLAR BILAN FOYDALANISH MUMKIN emas

Ammo bu endi texnologik qiyinchiliklarga o'xshamaydi, balki "hayot jannatga o'xshamasligi uchun" bizdan qilishimizni xohlagan narsaga juda 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 foydalanishning namunasini topmadim; 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:
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("Don", Sana turi);

TK.Indices.Add("Davr");

//SQL ga ulaning
Ulanish satri = "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 * dan PH dan davr >= "" + String(Format(SanaStart, "DF=yyyyMMdd"))) + "" va nuqta<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
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 >= &Boshlanish sanasi
| 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 birini ishlatish qulayroq ekanligini hali hal qilmadim. Siz qaror qilasiz va qarorlaringiz va sizni ularga nima undaganligi haqida yozasiz.

Saytdan olingan ma'lumotlar

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 bir 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) Va 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.

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

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

4) ULARNI VAQTINCHI JADVALLAR BILAN 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 foydalanishning namunasini topmadim; 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("Don", Sana turi);

TK.Indices.Add("Davr");

//SQL ga ulaning
Ulanish satri = "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 >= &Boshlanish sanasi
| 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'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 birini ishlatish 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]