क्वेरी परिणाम मर्ज करें। क्वेरी परिणामों को संयोजित करें प्रश्नों को एक 1s में कैसे संयोजित करें

डेवलपर्स के लिए क्वेरी भाषा 1C 8.3 के मूलभूत तंत्रों में से एक है। प्रश्नों की सहायता से, आप डेटाबेस में संग्रहीत किसी भी डेटा को शीघ्रता से प्राप्त कर सकते हैं। इसका सिंटैक्स SQL ​​के समान है, लेकिन इसमें कुछ अंतर हैं।

SQL पर 1C 8.3 (8.2) क्वेरी भाषा के मुख्य लाभ:

  • dereferencing संदर्भ फ़ील्ड (ऑब्जेक्ट विशेषताओं के लिए एक या अधिक बिंदुओं को मोड़ना);
  • परिणामों के साथ काम करना बहुत सुविधाजनक है;
  • वर्चुअल टेबल बनाने की क्षमता;
  • अनुरोध अंग्रेजी और रूसी दोनों में लिखा जा सकता है;
  • गतिरोध से बचने के लिए डेटा को ब्लॉक करने की क्षमता।

1C में क्वेरी भाषा के नुकसान:

  • SQL के विपरीत, 1C प्रश्नों में आपको डेटा बदलने की अनुमति नहीं है;
  • संग्रहित प्रक्रियाओं की कमी;
  • स्ट्रिंग को संख्या में बदलने की असंभवता।

1C क्वेरी भाषा के बुनियादी निर्माणों पर हमारे मिनी ट्यूटोरियल पर विचार करें।

इस तथ्य के कारण कि 1 सी में अनुरोध आपको केवल डेटा प्राप्त करने की अनुमति देते हैं, किसी भी अनुरोध को "चयन" शब्द से शुरू होना चाहिए। इस कमांड के बाद, जिन क्षेत्रों से आप डेटा प्राप्त करना चाहते हैं, उन्हें इंगित किया जाता है। यदि आप "*" निर्दिष्ट करते हैं, तो सभी उपलब्ध फ़ील्ड का चयन किया जाएगा। वह स्थान जहाँ से डेटा का चयन किया जाएगा (दस्तावेज़, रजिस्टर, निर्देशिका, आदि) "FROM" शब्द के बाद इंगित किया गया है।

नीचे दिए गए उदाहरण में, संपूर्ण नामकरण के नाम "नामपद्धति" संदर्भ पुस्तक से चुने गए हैं। "HOW" शब्द के बाद, तालिकाओं और फ़ील्ड के लिए उपनाम (नाम) इंगित किए जाते हैं।

चुनना
नामकरण। नाम के रूप में नाम नामकरण
से
निर्देशिका। नामकरण के रूप में नामकरण

"चयन करें" कमांड के आगे, आप कीवर्ड निर्दिष्ट कर सकते हैं:

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

इन खोजशब्दों का एक साथ या अलग-अलग उपयोग किया जा सकता है।

बदलाव के लिए

यह क्लॉज टकराव से बचने के लिए डेटा को लॉक कर देता है। लेन-देन के अंत तक लॉक किए गए डेटा को दूसरे कनेक्शन से नहीं पढ़ा जाएगा। इस खंड में, आप उन विशिष्ट तालिकाओं को निर्दिष्ट कर सकते हैं जिन्हें आप लॉक करना चाहते हैं। नहीं तो सभी ब्लॉक हो जाएंगे। डिज़ाइन केवल स्वचालित ब्लॉकिंग मोड के लिए प्रासंगिक है।

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

चुनना
आपसी बस्तियां। कर्मचारी,
म्युचुअल बस्तियाँ राशि म्युचुअल बस्तियाँ शेष राशि
से
संचय रजिस्टर। कर्मचारियों के साथ आपसी समझौता। पारस्परिक निपटान के रूप में शेष राशि
बदलाव के लिए

कहाँ

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

निम्नलिखित एक विशिष्ट स्थिति वाले संपर्क व्यक्तियों को प्राप्त करने के अनुरोध का एक उदाहरण है। चयन पैरामीटर का प्रारूप निम्न है: &ParameterName (पैरामीटर नाम मनमाना है)।

चयन (मामला)

निर्माण आपको अनुरोध निकाय में सीधे शर्तों को निर्दिष्ट करने की अनुमति देता है।

नीचे दिए गए उदाहरण में, "AdditionalField" में इस आधार पर टेक्स्ट होगा कि दस्तावेज़ पोस्ट किया गया है या नहीं:

