1c क्वेरी डिज़ाइनर योग। डेटा संरचना स्कीमा क्वेरी डिज़ाइनर

तो, चलिए सरल शुरू करते हैं: विन्यासकर्ता में, एक नया प्रसंस्करण बनाएं, क्वेरी कंसोल या क्वेरी कंस्ट्रक्टर को अपनी पसंद के अनुसार नाम दें।

हम भविष्य के मापदंडों के लिए तुरंत "डेटा" एक प्लेट में जोड़ सकते हैं, जिसकी हमें आवश्यकता है ताकि हमारे कंसोल में हमारे पास सबसे आदिम अनुरोध न हो, लेकिन मापदंडों और लिंक के साथ, उदाहरण के लिए, हमारे काम के लिए हम एक अनुरोध बनाएंगे आवधिक रजिस्टर, लेकिन यहाँ बिना पैरामीटर संकेत = & दिनांक कहीं नहीं है।

पैरामीटर की हमारी तालिका बनाने के लिए, "डेटा" टैब पर इसके "तालिका भाग" में एक नई तालिका जोड़ें, इसे क्वेरी पैरामीटर कहते हैं, यहां हम इस तालिका के कॉलम जोड़ते हैं: 1) पैरामीटरनाम, स्ट्रिंग प्रकार = 25 वर्ण; ParameterValue, यहाँ एक समग्र डेटा प्रकार है, अंजीर देखें:

इसलिए, जैसा कि चित्र में दिखाया गया है, हम पैरामीटर मान कॉलम के लिए समग्र प्रकार का चयन करते हैं: खुले प्रकार के मेनू में, "समग्र प्रकार" चेकबॉक्स को चेक करें, संख्या, स्ट्रिंग (20 वर्ण निर्दिष्ट करें), दिनांक, बूलियन और पुट चुनें सबसे कम टिक - AnyLink - इसका मतलब है कि आगे, हमारे अनुरोध के पैरामीटर निर्दिष्ट करते समय, हम अपने कॉन्फ़िगरेशन के किसी भी ऑब्जेक्ट को संदर्भित कर सकते हैं, उदाहरण के लिए, संदर्भ पुस्तकें या दस्तावेज़।

अब हमें अपने भविष्य के क्वेरी कंसोल के लिए एक फॉर्म बनाने की जरूरत है। प्रसंस्करण में, "फ़ॉर्म" टैब पर जाएं और एक नया जोड़ें। हम इस फॉर्म में प्रवेश करते हैं और रचनात्मकता के लिए पहले से ही एक असीमित क्षेत्र है - आप अपनी पसंद के अनुसार मापदंडों के साथ बस बनाए गए दो प्रॉप्स और एक प्लेट की व्यवस्था कर सकते हैं! ऐसा करने के लिए, आप मानक प्रपत्र तत्वों का उपयोग कर सकते हैं, जैसे कि समूह या पृष्ठ वाले पृष्ठ (यदि आप पृष्ठ बदलना पसंद करते हैं।

यहां मुख्य बात एक बात है: "टेक्स्टवैल्यू" विशेषता को फॉर्म के बाएं संपादन क्षेत्र में खींचकर - "व्यू" = टेक्स्ट दस्तावेज़ फ़ील्ड को इसके गुणों में सेट करना सुनिश्चित करें। अंजीर देखें:

"क्वेरीटेबल" चर के गुणों में, यदि आप चाहें, तो आप निर्दिष्ट कर सकते हैं - "डिस्प्लेग्रिड" और "डिस्प्लेहेडर्स"।

अगला, फ़ॉर्म को संपादित करने के लिए दाएँ विंडो में, "कमांड" टैब पर जाएँ और एक नया बटन जोड़ें, जिस पर क्लिक करके हमारा कंसोल एक निश्चित क्रिया करेगा। आइए "क्वेरी कंस्ट्रक्टर" बटन बनाएं, यदि आप चाहें, तो आप बटन में एक आइकन जोड़ सकते हैं, मुख्य बात यह है कि बटन को बाएं फॉर्म संपादन विंडो में ही ले जाना है ताकि हम इसे देख सकें। फिर, सही रूप में संपादन विंडो, हमारे बटन पर राइट-क्लिक करें और गुणों का चयन करें - गुणों में, "एक्शन" आइटम पर क्लिक करें, एक प्रश्न के साथ एक मोडल विंडो दिखाई देगी - जहां वास्तव में हमारा प्रोग्राम कोड निष्पादित किया जाएगा, जिसे हम बटन पर असाइन करेंगे - "क्लाइंट पर" चुनें।

प्रपत्र मॉड्यूल एक तैयार खाली प्रक्रिया "प्रक्रिया QueryConstructor (कमांड)" के साथ खुलेगा। इस प्रक्रिया के अंदर, हम मानक 1c8 क्वेरी कंस्ट्रक्टर को कॉल का वर्णन करेंगे। यह बहुत आसान है: कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर;लेकिन यहाँ नुकसान हैं - प्लेटफ़ॉर्म में निर्मित क्वेरी कंस्ट्रक्टर केवल एक मोटे क्लाइंट के तहत उपयोगकर्ता मोड में काम करता है! इसलिए, हम प्रीप्रोसेसर निर्देश की शर्त डालेंगे # यदि, लेकिन यहां आप अपने प्लेटफॉर्म के आधार पर अपने लिए निर्णय लेते हैं, या आपके पास सामान्य रूप हैं, तो "चुनें" मोटा क्लाइंट सामान्य अनुप्रयोग"या आपके पास एक प्रबंधित प्रपत्र प्लेटफ़ॉर्म है, तो" मोटा क्लाइंट प्रबंधित ऐप". अंजीर देखें।

अब इस प्रक्रिया में अनुरोध टेक्स्ट लिखने के लिए एक शर्त जोड़ना बाकी है, जिसे क्वेरी डिज़ाइनर द्वारा "अनुरोध टेक्स्ट" फॉर्म की हमारी आवश्यकता में उत्पन्न किया जाएगा:

अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत;

लेकिन हम क्वेरी टेक्स्ट में मैन्युअल रूप से कुछ बदल सकते हैं (उपयोगकर्ता मोड में - "क्वेरीटेक्स्ट" प्रॉप्स विंडो में) ताकि हमारे परिवर्तन फिर से कॉल किए जाने पर QueryConstructor के पास जाएंगे - यहां एक साधारण शर्त जोड़ें:

यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत;

यही है, हमने 1c8 प्लेटफॉर्म में निर्मित क्वेरी कंस्ट्रक्टर को कनेक्ट किया है, आइए हमारे काम पर एक नज़र डालें। ऐसा करने के लिए, 1C प्रारंभ करें: निम्न में से किसी एक तरीके से मोटे क्लाइंट मोड में एंटरप्राइज़: 1) कॉन्फ़िगरेटर का मुख्य मेनू - डीबग - डिबगिंग प्रारंभ करें - थिक क्लाइंट; 2) या यदि आपके पास इन कुंजियों को विन्यासकर्ता में नियंत्रण कक्ष में ले जाया गया है - बस एक पीले सर्कल के साथ एक मोटी बिंदु के साथ बटन दबाएं, आंकड़ा देखें:

उपयोगकर्ता मोड 1cEnterprise8 लॉन्च किया गया है, हम अपनी प्रोसेसिंग ढूंढते हैं, इसे शुरू करते हैं, हमारे बटन "क्वेरी कंस्ट्रक्टर" पर क्लिक करते हैं और देखते हैं कि प्लेटफॉर्म में बनाया गया कंस्ट्रक्टर कैसे खुलता है। अंजीर देखें।

तो, हमारे साथ क्वेरी कंस्ट्रक्टर लॉन्च किया गया है, हम पहले से ही इसमें अपनी भविष्य की क्वेरी जोड़ना शुरू कर सकते हैं, लेकिन हम यह देखने में रुचि रखते हैं कि हमने जो क्वेरी बनाई है उसे कैसे संसाधित किया जाएगा! और इसके लिए हमें अपने कंसोल के रूप को संपादित करने के लिए विन्यासकर्ता में एक और बटन बनाने की आवश्यकता है, चलो इसे "अनुरोध निष्पादित करें" कहते हैं। "एक्शन" पर "निष्पादन अनुरोध" बटन के गुणों में क्लिक करें, एक मेनू फिर से पॉप अप होता है, जिसमें हमसे पूछा जाता है कि हमारा प्रोग्राम कोड कहां संसाधित किया जाएगा, इस मामले में हम "क्लाइंट और सर्वर दोनों पर" का चयन करते हैं। , फिर से हम फॉर्म मॉड्यूल में आते हैं।

ExecuteRequest () प्रक्रिया में, जो हमारे पास क्लाइंट पर है, हम शर्त लिखते हैं यदि उपयोगकर्ता ने अनुरोध टेक्स्ट दर्ज नहीं किया है, लेकिन उसे इसे निष्पादित करने के लिए कहता है:

अगर EmptyString (Object.RequestText) तो रिपोर्ट करें ("अपना अनुरोध टेक्स्ट दर्ज करें!"); अगर अंत;

सिस्टम पहले से ही ExecuteRequestOnServer प्रक्रिया () के लिए स्वचालित रूप से एक लिंक उत्पन्न कर चुका है; - यह अच्छा है, इस प्रक्रिया पर चलते हैं, जिसे सर्वर पर निष्पादित किया जाता है और यहां हमारे दर्ज किए गए अनुरोध का निष्पादन कोड लिखें।

यहां विकल्प हैं: आप स्वतंत्र रूप से निर्माण प्रश्नों से संबंधित सभी भाव लिख सकते हैं, अर्थात। मैन्युअल रूप से, लेकिन एक और भी सरल विकल्प है - प्रक्रिया के अंदर, दायां माउस बटन दबाएं और ड्रॉप-डाउन मेनू में आइटम का चयन करें "परिणामों को संसाधित करने के साथ क्वेरी कंस्ट्रक्टर, अंजीर देखें।":

यदि आपने "आइटम, फिर मोडल विंडो" के परिणाम प्रसंस्करण के साथ क्वेरी कंस्ट्रक्टर पर क्लिक किया है, तो क्वेरी टेक्स्ट नहीं मिला। एक नया बनाएं? " परिणाम को दरकिनार करते हुए। "बस, हमें इस कंस्ट्रक्टर से और कुछ नहीं चाहिए, "ओके" बटन - एक मोडल विंडो ड्रॉप आउट हो जाएगी" अनुरोध में कोई फ़ील्ड नहीं चुना गया है, "ओके" पर क्लिक करें।

उसके बाद, हमारी प्रक्रिया के अंदर RunRequestOnServer (), निम्नलिखित तैयार रिक्त दिखाई देगा:

आइए कंस्ट्रक्टर द्वारा निर्मित एक्सप्रेशन पर चलते हैं:

अनुरोध। पाठ = "";

Request.Text = Object.Request Text;

यह बहुत आसान है, प्रोसेसिंग फॉर्म पर हमारा "एक्ज़िक्यूट रिक्वेस्ट" बटन पहले से ही व्यावहारिक रूप से कार्यात्मक है, अब तक यह केवल प्रोसेस कर सकता है सरल प्रश्नमापदंडों के बिना, लेकिन मुख्य बात यह है कि यह काम करता है! यह केवल प्रसंस्करण प्रपत्र पर "मान तालिका" विशेषता में हमारे अनुरोध के परिणामों को प्रदर्शित करने के लिए बनी हुई है। मैं आपको याद दिला दूं कि हमारी "मान तालिका" विशेषता "सारणीबद्ध दस्तावेज़" प्रकार की है, क्योंकि अन्यथा हम उपयोगकर्ता मोड में अपने परिणाम नहीं देखेंगे। या तो एक सारणीबद्ध दस्तावेज़ या एक लेआउट हमेशा उपयोगकर्ता को सारणीबद्ध डेटा प्रदर्शित करने में लगा रहता है, मैं वास्तव में मूल्यों की एक तालिका के माध्यम से डेटा प्रदर्शित करने में सक्षम होना चाहूंगा - क्योंकि इसका उपयोग करना बहुत आसान और परिचित है, लेकिन, दुर्भाग्य से, मूल्यों की एक तालिका सिर्फ एक उपकरण है जिसे एक डेवलपर की आवश्यकता होती है, आप इसका उपयोग करके स्क्रीन पर डेटा प्रदर्शित नहीं कर सकते ...

