Məlumat kompozisiya sistemi üçün sorğu dili genişləndirilməsi
Məlumat kompozisiya sistemi üçün sorğu dilinin genişləndirilməsi əyri mötərizələrə daxil edilmiş və birbaşa sorğu mətnində yerləşdirilən xüsusi sintaktik göstərişlərdən istifadə etməklə həyata keçirilir.
Bu cümlə istifadəçinin çıxış üçün seçə biləcəyi sahələri təsvir edir. Bundan sonra açar söz Vergüllə ayrılaraq, konfiqurasiya üçün əlçatan olacaq əsas sorğu seçim siyahısındakı sahələrin ləqəbləri sadalanır.
Məsələn:
(Seçmə elementi, anbar)
Sahənin ləqəbindən sonra “.*” simvollarının kombinasiyası ola bilər ki, bu da bu sahədən uşaq sahələrin istifadə edilməsinin mümkünlüyünü göstərir.
Məsələn, Nomenklatura.* girişi “Nomenklatura” sahəsinin uşaq sahələrindən istifadə imkanını göstərir (məsələn, “Nomenklatura.Kod” sahəsi). SELECT elementi yalnız ilk qoşulma sorğusunda görünə bilər.
İstifadəçinin seçim tətbiq edə biləcəyi sahələr təsvir edilmişdir. Bu təklif cədvəl sahələrindən istifadə edir. Seçim siyahısı sahəsində ləqəblərin istifadəsinə icazə verilmir. Birliyin hər bir hissəsi öz WHERE elementini ehtiva edə bilər.
(HARADA Nomenklatura.*, Anbar)
Dövr üçün satış əldə etmək lazımdır + satış olub-olmamasından asılı olmayaraq bütün elementi göstərmək lazımdır. Yəni, Satış reyestrinin dövriyyə cədvəlindən məlumatları, nomenklatura kataloqundan məlumatları seçmək lazımdır. Bütün nomenklatura nə üçün lazım olduğu sualını atlayaq.
Problemi həll etmək üçün, nəticədə, seçilmiş dövrdə satılmayan element üçün məhsulu və Satış dövriyyəsi cədvəlini birləşdirən sorğu yarada bilərsiniz; Qarşı tərəf, Razılaşma, Kəmiyyət, məbləğ= Null. Bu sorğu:
SEÇİN ReferenceNomenklatura.Link AS Nomenklatura, SalesTurnover.Counterparty, SalesTurnover.Qarşı tərəf Müqaviləsi, Satış Dövriyyəsi.Kəmiyyət Dövriyyə Kəmiyyət, SatışDövriyyəsi.Xərc Dövriyyəsi AS. AS SalesTurnover Software SprNomenclature.Link = SalesTurnover. NomenklaturaNəticə budur:
Qarşı tərəf | Razılaşma | Nomenklatura | Kəmiyyət | məbləğ |
null | null | _Test1 | null | null |
"Buynuzlar və Dırnaqlar" MMC | Müqavilə 1 | Başmaq | 10 | 1200 |
ASC "Qazprom" | Sərin müqavilə | Çəkmələr | 5 | 13000 |
null | null | Qaloşlar | null | null |
null | null | Şiferlər | null | null |
IN bu misalda"Qaloşlar" və "Tepliklər"in satışı olmayıb
Və hər şey yaxşı olardı, əgər nümunəni qarşı tərəfə görə qruplaşdırsaq, onda bütün satılmamış əşyalar ayrı bir qrupa düşəcək, burada Qarşı tərəf = Null, lakin müştəri hesabatda qarşı tərəf sahəsinə görə təsadüfi seçim etmək istəyir (təbii ki, bu Satış reyestrindən əks tərəf deməkdir). Mən nə etməliyəm? Axı, əslində, yalnız cədvəli süzgəcdən keçirməliyik Satış. ACS konstruktorunda avtomatik tamamlamadan istifadə etsək, o zaman mövcud seçim sahələrinə sahə daxil olacaq Qarşı tərəf, hər şey qaydasında görünür, lakin qarşı tərəfin seçimi ilə hesabatı icra edərkən, biz elementlə əlaqədən bütün qeydləri itirəcəyik. Məsələn, seçimi təyin edək: Qarşı tərəf = MMC "Buynuzlar və Dırnaqlar". Nəticə belə görünəcək:
Heç bizə lazım olan şey deyil, elə deyilmi?
Problemi həll etmək üçün, əlbəttə ki, sorğuya, məsələn, virtual cədvəlin parametrlərinə bir parametr əlavə edə bilərsiniz. Satış dövriyyəsi, lakin eyni zamanda müqayisə növünün təyin edilməsi çevikliyi itir.
Bir həll var: bunun üçün sorğu qurucusu nişanda Məlumat tərkibi => Cədvəllər virtual cədvəl şərtlərinə şərt sahəsi əlavə edin Satış dövriyyəsi və ləqəbini dəyişdirin Qarşı tərəfin seçimi
İstifadəçini seçim sahələri ilə qarışdırmamaq üçün biz şərt sahəsini deaktiv edəcəyik Qarşı tərəf və sahənin başlığını dəyişdirin Qarşı tərəfin seçimi
Qarşı tərəf sahəsində aktivləşdirilmiş seçimlə bu sxemin icrası nəticəsində əldə edilən sorğu aşağıdakı formanı alacaq:
Referans Nomenklaturasını SEÇİN.Link AS Nomenklatura, SatışTurnover.Counterparty AS, SalesTurnover.Counterparty Agreement AS Qarşı Tərəf Müqaviləsi, SalesTurnover.QuantityTurnover AS >Quantity, SalesTurnover.CostTurnoverTurnover. Müqavilə Nəzarətçisi agenti AS Giriş, NÜMAYƏNDƏLİK LINK(SatışTurnover. Qarşı tərəf) AS CounterpartyGiriş, SprNomenklatura.Təqdimat AS Nomenklatura Kataloqdan Təqdimat.Nomenklatura AS SprNomenklatura SOL BAĞLANTI QEYDİYYAT Yığımlar.Satış.Tirnover(&P , , , Counterparty =AS &P3LTr.Sal.Nomenklatura) nomenklaturaVə buna uyğun olaraq nəticə:
Qarşı tərəf | Razılaşma | Nomenklatura | Kəmiyyət | məbləğ |
null | null | _Test1 | null | null |
"Buynuzlar və Dırnaqlar" MMC | Müqavilə 1 | Başmaq | 10 | 1200 |
null | null | Çəkmələr | null | null |
null | null | Qaloşlar | null | null |
null | null | Şiferlər | null | null |
Test1 Nomenklatura kataloqunda hər şeyin yerləşdiyi qrupdur
Nəşrdə istifadə olunan hesabatın XML sxemi nəşrə əlavə olunur. Mən dövrəni İnteqrasiya edilmiş Avtomatlaşdırmada yaratdım, lakin məncə hər şey həm UPP, həm də UT 10-da yaxşı işləyəcək
Bu nümunə ACS-də öz seçim parametrlərinizi necə yaratmağınızı və bayraq aktivləşdirilmiş dövrə dizayn edirsinizsə, avtomatik yaradılmış parametrləri necə söndürəcəyinizi göstərir. Avtomatik tamamlama.
İstifadə etmədən sxemlər yaratmaq üçün kifayət qədər təcrübəniz varsa Avtomatik doldurma- onda bu məsləhətin mənası yoxdur.
SKD nə üçün istifadə edilə bilər?
Müəyyən edilmiş rəy hesabat məqsədi daşıyır.
Əslində ACS imkanları universal hesabatlar yaratmaqdan kənara çıxır.
Və bu gün necə göstərəcəyik girişə nəzarət sistemindən istifadə edərək istifadəçi çevik məlumat seçimini konfiqurasiya edə biləcək. Bundan əlavə, bu seçim məlumatların əldə edilməsi və işlənməsi zamanı istifadə olunacaq.
Bu hansı vəzifələr üçün faydalı olacaq?
verək tipik konfiqurasiyalardan nümunələr:
Yəni, istifadəçiyə geniş seçim variantları təqdim etmək lazım olan yerdə alət faydalıdır.
Dərs ilə işləməyi əhatə edir parametrlər qurucusu məlumatların yerləşdirilməsi sxemləri:
Video parametrlər qurucusunda əvvəlcədən təyin edilmiş seçimdən istifadə edərək məlumatları necə seçə biləcəyinizi göstərir.
"Qorxulu" bir obyekt istifadə olunur - ProcessorOutputResultCompositionDataIntoValueCollection.
Əslində, hər şey o qədər də mürəkkəb deyil - 8 dəqiqə ərzində problemi həll edirik.
Dərsdə baxacağıq ACS qurucu parametrlərinin saxlanması Dəyər Mağazasından istifadə etməklə.
"1C: İstehsalat Müəssisəsinin İdarə Edilməsi 1.3" konfiqurasiyasında bu problemi necə həll edəcəyimizi anlayaq.
Baxmaqdan həzz alın! :)
Əgər toplamaq lazımdırsa müxtəlif mənbələrdən alınan məlumatlar, üç variant var.
Siz bütün məlumatlar üçün bir “universal” sorğu tərtib etməyə cəhd edə bilərsiniz (uzun), bir neçə sorğunun məlumatlarını bir dövrədə göstərə bilərsiniz (sərt, çevik struktur) - və ya sadəcə istifadə edə bilərsiniz ACS və məlumat dəstlərinin əlaqəsi bir istək əvəzinə.
Eyni zamanda, düzgün nəticələr əldə etmək vacibdir - bir neçə mənbə varsa, bunun öz xüsusiyyətləri var
SKD-nin köməyi ilə siz sadəcə edə bilərsiniz hesabatda hər bir tarix üçün ən son snapshot əldə edin.
Və ya aydınlıq üçün, - hər satış tarixi üçün məhsulun qiymətini əldə edin.
SKD-nin köməyi ilə siz təşkil edə bilərsiniz hesabatda dövr üçün bütün tarixləri göstərir, və yalnız hesabatda məlumat olanlar deyil (proqramlaşdırmadan tarixlər əlavə etmək, yalnız girişə nəzarət sisteminin imkanları ilə)
ACS-dən istifadə edərək, dövrlərin (il/rüb/ay və s.) əlavə edilməsi ilə iç-içə qruplaşmalar təşkil edə bilərsiniz.
Hesabatı istədiyiniz kimi təşkil edin, məsələn, sütun başlığını şaquli, bu sütundakı məlumatları isə üfüqi olaraq göstərin.
İstifadəçiyə hesabat modulunu redaktə etmədən məlumatların hesabatda göstərilmə tezliyini (il, rüb, aya görə) seçməsinə icazə verin - yalnız parametrlərə görə.
Hesabatda OR istifadə edərək bir neçə şərti necə birləşdirmək olar? Bu seçim, məsələn, hesabat tərtibatçısında mövcud deyil, lakin ACS-də mövcuddur
Xülasə məlumatları diaqram şəklində göstərirsinizsə, onun görünüşünə dəqiq nəzarət edə bilməlisiniz: seriya üçün markerlərin görünməsi, diaqram seriyalarının rənglərinin dəyişməsi, onları diaqramda ayırması şaquli xətt gələcək məlumatlardan keçmiş məlumatlar və s.
Hesabatı yaradan zaman tərtibatçı sorğu mətnini düzəltdi, lakin hesabatda bu sorğudan istifadə edərkən, ACS sistemi yanlış nəticələr verir.
Buna görə də, verilənlər bazasından məlumat əldə etmək üçün sistemin həqiqətən yerinə yetirdiyi sorğunu əldə edə bilmək və belə bir sorğuda debug etmək vacibdir.
Hesabata sənəd-qeydiyyatçıya təfərrüatlar əlavə edərkən sistem bəzən “yanlış” açılış və yekun balansları yaradır.
Buna görə, girişə nəzarət sistemindəki hesabatdakı sahələri düzgün şəkildə konfiqurasiya etmək vacibdir ki, balanslar həm sənədin təfərrüatı ilə, həm də onsuz düzgün göstərilsin.
Hesabat nəticəsi resurs dəyərinə görə seçimin harada konfiqurasiya edildiyindən asılı olaraq dəyişə bilər - hesabat səviyyəsində və fərdi qrup səviyyəsində buna nəzarət etməlisiniz.
İstəsən ACS-ni peşəkar şəkildə mənimsəmək və gündəlik işinizdə tətbiq edin, kursa yazılmaq üçün:
Dəstək - 2 ay. Kursun əhatə dairəsi - 34 dərs saatı.
Təhsilinizi təxirə salmayın!
Emal yazmaq üçün proqramçılar tez-tez məlumatları əldə etmək və sonra onu emal etmək üçün sorğulardan istifadə etməli olurdular. Məlumatlar da öz növbəsində sorğudan əldə edilib. Yaxşı, seçimsiz və ya filtrsiz sorğu nadirdir. Nümunə sorğusundan istifadə edərək, belə sorğulardakı seçimlərdən danışaq:
İstifadəçi üçün qarşı tərəf tərəfindən seçimi təşkil etmək üçün müntəzəm forma, proqramçı formada bu kimi görünən üç element yerləşdirməli idi:
Bir proqramçı təsvir etmək üçün nə qədər iş lazımdır? müxtəlif növlər müqayisələr (bərabər, bərabər deyil, siyahıda, qrupda...) və bu cür müqayisələrə əsaslanaraq, məlumat əldə etmək üçün son sorğunuzu dəqiqləşdirin.
Bunun ACS istifadə edərək necə edilə biləcəyinə baxaq. Emalımızda Gəlin Məlumat Tərkibi Sxem növü ilə Layout yaradaq və onu sorğumuzla dolduraq:
Parametrlər sekmesinde, təfərrüatsız yeni bir qruplaşdırma və nümunəmizdə Hesab sahəsi əlavə edəcəyik, çünki sonunda hər şeyi dəyərlər cədvəlinə daxil edəcəyik:
Seçim sekmesinde, seçimə Qarşı tərəfi əlavə edin:
İndi formanı yaratmağa başlayaq. İstifadəçinin işləyəcəyi Seçimi emal formasında göstərək. Formada Cədvəl Sahəsi tipli elementi göstərəcəyik və ona Composer.Settings.Selection məlumat növü ilə Selection adını verəcəyik:
İndi OnOpen forması üçün hadisə işləyiciləri və Run düyməsini sıxmaq üçün işləyici yaradaq, kod aşağıda təqdim olunur:
Perem Layout; Prosedur ButtonExecutePress(Button) Nəticə.Clear();
LayoutLinker = newDataLayoutLayoutLinker;
Layout Layout = Layout Composer.Run(Layout, Composer.GetSettings(), Type("DataCompositionLayoutGeneratorForValueCollection"));
CompositionProcessor = newDataCompositionProcessor;