चुनना
प्रवेश टी एंड यू लिंक,
पसंद
कब
फिर "दस्तावेज़ पोस्ट किया गया!"
अन्यथा "दस्तावेज़ पोस्ट नहीं किया गया..."
अतिरिक्त क्षेत्र के रूप में समाप्त करें
से
दस्तावेज़। रसीद टी एंड सी के रूप में गुड्स सर्विसेज की रसीद

जोड़ना

एक निश्चित लिंक स्थिति द्वारा लिंक दो तालिकाओं को जोड़ता है।

बाएँ / दाएँ शामिल हों

LEFT जॉइन का सार यह है कि पहली निर्दिष्ट तालिका को पूरी तरह से लिया जाता है और दूसरा कनेक्शन की स्थिति से जुड़ा होता है। यदि दूसरी तालिका में पहली तालिका से संबंधित कोई रिकॉर्ड नहीं है, तो NULL को उनके मान के रूप में प्रतिस्थापित किया जाता है। सीधे शब्दों में कहें, मुख्य तालिका पहली निर्दिष्ट तालिका है और दूसरी तालिका का डेटा (यदि कोई हो) पहले से ही इसके डेटा के लिए प्रतिस्थापित किया गया है।

उदाहरण के लिए, आपको "वस्तुओं और सेवाओं की प्राप्ति" दस्तावेजों से आइटम आइटम प्राप्त करने की आवश्यकता है और सूचना रजिस्टर "आइटम की कीमतें" से कीमतें। इस स्थिति में, यदि किसी स्थिति का मूल्य नहीं मिलता है, तो इसके स्थान पर NULL को स्थानापन्न करें। दस्तावेज़ से सभी वस्तुओं का चयन किया जाएगा चाहे उनकी कीमत हो या न हो।

चुनना
टी एंड यू नामकरण की प्राप्ति,
कीमतें। कीमत
से
दस्तावेज़। गुड्स सर्विसेज की रसीद। रसीद टी एंड सी के रूप में माल
आंतरिक रूप से जुड़ा
क्यू एंड ए की प्राप्ति पर। नामकरण = मूल्य। नामकरण

राइट में, सब कुछ ठीक विपरीत है।

पूर्ण संबंध

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

पिछले उदाहरण में पूर्ण जुड़ाव का उपयोग करते समय, माल और सेवा रसीद दस्तावेज़ से सभी आइटम आइटम और आइटम मूल्य रजिस्टर से सभी नवीनतम कीमतों का चयन किया जाएगा। पहली और दूसरी तालिका दोनों में नहीं मिले रिकॉर्ड के मान NULL होंगे।

आंतरिक रूप से जुड़ा

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

द्वारा समूह बनाएं

1C प्रश्नों में समूहीकरण आपको एक निश्चित सामान्य विशेषता (समूहीकरण फ़ील्ड) के अनुसार तालिका पंक्तियों (समूहीकरण फ़ील्ड) को संक्षिप्त करने की अनुमति देता है। ग्रुपिंग फ़ील्ड केवल समग्र कार्यों का उपयोग करके प्रदर्शित किए जा सकते हैं।

अगली क्वेरी का परिणाम आइटम प्रकारों की उनकी अधिकतम कीमतों के साथ एक सूची होगी।

चुनना
,
मैक्स (मूल्य। मूल्य) मूल्य के रूप में
से

द्वारा समूह बनाएं
मूल्य। नामकरण। प्रकार नामकरण

परिणाम

समूहीकरण के विपरीत, योग का उपयोग करते समय, सभी रिकॉर्ड प्रदर्शित होते हैं और उनमें कुल पंक्तियाँ पहले से ही जोड़ी जाती हैं। समूहीकरण केवल सामान्यीकृत रिकॉर्ड प्रदर्शित करता है।

परिणामों को पूरी तालिका के लिए सारांशित किया जा सकता है ("सामान्य" कीवर्ड का उपयोग करके), कई क्षेत्रों के लिए, एक पदानुक्रमित संरचना वाले क्षेत्रों के लिए (कीवर्ड "पदानुक्रम", "केवल पदानुक्रम")। संक्षेप करते समय, कुल कार्यों का उपयोग करना आवश्यक नहीं है।

समूहीकरण का उपयोग करते हुए उपरोक्त उदाहरण के समान उदाहरण पर विचार करें। इस मामले में, क्वेरी परिणाम न केवल समूहीकृत फ़ील्ड लौटाएगा, बल्कि विस्तृत रिकॉर्ड भी लौटाएगा।

चुनना
कीमतें। नामकरण। नामकरण का प्रकार नामकरण का प्रकार,
मूल्य। मूल्य के रूप में मूल्य
से
RegisterInformation.PricesNomenclature.SliceLast AS कीमतों
परिणाम
अधिकतम (कीमत)
द्वारा
नामकरण टाइप करें