आइए एक नज़र डालते हैं कि एक सारणीबद्ध दस्तावेज़ क्या है - यह एक एक्सेल शीट की तरह है - आप केवल टेबल सेल की मदद से एक विशिष्ट सेल में एक रिकॉर्ड प्राप्त कर सकते हैं, यहाँ उन्हें एक क्षेत्र कहा जाता है, लेकिन हम स्वयं सीमा का चयन कर सकते हैं इस क्षेत्र के एक विशिष्ट सेल में:

तो, हमने पता लगाया कि यह क्या है स्प्रेडशीट दस्तावेज़, ने अपने लिए निर्धारित किया है कि हमें इस स्प्रेडशीट दस्तावेज़ के एक विशिष्ट सेल में अपने अनुरोध से डेटा निर्धारित करने की आवश्यकता है। लेकिन आइए सोचते हैं: "क्वेरी रिसेट" क्या है जो कंस्ट्रक्टर ने हमारे लिए इतनी जल्दी उत्पन्न किया? सहायता खोलना - क्वेरी परिणाम एक तालिका है जिसमें संबंधित गुण होते हैं! अंजीर देखें।

और अगर हम अब अभिव्यक्ति के बाद लिखते हैं QueryResult = Query.Run (); (कन्स्ट्रक्टर द्वारा बनाया गया) यहाँ संग्रह के लिए एक सरल लूप है:

QueryResult.Columns से प्रत्येक ColumnName के लिए लूप रिपोर्ट (ColumnName.Name); चक्र का अंत;

इस चक्र के बाद, अभी के लिए, कंस्ट्रक्टर द्वारा स्वचालित रूप से निर्मित सभी अभिव्यक्तियों को डॉक करें। और एक मोटे ग्राहक के तहत 1C: Enterprise8 शुरू करें। कोई भी सरल अनुरोध बनाएं (आप क्वेरी डिज़ाइनर का उपयोग कर सकते हैं - यह पहले से ही हमारे लिए काम करता है) और "अनुरोध निष्पादित करें" बटन पर क्लिक करें:

फिर आप संदेशों में विंडो के निचले भाग में देखेंगे - कि QueryResult तालिका उन फ़ील्ड के नामों को संग्रहीत करती है जिन्हें हमने एक साधारण क्वेरी बनाकर अभी-अभी चुना है।

अब एक स्प्रेडशीट दस्तावेज़ में हमारी पीड़ा के क्षेत्रों के इन नामों को प्रदर्शित करते हैं:

QueryResult.Colons लूप सेल से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = ColumnName.Name; चक्र का अंत;

क्वेरी डेटा द्वारा विवरण प्रदर्शित करने के लिए, हम कंस्ट्रक्टर द्वारा स्वचालित रूप से बनाए गए अभिव्यक्तियों को अलग कर देंगे और क्वेरी के "SelectDetailedRecords" पुनरावृत्ति लूप के अंदर, ठीक उसी चक्र को सम्मिलित करें जिसका उपयोग हम कॉलम के नाम प्रदर्शित करने के लिए करते थे, केवल अब हमें "QueryResult" तालिका के डेटा को नहीं, बल्कि चयन के डेटा को सेल टेक्स्ट में स्थानांतरित करने की आवश्यकता है, आइए मदद में देखें कि आप क्वेरी के विस्तृत चयन फ़ील्ड को कैसे संदर्भित कर सकते हैं:

FetchDetailedRecords = QueryResult.Select (); जबकि FetchDetailRecords.Next () लूप // पहली पंक्ति में हमारे पास पहले से ही टेबल कॉलम के नाम हैं, इसलिए हम पहली पंक्ति के नीचे डेटा लोड करते हैंRowNumberDoc = Object.QueryTable.TableTable + 1; QueryResult.Columns Loop Cell से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; चक्र का अंत; चक्र का अंत;

सब कुछ, हम जांच कर सकते हैं, एक मोटे ग्राहक के तहत उद्यम को लोड कर सकते हैं, मापदंडों के बिना एक साधारण क्वेरी दर्ज कर सकते हैं, "क्वेरी निष्पादित करें" बटन पर क्लिक करें, अंजीर देखें:

हुर्रे, सब कुछ काम करता है !!!

यह बहुत सुविधाजनक है, जब हमारे क्वेरी कंसोल को खोलते / बंद करते हैं - फिर से "क्वेरीटेक्स्ट" फ़ील्ड में, हमारा क्वेरी टेक्स्ट लिखा जाता है, जिसके साथ हमने कंसोल को बंद करने से पहले काम किया था। ऐसा करने के लिए, आपको बस फॉर्म प्रॉपर्टी = ऑटोसेव को सक्षम करने की आवश्यकता है, अंजीर देखें:

बस, हमारा कंसोल काम कर रहा है। ताकि हम उनमें निर्दिष्ट मापदंडों के साथ अधिक जटिल प्रश्न लिख सकें, हमें एक और बटन "FindParameters" बनाने की आवश्यकता है, साथ ही "ExecuteRequest" बटन का कोड - "FindParameters" बटन का कोड क्लाइंट पर निष्पादित किया जाएगा। और सर्वर पर। इसके अलावा, सर्वर प्रक्रिया में, हम उसी तरह "RequestText" विंडो से इसे पास किए गए टेक्स्ट के साथ एक अनुरोध चलाते हैं, "Request.FindParameters ()" अभिव्यक्ति का उपयोग करके हम पारित पैरामीटर ढूंढते हैं और बस उन्हें एक लूप में दर्ज करते हैं "RequestParameters" फ़ॉर्म के सारणीबद्ध खंड में। पैरामीटर की भरी हुई तालिका से "ExecuteRequest" प्रक्रिया में उन्हें स्थानांतरित करना न भूलें।

आप हमारे कंसोल में कुछ बटन भी जोड़ सकते हैं जो उपयोगकर्ता मोड में पैरामीटर विंडो और अनुरोध टेक्स्ट विंडो को साफ़ कर देंगे।

हमारा क्वेरी कंसोल उपयोग के लिए तैयार है, मैं आपको क्वेरी कंसोल जैसे सरल और शक्तिशाली टूल का उपयोग करके सफल रचनात्मक समाधान की कामना करता हूं!

यह प्रसंस्करण 1c8.3 प्लेटफॉर्म (प्रबंधित प्रपत्र) पर लिखा गया है और एक मोटे ग्राहक के तहत चलता है। इसे 1c8.2 प्लेटफॉर्म पर सामान्य रूपों और नियंत्रित दोनों रूपों में भी लिखा जा सकता है।

डाउनलोड में हमारे द्वारा अभी बनाए गए क्वेरी कंसोल का एक नमूना है।

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

क्वेरी कंसोल अपग्रेड:

1) अब एक अंतर्निहित क्वेरी बिल्डर के साथ हमारा स्व-निर्मित क्वेरी कंसोल किसी भी क्लाइंट के तहत चलेगा: नियमित और प्रबंधित रूपों के एक मोटे क्लाइंट के तहत और एक पतले और वेब क्लाइंट के तहत।

पीएस बिल्ट-इन क्वेरी बिल्डर का रूप और रूप अलग है - इस पर निर्भर करता है कि हमने किस क्लाइंट के तहत अपना कंसोल लॉन्च किया है। (मैं व्यक्तिगत रूप से एक मोटे क्लाइंट के तहत क्वेरी बिल्डर फॉर्म को पसंद करता हूं)

& OnClient प्रक्रिया QueryConstructor (कमांड) // मानक QueryConstructor को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है # यदि FatClientManagedApplication या ThickClientNormalApplication तब कंस्ट्रक्टर = नया QueryConstructor; यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत; // # अन्यथा // सूचित करें ("क्वेरी बिल्डर को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है"); // वापसी; // # EndIf # अन्यथा रिपोर्ट करें ("आप एक पतले क्लाइंट के तहत क्वेरी बिल्डर चला रहे हैं - यह अपने रूप और प्रदर्शन की गति में थोड़ा भिन्न है!"); कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर (); यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; कंस्ट्रक्टर अलर्ट = नया अलर्ट डिस्क्रिप्शन ("निष्पादन के बाद कंस्ट्रक्टर क्लोज्ड", यह फॉर्म); कंस्ट्रक्टर। शो (कंस्ट्रक्टर अलर्ट); #EndIf EndProcedure और OnClient प्रक्रिया ExecuteAfterClosingConstructor (परिणाम, ConstructorParameters) निर्यात // परिणाम = पाठ यदि कंसोल को ओके पर क्लिक करके बंद किया गया था Object.QueryText = ShortLP (परिणाम); // काम करता है !!! प्रक्रिया का अंत

2) हमारे सरल क्वेरी कंसोल में पैरामीटर को पास की गई एक अस्थायी तालिका के साथ जटिल प्रश्नों को दर्ज करने की क्षमता जोड़ी गई !!! तंत्र बहुत सरल और सुरुचिपूर्ण निकला - एक्सएमएल-कोड के उपयोग के बिना, जैसा कि पेशेवर कंसोल में किया जाता है।

कोड स्वयं और अस्थायी तालिकाओं के मापदंडों के लिए स्थानांतरण तंत्र के लिए प्रक्रियाएं दूसरी संलग्न फ़ाइल में पाई जा सकती हैं। मैंने मापदंडों में अस्थायी तालिकाओं का अपना संस्करण कैसे विकसित करना शुरू किया, इसे इस लिंक पर देखा जा सकता है https: //forum.site/forum9/topic183700/

अब एक जटिल क्वेरी के साथ कंसोल का उपयोग कैसे करें, जब एक अस्थायी तालिका को उसके मापदंडों पर पास किया जाता है। उदाहरण के लिए, आप इस अनुरोध का कोड यहां ले सकते हैं;

बाहरी डेटा चुनें। उत्पाद, बाहरी डेटा। मात्रा बाहरी डेटा से बाहरी डेटा और बाहरी डेटा के रूप में बाहरी डेटा डालें; ///////////////////////////////////////////// ///////////////////////////////////////// का चयन करें, बाहरी डेटा चुनें। फ़ील्ड 1 के रूप में, शून्य है (शेष आइटम शेष राशि। मात्रा शेष, 0) - बाहरी डेटा। बाहरी डेटा से शेष बाहरी डेटा के रूप में शेष मात्रा में शामिल हों संचय रजिस्टर। अवशेष आइटम। अवशेष (और दिनांक, आइटम में (बाहरी स्टॉक का चयन करें) बाहरी आइटम उत्पाद

उपरोक्त अनुरोध कोड के समान - आप अपना स्वयं का बना सकते हैं जटिल प्रश्न, आपके डेटा ऑब्जेक्ट को ध्यान में रखते हुए।

इसलिए, क्वेरी डिज़ाइनर में, हमने डिज़ाइनर को बंद करते हुए उपरोक्त क्वेरी बनाई - क्वेरी टेक्स्ट हमारे "क्वेरीटेक्स्ट" कंसोल फ़ील्ड पर जाएगा, "FindParameters" बटन पर क्लिक करें, हम देखते हैं कि लाइन = "ExternalData", ValueType = "ValuesTable" पैरामीटर तालिका में दिखाई दिया, अंजीर देखें।

पैरामीटर की इस तालिका में - दिनांक पैरामीटर दर्ज करें, उदाहरण के लिए, आज की तारीख, फिर "बाहरी डेटा" अस्थायी तालिका के हमारे पैरामीटर को संपादित करने का प्रयास करने के लिए क्लिक करें, तीन बिंदुओं के लिए "मान तालिका" के साथ फ़ील्ड में क्लिक करें - एक विकल्प प्रकार दिखाई देंगे, लाइन पर क्लिक करें, हमारा तंत्र हमें फॉर्म पर एक पेज देता है, जहां हमें मैन्युअल रूप से इस अस्थायी तालिका को दर्ज करने की आवश्यकता होती है।

यहां, ध्यान दें कि इस मामले में, "टाइमटेबल्स" पृष्ठ पर नीचे "पैरामीटर में अस्थायी तालिका नाम" फ़ील्ड में, हमारी अस्थायी तालिका का नाम दिखाई देगा (इसे पैरामीटर तालिका से कॉपी किया गया है)।

