Elektron cədvəl sənədinə çıxış ilə sorğu dizayneri ilə işləmək. Məlumat tərtibi sxemi üçün sorğu dizayneri Sorğu dizayneri 1C 8.3 şərtləri

Sorğu konstruktoru inkişaf vasitələrindən biridir. Bu, yalnız vizual vasitələrdən istifadə edərək sorğu dilində sorğu mətni yaratmağa imkan verir.

Düymələrdən istifadə DahaGeri dizaynerin nişanları arasında gəzə və sorğu nəticəsində hansı məlumatların olması lazım olduğunu, onların necə əlaqəli olduğunu, qruplaşdırıldığını, hansı cəmlərin hesablanacağını, müvəqqəti cədvəllərlə işləməyi, sorğular paketini redaktə edə bilərsiniz:

Konstruktorun işinin nəticəsi sintaktik cəhətdən düzgün sorğu mətni olacaqdır. Beləliklə, tərtibatçı sorğu dilinin sintaksisini bilmədən də işlək sorğu yarada bilər - konstruktor avtomatik olaraq lazımi sintaktik strukturları yaradacaq. Tamamlanmış sorğu mətni dərhal modul mətninə yapışdırıla və ya buferə kopyalana bilər.

Bundan əlavə, sorğu dizayneri artıq proqramda olan sorğu mətnini redaktə etməyə imkan verir. Bunun üçün kursoru mövcud sorğu mətninin içərisinə yerləşdirmək və konstruktoru çağırmaq kifayətdir. Mövcud sorğu mətni təhlil ediləcək və dizaynerdə müvafiq seçilmiş verilənlər bazası sahələri və müəyyən edilmiş əlaqələr, qruplaşmalar, şərtlər və s.

Beləliklə, sadə bir şeylə başlayaq: konfiquratorda Yeni Qenerasiya yaradın, onu Query Console və ya Query Builder adlandırın, istədiyiniz kimi.

Bizə lazım olan gələcək Parametrlər üçün dərhal "Məlumatlar" cədvəlini əlavə edə bilərik ki, Konsolumuzda ən primitiv sorğu deyil, parametrlər və bağlantılarla, məsələn, işimiz üçün dövri registrlərə sorğu yaradaq. , lakin burada Parametr təlimatları olmadan=&Tarix heç yerdə.

Parametrlər cədvəlimizi yaratmaq üçün onun “Cədvəl hissəsi”ndə “Məlumatlar” sekmesine yeni cədvəl əlavə edəcəyik, onu Sorğu Parametrləri adlandıraq, bura bu cədvəlin sütunlarını əlavə edəcəyik: 1) ParameterName, string = 25 simvol yazın. ; ParameterValue, burada kompozit məlumat növü var, Şəkilə baxın:

Buna görə də, şəkildə göstərildiyi kimi, Parametr Dəyəri sütunu üçün kompozit tip seçirik: açılan tip menyusunda "Müraciət növü" qutusunu seçin, nömrə, sətir (20 simvol göstərin), tarix, Boolean seçin və yoxlayın. alt onay qutusu - AnyLink - bu, sorğumuzun Parametrlərini təyin edərkən, konfiqurasiyamızın istənilən obyektinə, məsələn, kataloqlara və ya sənədlərə müraciət edə bilərik.

İndi gələcək Sorğu Konsolumuzun formasını yaratmalıyıq. Emal zamanı gəlin "Formalar" sekmesine keçək və yenisini əlavə edək. Bunu etmək üçün siz Qrup və ya səhifələri olan səhifə kimi standart forma elementlərindən istifadə edə bilərsiniz (əgər səhifələri çevirməyi üstün tutursunuzsa).

Burada əsas şey bir şeydir: formanı redaktə etmək üçün “TextValues” atributunu sol sahəyə sürüklədikdən sonra onun xassələrində “Görünüş”=Mətn Sənədi Sahəsini təyin etməyinizə əmin olun.

“Sorğu Cədvəli” atributunun xassələrində isteğe bağlı olaraq “Display Grid” və “Display Headers” təyin edə bilərsiniz.

Sonra, formanı redaktə etmək üçün sağ pəncərədə "Əmrlər" sekmesine keçin və yeni bir düymə əlavə edin, tıklandıqda Konsolumuz müəyyən bir hərəkəti yerinə yetirəcəkdir. Gəlin "Sorğu Dizaynçısı" Düyməsini yaradaq, istəsəniz, düyməyə bir simvol əlavə edə bilərsiniz, əsas odur ki, düymənin özünü sol forma redaktə pəncərəsinə yerləşdirək - sonra onu sağ formada görə bilək redaktə pəncərəsi, düyməmizə sağ klikləyin və xassələri seçin – xassələrdə “Fəaliyyət” bəndinə klikləyin, düyməyə təyin edəcəyimiz proqram kodunun tam olaraq harada icra olunacağını soruşan modal pəncərə görünəcək – “ seçin. Müştəri üzərində”.

Forma Modulu "Prosedur Sorğunun Konstruktoru (Əmr)" hazır boş proseduru ilə açılacaqdır. Bu prosedurun içərisində biz standart 1c8 Query Builder-ə çağırışı təsvir edəcəyik. Çox asandır: Konstruktor = Yeni Sorğu Konstruktoru; Ancaq burada tələlər var - platformaya quraşdırılmış Sorğu Konstruktoru YALNIZ qalın müştəri altında istifadəçi rejimində işləyir! Buna görə də, biz #Əgər preprosessor təlimatının şərtini daxil edəcəyik, lakin burada platformanıza əsaslanaraq özünüz qərar verin və ya adi formalarınız varsa, sonra " seçin. FatClientRegularApp” və ya idarə olunan formalara əsaslanan platformanız varsa, sonra “ ThickClientManagedApplication“.şək. bax.

İndi bu prosedura sorğunun mətnini qeyd etmək şərtini əlavə etmək qalır, Sorğu Qurucusu bunu bizim üçün “Sorğu Mətni” forma detallarımızda yaradacaq:

Əgər Constructor.OpenModal()=Doğrudursa, onda Object.RequestText=Constructor.Text; endIf;

Lakin sorğu mətnində nəyisə əl ilə dəyişə bilərik (istifadəçi rejimində - “Sorğu mətni” atribut pəncərəsində) ki, dəyişikliklərimiz yenidən çağırılanda Sorğu Konstruktoruna daxil olsun - biz burada sadə bir şərt əlavə edəcəyik:

Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf;

Budur, biz 1c8 platformasına quraşdırılmış Query Constructor-u birləşdirdik, gəlin işimizə baxaq. Bunun üçün aşağıdakı üsullardan birini istifadə edərək 1C:Enterprise-ni qalın müştəri rejimində işə salın: 1) Konfiquratorun əsas menyusu – Sazlama – Sazlamaya başlayın – Qalın Müştəri; 2) və ya konfiquratorda idarəetmə panelində bu düymələr varsa - qalın nöqtə ilə sarı dairə ilə düyməni sıxmaq kifayətdir, şəklə baxın:

1cEnterprise8 istifadəçi rejimi başlayır, biz emalımızı tapırıq, onu işə salırıq, “Sorğu Dizaynçısı” düyməmizə klikləyirik və platformaya quraşdırılmış dizaynerin necə açıldığına baxırıq. şək bax.