रखना

यह ऑपरेटर WHERE ऑपरेटर के समान है, लेकिन इसका उपयोग केवल समग्र कार्यों के लिए किया जाता है। इस ऑपरेटर द्वारा उपयोग किए गए फ़ील्ड के अलावा अन्य फ़ील्ड को समूहीकृत किया जाना चाहिए। "WHERE" ऑपरेटर समग्र कार्यों के लिए लागू नहीं है।

नीचे दिए गए उदाहरण में, अधिकतम आइटम की कीमतों का चयन किया जाता है यदि वे 1000 से अधिक हों, आइटम प्रकार द्वारा समूहीकृत।

चुनना

मैक्स (मूल्य। मूल्य) मूल्य के रूप में
से
RegisterInformation.PricesNomenclature.SliceLast AS कीमतों
द्वारा समूह बनाएं
मूल्य। नामकरण। प्रकार नामकरण
रखना
मैक्स (कीमतें। मूल्य)> 1000

इसके अनुसार क्रमबद्ध करें

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

नाम से क्रमबद्ध कर्मचारियों की सूची प्राप्त करने का एक उदाहरण:

चुनना
कर्मचारी। नाम एएस नाम
से
निर्देशिका कर्मचारी एएस कर्मचारी
इसके अनुसार क्रमबद्ध करें
नाम
ऑटो ऑर्डर

1C क्वेरी भाषा के अन्य निर्माण

  • एकजुट हो जाओ- एक में दो प्रश्नों के परिणाम।
  • सभी को एकजुट करें- ज्वाइन के समान, लेकिन समान पंक्तियों को समूहीकृत किए बिना।
  • खाली टेबल- खाली नेस्टेड तालिका निर्दिष्ट करने के लिए प्रश्नों में शामिल होने पर कभी-कभी उपयोग किया जाता है।
  • रखना- जटिल 1C प्रश्नों को अनुकूलित करने के लिए एक अस्थायी तालिका बनाता है। ऐसे अनुरोधों को बैच अनुरोध कहा जाता है।

क्वेरी भाषा सुविधाएँ

  • सबस्ट्रिंगवर्णों की निर्दिष्ट संख्या द्वारा निर्दिष्ट स्थिति से स्ट्रिंग को छोटा करता है।
  • वर्ष...दूसराआपको संख्यात्मक प्रकार का चयनित मान प्राप्त करने की अनुमति देता है। इनपुट पैरामीटर एक तारीख है।
  • अवधि की शुरुआत और अवधि का अंततिथियों के साथ काम करते समय उपयोग किया जाता है। अवधि प्रकार (दिन, महीना, वर्ष, आदि) एक अतिरिक्त पैरामीटर के रूप में निर्दिष्ट किया गया है।
  • जोड़ेंआपको एक निश्चित प्रकार (सेकंड, मिनट, दिन, आदि) के निर्दिष्ट समय को जोड़ने या घटाने की अनुमति देता है।
  • दिनांक अंतरआउटपुट मान (दिन, वर्ष, माह, आदि) के प्रकार को निर्दिष्ट करते हुए, दो तिथियों के बीच अंतर निर्धारित करता है।
  • शून्य हैलापता मान को निर्दिष्ट अभिव्यक्ति के साथ बदल देता है।
  • प्रस्तुति और प्रस्तुति लिंकनिर्दिष्ट फ़ील्ड का स्ट्रिंग प्रतिनिधित्व प्राप्त करें। वे क्रमशः किसी भी मान और केवल संदर्भ मान के लिए उपयोग किए जाते हैं।
  • प्रकार, मूल्य प्रकारइनपुट पैरामीटर के प्रकार को निर्धारित करने के लिए उपयोग किया जाता है।
  • जोड़नाविशेषता मान प्रकार के लिए तार्किक तुलना ऑपरेटर है।
  • अभिव्यक्त करनामान को वांछित प्रकार में बदलने के लिए उपयोग किया जाता है।
  • दिनांक समयसंख्यात्मक मानों (वर्ष, महीना, दिन, घंटा, मिनट, सेकंड) से "दिनांक" प्रकार का मान प्राप्त करता है।
  • अर्थ 1 सी अनुरोध में, इसका उपयोग पूर्वनिर्धारित मूल्यों को निर्दिष्ट करने के लिए किया जाता है - निर्देशिका, गणना, विशेषताओं के प्रकार के लिए योजनाएं। उपयोग उदाहरण: " जहां कानूनी व्यक्ति = मूल्य (गणना। कानूनी व्यक्ति। व्यक्तिगत)«.

क्वेरी बिल्डर