अब तक, "टाइमटेबल्स" पेज पर, हम केवल एक खाली टेबल देखते हैं - यह हमारी भविष्य की अस्थायी तालिका की टाइप टेबल है। "जोड़ें" बटन का उपयोग करके, चर का नाम और भविष्य की तालिका का प्रकार जोड़ें। सावधान रहें - नाम और प्रकार हमारे द्वारा और बाहरी डेटा के अनुरोध में निर्दिष्ट से मेल खाना चाहिए:

अब हम "अपडेट टेम्परेरीटेबल" बटन दबाते हैं - और हमारे पास यहां एक दूसरी टेबल होगी - हम अस्थायी टेबल के डेटा को "जोड़ें" बटन के माध्यम से सीधे भरेंगे।

सब कुछ, हम खुद को दोबारा जांच सकते हैं कि क्या हमने प्रसंस्करण के पहले पृष्ठ पर पैरामीटर तालिका में क्वेरी पैरामीटर के आदिम डेटा दर्ज किया है, और "अनुरोध निष्पादित करें" बटन दबाएं - सब कुछ मायने रखता है, तदनुसार चयन करता है, पर प्रतिबंध के साथ हमारी अस्थायी तालिका के पैरामीटर में प्रेषित डेटा

ps यदि आपने विशेषताओं के नाम और उनके प्रकार (पहली तालिका में) टाइप करते समय कोई गलती की है - बस कंसोल को बंद करें और इसे फिर से खोलें - अस्थायी डेटा तालिका मिटा दी जाएगी - और प्रकार तालिका को फिर से संपादित किया जा सकता है और एक नया डेटा तालिका फिर से बनाई गई।

बस इतना ही, हम अपने हाथों से एक बहुत शक्तिशाली काम करने वाला उपकरण बना सकते हैं, इसके अलावा, हमारा कंसोल अभी भी पेशेवर लोगों की तुलना में बहुत फुर्तीला है - और यह डेवलपर्स के लिए एक बहुत बड़ा प्लस है! और, ज़ाहिर है, अब हमारा कंसोल किसी भी क्लाइंट के तहत काम करता है! आपके रचनात्मक विकास के लिए शुभकामनाएँ !!!

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

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

मैं अपने क्वेरी कंसोल के साथ लगातार काम करता हूं, और हाल ही में मुझे एक बहुत ही रोचक क्वेरी मिली जिसमें अस्थायी टेबल पहले अनुरोध पैकेट में नहीं थे, लेकिन अगले में - और यहां मेरा कंसोल थोड़ा मजाक हो गया ... उसे बनाना पड़ा एक और उन्नयन।

इसलिए, क्वेरी में अस्थायी तालिकाओं का प्रबंधक हमेशा यह नहीं समझता है कि वे उसके साथ काम कर रहे हैं)) इसलिए, आपको अस्थायी तालिकाओं के इस प्रबंधक को स्पष्ट रूप से सेट करने की आवश्यकता है:

& AtServer प्रक्रिया ExecuteRequestAtServer () // अपग्रेड 2-अस्थायी टेबल्स प्रबंधक की स्पष्ट परिभाषा! प्रबंधकबीटी = अस्थायी तालिकाओं का नया प्रबंधक; अनुरोध = नया अनुरोध; // अपग्रेड 2-अस्थायी टेबल्स प्रबंधक की स्पष्ट परिभाषा! Request.TemporaryTablesManager = VTManager; Request.Text = Object.Request Text;

कंसोल का यह संस्करण तीसरे डाउनलोड में है।

तो, चलिए सरल शुरू करते हैं: विन्यासकर्ता में, एक नया प्रसंस्करण बनाएं, क्वेरी कंसोल या क्वेरी कंस्ट्रक्टर को अपनी पसंद के अनुसार नाम दें।

हम भविष्य के मापदंडों के लिए तुरंत "डेटा" में एक प्लेट जोड़ सकते हैं, जिसकी हमें आवश्यकता है ताकि हमारे कंसोल में हमारे पास सबसे आदिम अनुरोध न हो, लेकिन मापदंडों और लिंक के साथ, उदाहरण के लिए, हमारे काम के लिए हम एक अनुरोध बनाएंगे आवधिक रजिस्टर, लेकिन यहाँ बिना पैरामीटर संकेत = & दिनांक कहीं नहीं है।

पैरामीटर की हमारी तालिका बनाने के लिए, इसके "तालिका भाग" में "डेटा" टैब पर, एक नई तालिका जोड़ें, इसे क्वेरी पैरामीटर कहते हैं, यहां हम इस तालिका के कॉलम जोड़ते हैं: 1) पैरामीटरनाम, टाइप स्ट्रिंग = 25 वर्ण; ParameterValue, यहाँ एक समग्र डेटा प्रकार है, अंजीर देखें:

इसलिए, जैसा कि चित्र में दिखाया गया है, हम पैरामीटर मान कॉलम के लिए समग्र प्रकार का चयन करते हैं: खुले प्रकार के मेनू में, "समग्र प्रकार" चेकबॉक्स को चेक करें, संख्या, स्ट्रिंग (20 वर्ण निर्दिष्ट करें), दिनांक, बूलियन और पुट का चयन करें। सबसे निचला चेकबॉक्स - AnyLink - इसका मतलब है कि आगे, हमारे अनुरोध के पैरामीटर निर्दिष्ट करते समय, हम अपने कॉन्फ़िगरेशन के किसी भी ऑब्जेक्ट को संदर्भित कर सकते हैं, उदाहरण के लिए, संदर्भ पुस्तकें या दस्तावेज़।

अब हमें अपने भविष्य के क्वेरी कंसोल के लिए एक फॉर्म बनाने की जरूरत है। प्रसंस्करण में, "फ़ॉर्म" टैब पर जाएं और एक नया जोड़ें। हम इस फॉर्म में प्रवेश करते हैं और रचनात्मकता के लिए पहले से ही एक असीमित क्षेत्र है - आप अपनी पसंद के अनुसार मापदंडों के साथ बस बनाए गए दो प्रॉप्स और एक प्लेट की व्यवस्था कर सकते हैं! ऐसा करने के लिए, आप मानक प्रपत्र तत्वों का उपयोग कर सकते हैं, जैसे कि समूह या पृष्ठ वाले पृष्ठ (यदि आप पृष्ठ बदलना पसंद करते हैं।

यहाँ मुख्य बात एक बात है: "TextValues" विशेषता को फ़ॉर्म संपादन के बाएँ क्षेत्र में खींचकर - "दृश्य" सेट करना सुनिश्चित करें = इसके गुणों में टेक्स्ट दस्तावेज़ का फ़ील्ड। अंजीर देखें:

"क्वेरीटेबल" विशेषता के गुणों में, यदि आप चाहें, तो आप निर्दिष्ट कर सकते हैं - "डिस्प्लेग्रिड" और "डिस्प्लेहेडर्स"।

इसके बाद, प्रपत्र को संपादित करने के लिए दाएँ विंडो में, "कमांड" टैब पर जाएँ और एक नया बटन जोड़ें, जब आप उस पर क्लिक करेंगे जिस पर हमारा कंसोल एक निश्चित क्रिया करेगा। आइए "क्वेरी कंस्ट्रक्टर" बटन बनाएं, यदि आप चाहें, तो आप बटन में एक आइकन जोड़ सकते हैं, मुख्य बात यह है कि बटन को बाईं ओर संपादन विंडो में ले जाना है ताकि हम इसे देख सकें। फिर, सही रूप में संपादन विंडो, हमारे बटन पर राइट-क्लिक करें और गुणों का चयन करें - गुणों में, "एक्शन" आइटम पर क्लिक करें, एक प्रश्न के साथ एक मोडल विंडो दिखाई देगी - जहां वास्तव में हमारा प्रोग्राम कोड निष्पादित किया जाएगा, जिसे हम बटन पर असाइन करेंगे - "क्लाइंट पर" चुनें।

फॉर्म मॉड्यूल एक तैयार खाली प्रक्रिया "प्रक्रिया क्वेरी कंस्ट्रक्टर (कमांड)" के साथ खुलेगा। इस प्रक्रिया के अंदर, हम मानक 1c8 क्वेरी कंस्ट्रक्टर को कॉल का वर्णन करेंगे। यह बहुत आसान है: कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर;लेकिन यहाँ नुकसान हैं - प्लेटफ़ॉर्म में निर्मित क्वेरी कंस्ट्रक्टर केवल एक मोटे क्लाइंट के तहत उपयोगकर्ता मोड में काम करता है! इसलिए, हम प्रीप्रोसेसर निर्देश की शर्त डालेंगे # यदि, लेकिन यहां आप अपने प्लेटफॉर्म के आधार पर अपने लिए निर्णय लेते हैं, या आपके पास सामान्य रूप हैं, तो "चुनें" मोटा क्लाइंट सामान्य अनुप्रयोग"या आपके पास एक प्रबंधित प्रपत्र प्लेटफ़ॉर्म है, तो" मोटा क्लाइंट प्रबंधित ऐप"। अंजीर देखें।

अब यह इस प्रक्रिया में अनुरोध पाठ लिखने के लिए एक शर्त जोड़ने के लिए बनी हुई है, जो हमारे लिए "अनुरोध पाठ" फॉर्म की आवश्यकता के लिए क्वेरी कंस्ट्रक्टर बनाएगी:

अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत;

लेकिन हम अनुरोध टेक्स्ट में मैन्युअल रूप से कुछ बदल सकते हैं (उपयोगकर्ता मोड में - "RequestText" प्रॉप्स विंडो में) ताकि हमारे परिवर्तन QueryConstructor में फिर से कॉल किए जाने पर मिलें - यहां एक साधारण शर्त जोड़ें:

यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत;

यही है, हमने 1c8 प्लेटफॉर्म में निर्मित क्वेरी कंस्ट्रक्टर को कनेक्ट किया है, आइए हमारे काम पर एक नज़र डालें। ऐसा करने के लिए, 1C प्रारंभ करें: निम्न में से किसी एक तरीके से मोटे क्लाइंट मोड में एंटरप्राइज़: 1) कॉन्फ़िगरेटर का मुख्य मेनू - डीबग - डीबगिंग प्रारंभ करें - थिक क्लाइंट; 2) या यदि आपके पास इन कुंजियों को विन्यासकर्ता में नियंत्रण कक्ष में ले जाया गया है - बस एक पीले सर्कल के साथ एक मोटी बिंदु के साथ बटन दबाएं, आंकड़ा देखें:

उपयोगकर्ता मोड 1cEnterprise8 लॉन्च किया गया है, हम अपनी प्रोसेसिंग ढूंढते हैं, इसे लॉन्च करते हैं, हमारे बटन "क्वेरी कंस्ट्रक्टर" पर क्लिक करते हैं और देखते हैं कि प्लेटफॉर्म में बनाया गया कंस्ट्रक्टर कैसे खुलता है। अंजीर देखें।

तो, हमारे साथ क्वेरी कंस्ट्रक्टर लॉन्च किया गया है, हम पहले से ही इसमें अपनी भविष्य की क्वेरी जोड़ना शुरू कर सकते हैं, लेकिन हम यह देखने में रुचि रखते हैं कि हमने जो क्वेरी बनाई है उसे कैसे संसाधित किया जाएगा! और इसके लिए हमें अपने कंसोल के रूप को संपादित करने के लिए विन्यासकर्ता में एक और बटन बनाने की आवश्यकता है, चलो इसे "अनुरोध निष्पादित करें" कहते हैं। हम "एक्शन" पर "एक्ज़ीक्यूट रिक्वेस्ट" बटन के गुणों में क्लिक करते हैं, फिर से एक मेनू पॉप अप होता है, जिसमें हमसे पूछा जाता है कि हमारा प्रोग्राम कोड कहां प्रोसेस किया जाएगा, इस मामले में हम "क्लाइंट और सर्वर दोनों पर" का चयन करते हैं। ”, फिर से हम फॉर्म मॉड्यूल में आते हैं।

ExecuteRequest () प्रक्रिया में, जो हमारे पास क्लाइंट पर है, हम शर्त लिखते हैं यदि उपयोगकर्ता ने अनुरोध टेक्स्ट दर्ज नहीं किया है, लेकिन उसे इसे निष्पादित करने के लिए कहता है:

अगर EmptyString (Object.RequestText) तो रिपोर्ट करें ("अपना अनुरोध टेक्स्ट दर्ज करें!"); अगर अंत;