Beləliklə, bizdə Sorğu Konstruktoru işləyir, biz gələcək sorğumuzu orada birləşdirməyə başlaya bilərik, lakin yaratdığımız sorğunun necə işləyəcəyini görmək bizi maraqlandırır! Bunun üçün konsolumuzun formasını redaktə edərkən konfiquratorda başqa bir düymə yaratmalıyıq, gəlin onu “Sorğu işlət” adlandıraq. "Sorğu icra et" düyməsinin xüsusiyyətlərində "Fəaliyyət" düyməsini basın, yenidən proqram kodumuzun harada işlənəcəyi soruşulacaq bir menyu görünür, bu halda "Həm müştəridə, həm də serverdə" seçirik. yenə özümüzü Formalar Modulunda tapırıq.

Müştərimizdə olan Execute Query() prosedurunda istifadəçi sorğu mətnini daxil etməmiş, lakin onu yerinə yetirməyi xahiş etsə, biz şərt yazacağıq:

Əgər EmptyString(Object.QueryText) Sonra report("Sorğu mətnini daxil edin!"); endIf;

Sistem artıq avtomatik olaraq Execute RequestOnServer() proseduruna keçid yaratmışdır; – yaxşıdır, serverdə icra olunan bu prosedura keçək və daxil edilmiş sorğumuzu yerinə yetirmək üçün kodu bura yazaq.

Burada variantlar var: Sorğuların qurulması ilə bağlı bütün ifadələri özünüz yaza bilərsiniz, yəni. əl ilə, lakin daha sadə bir seçim var - prosedurun içərisində, sağ klikləyin və açılan menyuda "Nəticələrin işlənməsi ilə sorğu qurucusu, şəklə baxın" seçin:

"Nəticə işlənməsi ilə sorğu qurucusu" maddəsini klikləsəniz, "Sorğu mətni tapılmadı?" "Bəli" düyməsini basın, onun ilk tabında quraşdırılmış sorğu tərtibçisi açılacaqdır "Nəticənin işlənməsi" - "Nəticədən yan keçmək" ilk maddəsini seçin. Budur, bu konstruktordan başqa bir şeyə ehtiyacımız yoxdur, "Ok" düyməsini basın - modal pəncərə görünəcək "Sorğuda heç bir sahə seçilməyib, "Ok" düyməsini basın.

Bundan sonra ExecuteRequestOnServer() prosedurumuzda aşağıdakı hazır şablon görünəcək:

Konstruktor tərəfindən qurulmuş ifadəyə keçək:

Request.Text = "";

Request.Text = Object.RequestText;

Nə qədər sadədir, emal formasındakı "Sorğu icra et" düyməmiz artıq praktiki olaraq işləyir, indiyə qədər parametrlər olmadan yalnız sadə sorğuları emal edə bilir, amma əsas odur ki, işləyir! Yalnız sorğunun nəticələrini emal formasındakı "Dəyər Cədvəli" atributunda vizual olaraq göstərmək qalır. Nəzərinizə çatdırım ki, “Dəyər Cədvəli” atributumuz “Cədvəl sənədi” tiplidir, çünki əks halda istifadəçi rejimində nəticələrimizi görməyəcəyik. Cədvəl məlumatlarının istifadəçiyə göstərilməsi həmişə ya Cədvəl Sənədi, ya da Layout tərəfindən həyata keçirilir, mən çox istərdim ki, məlumatların dəyərlər cədvəli vasitəsilə göstərilə bilsin - çünki bu, istifadəsi çox asandır və tanışdır. , təəssüf ki, dəyərlər cədvəli yalnız bir tərtibatçıya ehtiyac duyduğu bir vasitədir, ondan istifadə edərək məlumatları ekranda göstərə bilməzsiniz...

Gəlin Elektron Cədvəl Sənədinin nə olduğuna daha yaxından nəzər salaq - bu, Excel vərəqi kimidir - yalnız Cədvəl Hüceyrələrindən istifadə edərək müəyyən bir xanada qeyd əldə edə bilərsiniz, burada biz onları sahə adlandırırıq, lakin bu sahənin diapazonunu özümüz seçə bilərik. xüsusi bir hüceyrəyə:

Beləliklə, biz elektron cədvəl sənədinin nə olduğunu anladıq və özümüz üçün müəyyən etdik ki, bu elektron cədvəl sənədinin müəyyən bir xanasındakı sorğumuzdakı məlumatları təyin etməli olacağıq. Ancaq gəlin düşünək: dizaynerin bizim üçün tez bir zamanda yaratdığı "Sorğu Nəticəsi" nədir? Yardımı açın - Sorğunun nəticəsi müvafiq xüsusiyyətlərə malik cədvəldir! şək bax.

İndi Query Result = Query.Execute() ifadəsindən sonra yazsaq (konstruktor tərəfindən yaradılmışdır), burada Kolleksiyalar üçün belə sadə bir dövrdür:

Sorğu Nəticəsindən Hər SütunAdı üçün. Sütunlar Döngü hesabatı(SütunAdı.Adı); EndCycle;

Bu dövrədən sonra konstruktor tərəfindən avtomatik qurulan bütün ifadələri indiyə qədər qeyd edin. Və qalın müştəri altında 1C: Enterprise8-i işə salın (Query Builder-dən istifadə edə bilərsiniz - o, artıq bizim üçün işləyir) və "Sorğu işlət" düyməsini basın:

Siz mesaj pəncərəsinin aşağı hissəsində görəcəksiniz ki, Sorğu Nəticəsi cədvəli sadə sorğu yaradaraq seçdiyimiz sahələrin adlarını saxlayır.

İndi gəlin bir elektron cədvəl sənədində əziyyət çəkdiyimiz sahələrin bu adlarını göstərək:

Sorğu Nəticəsindən Hər SütunAdı üçün.Sütunlar Döngü Hüceyrəsi=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=ColumnName.Name; EndCycle;

Sorğu məlumatlarının təfərrüatlarını göstərmək üçün dizayner tərəfindən avtomatik olaraq yaradılan ifadələri təhlil edək və sorğunun "SelectionDetailedRecords" çeşidləmə döngəsinə sütun adlarını göstərmək üçün istifadə etdiyimiz eyni döngəni daxil edək, yalnız indi köçürməliyik. "Sorğu Nəticəsi" cədvəlindən Hüceyrə mətninə daxil olan məlumatları və Seçim məlumatlarını deyil, sorğunun Ətraflı Seçim sahəsinə necə daxil ola biləcəyinizi köməkdə görək:

SelectionDetailRecords = QueryResult.Select(); SelectionDetailedRecords.Next() Loop zamanı //birinci sətirdə artıq cədvəl sütunlarının adları yazılıb, ona görə də biz məlumatları birinci sətirdən aşağı yükləyirikDocRowNumber=Object.QueryTable.TableHeight+1; Sorğu Nəticəsindən Hər SütunAdı üçün.Sütunlar Cədvəl Cell=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; EndCycle; EndCycle;

Hamısı budur, yoxlaya bilərik, müəssisəni qalın bir müştəri ilə yükləyə, parametrlər olmadan sadə bir sorğu daxil edə bilərik, "Sorğu işlət" düyməsini vurun, şəklə baxın:

Uray, hər şey işləyir !!!

Query Console-u açarkən/bağlayanda konsolu bağlamazdan əvvəl işlədiyimiz sorğu mətni yenidən “Query Text” sahəsinə yazıldığında çox rahatdır. Bunu etmək üçün sadəcə olaraq forma xüsusiyyətini aktivləşdirməlisiniz = Avtomatik saxla, şəklə baxın:

Budur, konsolumuz işləyir. Onlarda göstərilən parametrlərlə daha mürəkkəb sorğular yaza bilməmiz üçün başqa bir "Parametrləri tap" düyməsini, həmçinin "Sorğu işlət" düyməsinin kodunu yaratmalıyıq - "Parametrləri tap" düyməsinin kodu yerinə yetiriləcək. müştəri və serverdə. Bundan sonra, server prosedurunda biz sorğunu “Request Text” pəncərəsindən ona ötürülən mətnlə eyni şəkildə işə salırıq, “Request.FindParameters()” ifadəsindən istifadə edərək ötürülən parametrləri tapırıq və onları sadəcə olaraq daxil edirik. "Sorğu Parametrləri" formasının cədvəl hissəsinə daxil olun. Sonra onları tamamlanmış parametrlər cədvəlindən “Sorğu icra et” proseduruna köçürməyi unutmayın.

Siz həmçinin Konsolumuza istifadəçi rejimində Parametrlər pəncərəsini və Mətn Sorğu pəncərəsini siləcək bir neçə düymə əlavə edə bilərsiniz.

Query Console istifadəyə hazırdır, Query Console kimi sadə və güclü alətdən istifadə edərək sizə uğurlu yaradıcı həllər arzulayıram!

Bu emal 1c8.3 platformasında (idarə olunan formalar) yazılmışdır və qalın müştəri altında işləyir. O, həmçinin 1c8.2 platformasında həm adi formalar, həm də idarə olunanlar altında yazıla bilər.

Endirmədə yeni yaratdığımız Query Console nümunəsi var.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Query Console təkmilləşdirməsi:

1) İndi daxili Query Builder ilə evdə hazırlanmış Sorğu Konsolumuz istənilən müştəri ilə işləyəcək: müntəzəm və idarə olunan formaların qalın müştərisi və nazik və veb müştərisi altında.

p.s. Daxili Query Builder-in forması və görünüşü fərqlidir - Konsolumuzu hansı müştəri ilə işə saldığımızdan asılı olaraq (Mən şəxsən qalın müştərinin altındakı Query Builder forması ilə daha tanışam və rahatam).

&Müştəri Prosedurunda Sorğu Konstruktoru (Əmr) //standart Sorğu Konstruktoruna zəng etmək yalnız qalın müştəri ilə mümkündür #If ThickClientManagedApplication və ya ThickClientNormalApplication then Constructor=Yeni Sorğu Konstruktoru; Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf; Əgər Constructor.OpenModal()=Doğrudursa, onda Object.RequestText=Constructor.Text; endIf; // #Else // Report("Query Builder-ə zəng etmək yalnız qalın müştəri ilə mümkündür"); // Qayıdış; //# EndIf #Else Report("Siz Query Builder proqramını nazik müştəri altında işlədirsiniz - o, forma və performans sürətinə görə bir qədər fərqlənir!"); Konstruktor = Yeni QueryConstructor(); Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf; Constructor Alert = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Prosedurun Sonu &Müştəri Prosedurunda ExecuteAfterClosingConstructor(Nəticə, ConstructorParameters) Export //Nəticə=mətn, əgər Konstruktor ok düyməsi ilə bağlanıbsa Object.RequestText = QısaldılmışLP(Nəticə); // işləyir!!! EndProcedure

2) Sadə Sorğu Konsolumuza parametrlərə ötürülən Müvəqqəti cədvəllə mürəkkəb sorğuları daxil etmək imkanı əlavə edildi!!! Mexanizm çox sadə və zərif oldu - peşəkar konsollarda olduğu kimi XML kodundan istifadə etmədən.

İkinci əlavə faylda kodun özünü və Müvəqqəti cədvəllərin parametrlərinə ötürmə mexanizminin prosedurlarını görə bilərsiniz. Parametrlərdə Müvəqqəti cədvəllərin öz versiyasını hazırlamağa necə başladığımı bu linkdə tapa bilərsiniz https://forum.infostart.ru/forum9/topic183700/

İndi müvəqqəti cədvəl onun parametrlərinə ötürüldükdə mürəkkəb sorğu üçün Konsoldan necə istifadə etmək olar. Məsələn, bu sorğunun kodunu götürə bilərsiniz;

ExternalData.Product, ExternalData.Quantity YERİ SEÇİN XariciData AS ExternalData AS &ExternalData; /////////////////////////////////////////////// /////////////////////////// SEÇİN ExternalData.Product, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Qalan ProductsRemainings.QuantityRemaining, 0) - ExternalData.Quantity KİMİ XariciMəlumatdan Qalan KİMİ XariciMəlumat SOL OLDUĞU KİMİ QOŞULUN Yığımları Qeydiyyatdan keçirin.Qalan Məhsullar.Qalanlar(&Tarix, GİRİŞ MƏHSUL (XariciData.Məhsul SEÇİN). QalanMəhsul Qalan Məhsul

Yuxarıdakı sorğu kodunun nümunəsinə və oxşarlığına əsaslanaraq, məlumat obyektlərinizi nəzərə alaraq öz mürəkkəb sorğunuzu yarada bilərsiniz.

Beləliklə, sorğu dizaynerində Konstruktoru bağlayaraq yuxarıdakı sorğunu yaratdıq - sorğu mətni konsolumuzun "Sorğu mətni" sahəsinə daxil olacaq, "Parametrləri tap" düyməsini vurun, Parametrlər cədvəlində bir xətt göründüyünü görürük. = “Xarici məlumatlar”, Dəyər növü = “Dəyər Cədvəli”, şək.

Bu Parametrlər cədvəlində - Tarix parametrini, məsələn, bu günün tarixini daxil edin, sonra "Xarici məlumatlar" adlı müvəqqəti cədvəl parametrimizi redaktə etmək üçün klikləyin, üç nöqtədə "Dəyər Cədvəli" olan sahəyə vurun - növlər seçimi görünür, Row düyməsini basın, mexanizmimiz bizə bu çox müvəqqəti cədvəli əl ilə daxil etməyimiz lazım olan formada səhifəni çevirir.

Burada qeyd edək ki, bu halda, "Parametrlərdə müvəqqəti cədvəl adı" sahəsində aşağıda yerləşən "Vaxt cədvəlləri" səhifəsində müvəqqəti cədvəlimizin adı görünəcək (Parametrlər cədvəlindən kopyalanır).

İndiyə qədər "Vaxt cədvəlləri" səhifəsində yalnız bir boş cədvəl görürük - bu, gələcək müvəqqəti cədvəlimizin növlərinin cədvəlidir "Əlavə et" düyməsini istifadə edərək, gələcək cədvəlin təfərrüatlarının adını və növünü əlavə edəcəyik . Ehtiyatlı olun - ad və növ &ExternalData sorğusunda göstərdiyimizə uyğun olmalıdır:

İndi "Müvəqqəti Cədvəli Yeniləyin" düyməsini sıxırıq - və burada ikinci bir cədvəlimiz olacaq - "Əlavə et" düyməsi vasitəsilə onu birbaşa müvəqqəti cədvəl məlumatları ilə dolduracağıq.

Budur, emalın 1-ci səhifəsində parametrlər cədvəlinə sorğu parametrlərinin primitiv məlumatlarını daxil edib-etmədiyimizi bir daha yoxlaya bilərik və "Sorğu işlət" düyməsini sıxırıq - hər şey hesablanır və müvafiq olaraq seçilir. müvəqqəti cədvəlimizin parametrində ötürülən məlumatların məhdudlaşdırılması