1 सी के साथ प्रश्न बनाने के लिए एक बहुत ही सुविधाजनक अंतर्निहित तंत्र है - क्वेरी डिज़ाइनर। इसमें निम्नलिखित मुख्य टैब शामिल हैं:

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

अनुरोध के पाठ को निचले बाएँ कोने में "अनुरोध" बटन पर क्लिक करके देखा जा सकता है। इस रूप में, इसे मैन्युअल रूप से सुधारा या कॉपी किया जा सकता है।


क्वेरी कंसोल

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

आप क्वेरी कंसोल को ITS डिस्क पर या .

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

विलय करने के लिए वाक्य का प्रयोग किया जाता है एकजुट हो जाओ. वास्तव में, प्रश्नों के परिणाम संयुक्त होते हैं, अर्थात, प्रत्येक क्वेरी एक दूसरे से स्वतंत्र रूप से डेटा एकत्र करती है, और फिर इन परिणामों को एक में जोड़ दिया जाता है। और केवल अंतिम क्वेरी पर, अन्य ऑपरेशन किए जाते हैं, उदाहरण के लिए, ऑर्डर देना और योग की गणना करना।

प्रश्नों का संयोजन करते समय, परिणाम "लंबवत चिपके" होते हैं, अर्थात, पहली क्वेरी की परिणाम पंक्तियाँ पहले जाती हैं, फिर दूसरी।

आइए अभ्यास के लिए आगे बढ़ते हैं:
कोड 1सी बनाम 8.x चुनें
नामपद्धति,
मात्रा,
जोड़
से
दस्तावेज़। रसीद। माल

एकजुट हो जाओ

चुनना
नामपद्धति,
मात्रा,
जोड़
से
दस्तावेज़। रसीद। माल

इस क्वेरी का परिणाम निम्न है:
नामकरण मात्रा राशि
पेपर ए4 25 14 500
स्टिकर 500 एल 8 4 880
फ़ाइल पारदर्शी 5 4 100
कार्यालय सेट 8 8 840

नतीजतन, हमें दो टेबल मिलेंगे जो एक दूसरे से जुड़े होंगे। यह देखना मुश्किल है कि इनकमिंग डॉक्यूमेंट कहां खत्म होता है और आउटगोइंग डॉक्यूमेंट कहां से शुरू होता है। लेकिन हम इसे समझने के लिए कुछ करेंगे:
कोड 1सी बनाम 8.x
चुनना
नामपद्धति,
मात्रा के रूप में मात्राआवक,
कुल आय के रूप में राशि,
0 कितनी मात्रा में खपत,
0 एसयूएमएक्सपेंस
से
दस्तावेज़। रसीद। माल

एकजुट हो जाओ

चुनना
नामपद्धति,
0 एएस संख्याआवक,
0 एएस समइनकम,
मात्रा व्यय के रूप में मात्रा,
राशि के रूप में SumExpense
से
दस्तावेज़। उपभोज्य। माल

जैसा कि आप अनुरोध पाठ से देख सकते हैं, हमने मात्रा और राशि के लिए प्रत्येक दस्तावेज़ के लिए अलग-अलग उपनाम निर्धारित किए हैं। साथ ही, उन क्षेत्रों के स्थान पर जहां हमें राशि और मात्रा के मान प्राप्त होंगे, हम शून्य लगा देंगे। यह आवश्यक है ताकि राशि और राशि के खाली मूल्यों को शून्य से बदल दिया जाए।

पेपर ए4 25 14 500
स्टिकर 500 एल 8 4 880
फ़ाइल पारदर्शी 5 4 100
कार्यालय सेट 8 8 840
कार्यालय सेट 1 1 105
पारदर्शी फ़ाइल 1 820
स्टिकर 500 एल 1 610

अब हमें क्वेरी परिणाम से डुप्लिकेट तत्वों को निकालने की आवश्यकता है। हमारे पास दो प्रश्न हैं, और यदि हम डुप्लिकेट तत्वों को बाहर करने के लिए प्रत्येक को अलग-अलग संक्षिप्त करते हैं, तो हम सफल नहीं होंगे। इसलिए, हम क्वेरी को निम्न रूप में लाएंगे:
कोड 1सी बनाम 8.x
चुनना
नामपद्धति,
योग (आय की संख्या) आय की संख्या के रूप में,
SUM(SumIncome) AS SumIncome,
SUM(खर्चों की संख्या) एएस खर्चों की राशि,
SUM(SumExpense) AS SumExpense
से