सिस्टम पहले से ही ExecuteRequestOnServer प्रक्रिया () के लिए स्वचालित रूप से एक लिंक उत्पन्न कर चुका है; - यह अच्छा है, इस प्रक्रिया पर जाएं, जिसे सर्वर पर निष्पादित किया जाता है और यहां हमारे दर्ज किए गए अनुरोध का निष्पादन कोड लिखें।

यहां विकल्प हैं: आप स्वतंत्र रूप से निर्माण प्रश्नों से संबंधित सभी भाव लिख सकते हैं, अर्थात। मैन्युअल रूप से, लेकिन एक और भी सरल विकल्प है - प्रक्रिया के अंदर, सही माउस बटन दबाएं और ड्रॉप-डाउन मेनू में आइटम का चयन करें "परिणामों को संसाधित करने के साथ क्वेरी कंस्ट्रक्टर, अंजीर देखें।":

यदि आपने "आइटम, फिर मोडल विंडो" क्वेरी टेक्स्ट नहीं मिला, तो परिणाम प्रसंस्करण के साथ क्वेरी कंस्ट्रक्टर पर क्लिक किया। एक नया बनाएं? "परिणाम को दरकिनार"। यही है, हमें इस कंस्ट्रक्टर से किसी और चीज की आवश्यकता नहीं है, हम "ओके" बटन पर क्लिक करते हैं - एक मोडल विंडो "अनुरोध में कोई फ़ील्ड नहीं चुना गया है, "ओके" पर क्लिक करें।

उसके बाद, हमारी प्रक्रिया के अंदर RunRequestOnServer (), निम्नलिखित तैयार रिक्त दिखाई देगा:

आइए कंस्ट्रक्टर द्वारा निर्मित एक्सप्रेशन पर चलते हैं:

अनुरोध। पाठ = "";

Request.Text = Object.Request Text;

सब कुछ इतना सरल है, प्रोसेसिंग फॉर्म पर हमारा "एक्ज़िक्यूट रिक्वेस्ट" बटन पहले से ही व्यावहारिक रूप से चालू है, अब तक यह बिना मापदंडों के केवल सरल अनुरोधों को संसाधित कर सकता है, लेकिन मुख्य बात यह है कि यह काम करता है! यह केवल प्रसंस्करण प्रपत्र पर "मान तालिका" विशेषता में हमारे अनुरोध के परिणामों को प्रदर्शित करने के लिए बनी हुई है। आपको याद दिला दूं कि हमारी विशेषता "मान तालिका" "तालिका दस्तावेज़" प्रकार की है, क्योंकि अन्यथा हम अपने परिणाम उपयोगकर्ता मोड में नहीं देखेंगे। या तो एक सारणीबद्ध दस्तावेज़ या एक लेआउट हमेशा उपयोगकर्ता को सारणीबद्ध डेटा प्रदर्शित करने में लगा रहता है, मैं वास्तव में मूल्यों की एक तालिका के माध्यम से डेटा प्रदर्शित करने में सक्षम होना चाहूंगा - क्योंकि इसका उपयोग करना बहुत आसान और परिचित है, लेकिन, दुर्भाग्य से, मूल्यों की एक तालिका सिर्फ एक उपकरण है जिसे एक डेवलपर की आवश्यकता होती है, आप इसका उपयोग करके स्क्रीन पर डेटा प्रदर्शित नहीं कर सकते ...

आइए एक नज़र डालते हैं कि एक सारणीबद्ध दस्तावेज़ क्या है - यह एक एक्सेल शीट की तरह है - आप केवल टेबल सेल की मदद से एक विशिष्ट सेल में एक रिकॉर्ड प्राप्त कर सकते हैं, यहाँ उन्हें एक क्षेत्र कहा जाता है, लेकिन हम स्वयं सीमा का चयन कर सकते हैं इस क्षेत्र के एक विशिष्ट सेल में:

इसलिए, हमने पता लगाया कि एक स्प्रेडशीट दस्तावेज़ क्या है, जो स्वयं के लिए निर्धारित है कि हमें इस स्प्रैडशीट दस्तावेज़ के एक विशिष्ट सेल में अपने अनुरोध से डेटा निर्धारित करने की आवश्यकता है। लेकिन आइए सोचते हैं: "क्वेरी रिसेट" क्या है जो कंस्ट्रक्टर ने हमारे लिए इतनी जल्दी उत्पन्न किया? सहायता खोलना - क्वेरी परिणाम एक तालिका है जिसमें संबंधित गुण होते हैं! अंजीर देखें।

और अगर हम अब अभिव्यक्ति के बाद लिखते हैं QueryResult = Query.Run (); (कन्स्ट्रक्टर द्वारा बनाया गया) यहाँ संग्रह के लिए एक सरल लूप है:

QueryResult.Columns से प्रत्येक ColumnName के लिए लूप रिपोर्ट (ColumnName.Name); चक्र का अंत;

इस चक्र के बाद, अभी के लिए, कंस्ट्रक्टर द्वारा स्वचालित रूप से निर्मित सभी अभिव्यक्तियों को डॉक करें। और मोटे क्लाइंट के तहत 1C: Enterprise8 चलाएं। कोई भी सरल अनुरोध बनाएं (आप क्वेरी डिज़ाइनर का उपयोग कर सकते हैं - यह पहले से ही हमारे लिए काम करता है) और "एक्ज़िक्यूट रिक्वेस्ट" बटन पर क्लिक करें:

फिर आप संदेशों में विंडो के निचले भाग में देखेंगे - कि QueryResult तालिका उन फ़ील्ड के नाम संग्रहीत करती है जिन्हें हमने एक साधारण क्वेरी बनाकर अभी-अभी चुना है।

अब एक स्प्रेडशीट दस्तावेज़ में हमारी पीड़ा के क्षेत्रों के इन नामों को प्रदर्शित करते हैं:

QueryResult.Colons लूप सेल से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = ColumnName.Name; चक्र का अंत;

क्वेरी डेटा पर विवरण प्रदर्शित करने के लिए, हम कंस्ट्रक्टर द्वारा स्वचालित रूप से बनाए गए अभिव्यक्तियों को अलग करेंगे और क्वेरी के "SelectDetailedRecords" लूप के अंदर, ठीक उसी चक्र को सम्मिलित करें जिसका उपयोग हम कॉलम के नाम प्रदर्शित करने के लिए करते थे, केवल अब हम "QueryResult" तालिका के डेटा को सेल टेक्स्ट में और स्वयं चयन के डेटा को स्थानांतरित करने की आवश्यकता है, आइए मदद में देखें कि आप क्वेरी के विस्तृत चयन फ़ील्ड को कैसे संदर्भित कर सकते हैं:

FetchDetailedRecords = QueryResult.Select (); जबकि FetchDetailRecords.Next () लूप // पहली पंक्ति में हमारे पास पहले से ही टेबल कॉलम के नाम हैं, इसलिए हम पहली पंक्ति के नीचे डेटा लोड करते हैंRowNumberDoc = Object.QueryTable.TableTable + 1; QueryResult.Columns Loop Cell से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; चक्र का अंत; चक्र का अंत;

सब कुछ, हम जांच कर सकते हैं, एक मोटे ग्राहक के तहत उद्यम को लोड कर सकते हैं, मापदंडों के बिना एक साधारण क्वेरी दर्ज कर सकते हैं, "क्वेरी निष्पादित करें" बटन पर क्लिक करें, अंजीर देखें:

हुर्रे, सब कुछ काम करता है !!!

यह बहुत सुविधाजनक है, जब हमारे क्वेरी कंसोल को खोलते / बंद करते हैं - फिर से "क्वेरीटेक्स्ट" फ़ील्ड में, हमारा क्वेरी टेक्स्ट लिखा जाता है, जिसके साथ हमने कंसोल को बंद करने से पहले काम किया था। ऐसा करने के लिए, आपको बस फॉर्म प्रॉपर्टी = ऑटोसेव को सक्षम करने की आवश्यकता है, अंजीर देखें:

बस, हमारा कंसोल काम कर रहा है। ताकि हम उनमें निर्दिष्ट मापदंडों के साथ अधिक जटिल प्रश्न लिख सकें, हमें एक और बटन "फाइंडपैरामीटर" बनाने की जरूरत है, साथ ही "एक्सक्यूट रिक्वेस्ट" बटन का कोड - "फाइंडपैरामीटर" बटन का कोड निष्पादित किया जाएगा। क्लाइंट और सर्वर पर। इसके अलावा, सर्वर प्रक्रिया में, हम उसी तरह "RequestText" विंडो से इसे पास किए गए पाठ के साथ एक अनुरोध शुरू करते हैं, "Request.FindParameters ()" अभिव्यक्ति का उपयोग करके हम पारित मापदंडों को ढूंढते हैं और बस उन्हें एक लूप में दर्ज करते हैं। "RequestParameters" फ़ॉर्म के सारणीबद्ध खंड में। उन्हें मापदंडों की भरी हुई तालिका से "ExecuteRequest" प्रक्रिया में स्थानांतरित करना न भूलें।

आप हमारे कंसोल में कुछ बटन भी जोड़ सकते हैं जो उपयोगकर्ता मोड में पैरामीटर विंडो और अनुरोध टेक्स्ट विंडो को साफ़ कर देंगे।

हमारा क्वेरी कंसोल उपयोग के लिए तैयार है, मैं आपको क्वेरी कंसोल जैसे सरल और शक्तिशाली टूल का उपयोग करके सफल रचनात्मक समाधान की कामना करता हूं!

यह प्रसंस्करण 1c8.3 प्लेटफॉर्म (प्रबंधित प्रपत्र) पर लिखा गया है और एक मोटे ग्राहक के तहत चलता है। इसे 1c8.2 प्लेटफॉर्म पर सामान्य रूपों और नियंत्रित दोनों रूपों में भी लिखा जा सकता है।

डाउनलोड में हमारे द्वारा अभी बनाए गए क्वेरी कंसोल का एक नमूना है।

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

क्वेरी कंसोल अपग्रेड:

1) अब एक अंतर्निहित क्वेरी बिल्डर के साथ हमारा स्व-निर्मित क्वेरी कंसोल किसी भी क्लाइंट के तहत चलेगा: नियमित और प्रबंधित रूपों के एक मोटे क्लाइंट के तहत और एक पतले और वेब क्लाइंट के तहत।

पीएस बिल्ट-इन क्वेरी बिल्डर का रूप और रूप अलग है - इस पर निर्भर करता है कि हमने किस क्लाइंट के तहत अपना कंसोल लॉन्च किया है। (मैं व्यक्तिगत रूप से एक मोटे क्लाइंट के तहत क्वेरी बिल्डर फॉर्म को पसंद करता हूं)

& OnClient प्रक्रिया QueryConstructor (कमांड) // मानक QueryConstructor को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है # यदि FatClientManagedApplication या ThickClientNormalApplication तब कंस्ट्रक्टर = नया QueryConstructor; यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत; // # अन्यथा // सूचित करें ("क्वेरी बिल्डर को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है"); // वापसी; // # EndIf # अन्यथा रिपोर्ट करें ("आप एक पतले क्लाइंट के तहत क्वेरी बिल्डर चला रहे हैं - यह अपने रूप और प्रदर्शन की गति में थोड़ा भिन्न है!"); कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर (); यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; कंस्ट्रक्टर अलर्ट = नया अलर्ट डिस्क्रिप्शन ("निष्पादन के बाद कंस्ट्रक्टर क्लोज्ड", यह फॉर्म); कंस्ट्रक्टर। शो (कंस्ट्रक्टर अलर्ट); #EndIf EndProcedure और OnClient प्रक्रिया ExecuteAfterClosingConstructor (परिणाम, ConstructorParameters) निर्यात // परिणाम = पाठ यदि कंसोल को ओके पर क्लिक करके बंद किया गया था Object.QueryText = ShortLP (परिणाम); // काम करता है !!! प्रक्रिया का अंत

2) हमारे सरल क्वेरी कंसोल में पैरामीटर को पास की गई एक अस्थायी तालिका के साथ जटिल प्रश्नों को दर्ज करने की क्षमता जोड़ी गई !!! तंत्र बहुत सरल और सुरुचिपूर्ण निकला - एक्सएमएल-कोड के उपयोग के बिना, जैसा कि पेशेवर कंसोल में किया जाता है।

कोड स्वयं और अस्थायी तालिकाओं के मापदंडों के लिए स्थानांतरण तंत्र के लिए प्रक्रियाएं दूसरी संलग्न फ़ाइल में पाई जा सकती हैं। मैंने मापदंडों में अस्थायी तालिकाओं का अपना संस्करण कैसे विकसित करना शुरू किया, इस लिंक पर पाया जा सकता है https://forum.infostart.ru/forum9/topic183700/