p.s. Əgər detalların adını və onların növlərini yazarkən səhv etmisinizsə (birinci cədvəldə) - sadəcə Konsolu bağlayın və yenidən açın - müvəqqəti məlumatlar cədvəli silinəcək - və Növlər cədvəli yenidən redaktə edilə bilər və yeni verilənlər cədvəli yenidən yaradıla bilər.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Hamısı budur, öz əllərimizlə çox güclü bir iş aləti yarada bilərik, əlavə olaraq, konsolumuz peşəkarlarla müqayisədə hələ də çox sürətlidir - və bu, tərtibatçılar üçün çox böyük bir artıdır! Və əlbəttə ki, indi konsolumuz istənilən müştərinin altında işləyir! Yaradıcılığınızda uğurlar!!!

Bu gün necə edəcəyimizi danışacağıq iç-içə sorğular istifadə edərək sorğu qurucusu. Birbaşa bir nümunəyə keçək.

Deyək ki, qiymətlərin mallar və təchizatçılar tərəfindən saxlanıldığı bu sadə məlumat reyestrimiz var:

Birdən çox tədarükçüsü olan bütün məhsulların alınmasını tələb etmək istəyirik. Bu, aşağıdakı sorğudan istifadə etməklə həyata keçirilə bilər:

Təchizatçıların Sayı.Məhsul KİMİ SEÇİN (Qiymət.Məhsul KİMİ,Məhsul KİMİ,MƏHSUL KİMİ SEÇİN,QEYDİYYƏTİ(Fərqli Qiymət.Təchizatçı) Qeydiyyat Məlumatından.Qiymət.Qiymət Qrupu Qiymət.Məhsul).

Konstruktorda iç-içə sorğunun formalaşdırılması

Konstruktordan istifadə edərək yuxarıdakı sorğunu yaradaq.

Bunu etmək üçün sahənin üstündəki komanda panelində Cədvəllər Düyməyə bas Alt sorğu yaradın:


Bundan sonra sorğu konstruktorunun başqa bir nümunəsi ilə bir pəncərə açılacaq:


Və bu yeni pəncərədə biz daxili sorğu qururuq:




Düyməni klikləməklə Sorğu Aşağı sol küncdə alt sorğunun mətnini görə bilərik:


Köməkçi konstruktorda OK düyməsini basdıqdan sonra əsas pəncərədə aşağıdakı şəkli alırıq:


İfadədən bəri NestedQuery qavrama üçün çox əlverişli deyil, masanın adını dəyişmək üçün sağ siçan düyməsini istifadə edək Təchizatçıların sayı, ondan bir sahə seçin Məhsul və əlfəcin üzərində Şərtlər Lazım olan şərti yazaq:




Və bütün bu manipulyasiyalardan sonra istədiyimiz sorğunu alırıq. Lazım gələrsə, bir neçə səviyyəli yuva ilə sorğular yarada bilərsiniz.

Konstruktorda adi sorğudan iç içə sorğu necə etmək olar

Çox tez-tez konstruktorda sorğu verməyə başlayanda bir vəziyyət yaranır və nə vaxtsa onun iç-içə olması lazım olduğunu başa düşürsən. Əlbəttə ki, nümunəmizdə heç bir problem yoxdur - sadəcə hər şeyi silə və sorğunu yenidən verə bilərsiniz. Ancaq praktikada daha mürəkkəb nümunələr var, məsələn, bir neçə səviyyəli yuvalama ilə, sorğunun edilməsinə bir neçə saat sərf olundu. Və bu vəziyyətdə kifayət qədər sadə bir çıxış yolu var. Dizaynerdə quraşdırılmış sorğu mətn redaktorundan istifadə edə bilərsiniz. Düyməni istifadə etmək lazımdır Sorğu sorğu mətnini əldə edin (yuxarıdakı şəklə baxın) və onu panoya kopyalayın. Sonra, yeni daxili sorğu yaradın və düyməni yenidən basın Sorğu, mətni buferdən yapışdırın, OK düyməsini basın. Müvafiq olaraq, köhnə sorğunu yuxarı səviyyədə təmizləyirik. Bu yolla, zərurət yaranarsa, biz asanlıqla çox səviyyəli iç içə sorğular yarada bilərik.

1C proqramlaşdırması sadəcə proqram yazmaqdan daha çox şeydən ibarətdir. 1C istifadəçi hərəkətlərinin və işlədiyi məlumatların külçəsidir.

Məlumatlar verilənlər bazasında saxlanılır. 1C sorğuları verilənlər bazasından məlumatları istifadəçiyə formada göstərmək və ya emal etmək üçün əldə etmək üsuludur.

Hesabatın əsas hissəsi 1C sorğusudur. Hesabat vəziyyətində ACS hesabatın ən böyük hissəsidir.

Otur. Nəfəs al. Sakitləş. İndi sizə xəbər verəcəyəm.

1C-də proqramlaşdırmaq üçün 1C proqramlaşdırma dilini bilmək kifayət deyil. Siz həmçinin 1C sorğu dilini bilməlisiniz.

1C sorğu dili, verilənlər bazasından hansı məlumatları əldə etməli olduğumuzu müəyyən etməyə imkan verən tamamilə ayrı bir dildir.

O da iki dillidir - yəni rus və ya ingilis dilində yaza bilərsən. Bu, SQL sorğu dilinə çox bənzəyir və onu bilənlər rahatlaşa bilər.

1C Sorğularından necə istifadə olunur

İstifadəçi 1C-ni Müəssisə rejimində işə saldıqda, işləyən müştəridə bir qram məlumat yoxdur. Buna görə, bir kataloq açmaq lazım olduqda, 1C verilənlər bazasından məlumatları tələb edir, yəni 1C sorğusu verir.

1C sorğuları bunlardır:

  • Avtomatik sorğular 1c
    Sistem tərəfindən avtomatik olaraq yaradılır. Sənəd siyahısı forması yaratdınız. Sütun əlavə edildi. Bu o deməkdir ki, siz bu formanı Müəssisə rejimində açdığınız zaman sorğu olacaq və bu sütun üçün məlumatlar tələb olunacaq.
  • Yarı avtomatik sorğular 1C
    1C dilində bir çox metodlar (funksiyalar) var, daxil olduqda verilənlər bazasına sorğu verilir. Məsələn.GetObject()
  • Manual 1C sorğuları (proqramçı tərəfindən xüsusi olaraq sorğu kimi yazılmışdır)
    1C sorğusunu özünüz kodda yazıb icra edə bilərsiniz.

1C sorğularının yaradılması və icrası

1C sorğusu 1C sorğu dilində sorğunun faktiki mətnidir.
Mətn qələmlə yazıla bilər. Yəni götür və yaz (bu dili bilirsənsə).

1C əl ilə kod yazmadan çox və ya demək olar ki, hər şeyin edilə biləcəyi vizual proqramlaşdırma konsepsiyasını təbliğ etdiyindən, sorğu dilini bilmədən sorğunun mətnini çəkməyə imkan verən xüsusi Query Constructor obyekti mövcuddur. Bununla belə, möcüzələr baş vermir - bunun üçün konstruktorla necə işləməyi bilməlisiniz.

1C sorğusunun mətni hazır olduqdan sonra onu yerinə yetirmək lazımdır. Bunun üçün 1C kodunda Request() obyekti var. Budur bir nümunə:

Sorğu = Yeni Sorğu();
Query.Text = "SEÇ
| Nomenklatura.Link
|FROM
| Kataloq.Nomenklatura AS Nomenklatura
|HARADA
| Nomenklatura.Xidmət";
Select = Query.Run().Select();

Hesabat(Seçim.Link);
EndCycle;

Nümunədə gördüyünüz kimi, 1C sorğusunu yerinə yetirdikdən sonra nəticə bizə gəlir və biz onu emal etməliyik. Nəticə cədvəlin bir və ya bir neçə sırasıdır (xüsusi formada).

Nəticə adi cədvələ yüklənə bilər:
Get = Query.Run().Unload(); //Nəticə – qiymətlər cədvəli

Və ya sadəcə sətir-sətir ətrafında gəzin.
Select = Query.Run().Select();
While Select.Next() döngəsi
//Sorğu nəticələri ilə bir şey edin
EndCycle;

1C sorğuları ilə işləmək

1C sorğularının əsas prinsipləri

1C sorğusunun qurulmasının əsas prinsipləri -
Cədvəl Adı HARADA Şərtlərdən Sahələrin Siyahısını SEÇİN

Belə bir 1C sorğusunun qurulmasına bir nümunə:

SEÇİN
//seçmək üçün sahələrin siyahısı
Link,
ad,
Kod
FROM
//verilənləri seçdiyimiz cədvəlin adı
//cədvəllərin siyahısı konfiqurator pəncərəsindəki obyektlərin siyahısıdır
Kataloq.Nomenklatura
HARADA
//seçimi göstərin
Məhsul növü = &Xidmət //xarici dəyərə görə seçim
Və ya Service // Boolean tipli “Xidmət” atributu, dəyərinə görə seçim Doğrudur
SORT BY
//Çeşidləmə
ad

1c cədvəllərinin siyahısı

Cədvəl adlarını konfiqurator pəncərəsində görə bilərsiniz. Siz sadəcə olaraq “Direktorlar” əvəzinə “Kataloq” yazmalısınız, məsələn, “Kataloq.Nomenklatura” və ya “Sənəd.Malların və xidmətlərin satışı” və ya “Yığım.Satış reyestri”.

Son nömrələri əldə etməyə imkan verən registrlər üçün əlavə cədvəllər (virtual) mövcuddur.

Məlumat Registri.RegistrAdı.Son Dilim(&Tarix) – 1C məlumat reyestrindən sorğu, əgər dövri olarsa, müəyyən bir tarix üçün

Yığım Reyestrinin Adı Balanslar (&Tarix) – Müəyyən bir tarix üçün balans reyestrindən 1C tələbi

Yığım Reyestri.Registr Adı.Dövriyyə (&Başlama tarixi, &Bitmə tarixi) – başlanğıc tarixindən bitmə tarixinə qədər dövr üçün dövriyyə reyestrindən 1C sorğusu.

Əlavə prinsiplər

Bəzi məlumatların siyahısını tələb etdikdə, əsas prinsiplər işləyir. Amma biz də nömrələr tələb edə bilərik və sorğu onları bizim üçün hesablaya bilər (məsələn, onları əlavə edin).

SEÇİN
//Quantity(FieldName) – kəmiyyəti hesablayır
//Field AS OtherName – sahənin adını dəyişir
Kəmiyyət (Link) AS Göndərilən Sənədlərin Kəmiyyəti
FROM

HARADA
keçirilmişdir

Bu 1C sorğusu bizə sənədlərin ümumi sayını qaytaracaq. Bununla belə, hər bir sənədin Təşkilat sahəsi var. Tutaq ki, biz 1C sorğusundan istifadə edərək hər bir təşkilat üçün sənədlərin sayını hesablamaq istəyirik.

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın
Quantity(Link) AS QuantityBy Organizations
FROM
Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY

Təşkilat

Bu 1C sorğusu bizə hər bir təşkilat üçün sənədlərin sayını qaytaracaq (“təşkilat tərəfindən” də deyilir).

1C sorğusundan istifadə edərək bu sənədlərin məbləğini əlavə olaraq hesablayaq:

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın

// məbləği hesablayın

FROM
Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY
//sahələrin siyahısında count() funksiyası və eyni zamanda bir və ya bir neçə sahə varsa istifadə edilməlidir - o zaman bu sahələr üzrə qruplaşdırmaq lazımdır
Təşkilat

Bu 1C sorğusu da sənədlərin məbləğini bizə qaytaracaq.

SEÇİN
//sadəcə sənəd sahəsi
Təşkilat,
//kəmiyyəti hesablayın
Quantity(Link) AS QuantityBy Organizations,
// məbləği hesablayın
Məbləğ(DocumentAmount) AS Məbləğ
FROM
Malların və xidmətlərin satışı
HARADA
keçirilmişdir
GROUP BY
//sahələrin siyahısında count() funksiyası və eyni zamanda bir və ya bir neçə sahə varsa istifadə edilməlidir - o zaman bu sahələr üzrə qruplaşdırmaq lazımdır
Təşkilat
PROQRAM NƏTİCƏLƏRİ Ümumi

1C sorğu dili geniş və mürəkkəbdir və biz onun bütün imkanlarını bir dərsdə nəzərdən keçirməyəcəyik - növbəti dərslərimizi oxuyun.

1C sorğu dilinin əlavə xüsusiyyətləri haqqında qısaca:

  • Çoxlu cədvəllərdən məlumatların birləşdirilməsi
  • İç-içə sorğular
  • Toplu sorğu
  • Öz virtual masalarınızı yaratmaq
  • Qiymət cədvəlindən sorğu
  • Dəyərləri əldə etmək və dəyərləri manipulyasiya etmək üçün daxili funksiyalardan istifadə.

1C Query Builder

Sorğu mətnini əl ilə yazmamaq üçün 1C sorğu dizayneri var. Sadəcə modulun istənilən yerinə sağ klikləyin və 1C Query Designer seçin.

1C sorğu dizaynerində solda istədiyiniz cədvəli seçin və onu sağa sürükləyin.

1C sorğu dizaynerində cədvəldən tələb olunan sahələri seçin və sağa sürükləyin. Yalnız bir sahə seçmək deyil, ona bir növ toplama funksiyası tətbiq etmək istəyirsinizsə, sürüklədikdən sonra siçan ilə sahəyə iki dəfə vurun. Qruplaşdırma sekmesinde siz qruplaşdırma üçün tələb olunan sahələri seçməlisiniz (sürükləyin).

1C sorğu dizaynerindəki Şərtlər sekmesinde, eyni şəkildə lazımi seçimləri seçə bilərsiniz (seçim edəcəyiniz sahələri sürükləməklə). Düzgün şəraiti seçdiyinizə əmin olun.

Sifariş nişanında çeşidləmə göstərilir. Nəticələr sekmesinde - nəticələrin yekunlaşdırılması.

1C sorğu dizaynerindən istifadə edərək hər hansı mövcud sorğunu öyrənə bilərsiniz. Bunu etmək üçün mövcud sorğunun mətninə sağ vurun və həmçinin 1C sorğu dizaynerini seçin - və sorğu 1C sorğu dizaynerində açılacaq.

Beləliklə, sadə bir şeylə başlayaq: konfiquratorda Yeni Qenerasiya yaradın, onu Query Console və ya Query Builder adlandırın, istədiyiniz kimi.