(चुनना
नामपद्धति,
मात्रा के रूप में मात्राआवक,
कुल आय के रूप में राशि,
0 कितनी मात्रा में खपत,
0 एसयूएमएक्सपेंस
से
दस्तावेज़। रसीद। माल

एकजुट हो जाओ

चुनना
नामपद्धति,
0 एएस संख्याआवक,
0 एएस समइनकम,
मात्रा व्यय के रूप में मात्रा,
राशि के रूप में SumExpense
से
Document.Consumable.Products) AS NestedRequest

नामकरण द्वारा समूह

इसलिए, हम देखते हैं कि हमारी पूरी क्वेरी कोष्ठक में संलग्न है और इसका नाम NestedQuery रखा गया है। ऐसा इसलिए किया जाता है ताकि हम दोनों उपश्रेणियों के अभिलेखों को समूहीकृत कर सकें और डुप्लिकेट तत्वों को समाप्त कर सकें। ऐसे निर्माण को नेस्टेड क्वेरी कहा जाता है। इस क्वेरी का परिणाम निम्न है:
नामकरण मात्रा आने वाली राशि आने वाली मात्रा व्यय योग व्यय
पेपर ए4 25 14 500
स्टिकर 500 एल 8 4 880 1 610
कार्यालय सेट 5 4 100 1 1 105
फ़ाइल पारदर्शी 8 8 840 1 820

नतीजतन, हमें एक समूहबद्ध तालिका मिलती है जिसमें नेस्टेड सबक्वायरी से डेटा स्पष्ट रूप में कम हो जाता है। नेस्टेड प्रश्नों की संख्या 255 से अधिक नहीं होनी चाहिए। हमने यहां चार उप-प्रश्नों का उपयोग किया है।

यदि हम समूहीकरण का उपयोग किए बिना क्वेरी में रिकॉर्ड के केवल अद्वितीय मान छोड़ना चाहते हैं। ALL कीवर्ड के बिना JOIN वाक्य लिखना आवश्यक है।

साइट से जानकारी ली गई है

; उपश्रेणियाँ (विकास में)।

माल और सेवाओं की प्राप्तिऔर आपूर्तिकर्ता को माल की वापसीनिर्दिष्ट अवधि के लिए।

नए टैब: यूनियन/उपनाम।

पाठ संख्या 4 का सैद्धांतिक भाग

क्वेरी बिल्डर 1c आपको क्वेरी एकत्रीकरण बनाने की अनुमति देता है। उनकी मदद से, आप संबंधों का उपयोग किए बिना परिणाम में कई प्रश्नों से प्राप्त डेटा को क्रमिक रूप से आउटपुट कर सकते हैं। शामिल होने की एकमात्र शर्त प्रत्येक क्वेरी में फ़ील्ड का समान सेट है।

कंस्ट्रक्टर में टैब पर जाएं यूनियन/उपनाम. यह क्वेरी जॉइन बनाने और क्वेरी फ़ील्ड के लिए उपनाम सेट करने के लिए अभिप्रेत है। यदि आप मानक डेटाबेस फ़ील्ड नामों से सहज नहीं हैं तो फ़ील्ड उपनामों की आवश्यकता है। यदि किसी क्वेरी फ़ील्ड में केवल डेटाबेस तालिका फ़ील्ड होती है, तो इसके लिए उपनाम की आवश्यकता नहीं होती है। यदि आपने फ़ील्ड बनाते समय क्वेरी लैंग्वेज फ़ंक्शंस का उपयोग किया है, तो ऐसे फ़ील्ड के लिए एक उपनाम आवश्यक है। ऐसे क्षेत्रों के लिए, क्वेरी बिल्डर मानक उपनाम बनाता है फ़ील्ड1…फ़ील्डN, इन उपनामों को आपके लिए सुविधाजनक जो भी हो, से बदला जा सकता है।

टैब के अनुभागों पर विचार करें संघ / उपनाम:

  • अनुरोध(लाल फ्रेम)। इस खंड में एक तालिका है जो सभी संयुक्त प्रश्नों को दिखाती है, इस खंड के ऊपर स्थित मेनू का उपयोग करके, आप नए जोड़ सकते हैं, मौजूदा लोगों की प्रतिलिपि बना सकते हैं और चयनित लोगों को हटा सकते हैं, साथ ही उन्हें स्वैप भी कर सकते हैं। किसी क्वेरी को जोड़ते या कॉपी करते समय, डिज़ाइनर टैब पर जाता है टेबल्स और फ़ील्ड, जहां आप नई क्वेरी के लिए डेटाबेस टेबल और आवश्यक फ़ील्ड सेट कर सकते हैं। आप उन टैब का उपयोग करके अनुरोधों के बीच स्विच कर सकते हैं जो निर्माणकर्ता के दाईं ओर दिखाई देंगे क्योंकि नए 1s अनुरोध जोड़े जाते हैं;

  • मेज अनुरोधदो स्तंभ:
    • नाम. प्रारूप में स्वचालित रूप से सेट करें अनुरोध 1 ... अनुरोध एन;
    • कोई डुप्लिकेट नहीं. सेट करें कि पिछली क्वेरी के साथ जुड़ते समय डुप्लिकेट पंक्तियों को बाहर करना आवश्यक है या नहीं। यह ध्यान देने योग्य है कि यह ध्वज केवल उस अनुरोध के मिलन को प्रभावित करेगा जिसमें इसे पिछले अनुरोध के साथ सेट किया गया है।

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