अब एक जटिल क्वेरी के साथ कंसोल का उपयोग कैसे करें, जब एक अस्थायी तालिका को उसके मापदंडों पर पास किया जाता है। उदाहरण के लिए, आप इस अनुरोध का कोड यहां ले सकते हैं;

बाहरी डेटा चुनें। उत्पाद, बाहरी डेटा। मात्रा बाहरी डेटा से बाहरी डेटा और बाहरी डेटा के रूप में बाहरी डेटा डालें; ///////////////////////////////////////////// ///////////////////////////////////////// का चयन करें, बाहरी डेटा चुनें। फ़ील्ड 1 के रूप में, शून्य है (शेष आइटम शेष राशि। मात्रा शेष, 0) - बाहरी डेटा। बाहरी डेटा से शेष बाहरी डेटा के रूप में शेष मात्रा में शामिल हों संचय रजिस्टर। अवशेष आइटम। अवशेष (और दिनांक, आइटम में (बाहरी स्टॉक का चयन करें) बाहरी आइटम उत्पाद

उपरोक्त क्वेरी कोड के समान - आप अपने डेटा ऑब्जेक्ट को ध्यान में रखते हुए अपनी जटिल क्वेरी बना सकते हैं।

इसलिए, क्वेरी डिज़ाइनर में, हमने कंस्ट्रक्टर को बंद करते हुए उपरोक्त क्वेरी बनाई - क्वेरी टेक्स्ट हमारे "क्वेरीटेक्स्ट" कंसोल फ़ील्ड पर जाएगा, "FindParameters" बटन पर क्लिक करें, हम देखते हैं कि लाइन = "ExternalData", ValueType = "ValuesTable" पैरामीटर तालिका में दिखाई दिया, अंजीर देखें।

पैरामीटर की इस तालिका में - दिनांक पैरामीटर दर्ज करें, उदाहरण के लिए, आज की तारीख, फिर अस्थायी तालिका "बाहरी डेटा" के हमारे पैरामीटर को संपादित करने का प्रयास करने के लिए क्लिक करें, तीन बिंदुओं के लिए "मान तालिका" के साथ फ़ील्ड में क्लिक करें - एक विकल्प प्रकार दिखाई देंगे, लाइन पर क्लिक करें, हमारा तंत्र हमें फॉर्म पर एक पेज देता है, जहां हमें इस बहुत ही अस्थायी तालिका को मैन्युअल रूप से दर्ज करने की आवश्यकता होती है।

यहां, ध्यान दें कि एक ही समय में "अस्थायी तालिका" पृष्ठ पर नीचे "पैरामीटर में अस्थायी तालिका का नाम" - हमारी अस्थायी तालिका का नाम दिखाई देगा (इसे पैरामीटर की तालिका से कॉपी किया गया है)।

अब तक, "टाइमटेबल्स" पेज पर, हम केवल एक खाली टेबल देखते हैं - यह हमारी भविष्य की अस्थायी तालिका की टाइप टेबल है। "जोड़ें" बटन का उपयोग करके, विशेषता का नाम और भविष्य की तालिका का प्रकार जोड़ें। सावधान रहें - नाम और प्रकार हमारे द्वारा और बाहरी डेटा के अनुरोध में निर्दिष्ट से मेल खाना चाहिए:

अब हम "अपडेट अस्थायी तालिका" बटन दबाते हैं - और हमारे पास यहां दूसरी तालिका होगी - हम "जोड़ें" बटन के माध्यम से सीधे अस्थायी तालिका डेटा दर्ज करेंगे।

सब कुछ, हम एक बार फिर खुद को दोबारा जांच सकते हैं कि क्या हमने प्रसंस्करण के पहले पृष्ठ पर पैरामीटर तालिका में क्वेरी पैरामीटर के आदिम डेटा दर्ज किया है, और "अनुरोध निष्पादित करें" बटन पर क्लिक करें - सब कुछ मायने रखता है, तदनुसार चयन करता है, प्रतिबंध के साथ हमारे अस्थायी तालिका के पैरामीटर में प्रेषित डेटा पर

ps यदि आपने विशेषताओं के नाम और उनके प्रकार (पहली तालिका में) टाइप करते समय कोई गलती की है - बस कंसोल को बंद करें और इसे फिर से खोलें - अस्थायी डेटा तालिका मिटा दी जाएगी - और प्रकार तालिका को फिर से संपादित किया जा सकता है और एक नया डेटा तालिका फिर से बनाई गई।

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

बस इतना ही, हम अपने हाथों से एक बहुत शक्तिशाली काम करने वाला उपकरण बना सकते हैं, इसके अलावा, हमारा कंसोल अभी भी पेशेवर लोगों की तुलना में बहुत फुर्तीला है - और यह डेवलपर्स के लिए एक बहुत बड़ा प्लस है! और, ज़ाहिर है, अब हमारा कंसोल किसी भी क्लाइंट के तहत काम करता है! आपके रचनात्मक विकास के लिए शुभकामनाएँ !!!

तो, चलिए सरल शुरू करते हैं: विन्यासकर्ता में, एक नया प्रसंस्करण बनाएं, क्वेरी कंसोल या क्वेरी कंस्ट्रक्टर को अपनी पसंद के अनुसार नाम दें।

हम भविष्य के मापदंडों के लिए तुरंत "डेटा" एक प्लेट में जोड़ सकते हैं, जिसकी हमें आवश्यकता है ताकि हमारे कंसोल में हमारे पास सबसे आदिम अनुरोध न हो, लेकिन मापदंडों और लिंक के साथ, उदाहरण के लिए, हमारे काम के लिए हम एक अनुरोध बनाएंगे आवधिक रजिस्टर, लेकिन यहाँ बिना पैरामीटर संकेत = & दिनांक कहीं नहीं है।

पैरामीटर की हमारी तालिका बनाने के लिए, "डेटा" टैब पर इसके "तालिका भाग" में एक नई तालिका जोड़ें, इसे क्वेरी पैरामीटर कहते हैं, यहां हम इस तालिका के कॉलम जोड़ते हैं: 1) पैरामीटरनाम, स्ट्रिंग प्रकार = 25 वर्ण; ParameterValue, यहाँ एक समग्र डेटा प्रकार है, अंजीर देखें:

इसलिए, जैसा कि चित्र में दिखाया गया है, हम पैरामीटर मान कॉलम के लिए समग्र प्रकार का चयन करते हैं: खुले प्रकार के मेनू में, "समग्र प्रकार" चेकबॉक्स को चेक करें, संख्या, स्ट्रिंग (20 वर्ण निर्दिष्ट करें), दिनांक, बूलियन और पुट चुनें सबसे कम टिक - AnyLink - इसका मतलब है कि आगे, हमारे अनुरोध के पैरामीटर निर्दिष्ट करते समय, हम अपने कॉन्फ़िगरेशन के किसी भी ऑब्जेक्ट को संदर्भित कर सकते हैं, उदाहरण के लिए, संदर्भ पुस्तकें या दस्तावेज़।

अब हमें अपने भविष्य के क्वेरी कंसोल के लिए एक फॉर्म बनाने की जरूरत है। प्रसंस्करण में, "फ़ॉर्म" टैब पर जाएं और एक नया जोड़ें। हम इस फॉर्म में प्रवेश करते हैं और रचनात्मकता के लिए पहले से ही एक असीमित क्षेत्र है - आप अपनी पसंद के अनुसार मापदंडों के साथ बस बनाए गए दो प्रॉप्स और एक प्लेट की व्यवस्था कर सकते हैं! ऐसा करने के लिए, आप मानक प्रपत्र तत्वों का उपयोग कर सकते हैं, जैसे कि समूह या पृष्ठ वाले पृष्ठ (यदि आप पृष्ठ बदलना पसंद करते हैं।

यहां मुख्य बात एक बात है: "टेक्स्टवैल्यू" विशेषता को फॉर्म के बाएं संपादन क्षेत्र में खींचकर - "व्यू" = टेक्स्ट दस्तावेज़ फ़ील्ड को इसके गुणों में सेट करना सुनिश्चित करें। अंजीर देखें:

"क्वेरीटेबल" चर के गुणों में, यदि आप चाहें, तो आप निर्दिष्ट कर सकते हैं - "डिस्प्लेग्रिड" और "डिस्प्लेहेडर्स"।

अगला, फ़ॉर्म को संपादित करने के लिए दाएँ विंडो में, "कमांड" टैब पर जाएँ और एक नया बटन जोड़ें, जिस पर क्लिक करके हमारा कंसोल एक निश्चित क्रिया करेगा। आइए "क्वेरी कंस्ट्रक्टर" बटन बनाएं, यदि आप चाहें, तो आप बटन में एक आइकन जोड़ सकते हैं, मुख्य बात यह है कि बटन को बाएं फॉर्म संपादन विंडो में ही ले जाना है ताकि हम इसे देख सकें। फिर, सही रूप में संपादन विंडो, हमारे बटन पर राइट-क्लिक करें और गुणों का चयन करें - गुणों में, "एक्शन" आइटम पर क्लिक करें, एक प्रश्न के साथ एक मोडल विंडो दिखाई देगी - जहां वास्तव में हमारा प्रोग्राम कोड निष्पादित किया जाएगा, जिसे हम बटन पर असाइन करेंगे - "क्लाइंट पर" चुनें।

प्रपत्र मॉड्यूल एक तैयार खाली प्रक्रिया "प्रक्रिया QueryConstructor (कमांड)" के साथ खुलेगा। इस प्रक्रिया के अंदर, हम मानक 1c8 क्वेरी कंस्ट्रक्टर को कॉल का वर्णन करेंगे। यह बहुत आसान है: कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर;लेकिन यहाँ नुकसान हैं - प्लेटफ़ॉर्म में निर्मित क्वेरी कंस्ट्रक्टर केवल एक मोटे क्लाइंट के तहत उपयोगकर्ता मोड में काम करता है! इसलिए, हम प्रीप्रोसेसर निर्देश की शर्त डालेंगे # यदि, लेकिन यहां आप अपने प्लेटफॉर्म के आधार पर अपने लिए निर्णय लेते हैं, या आपके पास सामान्य रूप हैं, तो "चुनें" मोटा क्लाइंट सामान्य अनुप्रयोग"या आपके पास एक प्रबंधित प्रपत्र प्लेटफ़ॉर्म है, तो" मोटा क्लाइंट प्रबंधित ऐप". अंजीर देखें।

अब इस प्रक्रिया में अनुरोध टेक्स्ट लिखने के लिए एक शर्त जोड़ना बाकी है, जिसे क्वेरी डिज़ाइनर द्वारा "अनुरोध टेक्स्ट" फॉर्म की हमारी आवश्यकता में उत्पन्न किया जाएगा:

अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत;

लेकिन हम क्वेरी टेक्स्ट में मैन्युअल रूप से कुछ बदल सकते हैं (उपयोगकर्ता मोड में - "क्वेरीटेक्स्ट" प्रॉप्स विंडो में) ताकि हमारे परिवर्तन फिर से कॉल किए जाने पर QueryConstructor के पास जाएंगे - यहां एक साधारण शर्त जोड़ें:

यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत;

यही है, हमने 1c8 प्लेटफॉर्म में निर्मित क्वेरी कंस्ट्रक्टर को कनेक्ट किया है, आइए हमारे काम पर एक नज़र डालें। ऐसा करने के लिए, 1C प्रारंभ करें: निम्न में से किसी एक तरीके से मोटे क्लाइंट मोड में एंटरप्राइज़: 1) कॉन्फ़िगरेटर का मुख्य मेनू - डीबग - डिबगिंग प्रारंभ करें - थिक क्लाइंट; 2) या यदि आपके पास इन कुंजियों को विन्यासकर्ता में नियंत्रण कक्ष में ले जाया गया है - बस एक पीले सर्कल के साथ एक मोटी बिंदु के साथ बटन दबाएं, आंकड़ा देखें:

उपयोगकर्ता मोड 1cEnterprise8 लॉन्च किया गया है, हम अपनी प्रोसेसिंग ढूंढते हैं, इसे शुरू करते हैं, हमारे बटन "क्वेरी कंस्ट्रक्टर" पर क्लिक करते हैं और देखते हैं कि प्लेटफॉर्म में बनाया गया कंस्ट्रक्टर कैसे खुलता है। अंजीर देखें।