Bizə lazım olan gələcək Parametrlər üçün dərhal "Məlumatlara" bir cədvəl əlavə edə bilərik ki, Konsolumuzda ən primitiv sorğu deyil, parametrlər və bağlantılarla, məsələn, işimiz üçün dövri bir sorğu yaradaq. qeydiyyatdan keçir, lakin burada Parametr təlimatları olmadan=&Tarix heç yerdə.

Parametrlər cədvəlimizi yaratmaq üçün onun “Cədvəl hissəsi”ndə “Məlumatlar” sekmesine yeni cədvəl əlavə edəcəyik, onu Sorğu Parametrləri adlandıraq, bura bu cədvəlin sütunlarını əlavə edəcəyik: 1) ParameterName, string = 25 simvol yazın. ; ParameterValue, burada kompozit məlumat növü var, Şəkilə baxın:

Buna görə də, şəkildə göstərildiyi kimi, Parametr Dəyəri sütunu üçün kompozit tip seçirik: açılan tip menyusunda "Müraciət növü" qutusunu seçin, nömrə, sətir (20 simvol göstərin), tarix, Boolean seçin və yoxlayın. alt onay qutusu - AnyLink - bu, tələbimizin Parametrlərini təyin edərkən, konfiqurasiyamızın hər hansı bir obyektinə, məsələn, kataloqlara və ya sənədlərə müraciət edə bilərik.

İndi gələcək Sorğu Konsolumuzun formasını yaratmalıyıq. Emal zamanı gəlin "Formalar" sekmesine keçək və yenisini əlavə edək. Bunu etmək üçün siz Qrup və ya səhifələri olan səhifə kimi standart forma elementlərindən istifadə edə bilərsiniz (əgər səhifələri çevirməyi üstün tutursunuzsa).

Burada əsas şey bir şeydir: “MətnDəyərləri” atributunu formanı redaktə etmək üçün sol sahəyə sürüklədikdən sonra onun xassələrində “Görünüş”=Mətn Sənədi Sahəsi təyin etməyi unutmayın.

“Sorğu Cədvəli” atributunun xassələrində isteğe bağlı olaraq “Display Grid” və “Display Headers” təyin edə bilərsiniz.

Sonra, düzgün forma redaktə pəncərəsində "Əmrlər" sekmesine keçin və yeni bir düymə əlavə edin, tıklandıqda Konsolumuz müəyyən bir hərəkəti yerinə yetirəcəkdir. Gəlin "Sorğu Konstruktoru" düyməsini yaradaq, istəsəniz, düyməyə bir ikona əlavə edə bilərsiniz, əsas odur ki, düymənin özünü sol forma redaktə pəncərəsinə yerləşdirək - sonra onu sağ formada görə bilək redaktə pəncərəsi, düyməmizə sağ vurun və xassələri seçin - xassələrdə "Fəaliyyət" maddəsini vurun, düyməyə təyin edəcəyimiz proqram kodunun tam olaraq harada icra olunacağını soruşan modal pəncərə görünəcək - seçin " Müştəri üzərində”.

Forma Modulu "Prosedur Sorğunun Konstruktoru (Əmr)" hazır boş proseduru ilə açılacaqdır. Bu prosedurun içərisində biz standart 1c8 Query Builder-ə çağırışı təsvir edəcəyik. Çox asandır: Konstruktor = Yeni Sorğu Konstruktoru; Ancaq burada tələlər var - platformaya quraşdırılmış Sorğu Konstruktoru YALNIZ qalın müştəri altında istifadəçi rejimində işləyir! Buna görə də, biz #Əgər preprosessor təlimatının şərtini daxil edəcəyik, lakin burada platformanıza əsaslanaraq özünüz qərar verin və ya adi formalarınız varsa, onda " seçin. FatClientRegularApp"ya da idarə olunan formalara əsaslanan bir platformanız var, onda" ThickClientManagedApplication".şək. bax.

İndi bu prosedura sorğunun mətnini qeyd etmək şərtini əlavə etmək qalır, Sorğu Qurucusu bunu bizim üçün “Sorğu Mətni” forma detallarımızda yaradacaq:

Əgər Constructor.OpenModal()=Doğrudursa, onda Object.RequestText=Constructor.Text; endIf;

Ancaq sorğu mətnində nəyisə əl ilə dəyişə bilərik (istifadəçi rejimində - "Sorğu mətni" atribut pəncərəsində) ki, yenidən çağırılanda dəyişikliklərimiz Sorğu Konstruktoruna daxil olsun - biz burada sadə bir şərt əlavə edəcəyik:

Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf;

Budur, biz 1c8 platformasına quraşdırılmış Query Constructor-u birləşdirdik, gəlin işimizə baxaq. Bunun üçün aşağıdakı üsullardan birini istifadə edərək 1C:Enterprise-ni qalın müştəri rejimində işə salın: 1) Konfiquratorun əsas menyusu - Sazlama - Sazlamaya başlayın - Qalın Müştəri; 2) və ya konfiquratorda idarəetmə panelində bu düymələr varsa - qalın nöqtə ilə sarı dairə ilə düyməni sıxmaq kifayətdir, şəklə baxın:

1cEnterprise8 istifadəçi rejimi başlayır, biz emalımızı tapırıq, onu işə salırıq, “Sorğu Dizaynçısı” düyməmizə klikləyirik və platformaya quraşdırılmış dizaynerin necə açıldığına baxırıq. şək bax.

Beləliklə, bizdə Sorğu Konstruktoru işləyir, biz gələcək sorğumuzu orada birləşdirməyə başlaya bilərik, lakin yaratdığımız sorğunun necə işləyəcəyini görmək bizi maraqlandırır! Bunun üçün konsol formamızı redaktə edərkən konfiquratorda başqa bir düymə yaratmalıyıq, onu “Sorğu işlət” adlandıraq. "Sorğu icra et" düyməsinin xüsusiyyətlərində "Fəaliyyət" düyməsini basın, yenidən proqram kodumuzun harada işlənəcəyi soruşulacaq bir menyu görünür, bu halda "Həm müştəridə, həm də serverdə" seçirik. yenə özümüzü ModuleForms-da tapırıq.

Müştərimizdə olan Execute Query() prosedurunda istifadəçi sorğu mətnini daxil etməmiş, lakin onu yerinə yetirməyi xahiş etsə, biz şərt yazacağıq:

Əgər EmptyString(Object.QueryText) Sonra report("Sorğu mətnini daxil edin!"); endIf;

Sistem artıq avtomatik olaraq Execute RequestOnServer() proseduruna keçid yaratmışdır; - bu yaxşıdır, serverdə icra olunan bu prosedura keçək və daxil edilmiş sorğumuzu yerinə yetirmək üçün kodu buraya yazaq.

Burada variantlar var: Sorğuların qurulması ilə bağlı bütün ifadələri özünüz yaza bilərsiniz, yəni. əl ilə, lakin daha sadə bir seçim var - prosedurun içərisində, sağ klikləyin və açılan menyuda "Nəticələrin işlənməsi ilə sorğu qurucusu, şəklə baxın" seçin.

"Nəticələrin işlənməsi ilə sorğu dizayneri" maddəsini klikləsəniz, "Sorğu mətni tapılmadı?", "Bəli" düyməsinə basaraq daxili sorğu dizayneri açılacaq onun ilk nişanında "Nəticənin işlənməsi" - ilk elementi seçin " Nəticəni keçmək." Budur, bu konstruktordan başqa heç nə lazım deyil, "Ok" düyməsini basın - modal pəncərə görünəcək: "Xeyr. sorğuda sahələr seçilir, "OK" düyməsini basın.