पाठ संख्या 4 का व्यावहारिक भाग

आइए पाठ के प्रारंभ में दी गई समस्या के समाधान का विश्लेषण करें। मैं आपको शर्तें याद दिलाता हूं:

कार्य: क्वेरी द्वारा सभी पोस्ट किए गए दस्तावेज़ों का चयन करें माल और सेवाओं की प्राप्तिऔर आपूर्तिकर्ता को माल की वापसीनिर्दिष्ट अवधि के लिए।

  1. आइए एक नया अनुरोध बनाएं;
  2. आइए क्वेरी बिल्डर लॉन्च करें;
  3. आइए एक तालिका चुनें आने वाली माल सेवाएंएक शाखा से प्रलेखन;
  4. मेज से आने वाली माल सेवाएंएक क्षेत्र चुनें जोड़ना;
  5. आइए टैब पर जाएं स्थितियाँ;
  6. अध्याय में खेत, शाखा खोलो आने वाली माल सेवाएं"+" बटन का उपयोग करना;
  7. आइए प्रॉप्स ढूंढते हैं तारीखऔर इसे शर्तों के अनुभाग में खींचें, तुलना ऑपरेटर का चयन करें बीच मेंऔर अवधि की शुरुआत और अंत के लिए पैरामीटर निर्दिष्ट करें, उदाहरण के लिए काल की शुरुआतऔर समाप्ति अवधि;
  8. आइए टैब पर जाएं संघ / उपनाम.
  9. एक नया अनुरोध जोड़ें, फ़्लैग करें कोई डुप्लिकेट नहींउठाने की कोई आवश्यकता नहीं है, क्योंकि हम विभिन्न प्रकार के दस्तावेज़ों का उपयोग करते हैं;

  10. क्वेरी बिल्डर 1 स्वचालित रूप से टैब पर जाएंगे टेबल्स और फ़ील्ड. विंडो के दाहिने हिस्से में, आप देखेंगे कि दूसरा जुड़ने का अनुरोध सक्रिय है;


  11. तालिका के लिए चरण 1 - 7 दोहराएँ आपूर्तिकर्ता को माल की वापसी;
  12. आइए टैब पर वापस जाएं। संघ / उपनाम. उपनाम तालिका में, आप देख सकते हैं कि फ़ील्ड जोड़नादोनों टेबल एक ही लाइन पर हैं, जिसका अर्थ है कि क्वेरी के परिणामस्वरूप दोनों दस्तावेज़ों के लिंक एक ही कॉलम में होंगे;
  13. से कॉलम का नाम बदलें जोड़नापर दस्तावेज़(फ़ील्ड उपनाम सेट करें)। ऐसा करने के लिए, बाईं माउस बटन के साथ फ़ील्ड नाम पर डबल-क्लिक करें। फिर आप अपना नाम सेट कर सकते हैं, वहां दर्ज करें दस्तावेज़;

  14. अनुरोध तैयार है, डिज़ाइनर विंडो के नीचे "ओके" बटन पर क्लिक करें।

नतीजतन, हमें निम्नलिखित पाठ के साथ एक अनुरोध प्राप्त होगा।

ऐसी स्थितियाँ होती हैं जब एक क्वेरी में कई प्रश्नों को संयोजित करना आवश्यक होता है, और टेबल जॉइन किसी भी तरह से मदद नहीं कर सकता है। उदाहरण के साथ दिखाना सबसे आसान है।

मान लेते हैं कि हमारी व्यवस्था में वस्तुओं की खरीद और बिक्री के तथ्य क्रमशः आय और व्यय के दस्तावेजों द्वारा दर्ज किए जाते हैं। एक प्रतिपक्ष खरीदार और आपूर्तिकर्ता दोनों हो सकता है। माल की सुपुर्दगी द्वारा ऋण ऑफसेट किया जा सकता है:

प्रतिपक्ष के कुल ऋण की गणना करने के लिए, इस प्रतिपक्ष के लिए सभी खर्चों का योग जोड़ना और उसी प्रतिपक्ष से सभी प्राप्तियों का योग घटाना आवश्यक है, ऐसा करने का सबसे आसान तरीका UNITE ALL ऑपरेटर का उपयोग करना है:

अनुरोध। पाठ =
"
// गणना करें कि हमने प्रतिपक्षों को कितना शिप किया
|चुनें
| खपत। प्रतिपक्ष,
| से
| दस्तावेज़। व्यय के रूप में व्यय
|ग्रुप बाय
| खपत प्रतिपक्ष
|सभी से जुड़ें
// प्रतिपक्षों की राशि की गणना करें
// हमें माल दिया
|चुनें
| आगमन। ठेकेदार,
// राशि को नकारात्मक चिह्न के साथ लें,
// कि संयुक्त होने पर, इसे व्यय राशि से घटा दिया गया था
| SUM(-Incoming.Amount)
| से
| Document.Incoming AS Incoming
|ग्रुप बाय
| आगमन। ठेकेदार";

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

यह बिल्कुल वैसा नहीं है जैसा हम चाहते थे, लेकिन यह करीब है। वांछित परिणाम प्राप्त करने के लिए, यह प्रतिपक्ष द्वारा समूह में रहता है। ऐसा करने के लिए, क्वेरी को एक अस्थायी तालिका में रखा जाना चाहिए (अस्थायी तालिकाओं के साथ काम करने पर चर्चा की गई है पाठ्यक्रम का बंद हिस्सा ) और इसमें से फ़ील्ड चुनें और उन्हें समूहीकृत करें:

अनुरोध = नया अनुरोध;
अनुरोध। पाठ =
"चुनना
| खपत। प्रतिपक्ष,
| राशि(व्यय राशि) ऋण के रूप में
|PUT TU_आय व्यय
| से
| दस्तावेज़। व्यय के रूप में व्यय
|ग्रुप बाय
| खपत प्रतिपक्ष
|सभी से जुड़ें
|चुनें
| आगमन। ठेकेदार,
| SUM(-Incoming.Amount)
| से
| Document.Incoming AS Incoming
|ग्रुप बाय
| आगमन।ठेकेदार
|;
|////////////////////////////////////////////////////////////////////////////////
|चुनें
| Tue_IncomingExpense.प्रतिपक्ष,
| SUM(BT_IncomeExpense.Debt) ऋण के रूप में
| से
| Tue_IncomeExpense AS Tue_IncomeExpense
|ग्रुप बाय
| Tue_IncomingExpense.Counterparty";

प्रश्नों को मर्ज करने के लिए आवश्यकताएँ

दो प्रश्नों को जोड़ते समय, उनमें फ़ील्ड की संख्या समान होनी चाहिए, यदि किसी क्वेरी में फ़ील्ड की कमी है, तो उन्हें स्थिरांक के रूप में जोड़ा जाना चाहिए। आइए ऊपर दिए गए उदाहरण को देखें, मान लें कि व्यय दस्तावेज़ में एक छूट क्षेत्र भी है, जो प्रतिपक्ष के ऋण को कम करता है, लेकिन आय दस्तावेज़ में कोई छूट नहीं है। इस मामले में कैसे हो? इसलिए:

अनुरोध = नया अनुरोध;
अनुरोध। पाठ =
"चुनना
| खपत। प्रतिपक्ष,

| से
| दस्तावेज़। व्यय के रूप में व्यय
|ग्रुप बाय
| खपत प्रतिपक्ष
|सभी से जुड़ें
|चुनें
| आगमन। ठेकेदार,
| SUM(-Incoming.Amount),
// एक अशक्त फ़ील्ड छूट जोड़ें
| 0
| से
| Document.Incoming AS Incoming
|ग्रुप बाय
| आगमन। ठेकेदार";

यह छूट और समूह को घटाना बाकी है।

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

अनुरोध = नया अनुरोध;
अनुरोध। पाठ =
"चुनना
| खपत। प्रतिपक्ष,
| राशि (व्यय राशि) ऋण के रूप में,
| SUM (व्यय। छूट) छूट के रूप में
| से
| दस्तावेज़। व्यय के रूप में व्यय
|ग्रुप बाय
| खपत प्रतिपक्ष
|सभी से जुड़ें
|चुनें
| आगमन। ठेकेदार,
//बदलना
| 0,
| SUM(-Incoming.Amount)
| से
| Document.Incoming AS Incoming
|ग्रुप बाय
| आगमन। ठेकेदार";

शुभ दिन, ब्लॉग साइट के प्रिय पाठकों। आज हम विस्तार से चर्चा करेंगे 1 सी में अनुरोधों का संयोजन. आप कजाकिस्तान के लिए विशिष्ट कॉन्फ़िगरेशन व्यवसाय प्रबंधन, संस्करण 1.0 के लिए भी डाउनलोड कर सकते हैं।

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