तो, हमारे साथ क्वेरी कंस्ट्रक्टर लॉन्च किया गया है, हम पहले से ही इसमें अपनी भविष्य की क्वेरी जोड़ना शुरू कर सकते हैं, लेकिन हम यह देखने में रुचि रखते हैं कि हमने जो क्वेरी बनाई है उसे कैसे संसाधित किया जाएगा! और इसके लिए हमें अपने कंसोल के रूप को संपादित करने के लिए विन्यासकर्ता में एक और बटन बनाने की आवश्यकता है, चलो इसे "अनुरोध निष्पादित करें" कहते हैं। "एक्शन" पर "निष्पादन अनुरोध" बटन के गुणों में क्लिक करें, एक मेनू फिर से पॉप अप होता है, जिसमें हमसे पूछा जाता है कि हमारा प्रोग्राम कोड कहां संसाधित किया जाएगा, इस मामले में हम "क्लाइंट और सर्वर दोनों पर" का चयन करते हैं। , फिर से हम फॉर्म मॉड्यूल में आते हैं।

ExecuteRequest () प्रक्रिया में, जो हमारे पास क्लाइंट पर है, हम शर्त लिखते हैं यदि उपयोगकर्ता ने अनुरोध टेक्स्ट दर्ज नहीं किया है, लेकिन उसे इसे निष्पादित करने के लिए कहता है:

अगर EmptyString (Object.RequestText) तो रिपोर्ट करें ("अपना अनुरोध टेक्स्ट दर्ज करें!"); अगर अंत;

सिस्टम पहले से ही ExecuteRequestOnServer प्रक्रिया () के लिए स्वचालित रूप से एक लिंक उत्पन्न कर चुका है; - यह अच्छा है, इस प्रक्रिया पर चलते हैं, जिसे सर्वर पर निष्पादित किया जाता है और यहां हमारे दर्ज किए गए अनुरोध का निष्पादन कोड लिखें।

यहां विकल्प हैं: आप स्वतंत्र रूप से निर्माण प्रश्नों से संबंधित सभी भाव लिख सकते हैं, अर्थात। मैन्युअल रूप से, लेकिन एक और भी सरल विकल्प है - प्रक्रिया के अंदर, दायां माउस बटन दबाएं और ड्रॉप-डाउन मेनू में आइटम का चयन करें "परिणामों को संसाधित करने के साथ क्वेरी कंस्ट्रक्टर, अंजीर देखें।":

यदि आपने "आइटम, फिर मोडल विंडो" के परिणाम प्रसंस्करण के साथ क्वेरी कंस्ट्रक्टर पर क्लिक किया है, तो क्वेरी टेक्स्ट नहीं मिला। एक नया बनाएं? " परिणाम को दरकिनार करते हुए। "बस, हमें इस कंस्ट्रक्टर से और कुछ नहीं चाहिए, "ओके" बटन - एक मोडल विंडो ड्रॉप आउट हो जाएगी" अनुरोध में कोई फ़ील्ड नहीं चुना गया है, "ओके" पर क्लिक करें।

उसके बाद, हमारी प्रक्रिया के अंदर RunRequestOnServer (), निम्नलिखित तैयार रिक्त दिखाई देगा:

आइए कंस्ट्रक्टर द्वारा निर्मित एक्सप्रेशन पर चलते हैं:

अनुरोध। पाठ = "";

Request.Text = Object.Request Text;

सब कुछ इतना सरल है, प्रोसेसिंग फॉर्म पर हमारा "एक्ज़िक्यूट रिक्वेस्ट" बटन पहले से ही व्यावहारिक रूप से चालू है, अब तक यह केवल मापदंडों के बिना सरल अनुरोधों को संसाधित कर सकता है, लेकिन मुख्य बात यह है कि यह काम करता है! यह केवल प्रसंस्करण प्रपत्र पर "मान तालिका" विशेषता में हमारे अनुरोध के परिणामों को प्रदर्शित करने के लिए बनी हुई है। मैं आपको याद दिला दूं कि हमारी "मान तालिका" विशेषता "सारणीबद्ध दस्तावेज़" प्रकार की है, क्योंकि अन्यथा हम उपयोगकर्ता मोड में अपने परिणाम नहीं देखेंगे। या तो एक सारणीबद्ध दस्तावेज़ या एक लेआउट हमेशा उपयोगकर्ता को सारणीबद्ध डेटा प्रदर्शित करने में लगा रहता है, मैं वास्तव में मूल्यों की एक तालिका के माध्यम से डेटा प्रदर्शित करने में सक्षम होना चाहूंगा - क्योंकि इसका उपयोग करना बहुत आसान और परिचित है, लेकिन, दुर्भाग्य से, मूल्यों की एक तालिका सिर्फ एक उपकरण है जिसे एक डेवलपर की आवश्यकता होती है, आप इसका उपयोग करके स्क्रीन पर डेटा प्रदर्शित नहीं कर सकते ...

आइए एक नज़र डालते हैं कि एक सारणीबद्ध दस्तावेज़ क्या है - यह एक एक्सेल शीट की तरह है - आप केवल टेबल सेल की मदद से एक विशिष्ट सेल में एक रिकॉर्ड प्राप्त कर सकते हैं, यहाँ उन्हें एक क्षेत्र कहा जाता है, लेकिन हम स्वयं सीमा का चयन कर सकते हैं इस क्षेत्र के एक विशिष्ट सेल में:

इसलिए, हमने पता लगाया कि एक स्प्रेडशीट दस्तावेज़ क्या है, जो स्वयं के लिए निर्धारित है कि हमें इस स्प्रैडशीट दस्तावेज़ के एक विशिष्ट सेल में अपने अनुरोध से डेटा निर्धारित करने की आवश्यकता है। लेकिन आइए सोचते हैं: "क्वेरी रिसेट" क्या है जो कंस्ट्रक्टर ने हमारे लिए इतनी जल्दी उत्पन्न किया? सहायता खोलना - क्वेरी परिणाम एक तालिका है जिसमें संबंधित गुण होते हैं! अंजीर देखें।

और अगर हम अब अभिव्यक्ति के बाद लिखते हैं QueryResult = Query.Run (); (कन्स्ट्रक्टर द्वारा बनाया गया) यहाँ संग्रह के लिए एक सरल लूप है:

QueryResult.Columns से प्रत्येक ColumnName के लिए लूप रिपोर्ट (ColumnName.Name); चक्र का अंत;

इस चक्र के बाद, अभी के लिए, कंस्ट्रक्टर द्वारा स्वचालित रूप से निर्मित सभी अभिव्यक्तियों को डॉक करें। और एक मोटे ग्राहक के तहत 1C: Enterprise8 शुरू करें। कोई भी सरल अनुरोध बनाएं (आप क्वेरी डिज़ाइनर का उपयोग कर सकते हैं - यह पहले से ही हमारे लिए काम करता है) और "अनुरोध निष्पादित करें" बटन पर क्लिक करें:

फिर आप संदेशों में विंडो के निचले भाग में देखेंगे - कि QueryResult तालिका उन फ़ील्ड के नामों को संग्रहीत करती है जिन्हें हमने एक साधारण क्वेरी बनाकर अभी-अभी चुना है।

अब एक स्प्रेडशीट दस्तावेज़ में हमारी पीड़ा के क्षेत्रों के इन नामों को प्रदर्शित करते हैं:

QueryResult.Colons लूप सेल से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (1, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = ColumnName.Name; चक्र का अंत;

क्वेरी डेटा द्वारा विवरण प्रदर्शित करने के लिए, हम कंस्ट्रक्टर द्वारा स्वचालित रूप से बनाए गए अभिव्यक्तियों को अलग कर देंगे और क्वेरी के "SelectDetailedRecords" पुनरावृत्ति लूप के अंदर, ठीक उसी चक्र को सम्मिलित करें जिसका उपयोग हम कॉलम के नाम प्रदर्शित करने के लिए करते थे, केवल अब हमें "QueryResult" तालिका के डेटा को नहीं, बल्कि चयन के डेटा को सेल टेक्स्ट में स्थानांतरित करने की आवश्यकता है, आइए मदद में देखें कि आप क्वेरी के विस्तृत चयन फ़ील्ड को कैसे संदर्भित कर सकते हैं:

FetchDetailedRecords = QueryResult.Select (); जबकि FetchDetailRecords.Next () लूप // पहली पंक्ति में हमारे पास पहले से ही टेबल कॉलम के नाम हैं, इसलिए हम पहली पंक्ति के नीचे डेटा लोड करते हैंRowNumberDoc = Object.QueryTable.TableTable + 1; QueryResult.Columns Loop Cell से प्रत्येक ColumnName के लिए = Object.QueryTable.Area (DocRowNumber, QueryResult.Columns.Index (ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; चक्र का अंत; चक्र का अंत;

सब कुछ, हम जांच कर सकते हैं, एक मोटे ग्राहक के तहत उद्यम को लोड कर सकते हैं, मापदंडों के बिना एक साधारण क्वेरी दर्ज कर सकते हैं, "क्वेरी निष्पादित करें" बटन पर क्लिक करें, अंजीर देखें:

हुर्रे, सब कुछ काम करता है !!!

यह बहुत सुविधाजनक है, जब हमारे क्वेरी कंसोल को खोलते / बंद करते हैं - फिर से "क्वेरीटेक्स्ट" फ़ील्ड में, हमारा क्वेरी टेक्स्ट लिखा जाता है, जिसके साथ हमने कंसोल को बंद करने से पहले काम किया था। ऐसा करने के लिए, आपको बस फॉर्म प्रॉपर्टी = ऑटोसेव को सक्षम करने की आवश्यकता है, अंजीर देखें:

बस, हमारा कंसोल काम कर रहा है। ताकि हम उनमें निर्दिष्ट मापदंडों के साथ अधिक जटिल प्रश्न लिख सकें, हमें एक और बटन "FindParameters" बनाने की आवश्यकता है, साथ ही "ExecuteRequest" बटन का कोड - "FindParameters" बटन का कोड क्लाइंट पर निष्पादित किया जाएगा। और सर्वर पर। इसके अलावा, सर्वर प्रक्रिया में, हम उसी तरह "RequestText" विंडो से इसे पास किए गए टेक्स्ट के साथ एक अनुरोध चलाते हैं, "Request.FindParameters ()" अभिव्यक्ति का उपयोग करके हम पारित पैरामीटर ढूंढते हैं और बस उन्हें एक लूप में दर्ज करते हैं "RequestParameters" फ़ॉर्म के सारणीबद्ध खंड में। पैरामीटर की भरी हुई तालिका से "ExecuteRequest" प्रक्रिया में उन्हें स्थानांतरित करना न भूलें।

आप हमारे कंसोल में कुछ बटन भी जोड़ सकते हैं जो उपयोगकर्ता मोड में पैरामीटर विंडो और अनुरोध टेक्स्ट विंडो को साफ़ कर देंगे।

हमारा क्वेरी कंसोल उपयोग के लिए तैयार है, मैं आपको क्वेरी कंसोल जैसे सरल और शक्तिशाली टूल का उपयोग करके सफल रचनात्मक समाधान की कामना करता हूं!

यह प्रसंस्करण 1c8.3 प्लेटफॉर्म (प्रबंधित प्रपत्र) पर लिखा गया है और एक मोटे ग्राहक के तहत चलता है। इसे 1c8.2 प्लेटफॉर्म पर सामान्य रूपों और नियंत्रित दोनों रूपों में भी लिखा जा सकता है।

डाउनलोड में हमारे द्वारा अभी बनाए गए क्वेरी कंसोल का एक नमूना है।

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

क्वेरी कंसोल अपग्रेड:

1) अब एक अंतर्निहित क्वेरी बिल्डर के साथ हमारा स्व-निर्मित क्वेरी कंसोल किसी भी क्लाइंट के तहत चलेगा: नियमित और प्रबंधित रूपों के एक मोटे क्लाइंट के तहत और एक पतले और वेब क्लाइंट के तहत।

पीएस बिल्ट-इन क्वेरी बिल्डर का रूप और रूप अलग है - इस पर निर्भर करता है कि हमने किस क्लाइंट के तहत अपना कंसोल लॉन्च किया है। (मैं व्यक्तिगत रूप से एक मोटे क्लाइंट के तहत क्वेरी बिल्डर फॉर्म को पसंद करता हूं)