Bundan sonra ExecuteRequestOnServer() prosedurumuzda aşağıdakı hazır şablon görünəcək:

Konstruktor tərəfindən qurulmuş ifadəyə keçək:

Request.Text = "";

Request.Text = Object.RequestText;

Çox sadədir, emal formasındakı "Sorğu icra et" düyməmiz artıq praktiki olaraq işləyir, indiyə qədər parametrlər olmadan yalnız sadə sorğuları emal edə bilir, amma əsas odur ki, işləyir! Yalnız sorğunun nəticələrini emal formasındakı "Dəyər Cədvəli" atributunda vizual olaraq göstərmək qalır. Nəzərinizə çatdırım ki, “Dəyər Cədvəli” atributumuz “Cədvəl sənədi” tiplidir, çünki əks halda istifadəçi rejimində nəticələrimizi görməyəcəyik. Cədvəl məlumatlarının istifadəçiyə çıxışı həmişə ya Cədvəl Sənədi, ya da Layout tərəfindən idarə olunur, mən çox istərdim ki, məlumatları dəyərlər cədvəli vasitəsilə göstərmək mümkün olsun - istifadəsi çox asan və tanışdır, lakin. , təəssüf ki, dəyərlər cədvəli yalnız bir tərtibatçıya ehtiyac duyduğu bir vasitədir, ondan istifadə edərək məlumatları ekranda göstərə bilməzsiniz...

Gəlin Elektron Cədvəl Sənədinin nə olduğuna daha yaxından nəzər salaq - bu, Excel vərəqi kimidir - yalnız Cədvəl Hüceyrələrindən istifadə edərək müəyyən bir xanada qeyd əldə edə bilərsiniz, burada biz onları sahə adlandırırıq, lakin bu sahənin diapazonunu özümüz seçə bilərik. xüsusi bir hüceyrəyə:

Beləliklə, biz elektron cədvəl sənədinin nə olduğunu anladıq və özümüz üçün müəyyən etdik ki, bu elektron cədvəl sənədinin müəyyən bir xanasındakı sorğumuzdakı məlumatları təyin etməli olacağıq. Ancaq gəlin düşünək: dizaynerin bizim üçün tez bir zamanda yaratdığı "Sorğu Nəticəsi" nədir? Yardımı açın - Sorğunun nəticəsi müvafiq xüsusiyyətlərə malik cədvəldir! şək bax.

İndi Query Result = Query.Execute() ifadəsindən sonra yazsaq (konstruktor tərəfindən yaradılmışdır), burada Kolleksiyalar üçün belə sadə bir dövrdür:

Sorğu Nəticəsindən Hər SütunAdı üçün. Sütunlar Döngü hesabatı(SütunAdı.Adı); EndCycle;

Bu dövrədən sonra konstruktor tərəfindən avtomatik qurulan bütün ifadələri indiyə qədər qeyd edin. Və qalın müştəri altında 1C: Enterprise8-i işə salın (Query Builder-dən istifadə edə bilərsiniz - o, artıq bizim üçün işləyir) və "Sorğu işlət" düyməsini basın:

Sonra mesaj pəncərəsinin aşağı hissəsində görəcəksiniz - Sorğu Nəticəsi cədvəlində sadə sorğu yaradaraq seçdiyimiz sahələrin adları saxlanılır.

İndi gəlin bir elektron cədvəl sənədində əziyyət çəkdiyimiz sahələrin bu adlarını göstərək:

Sorğu Nəticəsindən Hər SütunAdı üçün.Sütunlar Döngü Hüceyrəsi=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=ColumnName.Name; EndCycle;

Sorğu məlumatlarının təfərrüatlarını göstərmək üçün dizayner tərəfindən avtomatik olaraq yaradılan ifadələri təhlil edək və sorğunun "SelectionDetailedRecords" çeşidləmə döngəsinə sütun adlarını göstərmək üçün istifadə etdiyimiz eyni döngəni daxil edək, yalnız indi köçürməliyik. "Sorğu Nəticəsi" cədvəlindən Hüceyrə mətninə daxil olan məlumatları və Seçim məlumatlarını deyil, sorğunun Ətraflı Seçim sahəsinə necə daxil ola biləcəyinizi köməkdə görək:

SelectionDetailRecords = QueryResult.Select(); SelectionDetailedRecords.Next() Loop zamanı //birinci sətirdə artıq cədvəl sütunlarının adları yazılıb, ona görə də biz məlumatları birinci sətirdən aşağı yükləyirikDocRowNumber=Object.QueryTable.TableHeight+1; Sorğu Nəticəsindən Hər SütunAdı üçün.Sütunlar Cədvəl Cell=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; EndCycle; EndCycle;

Hamısı budur, yoxlaya bilərik, müəssisəni qalın bir müştəri ilə yükləyə, parametrlər olmadan sadə bir sorğu daxil edə bilərik, "Sorğu işlət" düyməsini vurun, şəklə baxın:

Uray, hər şey işləyir !!!

Query Console-u açarkən/bağlayanda konsolu bağlamazdan əvvəl işlədiyimiz sorğu mətni yenidən “Query Text” sahəsinə yazıldığında çox rahatdır. Bunu etmək üçün sadəcə olaraq forma xüsusiyyətini aktivləşdirməlisiniz = Avtomatik saxla, şəklə baxın:

Budur, konsolumuz işləyir. Onlarda göstərilən parametrlərlə daha mürəkkəb sorğular yaza bilməmiz üçün başqa bir "Parametrləri tap" düyməsini, həmçinin "Sorğu işlət" düyməsinin kodunu yaratmalıyıq - "Parametrləri tap" düyməsinin kodu yerinə yetiriləcək. müştəri və serverdə. Sonra, server prosedurunda biz sorğunu “Tələb Mətni” pəncərəsindən ona ötürülən mətnlə eyni şəkildə işə salırıq, “Request.FindParameters()” ifadəsindən istifadə edərək, ötürülən parametrləri tapırıq və sadəcə olaraq onları daxil edirik. "Sorğu Parametrləri" formasının cədvəl hissəsinə bir döngə. Sonra onları tamamlanmış parametrlər cədvəlindən “Sorğu icra et” proseduruna köçürməyi unutmayın.

Siz həmçinin Konsolumuza istifadəçi rejimində Parametrlər pəncərəsini və Mətn Sorğu pəncərəsini siləcək bir neçə düymə əlavə edə bilərsiniz.

Query Console istifadəyə hazırdır, Query Console kimi sadə və güclü alətdən istifadə edərək sizə uğurlu yaradıcı həllər arzulayıram!

Bu emal 1c8.3 platformasında (idarə olunan formalar) yazılmışdır və qalın müştəri altında işləyir. O, həmçinin 1c8.2 platformasında həm adi formalar, həm də idarə olunanlar altında yazıla bilər.

Endirmədə yeni yaratdığımız Query Console nümunəsi var.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Query Console təkmilləşdirməsi:

1) İndi daxili Query Builder ilə evdə hazırlanmış Sorğu Konsolumuz istənilən müştəri ilə işləyəcək: müntəzəm və idarə olunan formaların qalın müştərisi və nazik və veb müştərisi altında.

p.s. Daxili Query Builder-in forması və görünüşü fərqlidir - Konsolumuzu hansı müştəri ilə işə saldığımızdan asılı olaraq (Mən şəxsən qalın müştərinin altındakı Query Builder forması ilə daha tanışam və rahatam).