विलय करने के लिए वाक्य का प्रयोग किया जाता है संघ / संघ. वास्तव में क्या हो रहा है क्वेरी परिणामों का संयोजन, अर्थात्, प्रत्येक क्वेरी एक दूसरे से स्वतंत्र रूप से डेटा एकत्र करती है, और फिर इन परिणामों को एक में जोड़ दिया जाता है। और केवल अंतिम क्वेरी पर, अन्य ऑपरेशन किए जाते हैं, उदाहरण के लिए, ऑर्डर देना और योग की गणना करना।

प्रश्नों के संयोजन के विपरीत, परिणाम "लंबवत चिपके" होते हैं, अर्थात, पहली क्वेरी की परिणाम पंक्तियाँ पहले जाती हैं, फिर दूसरी।

आइए अभ्यास के लिए आगे बढ़ते हैं:

नामकरण, मात्रा, राशि का चयन करें एकजुट हो जाओदस्तावेज़ से नामकरण, मात्रा, राशि का चयन करें। उपभोज्य। माल

इस क्वेरी का परिणाम निम्न है:

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

नामकरण, मात्रा एएस का चयन करें नंबरप्रखोद, सम ए.एस SumPrikhod, 0 ए.एस मात्रा व्यय, 0 ए.एस समएक्सपेंसदस्तावेज़ से। आवक। माल एकजुट हो जाओ नंबरप्रखोद, 0 ए.एस SumPrikhod, संख्या ए.एस मात्रा व्यय, सम ए.एस समएक्सपेंसदस्तावेज़ से। उपभोज्य। माल

जैसा कि आप अनुरोध पाठ से देख सकते हैं, हमने मात्रा और राशि के लिए प्रत्येक दस्तावेज़ के लिए अलग-अलग उपनाम निर्धारित किए हैं। साथ ही, उन क्षेत्रों के स्थान पर जहां हमें राशि और मात्रा के मान प्राप्त होंगे, हम शून्य लगा देंगे। यह आवश्यक है ताकि राशि और राशि के खाली मूल्यों को शून्य से बदल दिया जाए।

नामपद्धति नंबरप्रखोद SumPrikhod मात्रा व्यय समएक्सपेंस
ए 4 पेपर 25 14 500
स्टिकर 500 एल 8 4 880
फाइल पारदर्शी है 5 4 100
कार्यालय सेट 8 8 840
कार्यालय सेट 1 1 105
फाइल पारदर्शी है 1 820
स्टिकर 500 एल 1 610

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

चुनना
नामपद्धति,
योग (आय की संख्या) आय की संख्या के रूप में,
SUM(SumIncome) AS SumIncome,
SUM(खर्चों की संख्या) एएस खर्चों की राशि,
SUM(SumExpense) AS SumExpense
से
(
नामकरण, मात्रा एएस का चयन करें नंबरप्रखोद, सम ए.एस SumPrikhod, 0 ए.एस मात्रा व्यय, 0 ए.एस समएक्सपेंसदस्तावेज़ से। आवक। माल एकजुट हो जाओनामकरण का चयन करें, 0 एएस नंबरप्रखोद, 0 ए.एस SumPrikhod, संख्या ए.एस मात्रा व्यय, सम ए.एस समएक्सपेंसदस्तावेज़ से। उपभोज्य। माल ) AS NestedQuery
नामकरण द्वारा समूह

इसलिए, हम देखते हैं कि हमारी पूरी क्वेरी कोष्ठक में संलग्न है और इसका नाम NestedQuery रखा गया है। ऐसा इसलिए किया जाता है ताकि हम दोनों उपश्रेणियों के अभिलेखों को समूहीकृत कर सकें और डुप्लिकेट तत्वों को समाप्त कर सकें। ऐसे निर्माण को नेस्टेड क्वेरी कहा जाता है। इस क्वेरी का परिणाम निम्न है:

नामपद्धति नंबरप्रखोद SumPrikhod मात्रा व्यय समएक्सपेंस
ए 4 पेपर 25 14 500
स्टिकर 500 एल 8 4 880 1 610
कार्यालय सेट 5 4 100 1 1 105
फाइल पारदर्शी है 8 8 840 1 820

नतीजतन, हमें एक समूहबद्ध तालिका मिलती है जिसमें नेस्टेड सबक्वायरी से डेटा स्पष्ट रूप में कम हो जाता है।
नेस्टेड प्रश्नों की संख्या 255 से अधिक नहीं होनी चाहिए। हमने यहां चार उप-प्रश्नों का उपयोग किया है।