& OnClient प्रक्रिया QueryConstructor (कमांड) // मानक QueryConstructor को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है # यदि FatClientManagedApplication या ThickClientNormalApplication तब कंस्ट्रक्टर = नया QueryConstructor; यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; अगर Constructor.OpenModal () = True तो Object.InquiryText = Constructor.Text; अगर अंत; // # अन्यथा // सूचित करें ("क्वेरी बिल्डर को कॉल करना केवल एक मोटे क्लाइंट के तहत संभव है"); // वापसी; // # EndIf # अन्यथा रिपोर्ट करें ("आप एक पतले क्लाइंट के तहत क्वेरी बिल्डर चला रहे हैं - यह अपने रूप और प्रदर्शन की गति में थोड़ा भिन्न है!"); कंस्ट्रक्टर = नया क्वेरी कंस्ट्रक्टर (); यदि नहीं EmptyString (Object.RequestText) तो Constructor.Text = Object.RequestText; अगर अंत; कंस्ट्रक्टर अलर्ट = नया अलर्ट डिस्क्रिप्शन ("निष्पादन के बाद कंस्ट्रक्टर क्लोज्ड", यह फॉर्म); कंस्ट्रक्टर। शो (कंस्ट्रक्टर अलर्ट); #EndIf EndProcedure और OnClient प्रक्रिया ExecuteAfterClosingConstructor (परिणाम, ConstructorParameters) निर्यात // परिणाम = पाठ यदि कंसोल को ओके पर क्लिक करके बंद किया गया था Object.QueryText = ShortLP (परिणाम); // काम करता है !!! प्रक्रिया का अंत

2) हमारे सरल क्वेरी कंसोल में पैरामीटर को पास की गई एक अस्थायी तालिका के साथ जटिल प्रश्नों को दर्ज करने की क्षमता जोड़ी गई !!! तंत्र बहुत सरल और सुरुचिपूर्ण निकला - एक्सएमएल-कोड के उपयोग के बिना, जैसा कि पेशेवर कंसोल में किया जाता है।

कोड स्वयं और अस्थायी तालिकाओं के मापदंडों के लिए स्थानांतरण तंत्र के लिए प्रक्रियाएं दूसरी संलग्न फ़ाइल में पाई जा सकती हैं। मैंने मापदंडों में अस्थायी तालिकाओं का अपना संस्करण कैसे विकसित करना शुरू किया, इस लिंक पर पाया जा सकता है https://forum.infostart.ru/forum9/topic183700/

अब एक जटिल क्वेरी के साथ कंसोल का उपयोग कैसे करें, जब एक अस्थायी तालिका को उसके मापदंडों पर पास किया जाता है। उदाहरण के लिए, आप इस अनुरोध का कोड यहां ले सकते हैं;

बाहरी डेटा चुनें। उत्पाद, बाहरी डेटा। मात्रा बाहरी डेटा से बाहरी डेटा और बाहरी डेटा के रूप में बाहरी डेटा डालें; ///////////////////////////////////////////// ///////////////////////////////////////// का चयन करें, बाहरी डेटा चुनें। फ़ील्ड 1 के रूप में, शून्य है (शेष आइटम शेष राशि। मात्रा शेष, 0) - बाहरी डेटा। बाहरी डेटा से शेष बाहरी डेटा के रूप में शेष मात्रा में शामिल हों संचय रजिस्टर। अवशेष आइटम। अवशेष (और दिनांक, आइटम में (बाहरी स्टॉक का चयन करें) बाहरी आइटम उत्पाद

उपरोक्त क्वेरी कोड के समान - आप अपने डेटा ऑब्जेक्ट को ध्यान में रखते हुए अपनी जटिल क्वेरी बना सकते हैं।

इसलिए, क्वेरी डिज़ाइनर में, हमने डिज़ाइनर को बंद करते हुए उपरोक्त क्वेरी बनाई - क्वेरी टेक्स्ट हमारे "क्वेरीटेक्स्ट" कंसोल फ़ील्ड पर जाएगा, "FindParameters" बटन पर क्लिक करें, हम देखते हैं कि लाइन = "ExternalData", ValueType = "ValuesTable" पैरामीटर तालिका में दिखाई दिया, अंजीर देखें।

पैरामीटर की इस तालिका में - दिनांक पैरामीटर दर्ज करें, उदाहरण के लिए, आज की तारीख, फिर "बाहरी डेटा" अस्थायी तालिका के हमारे पैरामीटर को संपादित करने का प्रयास करने के लिए क्लिक करें, तीन बिंदुओं के लिए "मान तालिका" के साथ फ़ील्ड में क्लिक करें - एक विकल्प प्रकार दिखाई देंगे, लाइन पर क्लिक करें, हमारा तंत्र हमें फॉर्म पर एक पेज देता है, जहां हमें मैन्युअल रूप से इस अस्थायी तालिका को दर्ज करने की आवश्यकता होती है।

यहां, ध्यान दें कि इस मामले में, "टाइमटेबल्स" पृष्ठ पर नीचे "पैरामीटर में अस्थायी तालिका नाम" फ़ील्ड में, हमारी अस्थायी तालिका का नाम दिखाई देगा (इसे पैरामीटर तालिका से कॉपी किया गया है)।

अब तक, "टाइमटेबल्स" पेज पर, हम केवल एक खाली टेबल देखते हैं - यह हमारी भविष्य की अस्थायी तालिका की टाइप टेबल है। "जोड़ें" बटन का उपयोग करके, चर का नाम और भविष्य की तालिका का प्रकार जोड़ें। सावधान रहें - नाम और प्रकार हमारे द्वारा और बाहरी डेटा के अनुरोध में निर्दिष्ट से मेल खाना चाहिए:

अब हम "अपडेट टेम्परेरीटेबल" बटन दबाते हैं - और हमारे पास यहां एक दूसरी टेबल होगी - हम अस्थायी टेबल के डेटा को "जोड़ें" बटन के माध्यम से सीधे भरेंगे।

सब कुछ, हम खुद को दोबारा जांच सकते हैं कि क्या हमने प्रसंस्करण के पहले पृष्ठ पर पैरामीटर तालिका में क्वेरी पैरामीटर के आदिम डेटा दर्ज किया है, और "अनुरोध निष्पादित करें" बटन दबाएं - सब कुछ मायने रखता है, तदनुसार चयन करता है, पर प्रतिबंध के साथ हमारी अस्थायी तालिका के पैरामीटर में प्रेषित डेटा

ps यदि आपने विशेषताओं के नाम और उनके प्रकार (पहली तालिका में) टाइप करते समय कोई गलती की है - बस कंसोल को बंद करें और इसे फिर से खोलें - अस्थायी डेटा तालिका मिटा दी जाएगी - और प्रकार तालिका को फिर से संपादित किया जा सकता है और एक नया डेटा तालिका फिर से बनाई गई।

बस इतना ही, हम अपने हाथों से एक बहुत शक्तिशाली काम करने वाला उपकरण बना सकते हैं, इसके अलावा, हमारा कंसोल अभी भी पेशेवर लोगों की तुलना में बहुत फुर्तीला है - और यह डेवलपर्स के लिए एक बहुत बड़ा प्लस है! और, ज़ाहिर है, अब हमारा कंसोल किसी भी क्लाइंट के तहत काम करता है! आपके रचनात्मक विकास के लिए शुभकामनाएँ !!!

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

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

मैं अपने क्वेरी कंसोल के साथ लगातार काम करता हूं, और हाल ही में मुझे एक बहुत ही रोचक क्वेरी मिली जिसमें अस्थायी टेबल पहले अनुरोध पैकेट में नहीं थे, लेकिन अगले में - और यहां मेरा कंसोल थोड़ा मजाक हो गया ... उसे बनाना पड़ा एक और उन्नयन।

इसलिए, क्वेरी में अस्थायी तालिकाओं का प्रबंधक हमेशा यह नहीं समझता है कि वे उसके साथ काम कर रहे हैं)) इसलिए, आपको अस्थायी तालिकाओं के इस प्रबंधक को स्पष्ट रूप से सेट करने की आवश्यकता है:

& AtServer प्रक्रिया ExecuteRequestAtServer () // अपग्रेड 2-अस्थायी टेबल्स प्रबंधक की स्पष्ट परिभाषा! प्रबंधकबीटी = अस्थायी तालिकाओं का नया प्रबंधक; अनुरोध = नया अनुरोध; // अपग्रेड 2-अस्थायी टेबल्स प्रबंधक की स्पष्ट परिभाषा! Request.TemporaryTablesManager = VTManager; Request.Text = Object.Request Text;

कंसोल का यह संस्करण तीसरे डाउनलोड में है।

1सी एंटरप्राइज 8 के सबसे शक्तिशाली उपकरणों में से एक, बिना किसी संदेह के, क्वेरी बिल्डर है। कंस्ट्रक्टर 1C भाषा में प्रश्नों के साथ काम करने के लिए एक दृश्य उपकरण है। लेकिन कंस्ट्रक्टर की एक बड़ी खामी है - यह प्रश्नों का परिणाम नहीं दिखाता है। यह नुकसानविशेष रूप से 1सी: एंटरप्राइज 8.3 और 8.2 प्लेटफॉर्म पर लागू समाधानों के नौसिखिए डेवलपर्स द्वारा महसूस किया गया।

इसके अलावा, यहां तक ​​​​कि अनुभवी 1 सी प्रोग्रामर को अक्सर ऐसी स्थिति का सामना करना पड़ता है जब विभिन्न वर्गों में इन्फोबेस डेटा का "एक बार" विश्लेषण करना आवश्यक होता है, लेकिन मैं इसके लिए एक पूर्ण रिपोर्ट नहीं लिखना चाहता हूं ऐसा "एक बार का निष्कर्ष"।

इन सभी और कई अन्य मामलों के लिए, हम आपको बाहरी प्रसंस्करण की पेशकश करते हुए प्रसन्न हैं 1C 8.3 और 1C 8.2 . के परिणामों को संसाधित करने की क्षमता वाला क्वेरी कंसोल!


1C 8.3 और 1C 8.2 . के लिए क्वेरी कंसोल की मुख्य विशेषताएं:

यूनिवर्सल प्रोसेसिंग, प्लेटफॉर्म 1सी के किसी भी कॉन्फ़िगरेशन पर चलता है: एंटरप्राइज 8.1 - 8.3;
- 1C में चलता है: एंटरप्राइज मोड;
- अनुरोध मैन्युअल रूप से लिखा जा सकता है, या आप क्वेरी कंस्ट्रक्टर को कॉल कर सकते हैं;
- क्वेरी निष्पादन का परिणाम दिखाता है;
- आप सीधे क्वेरी कंसोल में रिपोर्ट पैरामीटर निर्दिष्ट कर सकते हैं;
- अनुरोध फ़ाइलों को सहेजना और लोड करना जानता है।

क्वेरी कंसोल को प्रारंभ करने के लिए, आपको अपने कॉन्फ़िगरेशन को 1C: एंटरप्राइज़ मोड में चलाने की आवश्यकता है और डिस्क पर संग्रहीत किसी भी अन्य फ़ाइल की तरह क्वेरी कंसोल के बाहरी प्रसंस्करण को खोलना होगा। इस तरह की प्रोसेसिंग ठीक उसी तरह काम करेगी जैसे कि यह एप्लिकेशन सॉल्यूशन का हिस्सा हो।


बाहरी प्रसंस्करण क्वेरी कंसोल परिचित इंटरफ़ेस को दोहराता है और अधिकांश कार्यक्षमता 1सी: एंटरप्राइज 8.3 और 8.2 के प्रश्नों को तैयार करने के लिए मानक टूलकिट। यह आपको प्रश्नों, बैच प्रश्नों और अस्थायी तालिकाओं के परिणामों को पुनः प्राप्त करने की भी अनुमति देता है।

क्वेरी कंसोल को क्लाइंट-सर्वर और सिस्टम ऑपरेशन के फ़ाइल-सर्वर मोड दोनों में, मोटे और पतले क्लाइंट के तहत निष्पादित किया जाता है! क्वेरी कंसोल में एक एकीकृत मानक क्वेरी कंस्ट्रक्टर है जिसे क्वेरी टेक्स्ट फ़ील्ड में संदर्भ मेनू के माध्यम से बुलाया जा सकता है।