&Müştəri Prosedurunda Sorğu Konstruktoru (Əmr) //standart Sorğu Konstruktoruna zəng etmək yalnız qalın müştəri ilə mümkündür #If ThickClientManagedApplication və ya ThickClientNormalApplication then Constructor=Yeni Sorğu Konstruktoru; Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf; Əgər Constructor.OpenModal()=Doğrudursa, onda Object.RequestText=Constructor.Text; endIf; // #Else // Report("Query Builder-ə zəng etmək yalnız qalın müştəri ilə mümkündür"); // Qayıdış; //# EndIf #Else Report("Siz Query Builder proqramını nazik müştəri altında işlədirsiniz - o, forma və performans sürətinə görə bir qədər fərqlənir!"); Konstruktor = Yeni QueryConstructor(); Əgər EmptyString(Object.QueryText) deyilsə, Constructor.Text = Object.QueryText; endIf; Constructor Alert = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(Constructor Alert); # EndIf Prosedurun Sonu &Müştəri Prosedurunda ExecuteAfterClosingConstructor(Nəticə, ConstructorParameters) Export //Nəticə=mətn, əgər Konstruktor ok düyməsi ilə bağlanıbsa Object.RequestText = QısaldılmışLP(Nəticə); // işləyir!!! EndProcedure

2) Sadə Sorğu Konsolumuza parametrlərə ötürülən Müvəqqəti cədvəllə mürəkkəb sorğuları daxil etmək imkanı əlavə edildi!!! Mexanizm çox sadə və zərif oldu - peşəkar konsollarda olduğu kimi XML kodundan istifadə etmədən.

İkinci əlavə faylda kodun özünü və Müvəqqəti cədvəllərin parametrlərinə ötürmə mexanizminin prosedurlarını görə bilərsiniz. Parametrlərdə Müvəqqəti cədvəllərin öz versiyanızı inkişaf etdirməyə necə başladığınızı bu linkdə tapa bilərsiniz https://forum.site/forum9/topic183700/

İndi müvəqqəti cədvəl onun parametrlərinə ötürüldükdə mürəkkəb sorğu üçün Konsoldan necə istifadə etmək olar. Məsələn, bu sorğunun kodunu götürə bilərsiniz;

ExternalData.Product, ExternalData.Quantity YERİ SEÇİN XariciData AS ExternalData AS &ExternalData; /////////////////////////////////////////////// /////////////////////////// SEÇİN ExternalData.Product, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Qalan ProductsRemainings.QuantityRemaining, 0) - ExternalData.Quantity KİMİ XariciMəlumatdan Qalan KİMİ XariciMəlumat SOL OLDUĞU KİMİ QOŞULUN Yığımları Qeydiyyatdan keçirin.Qalan Məhsullar.Qalanlar(&Tarix, GİRİŞ MƏHSUL (XariciData.Məhsul SEÇİN). QalanMəhsul Qalan Məhsul

Yuxarıdakı sorğu kodunun nümunəsinə və oxşarlığına əsaslanaraq, məlumat obyektlərinizi nəzərə alaraq öz mürəkkəb sorğunuzu yarada bilərsiniz.

Beləliklə, sorğu dizaynerində biz Konstruktoru bağlayaraq yuxarıdakı sorğunu yaratdıq - sorğu mətni konsolumuzun "Sorğu mətni" sahəsinə daxil olacaq, "Parametrləri tap" düyməsini vurun, Parametrlər cədvəlində bir sətir olduğunu görürük. göründü = "Xarici məlumatlar", Dəyər növü = "Dəyər Cədvəli" , bax şək.

Bu Parametrlər cədvəlində - Tarix parametrini, məsələn, bu günün tarixini daxil edin, sonra "Xarici məlumatlar" adlı müvəqqəti cədvəl parametrimizi redaktə etməyə cəhd etmək üçün klikləyin, üç nöqtədə "Dəyər Cədvəli" olan sahəyə vurun - növlər seçimi olacaq. görünür, Row düyməsini basın, mexanizmimiz bizə bu çox müvəqqəti cədvəli əl ilə daxil etməyimiz lazım olan formada səhifəni çevirir.

Burada qeyd edək ki, bu halda, "Parametrlərdə müvəqqəti cədvəl adı" sahəsində aşağıda yerləşən "Vaxt cədvəlləri" səhifəsində müvəqqəti cədvəlimizin adı görünəcək (Parametrlər cədvəlindən kopyalanır).

İndiyə qədər "Vaxt cədvəlləri" səhifəsində yalnız bir boş cədvəl görürük - bu, gələcək müvəqqəti cədvəlimizin növlərinin cədvəlidir "Əlavə et" düyməsini istifadə edərək, gələcək cədvəlin atributunun adını və növünü əlavə edəcəyik . Ehtiyatlı olun - ad və növ &ExternalData sorğusunda göstərdiyimizə uyğun olmalıdır:

İndi "Müvəqqəti Cədvəli Yeniləyin" düyməsini sıxırıq - və burada ikinci bir cədvəlimiz olacaq - "Əlavə et" düyməsi vasitəsilə onu birbaşa müvəqqəti cədvəl məlumatları ilə dolduracağıq.

Budur, emalın 1-ci səhifəsində parametrlər cədvəlinə sorğu parametrlərinin primitiv məlumatlarını daxil edib-etmədiyimizi bir daha yoxlaya bilərik və "Sorğu işlət" düyməsini sıxırıq - hər şey hesablanır və müvafiq olaraq seçilir. müvəqqəti cədvəlimizin parametrində ötürülən məlumatların məhdudlaşdırılması

p.s. Əgər detalların adını və onların növlərini yazarkən səhv etmisinizsə (birinci cədvəldə) - sadəcə Konsolu bağlayın və yenidən açın - müvəqqəti məlumatlar cədvəli silinəcək - və Növlər cədvəli yenidən redaktə edilə bilər və yeni verilənlər cədvəli yenidən yaradıla bilər.

Hamısı budur, öz əllərimizlə çox güclü bir iş aləti yarada bilərik, əlavə olaraq, konsolumuz peşəkarlarla müqayisədə hələ də çox sürətlidir - və bu, tərtibatçılar üçün çox böyük bir artıdır! Və əlbəttə ki, indi konsolumuz istənilən müştərinin altında işləyir! Yaradıcılığınızda uğurlar!!!

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Mən daim Query Console ilə işləyirəm və bu yaxınlarda çox maraqlı bir sorğu ilə rastlaşdım ki, orada Müvəqqəti cədvəllər birinci sorğu paketində deyil, sonrakı cədvəllərdə idi - və burada konsolum bir az depressiyaya düşdü... Mən etməli oldum. başqa bir yeniləmə.

Beləliklə, sorğuda Müvəqqəti Cədvəllər Meneceri həmişə onunla işlədiyini başa düşmür)) Buna görə də, bu Müvəqqəti Cədvəllər Menecerini açıq şəkildə təyin etməlisiniz:

&Server Prosedurasında Sorğunun Serverdə İcrası () //upgrade2 - Müvəqqəti Cədvəllər menecerinin açıq tərifi! ManagerVT=Yeni TemporaryTablesManager; Sorğu = Yeni Sorğu; //upgrade2 - Müvəqqəti Cədvəl menecerinin açıq tərifi! Query.TemporaryTableManager = VTManager; Request.Text = Object.RequestText;

Konsolun bu versiyası üçüncü endirmədədir.



Əlaqədar nəşrlər