kompaniyasi " 1C» 1C: Enterprise platformasini faol rivojlantirmoqda va har bir relizda yangi funksiyalarni qo‘shmoqda. 8.3 filialining rivojlanishi boshlanganidan so'ng, ko'plab yangi mahsulotlar paydo bo'la boshladi va doimiy bandlik tufayli ularning barchasini sinab ko'rishga vaqtingiz yo'q. Yaqinda men to'liq mobil ilovani qanday ishlab chiqish kerak(ha, "1C: Enterprise" da) va bugun men yaratish haqida gaplashmoqchiman HTTP xizmatlari platformasi orqali.
Rivojlanish imkoniyati HTTP xizmatlari versiyada konfiguratsiyaning bir qismi sifatida paydo bo'ldi 8.3.5 . Bu vaqt ichida komponent bir necha bor yangilandi va bugungi kunda uni "bolalarcha" xatolar mavjudligidan qo'rqmasdan ishlatish juda mumkin. Haqiqiy sharoitda http xizmatlarini yaratish uchun 1C: Enterprise platformasining funksionalligidan foydalanish imkoniyatiga ega emasman, hozircha mening tajribam ta'lim loyihalari bilan cheklangan. Biroq, hozirgi ishchi loyihalardan birida http xizmatlari mexanizmidan foydalanish istiqbollarini ko'raman. Ushbu qisqacha eslatmalar seriyasida men foydalanishning odatiy misollarini ko'rsatishga harakat qilaman http xizmatlari platforma uchun konfiguratsiyalarda " 1C: Korxona».
1C: Enterprise 8.3 da oddiy http xizmatini yaratish
Bugun biz eng oddiy http xizmatining misolini ko'rib chiqamiz, keyin esa uni yaxshilaymiz va murakkablashtiramiz. Darsning maqsadi - yaratilishning soddaligini tushunish va his qilishdir http xizmatlari 1C: Enterprise 8.3 platformasi asosida.
Muammoni shakllantirishdan boshlaylik. Eslatma doirasida yaratilgan xizmat faqat ikkita narsani qila olishi kerak: GET so'rovini qabul qilish va JSON formatida javob qaytarish. Vazifa ahamiyatsiz va PHP/ASP .NET da shunga o'xshash narsani qilish bir necha qator kodlar masalasidir. Oldinga qarab, aytamanki, 1C: Enterprise-da bizga taxminan bir xil miqdor kerak bo'ladi (yaxshi, 1C platformasining g'alati narsalariga kulmang).
Biz http xizmatlaridan foydalanish holatlari haqida alohida postda gaplashamiz, ammo hozircha biz yangi http xizmatini yaratamiz. Qulaylik uchun biz bo'sh konfiguratsiyaga ega yangi ma'lumotlar bazasini yaratamiz. Keling, unga bitta quyi tizimni qo'shamiz, biz uni " HTTP xizmatlarini sinab ko'rish" Endi konfiguratsiya daraxtida "Umumiy" bo'limini ochamiz va "Guruh" ni topamiz. HTTP xizmatlari» va birinchi veb-xizmatni qo'shing. Yangi xizmat yaratish oynasida quyidagi maydonlarni to'ldiring:
- Ism- FirstWebService;
- Sinonim- birinchi veb-xizmat;
- Ildiz URL- bizning xizmatlarimiz;
Maydonga e'tibor bering " Ildiz URL" Bu erda ko'rsatilgan nom xizmatga kirishda ishlatiladi. Bu yerda hech qanday boʻshliq boʻlmasligi kerak va kirill alifbosidan foydalanmaslik tavsiya etiladi. Biz buni hal qildik, keyin " Quyi tizimlar" va http xizmatini yagona mavjud quyi tizimga qo'shing.
Keyingi qadam URL naqshini tasvirlashdir. Keling, tegishli yorliqga o'tamiz va nomi bilan shablonni qo'shamiz " Xizmatlar roʻyxatini koʻrsatish" Mulk inspektorida biz mulkni topamiz " Namuna"va unda yozing" /ro'yxat" Buni amalga oshirish orqali biz http xizmati bilan o'zaro aloqada bo'ladigan yo'lni belgilaymiz. Shablon o'tgan parametrlarni belgilashga imkon beruvchi maxsus belgilarni o'z ichiga olishi mumkin (ikkala kerak va kerak emas), lekin birinchi misol uchun biz o'zimizni oddiy bilan cheklaymiz " /ro'yxat" Ushbu yo'lda ketayotganda, bizning yagona usulimiz ishlaydi va mijozga ma'lumotlar to'plamini beradi.
Ajoyib, shablon bor, endi bu usulga bog'liq. Keling, qo'ng'iroq qiladigan shablonimiz uchun qo'shamiz getServicesList. Mulk inspektorida biz HTTP usulini ko'rsatishimiz kerak. Belgilangan qiymat usulimiz qanday turdagi so'rovlarga javob berishini aniqlaydi. Joriy vazifa "" yordamida olish imkonini beradi. OLISH”.
Bizning xizmatimiz deyarli tayyor, faqat tuzilgan usul uchun hodisa ishlovchisini ro'yxatdan o'tkazish qoladi getServicesList. Siz mulk inspektori orqali voqea ishlov beruvchisini yaratishingiz mumkin. Ishlovchining tanasida biz yozamiz:
Funktsiya OutputIndexgetServicesList(Request) ArrayServices = Yangi massiv; Xizmatlar massivi.Qo'shish(Yangi tuzilma("nom, tavsif", "Xizmat №1", "Xizmat №1 tavsifi")); Xizmatlar massivi.Qo‘shish(Yangi tuzilma("nom, tavsif", "Xizmat №2", "2-sonli xizmat tavsifi")); Xizmatlar massivi.Qo‘shish(Yangi tuzilma("nom, tavsif", "Xizmat №3", "Xizmat №3 tavsifi")); Xizmatlar massivi.Qo'shish(Yangi tuzilma("nom, tavsif", "Xizmat №4", "Xizmat №4 tavsifi")); EntryJSON = Yangi EntryJSON; RecordJSON.SetString(); WriteJSON(WriteJSON, ArrayServices); StringForResponse = JSONRecord.Close(); Javob = Yangi HTTPServiceResponse (200); Response.Headers.Insert("Content-type", "application/json; charset=utf-8"); Response.SetBodyFromString(StringForResponse, TextEncoding.UTF8, UseByteOrderMark.NotUse); Javobni qaytarish; EndFunction
Keling, yuqoridagi kodni biroz batafsilroq ko'rib chiqaylik. Eng boshida men tuzilmalardan iborat massivni tasvirlayman. Bizga bu massiv faqat namoyish qilish uchun kerak. Biz uning barcha mazmunini JSONga aylantiramiz va mijozga beramiz. Ob'ekt turini ishga tushirish JSON yozuvi. Usulni chaqirishga ishonch hosil qiling SetString(), chunki biz JSON matnini satr o'zgaruvchisiga olishimiz kerak. Keyin biz global usulni chaqiramiz WriteJSON(), biz tur ob'ektini o'tkazamiz JSON yozuvi va konvertatsiya qilinishi kerak bo'lgan massiv. Keyin natijani o'zgaruvchiga olamiz " LineForResponse" va HTTP javobini tayyorlang.
Bunga javoban biz qo'shamiz (usulga qarang " SetBodyFromString") natijada olingan JSON. Hammasi, demo-kod tayyor va siz testlarga o'tishingiz mumkin.
1C: Enterprise 8.3 da HTTP xizmatini nashr qilish
Bajarilgan ish natijalarini sinab ko'rish uchun yaratilgan HTTP xizmatini nashr qilaylik. Eng oddiy sinov uchun tizimingizda veb-server o'rnatilgan bo'lishi kerak. Men uchun veb-xizmat rolini bajaradi Apache. Biz veb-serverni o'rnatish/sozlash uchun zarur bo'lgan bosqichlarni o'tkazib yuboramiz va HTTP xizmatini nashr qilish masalasiga o'tamiz.
Nashr qilish uchun siz “Ma’muriyat” menyusiga o‘tishingiz va “ Veb-serverda nashr qilish" Ko'rsatilgan oynada quyidagilarni to'ldiring:
- Ism bizning yechimimizning nomi. U nashr etilgan axborot xavfsizligiga kirishda URL manzilida ishlatiladi. Misol uchun, agar siz bu yerda testni belgilasangiz, axborot xavfsizligingiz http://localhost/test manzilida mavjud bo'ladi. Men sinov variantidan mamnunman.
- Veb-server- Avtomatik ravishda to'ldiriladi. Men Apache 2.2 dan veb-server sifatida foydalanaman;
- Katalog– nashr etilgan AT konfiguratsiya fayli joylashtiriladigan katalogga yo'l;
- Belgini olib tashlang Yupqa mijoz va veb-mijozni nashr eting», « Standart OData interfeysini nashr eting», « Sukut bo'yicha WEB xizmatlarini nashr eting»;
- HTTP xizmatlari ko'rinishida " Sukut bo'yicha HTTP xizmatlarini nashr qiling" va jadval bo'limida biz yaratilgan xizmatni belgilaymiz.
HTTP xizmati sinovdan o'tkazilmoqda
Yaratilgan http xizmatini sinab ko'rish uchun brauzerni ishga tushiramiz va unga kirishga harakat qilamiz. Agar siz mening barcha qadamlarimni takrorlagan bo'lsangiz, unda yo'l quyidagicha ko'rinishi kerak:
Http://localhost:9090/services/hs/our-services/list
Portga e'tibor berishga arziydi 9090 , bu xost nomidan keyin ikki nuqta bilan belgilanadi. Agar siz Apache-ni standart sozlamalar bilan o'rnatgan bo'lsangiz, u 80-portda tinglaydi, shuning uchun siz hech narsa ko'rsatishingiz shart emas. Natijada, URL quyidagicha bo'ladi:
Http://localhost/services/hs/our-services/list
U orqali o'tishga harakat qiling va agar hamma narsa to'g'ri ishlayotgan bo'lsa, siz JSON formatidagi ma'lumotlarga ega sahifa olasiz:
[ ( sarlavha: "Xizmat № 1", tavsif: "Xizmat № 1 tavsifi" ), ( sarlavha: "Xizmat № 2", tavsif: "Xizmat № 2 tavsifi" ), ( sarlavha: "Xizmat" № 3", tavsifi: "Xizmat tavsifi № 3", ( sarlavha: "Xizmat № 4", tavsif: "Xizmat № 4 tavsifi") ]
Bu erda biz demo misolini ko'rib chiqishni yakunlashimiz mumkin, ammo men nihoyat URLni uning tarkibiy elementlariga ajratmoqchiman, shunda nima uchun aynan shunday havolani olganimiz aniq bo'ladi.
Shunday qilib, birinchi qism aniq bo'lishi kerak - localhost. Bu veb-server o'rnatilgan xost nomi. Keyingi - nashr etilgan axborot xavfsizligiga havola (xizmatlar). Keyinchalik hs keladi, bu yo'l elementi http xizmati bilan o'zaro aloqada bo'lishdan manfaatdor ekanligimizni bildiradi. Oxirgi ikkita element xizmatimizning ildiz URL manzili va URL shablonidir.
Xulosa o'rniga
« 1C: Enterprise 8.3» oddiy yaratish imkonini beradi HTTP xizmatlari minimal mehnat xarajatlari bilan, bu qisqa eslatmani o'qib chiqqandan so'ng, bunga ishonchingiz komil bo'lishi kerak edi. Funktsionallik platformaning dastur imkoniyatlarini sezilarli darajada kengaytiradi. Keyingi postlarda biz texnologiyadan foydalanishning amaliy holatlari haqida gapiramiz va turli xil echimlarni amalda qo'llashni ko'rib chiqamiz.
Veb-xizmatlar boshqa axborot tizimlari bilan integratsiya qilish uchun foydalaniladigan platforma mexanizmlaridan biridir. Bu ilovalar va axborot tizimlarini integratsiyalashning zamonaviy standarti bo'lgan xizmatga yo'naltirilgan arxitektura SOA (Xizmatga yo'naltirilgan arxitektura) ni qo'llab-quvvatlash vositasidir.
Xizmatga yo'naltirilgan arxitekturaning muhim afzalligi shundaki, u mavjud echimlarni yo'q qilmasdan korxona infratuzilmasini bir xilda rivojlantirish imkonini beradi. Uning ishlatilishi heterojen va eski tizimlarni zamonaviy korxona landshaftiga integratsiyalash orqali xarajatlarni minimallashtirishga imkon beradi. Bu sizga erkin bog'langan dasturiy ta'minot komponentlarini qayta ishlatishni maksimal darajada oshirish uchun amalga oshirish imkonini beradi.
Xizmatga yo'naltirilgan arxitektura jadal rivojlanmoqda va yirik sotuvchilar tomonidan qo'llab-quvvatlanmoqda. U avtonom yoki tashqaridan boshqariladigan xizmatlar asosida qurilgan. Ularni amalga oshirishning afzal usuli bu veb-xizmatlardir. Ular platformadan mustaqil, mustaqil va hamma joyda qo'llab-quvvatlanadi.
Ilova yechimi 1C: Enterprise 8 ham veb-xizmatlar provayderi, ham boshqa provayderlar tomonidan nashr etilgan veb-xizmatlarning iste'molchisi bo'lishi mumkin.
O'zboshimchalik bilan apparat va dasturiy platformalardan foydalanadigan tizimlar iste'molchi sifatida harakat qilishi mumkin. Veb-xizmatlar texnologiyasi platformadan mustaqil.
![](https://i1.wp.com/v8.1c.ru/overview/000000273_2.png)
Veb-xizmatlarni texnik amalga oshirish
Agar dastur yechimi veb-xizmat provayderi bo'lsa, u holda fayl va mijoz-server ish rejimlarida dastur yechimi va veb-xizmat iste'molchilari o'rtasidagi o'zaro aloqa veb-server kengaytmasi modulidan foydalangan holda veb-server orqali amalga oshiriladi.
Bunday holda, iste'molchi dastur yechimining veb-xizmatiga kirganda, veb-xizmat moduli bajariladi. Ushbu modul konfiguratsiyada mavjud va muayyan veb-xizmat operatsiyalarini chaqirishda bajariladigan protseduralarni o'z ichiga oladi.
Ishning mijoz-server versiyasida ushbu modul klasterda bajariladi. Ishning fayl versiyasida - veb-server kengaytmasi modulida.
Agar dastur yechimi uchinchi tomon veb-xizmat provayderining iste'molchisi bo'lsa, u holda bu holda dastur yechimi va veb-provayder o'rtasidagi o'zaro ta'sir amalga oshiriladi.
Bilaman, Habré-da ular sabr-toqatli 1C ni yoqtirmaydilar. Garchi, 8.3 platformasi (Linux uchun mijozlar bilan) chiqarilishi bilan ular uni biroz ko'proq seva boshladilar. Aytgancha, yaqinda 1C-ning asosiy ishlanmalaridan biri - Manufacturing Enterprise Management konfiguratsiyasi interfeysi to'liq ingliz tiliga tarjima qilindi. Ko'p marta men bu erda nima uchun 1C haqida yozmasliklari haqida savollarga duch keldim. Ularga javob juda aniq - siz barcha savollarni tezda muhokama qilishingiz va biror narsani o'qishingiz mumkin bo'lgan ko'plab maxsus manbalar mavjud.
Ushbu maqola bu erda omon qolmasligiga ishonish uchun barcha asoslar bor, lekin men hali ham tavakkal qilaman, chunki 1C da gapirishga arziydigan qiziqarli narsalar mavjud.
Bir muncha vaqtdan beri 1C 8.x veb-xizmatlardan foydalanish imkonini berdi: 1C ham yetkazib beruvchi, ham iste'molchi sifatida harakat qilishi mumkin. Ushbu maqolada men 1C dan iste'molchi sifatida qanday foydalanishni Markaziy bank serveridan valyuta kurslarini olish misolida ko'rsataman.
Veb-xizmat
Markaziy bankda kunlik ma'lumotlarni olish uchun veb-xizmati mavjud: valyuta kurslari, yangiliklar, valyuta kursi dinamikasi va boshqalar. Xizmat tavsifini bu yerda http://www.cbr.ru/scripts/Root.asp?Prtid=DWS orqali topishingiz mumkin. Bizni ushbu xizmatning usullaridan biri qiziqtiradi: GetCursOnDate(on_date)- ma'lum bir sana uchun valyuta kurslarini olish. Usulga bitta argument uzatiladi On_date- bu kurslarni olishingiz kerak bo'lgan sana. Natijada jadvalni o'z ichiga olgan XML hosil bo'ladi ValueCursOnDate(kurslarning o'zlari va tegishli ma'lumotlar).Konfiguratsiya
Rivojlanish uchun men 1C 8.2 (mening ishimda 8.2.15.317) ni oldim va bo'sh konfiguratsiya yaratdim. Tashqi veb-xizmatlardan foydalanish uchun WS havolasi obyekti taqdim etiladi, lekin undan foydalanish shart emas, xizmatga koddan dinamik ravishda kirish mumkin. Men birinchi variantni ishlataman va keyin ikkinchisidan qanday foydalanishingiz mumkinligini ko'rsataman. Konfiguratsiyada men ishlov berishni yaratdim va uni "CBR valyuta kurslarini yuklash" deb nomladim. Men shakl qo'shdim (boshqariladigan) va uni asosiy qilib qo'ydim. Shaklda tafsilotlarni yaratdim va boshqaruv elementlarini rasmda ko'rsatilgandek joylashtirdim.Endi eng muhimi, veb-xizmat tavsifiga havola yaratishdir. Konfiguratsiyada biz WS-link turidagi yangi ob'ektni qo'shamiz. Ko'rsatilgan oynada WSDL ga havolani ko'rsating (ushbu formatning tavsifi maqola doirasidan tashqarida, siz bu haqda Vikipediyada o'qishingiz mumkin): http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx ?WSDL.
Qabul qilingan tavsifga asoslanib, 1C avtomatik ravishda veb-xizmatning vizual xaritasini yaratadi. Siz veb-xizmat nomini ko'rishingiz, unda qanday operatsiyalar mavjudligini, shuningdek ishlatiladigan ma'lumotlar turlarini ko'rishingiz mumkin.
Konfiguratsiya deyarli tugallandi, ilovamiz yanada estetik ko'rinishga ega bo'lishi uchun bir necha marta teginishimiz kerak. Konfiguratsiya ildiziga o'ng tugmasini bosing va "Ish stoli buyruq interfeysini ochish" menyusini chaqiring. Ko'rsatilgan oynada "Markaziy bank valyuta kurslarini yuklash" jarayoni yonidagi "Ko'rinish" bayrog'ini olib tashlashingiz kerak. OK tugmasini bosing. Keyin, konfiguratsiya ildiziga sichqonchaning o'ng tugmachasini bosing va "Ish stolini ochish" menyusiga qo'ng'iroq qiling, u erda biz rasmdagi kabi sozlamalarni qilamiz:
Ushbu sozlamalar bizga ishlov berish shaklini to'g'ridan-to'g'ri ish stolida (1C dasturining ish stolini anglatadi) 1C Enterprise rejimida ko'rsatishga imkon beradi.
Dasturlash
Endi bizning qayta ishlashimizni ma'no bilan to'ldirish qoladi: uni valyuta kurslarini qabul qilish va shakldagi jadvalda ko'rsatish. Shaklni tahrirlash rejimida siz yangi forma buyrug'ini qo'shishingiz kerak, keling, uni LoadCurrencies deb ataymiz. Bu buyruq formada joylashgan tugma bilan bog'lanishi kerak. Buyruq uchun amalni quyidagi kod bilan to'ldiramiz (muallifning eslatmasi: voy, markazda 1C kodini ajratib ko'rsatish mavjud, garchi u to'g'ri ishlamasa ham):&Mijoz protsedurasi bo'yicha LoadCurrencies(Buyruq) Agar ValueFilled BO'lmasa(DownloadSana) Keyin Report("Yuklab olish sanasi tanlanmagan!", MessageStatus.Important); Qaytish; endIf; CurrencyRatesTable.Clear(); LoadCurrencyRates(LoadDate); Jarayonning oxiri
Bu erda biz birinchi navbatda sana to'ldirilganligini tekshiramiz (agar u to'ldirilmagan bo'lsa, biz bu haqda foydalanuvchiga xabar beramiz va boshqa hech narsa qilmaymiz). Keyin formada joylashgan jadval tozalanadi va sana o'tkaziladigan LoadCurrencyRates() protsedurasi chaqiriladi.
LoadCurrencyRates() protsedurasi kodi, tushuntirishlar kodga izohlarda berilgan:
LoadCurrencyRates(fDataDownload) protsedurasi //Tashqi veb-xizmatga kirish uchun proksi-server yarating, //funksiyaga nom maydoni URI, xizmat nomi, port nomini o'tkazing. Proksi = WSLinks.CBR_DailyInfoWebServ.CreateWSProxy("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //GetCursOnDate usuliga uzatiladigan parametr turini oling. TypeWSParameter = Proxy.FactoryXDTO.Packets.Get("http://web.cbr.ru/").Get("GetCursOnDate"); //Turga qarab parametr yarating va On_Date parametrining qiymatini to'ldiring. WSParameter = Proxy.XDTO Factory.Create(WSParameterType); WSParameter.On_Date = fLoadDate; //Veb-xizmat usulini chaqiring, natijani Valyuta kurslari o'zgaruvchisiga yozing. Valyuta kurslari = Proxy.GetCursOnDate(WSParameter); //ValuteCursOnDate jadvalini aylantiring, har bir jadval qiymatini // shakldagi jadvalga qo'shing (ustunlarni mos qiymatlar bilan to'ldiring). Valyuta kurslaridan har bir element uchun.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate tsikli NewLineTK = CurrencyRatesTable.Add(); NewLineTK.CurrencyName = Element.Vname; NewStringTZ.Nominal = Element.Vnom; NewLineTZ.DigitalCurrencyCode = Element.Vcode; NewTZLine.CurrencyCode = Element.VChCode; NewLineTZ.Currency Rate = Element.Vcurs; EndCycle; Jarayonning oxiri
Endi siz ma'lumotlar bazasi konfiguratsiyasini (F7) yangilashingiz va 1C Enterprise (F5) ni ishga tushirishingiz mumkin. Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, quyidagi kabi oynani ko'rishingiz kerak:
Natijani tekshirish uchun biz valyuta kurslarini olmoqchi bo'lgan sanani kiritishimiz va "Valyutalarni yuklash" tugmasini bosishimiz kerak. Agar so'rov muvaffaqiyatli bo'lsa, shakldagi jadval tarif qiymatlari bilan to'ldiriladi:
Va nihoyat, men tashqi veb-xizmatga, ya'ni WS havolasi ob'ektini qo'shmasdan qanday qilib dinamik ravishda kirishingiz mumkinligini ko'rsatmoqchiman. Shunday qilib, biz konfiguratsiyaga bog'lanmasdan bunday veb-xizmatlarni tashqi ishlov berishdan foydalanishimiz mumkin.
LoadCurrencyRates() protsedurasida chiziq
Ta'riflar = Yangi WSDefinitions("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); Proksi = Yangi WSProxy(Tanriflar, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
Avval biz WSDL-dan veb-xizmat uchun ta'riflar yaratamiz. Keyin unga kirish uchun proksi-server ham yaratamiz.
Ko'rib turganingizdek, 1C-dan tashqi veb-xizmatlardan foydalanish odatda juda oddiy (garchi turlarning ta'rifini tushunishda biroz qiyinchilik bo'lsa-da, shu jumladan men).
Agar bu post shu yerda aks-sado bersa, yana bir qancha mavzular haqida gapirish mumkin.
2012-yil 30-iyul, soat 13:19Valyuta kurslarini yuklash misolidan foydalanib, 1C-da tashqi veb-xizmatlardan foydalanish
- Dasturlash
Bilaman, Habré-da ular sabr-toqatli 1C ni yoqtirmaydilar. Garchi (Linux bilan ishlaydigan mijozlar bilan), ular buni biroz ko'proq yoqtira boshladilar. Aytgancha, yaqinda 1C-ning asosiy ishlanmalaridan biri - Manufacturing Enterprise Management konfiguratsiyasi interfeysi to'liq ingliz tiliga tarjima qilindi. Ko'p marta men bu erda nima uchun 1C haqida yozmasliklari haqida savollarga duch keldim. Ularga javob juda aniq - siz barcha savollarni tezda muhokama qilishingiz va biror narsani o'qishingiz mumkin bo'lgan ko'plab maxsus manbalar mavjud.
Ushbu maqola bu erda omon qolmasligiga ishonish uchun barcha asoslar bor, lekin men hali ham tavakkal qilaman, chunki 1C da gapirishga arziydigan qiziqarli narsalar mavjud.
Bir muncha vaqtdan beri 1C 8.x veb-xizmatlardan foydalanish imkonini berdi: 1C ham yetkazib beruvchi, ham iste'molchi sifatida harakat qilishi mumkin. Ushbu maqolada men 1C dan iste'molchi sifatida qanday foydalanishni Markaziy bank serveridan valyuta kurslarini olish misolida ko'rsataman.
Veb-xizmat
Markaziy bankda kunlik ma'lumotlarni olish uchun veb-xizmati mavjud: valyuta kurslari, yangiliklar, valyuta kursi dinamikasi va boshqalar. Xizmat tavsifini bu yerda http://www.cbr.ru/scripts/Root.asp?Prtid=DWS orqali topishingiz mumkin. Bizni ushbu xizmatning usullaridan biri qiziqtiradi: GetCursOnDate(on_date)- ma'lum bir sana uchun valyuta kurslarini olish. Usulga bitta argument uzatiladi On_date- bu kurslarni olishingiz kerak bo'lgan sana. Natijada jadvalni o'z ichiga olgan XML hosil bo'ladi ValueCursOnDate(kurslarning o'zlari va tegishli ma'lumotlar).Konfiguratsiya
Rivojlanish uchun men 1C 8.2 (mening ishimda 8.2.15.317) ni oldim va bo'sh konfiguratsiya yaratdim. Tashqi veb-xizmatlardan foydalanish uchun WS havolasi obyekti taqdim etiladi, lekin undan foydalanish shart emas, xizmatga koddan dinamik ravishda kirish mumkin. Men birinchi variantni ishlataman va keyin ikkinchisidan qanday foydalanishingiz mumkinligini ko'rsataman. Konfiguratsiyada men ishlov berishni yaratdim va uni "CBR valyuta kurslarini yuklash" deb nomladim. Men shakl qo'shdim (boshqariladigan) va uni asosiy qilib qo'ydim. Shaklda tafsilotlarni yaratdim va boshqaruv elementlarini rasmda ko'rsatilgandek joylashtirdim.Endi eng muhimi, veb-xizmat tavsifiga havola yaratishdir. Konfiguratsiyada biz WS-link turidagi yangi ob'ektni qo'shamiz. Ko'rsatilgan oynada WSDL ga havolani ko'rsating (ushbu formatning tavsifi maqola doirasidan tashqarida, siz bu haqda Vikipediyada o'qishingiz mumkin): http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx ?WSDL.
Qabul qilingan tavsifga asoslanib, 1C avtomatik ravishda veb-xizmatning vizual xaritasini yaratadi. Siz veb-xizmat nomini ko'rishingiz, unda qanday operatsiyalar mavjudligini, shuningdek ishlatiladigan ma'lumotlar turlarini ko'rishingiz mumkin.
Konfiguratsiya deyarli tugallandi, ilovamiz yanada estetik ko'rinishga ega bo'lishi uchun bir necha marta teginishimiz kerak. Konfiguratsiya ildiziga o'ng tugmasini bosing va "Ish stoli buyruq interfeysini ochish" menyusini chaqiring. Ko'rsatilgan oynada "Markaziy bank valyuta kurslarini yuklash" jarayoni yonidagi "Ko'rinish" bayrog'ini olib tashlashingiz kerak. OK tugmasini bosing. Keyin, konfiguratsiya ildiziga sichqonchaning o'ng tugmachasini bosing va "Ish stolini ochish" menyusiga qo'ng'iroq qiling, u erda biz rasmdagi kabi sozlamalarni qilamiz:
Ushbu sozlamalar bizga ishlov berish shaklini to'g'ridan-to'g'ri ish stolida (1C dasturining ish stolini anglatadi) 1C Enterprise rejimida ko'rsatishga imkon beradi.
Dasturlash
Endi bizning qayta ishlashimizni ma'no bilan to'ldirish qoladi: uni valyuta kurslarini qabul qilish va shakldagi jadvalda ko'rsatish. Shaklni tahrirlash rejimida siz yangi forma buyrug'ini qo'shishingiz kerak, keling, uni LoadCurrencies deb ataymiz. Bu buyruq formada joylashgan tugma bilan bog'lanishi kerak. Buyruq uchun amalni quyidagi kod bilan to'ldiramiz (muallifning eslatmasi: voy, markazda 1C kodini ajratib ko'rsatish mavjud, garchi u to'g'ri ishlamasa ham):&Mijoz protsedurasi bo'yicha LoadCurrencies(Buyruq) Agar ValueFilled BO'lmasa(DownloadSana) Keyin Report("Yuklab olish sanasi tanlanmagan!", MessageStatus.Important); Qaytish; endIf; CurrencyRatesTable.Clear(); LoadCurrencyRates(LoadDate); Jarayonning oxiri
Bu erda biz birinchi navbatda sana to'ldirilganligini tekshiramiz (agar u to'ldirilmagan bo'lsa, biz bu haqda foydalanuvchiga xabar beramiz va boshqa hech narsa qilmaymiz). Keyin formada joylashgan jadval tozalanadi va sana o'tkaziladigan LoadCurrencyRates() protsedurasi chaqiriladi.
LoadCurrencyRates() protsedurasi kodi, tushuntirishlar kodga izohlarda berilgan:
LoadCurrencyRates(fDataDownload) protsedurasi //Tashqi veb-xizmatga kirish uchun proksi-server yarating, //funksiyaga nom maydoni URI, xizmat nomi, port nomini o'tkazing. Proksi = WSLinks.CBR_DailyInfoWebServ.CreateWSProxy("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //GetCursOnDate usuliga uzatiladigan parametr turini oling. TypeWSParameter = Proxy.FactoryXDTO.Packets.Get("http://web.cbr.ru/").Get("GetCursOnDate"); //Turga qarab parametr yarating va On_Date parametrining qiymatini to'ldiring. WSParameter = Proxy.XDTO Factory.Create(WSParameterType); WSParameter.On_Date = fLoadDate; //Veb-xizmat usulini chaqiring, natijani Valyuta kurslari o'zgaruvchisiga yozing. Valyuta kurslari = Proxy.GetCursOnDate(WSParameter); //ValuteCursOnDate jadvalini aylantiring, har bir jadval qiymatini // shakldagi jadvalga qo'shing (ustunlarni mos qiymatlar bilan to'ldiring). Valyuta kurslaridan har bir element uchun.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate tsikli NewLineTK = CurrencyRatesTable.Add(); NewLineTK.CurrencyName = Element.Vname; NewStringTZ.Nominal = Element.Vnom; NewLineTZ.DigitalCurrencyCode = Element.Vcode; NewTZLine.CurrencyCode = Element.VChCode; NewLineTZ.Currency Rate = Element.Vcurs; EndCycle; Jarayonning oxiri
Endi siz ma'lumotlar bazasi konfiguratsiyasini (F7) yangilashingiz va 1C Enterprise (F5) ni ishga tushirishingiz mumkin. Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, quyidagi kabi oynani ko'rishingiz kerak:
Natijani tekshirish uchun biz valyuta kurslarini olmoqchi bo'lgan sanani kiritishimiz va "Valyutalarni yuklash" tugmasini bosishimiz kerak. Agar so'rov muvaffaqiyatli bo'lsa, shakldagi jadval tarif qiymatlari bilan to'ldiriladi:
Va nihoyat, men tashqi veb-xizmatga, ya'ni WS havolasi ob'ektini qo'shmasdan qanday qilib dinamik ravishda kirishingiz mumkinligini ko'rsatmoqchiman. Shunday qilib, biz konfiguratsiyaga bog'lanmasdan bunday veb-xizmatlarni tashqi ishlov berishdan foydalanishimiz mumkin.
LoadCurrencyRates() protsedurasida chiziq
Ta'riflar = Yangi WSDefinitions("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL"); Proksi = Yangi WSProxy(Tanriflar, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
Avval biz WSDL-dan veb-xizmat uchun ta'riflar yaratamiz. Keyin unga kirish uchun proksi-server ham yaratamiz.
Ko'rib turganingizdek, 1C-dan tashqi veb-xizmatlardan foydalanish odatda juda oddiy (garchi turlarning ta'rifini tushunishda biroz qiyinchilik bo'lsa-da, shu jumladan men).
Agar bu post shu yerda aks-sado bersa, yana bir qancha mavzular haqida gapirish mumkin.
Mavzu sarlavhasi haqiqatan ham savol, chunki... Men o'zim bu nima ekanligini bilmayman va birinchi marta ushbu maqola doirasida u bilan ishlashga harakat qilaman. Men kafolat bera oladigan yagona narsa shundaki, quyida keltirilgan kod ishlaydi, ammo mening iboralarim bularning barchasini o'zim qanday tushunganim haqidagi taxminlar va taxminlar bo'ladi. Xo'sh, ketaylik ...
Kirish
Biz veb-xizmatlar tushunchasi nima uchun yaratilganidan boshlashimiz kerak. Bu kontseptsiya dunyoda paydo bo'lgan vaqtga kelib, ilovalarning masofadan o'zaro ta'sirini ta'minlaydigan texnologiyalar allaqachon mavjud edi, bu erda bir dastur boshqa dasturda qandaydir usulni chaqirishi mumkin, bu boshqa shaharda yoki hatto mamlakatda joylashgan kompyuterda ishga tushirilishi mumkin. Bularning barchasi RPC (Remote Procedure Calling) deb qisqartiriladi. Masalan, CORBA texnologiyalari va Java uchun - RMI (Remote Method Invoking). Va ularda hamma narsa yaxshi ko'rinadi, ayniqsa CORBAda, chunki ... Siz u bilan har qanday dasturlash tilida ishlashingiz mumkin, ammo nimadir etishmayotgan edi. Menimcha, CORBA ning kamchiligi shundaki, u har qanday xavfsizlik devoriga mos keladigan oddiy HTTP o'rniga o'zining ba'zi tarmoq protokollari orqali ishlaydi. Veb-xizmatning g'oyasi HTTP paketlariga kiritiladigan RPC yaratish edi. Shunday qilib, standartni ishlab chiqish boshlandi. Ushbu standartning asosiy tushunchalari qanday:- Sovun. Masofaviy protsedurani chaqirishdan oldin, siz ushbu qo'ng'iroqni SOAP formatidagi XML faylida tasvirlashingiz kerak. SOAP veb-xizmatlarda qo'llaniladigan ko'plab XML belgilaridan biridir. Biz HTTP orqali biror joyga yubormoqchi bo'lgan hamma narsa avval XML SOAP tavsifiga aylantiriladi, so'ngra HTTP paketiga to'ldiriladi va TCP/IP orqali tarmoqdagi boshqa kompyuterga yuboriladi.
- WSDL. Veb-xizmat mavjud, ya'ni. usullarini masofadan chaqirish mumkin bo'lgan dastur. Ammo standart ushbu dasturga "ha, siz haqsiz - bu haqiqatan ham veb-xizmat va siz undan falon usullarni chaqirishingiz mumkin" degan tavsif bilan birga bo'lishini talab qiladi. Ushbu tavsif boshqa formatga ega bo'lgan boshqa XML fayli, ya'ni WSDL bilan ifodalanadi. Bular. WSDL shunchaki veb-xizmatni tavsiflovchi XML fayli va boshqa hech narsa emas.
Umumiy yondashuv
Veb-xizmatlarda har doim mijoz va server mavjud. Server bizning veb-xizmatimiz bo'lib, ba'zan so'nggi nuqta deb ataladi (masalan, mijozdan SOAP xabarlari yetib boradigan oxirgi nuqta). Biz quyidagilarni qilishimiz kerak:- Veb-xizmatimizning interfeysini tasvirlab bering
- Ushbu interfeysni amalga oshiring
- Veb-xizmatimizni ishga tushiring
- Mijozni yozing va kerakli veb-xizmat usuliga masofadan qo'ng'iroq qiling