जरूरी!क्वेरी कंस्ट्रक्टर पतले क्लाइंट में काम नहीं करता है, कंस्ट्रक्टर खोलने के लिए यह मेनू आइटम अनुपलब्ध है। मोटे क्लाइंट में, क्वेरी बिल्डर उपलब्ध है!


पतले क्लाइंट में, हम केवल हाथ से अनुरोध लिख सकते हैं, अन्य सभी फ़ंक्शन बिना किसी बदलाव के काम करते हैं।

क्वेरी टेक्स्ट को "मैन्युअल रूप से" लिखने की क्षमता कभी भी "अनावश्यक" नहीं रही है, लेकिन क्वेरी डिज़ाइनर का उपयोग करना अधिक सुविधाजनक है।

टिप्पणी।

दुर्भाग्य से, एक प्रबंधित एप्लिकेशन में, आप AcquaintanceWith क्वेरी प्रोसेसिंग में क्वेरी कंस्ट्रक्टर का उपयोग नहीं कर सकते हैं। आप इस प्रसंस्करण में इसका उपयोग कर सकते हैं सामान्य स्थिति, लेकिन हम ऐसा नहीं करेंगे।

आइए QueryConstructor प्रोसेसिंग बनाएं और इसे ReportsAndProcessing सबसिस्टम में परिभाषित करें।

आइए एक प्रोसेसिंग फॉर्म बनाएं और "टेबुलर डॉक्यूमेंट" प्रकार के "टैबडॉक" फॉर्म एट्रिब्यूट को जोड़ें, साथ ही "एक्सक्यूट रिक्वेस्ट" कमांड को "एक्सक्यूट रिक्वेस्ट" एक्शन के साथ जोड़ें। इसके बाद, उन्हें फॉर्म पर खींचें।

फॉर्म मॉड्यूल में, कमांड को काम करने के लिए, हम एक प्रक्रिया लिखते हैं:

ऑन क्लाइंट

प्रक्रिया निष्पादन अनुरोध (कमांड)

रनरक्वेस्ट सर्वर ();

प्रक्रिया का अंत

सर्वर पर

प्रक्रिया का अंत

हम सर्वर पर बुलाई गई प्रक्रिया के अंदर हो जाते हैं और संदर्भ मेनू से हम "परिणाम को संसाधित करने के साथ क्वेरी कंस्ट्रक्टर" कहते हैं (चित्र 2.65)।

चित्र 2.65 परिणाम प्रसंस्करण के साथ क्वेरी कंस्ट्रक्टर

प्रसंस्करण प्रकार "स्प्रेडशीट दस्तावेज़ में आउटपुट" सेट करें और "अगला" बटन या "तालिका और फ़ील्ड" टैब पर क्लिक करें।

डिज़ाइनर के "टेबल्स एंड फील्ड्स" टैब पर, आप सिस्टम में वर्तमान में मौजूद टेबल्स ("डेटाबेस" शीर्षक वाला बायां भाग) (चित्र 2.66) देख सकते हैं।

चित्र 2.67 क्वेरी कंस्ट्रक्टर

टेबल, डेटा जिसमें से क्वेरी द्वारा प्राप्त किया जाएगा, "टेबल्स" क्षेत्र में स्थानांतरित कर दिया जाता है, क्वेरी के लिए आवश्यक फ़ील्ड "फ़ील्ड" क्षेत्र में स्थानांतरित कर दिए जाते हैं। आइए इसे चित्र 2.68 की तरह करें।

चित्र 2.68 क्वेरी कंस्ट्रक्टर

यहां हमने डिफ़ॉल्ट दृश्य फ़ील्ड को हटा दिया है - "प्रस्तुति (माल रसीद उत्पाद। नामकरण)"

कंस्ट्रक्टर के साथ काम करने के किसी भी समय, आप प्राप्त अनुरोध टेक्स्ट को देख सकते हैं। इस कार्य को पूरा करने के लिए, आपको डिज़ाइनर प्रपत्र के निचले बाएँ कोने में स्थित "अनुरोध" बटन पर क्लिक करना होगा (चित्र 2.69)।

आप "संपादित करें" बटन पर क्लिक करके अनुरोध टेक्स्ट को मैन्युअल रूप से संपादित कर सकते हैं।

अभ्यास। हम "ओके" बटन दबाते हैं और उपयोगकर्ता मोड में हमारे प्रसंस्करण की जांच करते हैं। यदि आप अनुरोध के निष्पादन के दौरान प्राप्त आंकड़ों का विश्लेषण करते हैं, तो आप नामकरण वस्तुओं की "पुनरावृत्ति" पा सकते हैं (यदि आप सफल नहीं हुए, तो आप किसी भी दस्तावेज़ "माल रसीद" को कॉपी और पोस्ट कर सकते हैं)।

हम QueryConstructor प्रसंस्करण में ExecuteRequestServer () प्रक्रिया पर लौटते हैं और संदर्भ मेनू से परिणाम प्रसंस्करण के साथ फिर से क्वेरी निर्माता को कॉल करते हैं।

यदि आपको क्वेरी परिणाम को "संक्षिप्त" करने की आवश्यकता है, तो आप इस उद्देश्य के लिए क्वेरी डिज़ाइनर के "ग्रुपिंग" टैब का उपयोग कर सकते हैं।

समूहों को परिभाषित करते समय, निम्नलिखित नियम का पालन करना आवश्यक है: सभी क्वेरी चयन फ़ील्ड को उन क्षेत्रों में विभाजित किया जाता है जिनके द्वारा समूहीकरण (तह) किया जाता है, नेस्टेड तालिकाओं के क्षेत्र (संक्षेप में फ़ील्ड जिनके द्वारा समूहीकरण किया जाता है) और में कुल कार्य... आइए समूहों को परिभाषित करें (चित्र 2.70)।

चित्र 2.70 क्वेरी कंस्ट्रक्टर

यदि अनुरोध द्वारा प्राप्त डेटा को किसी शर्त के अनुसार चुना जाना चाहिए, तो इस मामले में "शर्तें" टैब का उपयोग करना आवश्यक हो सकता है। आइए माल की आवक का चयन करें मात्रा = 10 (चित्र 2.71)।

चित्र 2.71 क्वेरी कंस्ट्रक्टर स्थिति।

इस तथ्य पर ध्यान दें कि यदि स्थिति को उसी तरह परिभाषित किया गया है जैसा कि आकृति में है, तो अनुरोध निष्पादित नहीं किया जाएगा।

स्थिति को ठीक करने के दो तरीके हैं:

    "पी ..." ध्वज की जांच करके स्थिति को फिर से परिभाषित करना;

    अनुरोध के पाठ को बदलने की क्षमता का लाभ उठाते हुए ("अनुरोध संपादित करें" बटन पर क्लिक करके प्राप्त किया गया)।

मैन्युअल परिवर्तन स्वयं इस तथ्य में शामिल होगा कि "10" संख्या के सामने "&" प्रतीक को हटाना आवश्यक है। अनुरोध के पाठ में यह प्रतीक अनुरोध के मापदंडों को परिभाषित करता है, जिसमें भविष्य में (लेकिन अनुरोध के निष्पादन से पहले) कोई भी मान लिखा जाना चाहिए। "एडिट रिक्वेस्ट" बटन पर क्लिक करें और एडिट करें (चित्र 2.72)।

चित्र 2.73 क्वेरी संपादित करना

"अतिरिक्त" टैब पर, आप कई फ़्लैग (क्वेरी भाषा के "चयन करें" कीवर्ड से संबंधित) को चिह्नित कर सकते हैं और क्वेरी को बदलने के लिए इच्छित तालिकाओं की संरचना निर्धारित कर सकते हैं (चित्र 2.74)।

चित्र 2.74 अतिरिक्त क्वेरी कार्य

"यूनियन/उपनाम" टैब पर, आप "उपनाम" निर्दिष्ट करके फ़ील्ड नाम बदल सकते हैं, लेकिन हम ऐसा नहीं करेंगे।

"आदेश" टैब पर, आप क्वेरी परिणाम (चित्र 2.75) में अभिलेखों के छँटाई क्रम को परिभाषित कर सकते हैं।

चित्र 2.75 अभिलेखों के क्रम को क्रमबद्ध करें

"ऑटो-ऑर्डरिंग" ध्वज पर ध्यान दें, इसका उपयोग संदर्भ प्रकार फ़ील्ड द्वारा ऑर्डर करने के लिए किया जा सकता है।

"योग" अनुभाग को परिभाषित करते समय, क्वेरी के परिणामस्वरूप "अतिरिक्त" योग के लिए तैयार रहें। इन अभिलेखों के साथ, क्वेरी परिणाम श्रेणीबद्ध हो जाता है (चित्र 2.76)।

चित्र 2.76 क्वेरी कंस्ट्रक्टर के परिणाम।

कई प्रकार के योग निर्दिष्ट किए जा सकते हैं:

    तत्व (क्वेरी परिणाम चयन में कुल योग और विस्तृत रिकॉर्ड हैं);

    पदानुक्रम (क्वेरी परिणाम के चयन में, सामान्य स्थिति में, पदानुक्रम द्वारा कुल रिकॉर्ड होते हैं, समूह द्वारा कुल रिकॉर्ड, विस्तृत रिकॉर्ड);

    केवल पदानुक्रम (क्वेरी परिणाम के चयन में, सामान्य स्थिति में, पदानुक्रम के लिए योग होते हैं)।

कंस्ट्रक्टर के "ओके" बटन पर क्लिक करने के बाद, "लेआउट" उत्पन्न होगा और फॉर्म मॉड्यूल में ExecuteRequestServer () प्रक्रिया के लिए कोड लिखा जाएगा:

सर्वर पर

प्रक्रिया ExecuteRequestServer ()

// ((REQUEST_CONSTRUCTOR_With_RESULT_PROCESSING

// यह टुकड़ा कंस्ट्रक्टर द्वारा बनाया गया था।

// यदि आप कंस्ट्रक्टर का पुन: उपयोग करते हैं, तो मैन्युअल रूप से किए गए परिवर्तन खो जाएंगे !!!

लेआउट = प्रसंस्करण। RequestConstructor। लेआउट प्राप्त करें ("लेआउट");

अनुरोध = नया अनुरोध;

अनुरोध। पाठ =

| माल रसीद माल। नामकरण के रूप में नामकरण,

| AMOUNT (गुड्स रसीद गुड्स। मात्रा) मात्रा के रूप में,

| राशि के रूप में AMOUNT (सामान रसीद माल.राशि)

| दस्तावेज़।आने वाले सामान।माल

| कैसे आइटम उत्पाद

| माल आगमन माल.मात्रा> १

| लोड बाय

| माल का आगमनउत्पाद।नामकरण

|आदेश द्वारा

| मात्रा,

| हानि राशि

| योग (मात्रा),

| योग (राशि)

| नामकरण पदानुक्रम ";

परिणाम = क्वेरी। भागो ();

एरियाहेडर = लेआउट। गेटएरिया ("शीर्षक");

एरियाफूटर = लेआउट। गेटएरिया ("फुटर");

एरियाटेबलहेड = लेआउट। गेटएरिया ("टेबलहेड");

टेबलफुट एरिया = लेआउट। गेटएरिया ("टेबल फूटर");

ScopeNomenclatureHierarchy = Layout.GetScope ("नामकरण पदानुक्रम");

ScopeNomenclature = Layout.GetScope ("नामकरण");

TabDoc.Clear ();

TabDoc.Display (स्कोपहेडर);

TabDoc.Display (ScopeTablesHap);

TabDoc.StartAutoGroupLines ();

SelectNomenclature = Result.Choose (QueryResult Bypass.On Groupings);

जबकि नमूना नामकरण। अगला () चक्र

यदि SelectionNomenclature.RecordType () = QueryRecordType.TotalBy पदानुक्रम तो

दायरा = दायरा नामकरण पदानुक्रम;

दायरा = दायरा नामकरण;

अगर अंत;

क्षेत्र। पैरामीटर। भरें (चयन नामकरण);

TabDoc.Display (स्कोप, SelectionNomenclature.Level ());

चक्र का अंत;

TabDoc.FinishAutoGroupLines ();

TabDoc.Display (स्कोपटेबल साइट);

TabDok.Display (एरिया बेसमेंट);

//)) REQUEST_CONSTRUCTOR_With_RESULT_PROCESSING



संबंधित आलेख: