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

1C क्वेरी भाषा संस्करण 7.7 और 8 के बीच मुख्य अंतरों में से एक है सबसे महत्वपूर्ण बिंदु 1सी प्रोग्रामिंग के अध्ययन में एक क्वेरी भाषा है। 1C में 8.3 क्वेरीज़ सबसे शक्तिशाली हैं और प्रभावी उपकरणडेटा प्राप्त करना. क्वेरी भाषा आपको डेटाबेस से सुविधाजनक तरीके से जानकारी प्राप्त करने की अनुमति देती है।

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

इस लेख में मैं 1सी क्वेरी भाषा में मुख्य कीवर्ड के बारे में बात करने का प्रयास करूंगा:

  • चुनना
  • अनुमत
  • विभिन्न
  • अभिव्यक्त करना
  • पहला
  • को बदलने
  • अर्थ
  • मान प्रकार (और संदर्भ ऑपरेटर)
  • पसंद
  • द्वारा समूह बनाएं
  • होना
  • ISNULL
  • हाँ शून्य
  • कनेक्शन - दाएँ, बाएँ, आंतरिक, पूर्ण.

साथ ही 1C भाषा की कुछ छोटी-छोटी तरकीबें, जिनका उपयोग करके आप अनुरोध टेक्स्ट का बेहतर निर्माण कर सकते हैं।

1C 8.2 सिस्टम में प्रश्नों को डीबग करने के लिए, एक विशेष उपकरण प्रदान किया जाता है - क्वेरी कंसोल। आप विवरण देख सकते हैं और लिंक का उपयोग करके इसे डाउनलोड कर सकते हैं -।

आइए 1C क्वेरी भाषा के सबसे महत्वपूर्ण और दिलचस्प ऑपरेटरों पर नज़र डालें।

चुनना

1सी एंटरप्राइज़ 8 क्वेरी भाषा में, कोई भी क्वेरी एक कीवर्ड से शुरू होती है चुनना. 1सी भाषा में कोई अद्यतन, हटाएं, तालिका बनाएं, सम्मिलित करें संरचनाएं नहीं हैं, ये जोड़-तोड़ ऑब्जेक्ट प्रौद्योगिकी में किए जाते हैं; इसका उद्देश्य केवल डेटा पढ़ना है।

उदाहरण के लिए:

चुनना
वर्तमान निर्देशिका.नाम
से
निर्देशिका.नामपद्धति वर्तमान निर्देशिका के रूप में

क्वेरी आइटम नामों के साथ एक तालिका लौटाएगी।

ढांचे के पास चुननाआप कीवर्ड पा सकते हैं को बदलने, अनुमत, विभिन्न, पहला

अनुमत- तालिका से केवल उन रिकॉर्ड्स का चयन करता है जिन पर वर्तमान उपयोगकर्ता के पास अधिकार हैं।

विभिन्न- इसका मतलब है कि परिणाम में डुप्लिकेट लाइनें नहीं होंगी।

चयन (मामला)

अक्सर इस डिज़ाइन को प्रोग्रामर द्वारा कम करके आंका जाता है। इसके उपयोग का एक उदाहरण:

वर्तमान निर्देशिका.नाम,

जब वर्तमान निर्देशिका.सेवा तब

"सेवा"

नामकरण कैसे देखें समाप्त करें

निर्देशिका.नामपद्धति वर्तमान निर्देशिका के रूप में

उदाहरण "नामकरण का प्रकार" फ़ील्ड में वापस आ जाएगा पाठ मान- "उत्पाद" या "सेवा"।

कहाँ

1C क्वेरी भाषा का डिज़ाइन, जो आपको प्राप्त डेटा पर चयन थोपने की अनुमति देता है। कृपया ध्यान दें कि सिस्टम सर्वर से सभी डेटा प्राप्त करता है, और उसके बाद ही इस पैरामीटर के आधार पर इसका चयन किया जाता है।

चुनना
निर्देशिका.नाम
से
वर्तमान निर्देशिका। वर्तमान निर्देशिका के रूप में नामकरण
जहां करंटडायरेक्टरी.सर्विस = सत्य है

उदाहरण में, हम उन रिकॉर्ड्स का चयन करते हैं जिनके लिए "सेवा" विशेषता का मान "सही" पर सेट है। में इस उदाहरण मेंकोई निम्नलिखित शर्त के साथ काम कर सकता है:

"सेवा कहाँ है"

अनिवार्य रूप से, हम उन पंक्तियों का चयन कर रहे हैं जहां कीवर्ड के बाद की अभिव्यक्ति "सही" के बराबर है।

आप अभिव्यक्तियों में प्रत्यक्ष शर्तों का उपयोग कर सकते हैं:

कहां कोड = "005215"

शर्तों में "VALUE()" ऑपरेटर का उपयोग करके, 1C अनुरोध में पूर्वनिर्धारित तत्वों और गणनाओं तक पहुंच का उपयोग करें:

जहां आइटम प्रकार = मूल्य (गणना.आइटम प्रकार.उत्पाद)

समय मान निम्नानुसार निर्दिष्ट किए जा सकते हैं:

जहां रसीद दिनांक > दिनांक समय(2012,01,01):

अक्सर, शर्तों को अनुरोध में पारित पैरामीटर के रूप में निर्दिष्ट किया जाता है:

1सी पर 267 वीडियो पाठ निःशुल्क प्राप्त करें:

जहां नामकरण समूह = और नामकरण समूह

यदि विशेषता के प्रकार पर कोई शर्त लगाई जा सकती है समग्र प्रकार:

यदि आपको मानों की सूची या किसी सरणी से चयन को सीमित करने की आवश्यकता है, तो आप निम्न कार्य कर सकते हैं:

संचय रजिस्टर कहां है? रजिस्ट्रार बी (और चयन के लिए दस्तावेजों की सूची)

स्थिति जटिल भी हो सकती है, जिसमें कई स्थितियाँ शामिल हैं:

जहां रसीद दिनांक > दिनांकसमय(2012,01,01) और नामकरण समूह = और नामकरण समूह और सेवा नहीं

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

परिणाम को समूहीकृत करने के लिए उपयोग की जाने वाली 1C 8.2 क्वेरी भाषा का डिज़ाइन।

उदाहरण के लिए:

चुनना
माल और सेवा माल की प्राप्ति,
एसयूएम (वस्तुओं की प्राप्ति, सेवाओं, वस्तुओं की मात्रा) मात्रा के रूप में,
SUM (वस्तुओं, सेवाओं, वस्तुओं की प्राप्ति। राशि) राशि के रूप में
से
दस्तावेज़। माल और सेवाओं की प्राप्ति। माल और सेवाओं की प्राप्ति

द्वारा समूह बनाएं
GoodsServicesGoods.Goods की प्राप्ति

यह अनुरोध सभी प्राप्तियों को राशि और मात्रा के आधार पर संक्षेप में प्रस्तुत करेगा।

कीवर्ड के अलावा जोड़आप अन्य समग्र फ़ंक्शंस का उपयोग कर सकते हैं: मात्रा, भिन्न की संख्या, अधिकतम, न्यूनतम, औसत.

होना

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

1सी अनुरोध में HAVING का उपयोग करने का उदाहरण:

चुनना
माल और सेवा माल की प्राप्ति,
एसयूएम (वस्तुओं की प्राप्ति, सेवाओं, वस्तुओं की मात्रा) मात्रा के रूप में,
SUM (वस्तुओं, सेवाओं, वस्तुओं की प्राप्ति। राशि) राशि के रूप में
से
दस्तावेज़। माल और सेवाओं की प्राप्ति। माल और सेवाओं की प्राप्ति

द्वारा समूह बनाएं
माल और सेवाओं माल की प्राप्ति

SUM(वस्तुओं, सेवाओं, वस्तुओं की प्राप्ति, मात्रा) > 5

इसलिए हम उन उत्पादों की संख्या का चयन करेंगे जो 5 से अधिक टुकड़ों में आए।

अर्थ()

उदाहरण के लिए:

जहां बैंक = मूल्य(निर्देशिका.बैंक.खालीलिंक)

जहां नामकरण प्रकार = मान(निर्देशिका.नामपद्धति प्रकार.उत्पाद)

जहां आइटम प्रकार = मूल्य (गणना.आइटम प्रकार.सेवा)

अनुरोध टाइप करें

डेटा प्रकार को TYPE() और VALUETYPE() फ़ंक्शंस का उपयोग करके या तार्किक संदर्भ ऑपरेटर का उपयोग करके जांचा जा सकता है।

अभिव्यक्त करना()

1C क्वेरी में एक्सप्रेस ऑपरेटर का उपयोग डेटा प्रकारों को परिवर्तित करने के लिए किया जाता है।

सिंटेक्स: अभिव्यक्त करना(<Выражение>कैसे<Тип значения>)

इसका उपयोग करके, आप स्ट्रिंग मानों को दिनांक या संदर्भ मानों को स्ट्रिंग डेटा में परिवर्तित कर सकते हैं, इत्यादि।

में व्यावहारिक अनुप्रयोगएक्सप्रेस() ऑपरेटर का उपयोग अक्सर असीमित लंबाई के फ़ील्ड को परिवर्तित करने के लिए किया जाता है, क्योंकि असीमित लंबाई के फ़ील्ड का चयन, समूहीकरण आदि नहीं किया जा सकता है। यदि ऐसे फ़ील्ड परिवर्तित नहीं किए गए हैं, तो आपको एक त्रुटि प्राप्त होगी आप असीमित लंबाई वाले फ़ील्ड और असंगत प्रकार के फ़ील्ड की तुलना नहीं कर सकते.

चुनना
संपर्क जानकारी.वस्तु,
एक्सप्रेस(ContactInfo.पंक्ति के रूप में देखें(150)) दृश्य के रूप में
से
सूचना का रजिस्टर. संपर्क जानकारी कैसे संपर्क जानकारी

द्वारा समूह बनाएं
एक्सप्रेस (संपर्क जानकारी। पंक्ति के रूप में प्रतिनिधित्व (150)),
संपर्क जानकारी.वस्तु

इसशून्य (इसशून्य)

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

ISNULL(पूर्व-माह कर.लागूFSS लाभ, 0)

1C क्वेरी भाषा ISNULL का ऐसा फ़ंक्शन कोई मान न होने पर शून्य लौटा देगा, जिससे त्रुटि से बचा जा सकेगा।

जोड़ना

कनेक्शन 4 प्रकार के होते हैं: बाएं, सही, पूर्ण, आंतरिक.

बाएँ और दाएँ कनेक्शन

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

1सी अनुरोध में लेफ्ट जॉइन का एक उदाहरण:

यह पूरी तालिका लौटा देगा और "बैंक" फ़ील्ड केवल उन्हीं स्थानों पर भरेगा जहां "प्रतिपक्ष.नाम = बैंक.नाम" शर्त पूरी होती है। यदि शर्त पूरी नहीं होती है, तो बैंक फ़ील्ड सेट कर दी जाएगी व्यर्थ.

1सी 8.3 भाषा में राइट जॉइनबिल्कुल समान बाएँ कनेक्शन, एक अंतर के अपवाद के साथ: में कनेक्शन का अधिकार"मुख्य" तालिका दूसरी है, पहली नहीं।

पूर्ण कनेक्शन

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

उदाहरण के लिए:

पूर्ण कनेक्शन
निर्देशिका.बैंक कैसे बैंक

द्वारा

क्वेरी भाषा दोनों तालिकाओं को पूरी तरह से तभी लौटाएगी जब जॉइन रिकॉर्ड्स की शर्त पूरी हो जाएगी। बाएँ/दाएँ जुड़ाव के विपरीत, NULL का दो फ़ील्ड में प्रदर्शित होना संभव है।

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

आंतरिक रूप से जुड़ासे अलग विषयों से भरपूर, जो केवल उन्हीं रिकॉर्ड्स को प्रदर्शित करता है जिन्हें किसी दी गई शर्त के अनुसार जोड़ा जा सकता है।

उदाहरण के लिए:

से
निर्देशिका। ग्राहकों के रूप में प्रतिपक्ष

आंतरिक रूप से जुड़ा
निर्देशिका.बैंक कैसे बैंक

द्वारा
ग्राहक.नाम = बैंक.नाम

यह क्वेरी केवल वही पंक्तियाँ लौटाएगी जिनमें बैंक और प्रतिपक्ष का नाम समान है।

निष्कर्ष

यह 1सी 8 क्वेरी भाषा के सिंटैक्स का केवल एक छोटा सा हिस्सा है, भविष्य में मैं कुछ बिंदुओं पर अधिक विस्तार से विचार करने, दिखाने और बहुत कुछ करने का प्रयास करूंगा!

NULL एक मूल्य की अनुपस्थिति से अधिक कुछ नहीं है। बहुत से लोग इसे टाइप नंबर के मान "0", किसी ऑब्जेक्ट का खाली संदर्भ या खाली स्ट्रिंग के साथ भ्रमित करते हैं। इसी ग़लतफ़हमी के कारण अनेक ग़लतियाँ उत्पन्न हो जाती हैं।

यदि अनुरोध किसी गैर-मौजूद फ़ील्ड, प्रॉपर्टी या टूटे हुए लिंक को संदर्भित करता है तो NULL मान दिखाई देगा।

SQL पर आधारित, जो NULL के लिए सामान्य समानता परीक्षण की अनुमति नहीं देता है। 1C 8.3 में NULL की जाँच करने के दो तरीके नीचे दिए गए हैं।

1C 8.3 क्वेरी भाषा फ़ंक्शन ISNULL() में दो इनपुट पैरामीटर हैं:

  • अभिव्यक्ति का परीक्षण किया जाना है;
  • प्रतिस्थापन अभिव्यक्ति.

यदि परीक्षण किया जा रहा मान शून्य है, तो यह फ़ंक्शन प्रतिस्थापन अभिव्यक्ति का मान लौटाएगा। यदि मान NULL के अलावा अन्य है, तो परीक्षण किया जा रहा अभिव्यक्ति वापस कर दी जाएगी।

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

इस मामले में, ऐसी स्थिति उत्पन्न हो सकती है कि किसी स्थिति के लिए रजिस्टर में कीमत ही न हो। इस स्थिति में, ISNULL फ़ंक्शन हमें सामान्य शून्य लौटाएगा। यदि आप इसका उपयोग नहीं करते हैं, तो जब आप शून्य मान के साथ "मूल्य" फ़ील्ड पर अंकगणितीय संचालन करने का प्रयास करेंगे, तो हमें एक त्रुटि प्राप्त होगी।

चुनना

ISNULL(कीमतें.कीमत, 0) वर्तमान कीमत के अनुसार
से



कहाँ

चयन कथन में शून्य है

ISNULL() का समतुल्य ISNULL है, जिसका उपयोग SELECT स्टेटमेंट में किया जाता है और जाँचता है कि मान NULL है या नहीं। इस मामले में "आईएस" का तात्पर्य समानता से है और पिछले उदाहरण में क्वेरी इस तरह दिखेगी:

चुनना
उत्पाद. नामकरण उत्पाद के रूप में,
पसंद
जब कीमतें शून्य हों
फिर 0
अन्यथा कीमतें.कीमत
वर्तमान मूल्य के रूप में समाप्त करें
से
दस्तावेज़। माल और सेवाओं की प्राप्ति
बायां कनेक्शन रजिस्टर जानकारी। मूल्य नामकरण। कीमतों के रूप में अंतिम स्लाइस
सॉफ़्टवेयर उत्पाद.नामपद्धति = कीमतें.नामपद्धति
कहाँ
उत्पाद.लिंक = &LinkToDocument

फ़ंक्शन ISNULL() और IS NULL के बीच अंतर

जैसा कि आप पिछले उदाहरणों से देख सकते हैं, दोनों मामलों में अनुरोध समान डेटा लौटाता है। ISNULL() फ़ंक्शन SELECTION WHEN... IS NULL... END का शॉर्टहैंड संस्करण है, लेकिन यह निम्नलिखित कारणों से अभी भी बेहतर है:

  1. ISNULL() फ़ंक्शन क्वेरी को अनुकूलित करता है। इसे एक बार पढ़ा जाता है, इसलिए किसी जटिल अभिव्यक्ति की जाँच करते समय अनुरोध तेजी से संसाधित होगा।
  2. ISNULL() फ़ंक्शन निर्माण को छोटा करता है, जिससे क्वेरी अधिक पठनीय हो जाती है।
  3. ISNULL() फ़ंक्शन को निष्पादित करते समय, प्रतिस्थापन अभिव्यक्ति स्ट्रिंग प्रकारों (स्ट्रिंग की लंबाई तक) और संख्यात्मक प्रकारों (बिट गहराई तक) के लिए परीक्षण की जा रही अभिव्यक्ति के प्रकार तक कम हो जाती है।

1सी 8 में क्वेरी भाषा प्रसिद्ध "संरचित प्रोग्रामिंग भाषा" (जैसा कि इसे अक्सर एसक्यूएल कहा जाता है) का एक सरलीकृत एनालॉग है। लेकिन 1C में इसका उपयोग केवल डेटा पढ़ने के लिए किया जाता है; ऑब्जेक्ट डेटा मॉडल का उपयोग डेटा को बदलने के लिए किया जाता है।

एक और दिलचस्प अंतर रूसी वाक्यविन्यास है। हालाँकि वास्तव में आप अंग्रेजी भाषा के निर्माणों का उपयोग कर सकते हैं।

उदाहरण अनुरोध:

चुनना
बैंकों का नाम,
बैंक.पत्रलेखा
से
निर्देशिका.बैंक कैसे बैंक

यह अनुरोध हमें डेटाबेस में मौजूद सभी बैंकों के नाम और संवाददाता खाते के बारे में जानकारी देखने की अनुमति देगा।

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

क्वेरी भाषा निर्माण का विवरण

क्वेरी संरचना

डेटा प्राप्त करने के लिए, "SELECT" और "FROM" निर्माणों का उपयोग करना पर्याप्त है। सबसे सरल अनुरोध इस प्रकार दिखता है:

निर्देशिकाओं से चयन करें।नामपद्धति

जहां "*" का अर्थ तालिका के सभी फ़ील्ड का चयन करना है, और निर्देशिकाएं। नामकरण - डेटाबेस में तालिका का नाम।

आइए एक अधिक जटिल और सामान्य उदाहरण देखें:

चुनना
<ИмяПоля1>कैसे<ПредставлениеПоля1>,
जोड़(<ИмяПоля2>) कैसे<ПредставлениеПоля2>
से
<ИмяТаблицы1>कैसे<ПредставлениеТаблицы1>
<ТипСоединения>मिश्रण<ИмяТаблицы2>कैसे<ПредставлениеТаблицы2>
द्वारा<УсловиеСоединениеТаблиц>

कहाँ
<УсловиеОтбораДанных>

द्वारा समूह बनाएं
<ИмяПоля1>

द्वारा आदेश
<ИмяПоля1>

परिणाम
<ИмяПоля2>
द्वारा
<ИмяПоля1>

में यह अनुरोधहम तालिकाओं "TableName1" और "TableName" से "FieldName1" और "FieldName1" फ़ील्ड का डेटा चुनते हैं, "HOW" ऑपरेटर का उपयोग करके फ़ील्ड के लिए समानार्थक शब्द निर्दिष्ट करते हैं, और उन्हें एक निश्चित शर्त "TableConnectionCondition" का उपयोग करके कनेक्ट करते हैं।

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

अंतिम चरण ORDER BY निर्माण का उपयोग करके अनुरोध को क्रमबद्ध करना है।

सामान्य डिज़ाइन

आइए 1C 8.2 क्वेरी भाषा की सामान्य संरचनाओं को देखें।

पहलाएन

इस ऑपरेटर का उपयोग करके, आप पहले रिकॉर्ड की n संख्या प्राप्त कर सकते हैं। रिकॉर्ड्स का क्रम क्वेरी में क्रम से निर्धारित होता है।

पहले 100 चुनें
बैंकों का नाम,
बैंक। बीआईसी के रूप में कोड
से
निर्देशिका.बैंक कैसे बैंक
द्वारा आदेश
बैंक.नाम

अनुरोध को वर्णानुक्रम में क्रमबद्ध "बैंक" निर्देशिका की पहली 100 प्रविष्टियाँ प्राप्त होंगी।

अनुमत

यह डिज़ाइन तंत्र के साथ काम करने के लिए प्रासंगिक है। तंत्र का सार डेटाबेस तालिका में विशिष्ट रिकॉर्ड के लिए उपयोगकर्ताओं को पढ़ने (और अन्य कार्यों) को प्रतिबंधित करना है, न कि संपूर्ण तालिका को।

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

अनुमति का चयन करें
अतिरिक्त जानकारी का भंडार
से
निर्देशिका.अतिरिक्त सूचना का भंडार

विभिन्न

"DIFFERENT" का उपयोग डुप्लिकेट लाइनों को 1C क्वेरी परिणाम में प्रवेश करने से रोकेगा। डुप्लिकेशन का मतलब है कि सभी अनुरोध फ़ील्ड मेल खाते हैं।

पहले 100 चुनें
बैंकों का नाम,
बैंक। बीआईसी के रूप में कोड
से
निर्देशिका.बैंक कैसे बैंक

खालीटेबल

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

1सी 8 सहायता से उदाहरण:

संरचना के रूप में लिंक, संख्या, खाली तालिका (संख्या, आइटम, मात्रा) का चयन करें
दस्तावेज़ से. व्यय चालान
सब कुछ मिलाओ
लिंक चुनें.संख्या, सामग्री.(लाइननंबर, उत्पाद, मात्रा)
दस्तावेज़ से. चालान दस्तावेज़. चालान. संरचना.*

ISNULL

एक बहुत ही उपयोगी सुविधा जो आपको कई गलतियों से बचने की अनुमति देती है। YesNULL() आपको NULL मान को वांछित मान से बदलने की अनुमति देता है। संयुक्त तालिकाओं में किसी मान की उपस्थिति की जाँच करने में अक्सर इसका उपयोग किया जाता है, उदाहरण के लिए:

चुनना
नामकरण संदर्भ,
शून्य है(आइटम शेष है। मात्रा शेष है,0) मात्रा शेष है
से


अन्य तरीकों से इस्तेमाल किया जा सकता है. उदाहरण के लिए, यदि प्रत्येक पंक्ति के लिए यह ज्ञात नहीं है कि मान किस तालिका में मौजूद है:

ISNULL(चालान प्राप्त होने की तिथि, चालान जारी होने की तिथि)

HOW एक ऑपरेटर है जो हमें किसी तालिका या फ़ील्ड को एक नाम (समानार्थी) निर्दिष्ट करने की अनुमति देता है। हमने ऊपर उपयोग का एक उदाहरण देखा।

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

चुनना
देखें(लिंक), //स्ट्रिंग, उदाहरण के लिए "अग्रिम रिपोर्ट संख्या 123 दिनांक 10/10/2015
DeleteMarkText, //स्ट्रिंग, "हां" या "नहीं" के रूप में देखें (डिलीशनमार्क)
ViewReferences(DeletionMark) AS DeleteMarkBoolean //बूलियन, सही या गलत
से
दस्तावेज़.अग्रिम रिपोर्ट

अभिव्यक्त करना

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

संदर्भ प्रकार के लिए एक्सप्रेस का उपयोग जटिल प्रकार के क्षेत्रों में अनुरोधित डेटा प्रकारों को प्रतिबंधित करने के लिए किया जाता है, जिसका उपयोग अक्सर सिस्टम प्रदर्शन को अनुकूलित करने के लिए किया जाता है। उदाहरण:

एक्सप्रेस(TableCost.Subconto1 AS निर्देशिका.लागत आइटम).TaxAccountingCosts के लिए गतिविधि का प्रकार

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

एक्सप्रेस(टिप्पणी एएस लाइन(150))

विभेदित दिनांक

1सी पर 267 वीडियो पाठ निःशुल्क प्राप्त करें:

1सी अनुरोध में IS NULL का उपयोग करने का एक उदाहरण:

*से चुनें
रेफरी
बायां कनेक्शन रजिस्टर संचय। गोदामों में उत्पाद। शेष उत्पाद के रूप में शेष
सॉफ़्टवेयर NomenclatureRef.Link = बेचा गया सामान समिति अवशेष.नामपद्धति
जहाँ माल शेष न हो, शेष मात्रा शून्य हो

किसी क्वेरी में डेटा का प्रकार TYPE() और VALUETYPE() फ़ंक्शंस का उपयोग करके या तार्किक संदर्भ ऑपरेटर का उपयोग करके निर्धारित किया जा सकता है। दोनों कार्य समान हैं.

पूर्वनिर्धारित मान

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

उपयोग उदाहरण:

जहां नामकरण। नामकरण का प्रकार = मूल्य (निर्देशिका। नामकरण के प्रकार। उत्पाद)

जहां प्रतिपक्ष। संपर्क जानकारी का प्रकार = मूल्य (गणना। संपर्क जानकारी के प्रकार। फोन)

जहां खाता शेष.लेखा खाता = मूल्य(खातों का चार्ट.लाभ.लाभहानि)

कनेक्शन

कनेक्शन 4 प्रकार के होते हैं: बाएं, सही, पूर्ण, आंतरिक.

बाएँ और दाएँ कनेक्शन

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

उदाहरण के लिए:

यह प्रतिपक्षों की पूरी तालिका लौटा देगा और "बैंक" फ़ील्ड केवल उन्हीं स्थानों पर भरेगा जहां "प्रतिपक्ष.नाम = बैंक.नाम" शर्त पूरी होगी। यदि शर्त पूरी नहीं होती है, तो बैंक फ़ील्ड सेट कर दी जाएगी व्यर्थ.

1सी भाषा में राइट जॉइनबिल्कुल समान बाएँ कनेक्शन, एक अंतर के अपवाद के साथ - में कनेक्शन का अधिकार"मुख्य" तालिका दूसरी है, पहली नहीं।

पूर्ण कनेक्शन

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

उदाहरण के लिए:

से

पूर्ण कनेक्शन
निर्देशिका.बैंक कैसे बैंक

द्वारा

क्वेरी भाषा दोनों तालिकाओं को पूरी तरह से केवल तभी वापस करेगी जब रिकॉर्ड में शामिल होने की शर्त पूरी हो। बाएँ/दाएँ जुड़ाव के विपरीत, NULL का दो फ़ील्ड में प्रदर्शित होना संभव है।

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

आंतरिक रूप से जुड़ापूर्ण से भिन्न यह है कि यह केवल उन्हीं रिकॉर्ड्स को प्रदर्शित करता है जिन्हें किसी दी गई शर्त के अनुसार जोड़ा जा सकता है।

उदाहरण के लिए:

से
निर्देशिका। ग्राहकों के रूप में प्रतिपक्ष

आंतरिक रूप से जुड़ा
निर्देशिका.बैंक कैसे बैंक

द्वारा
ग्राहक.नाम = बैंक.नाम

यह क्वेरी केवल वही पंक्तियाँ लौटाएगी जिनमें बैंक और प्रतिपक्ष का नाम समान है।

संघों

JOIN और JOIN ALL संरचनाएँ दो परिणामों को एक में जोड़ती हैं। वे। दो को निष्पादित करने का परिणाम एक, सामान्य एक में "विलय" हो जाएगा।

यानी, सिस्टम बिल्कुल नियमित टेबल की तरह ही काम करता है, केवल एक अस्थायी तालिका के लिए।

INDEX BY का उपयोग कैसे करें

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

चुनना
मुद्रा दरें नवीनतम क्रॉस-सेक्शन। मुद्रा एएस मुद्रा,
मुद्रा दरें नवीनतम क्रॉस-सेक्शन।
मुद्रा दरें डालें
से
सूचना रजिस्टर.मुद्रा दरें.अंतिम स्लाइस(और अवधि,) एएस मुद्रा दरेंअंतिम स्लाइस
द्वारा सूचकांक
मुद्रा
;
चुनना
कीमतेंनामपद्धति.नामपद्धति,
कीमतेंनामपद्धति.कीमत,
कीमतेंनामपद्धति.मुद्रा,
मुद्रा दरें.दर
से
सूचना रजिस्टर.नामकरण मूल्य.अंतिम स्लाइस(&अवधि,
नामकरण बी (और नामकरण) और मूल्य प्रकार = और मूल्य प्रकार) मूल्य नामकरण के रूप में
बाईं ओर मुद्रा दरों को मुद्रा दरों के रूप में शामिल करें
सॉफ़्टवेयर मूल्यनामपद्धति.मुद्रा = मुद्रा दरें.मुद्रा

समूहन

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

निम्नलिखित कार्य मौजूद हैं:

राशि, मात्रा, विभिन्न की संख्या, अधिकतम, न्यूनतम, औसत।

उदाहरण #1:

चुनना
वस्तुओं और सेवाओं की बिक्री, वस्तुओं का नामकरण।
एसयूएम (वस्तुओं की बिक्री, सेवाओं, वस्तुओं की मात्रा) मात्रा के रूप में,
SUM (वस्तुओं की बिक्री, सेवाओं, वस्तुओं की बिक्री। राशि) राशि के रूप में
से

द्वारा समूह बनाएं
वस्तुओं और सेवाओं की बिक्री, वस्तुओं का नामकरण

क्वेरी माल के साथ सभी पंक्तियों को प्राप्त करती है और उन्हें मात्रा और मात्रा के अनुसार आइटम के अनुसार सारांशित करती है।

उदाहरण क्रमांक 2

चुनना
बैंक.कोड,
मात्रा (विभिन्न बैंक.लिंक) डुप्लिकेट की संख्या के रूप में
से
निर्देशिका.बैंक कैसे बैंक
द्वारा समूह बनाएं
बैंक.कोड

यह उदाहरण "बैंक" निर्देशिका में बीआईसी की एक सूची प्रदर्शित करेगा और दिखाएगा कि उनमें से प्रत्येक के लिए कितने डुप्लिकेट मौजूद हैं।

परिणाम

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

व्यवहार में परिणामों का उपयोग करने के सबसे लोकप्रिय तरीकों में से एक है माल का बैच राइट-ऑफ़।

चुनना




से
दस्तावेज़। वस्तुओं और सेवाओं की बिक्री। वस्तुओं और सेवाओं की बिक्री कैसे करें
द्वारा आदेश

परिणाम
योग(मात्रा),
योग(योग)
द्वारा
नामपद्धति

क्वेरी का परिणाम निम्नलिखित पदानुक्रमित होगा:

सामान्य परिणाम

यदि आपको सभी "कुल" का योग प्राप्त करने की आवश्यकता है, तो "सामान्य" ऑपरेटर का उपयोग करें।

चुनना
वस्तुओं और सेवाओं की बिक्री, नामकरण,
वस्तुओं और सेवाओं की बिक्री, लिंक एएस दस्तावेज़,
वस्तुओं और सेवाओं की बिक्री, मात्रा के रूप में,
माल और सेवाओं की बिक्री माल के रूप में राशि
से
दस्तावेज़। वस्तुओं और सेवाओं की बिक्री। वस्तुओं और सेवाओं की बिक्री कैसे करें
द्वारा आदेश
वस्तुओं और सेवाओं की बिक्री लिंक
परिणाम
योग(मात्रा),
योग(योग)
द्वारा
सामान्य,
नामपद्धति

अनुरोध निष्पादित करने के परिणामस्वरूप, हमें निम्नलिखित परिणाम मिलते हैं:

जिसमें समूहीकरण का 1 स्तर सभी आवश्यक क्षेत्रों का एकत्रीकरण है।

व्यवस्था

किसी क्वेरी के परिणाम को क्रमबद्ध करने के लिए ORDER BY ऑपरेटर का उपयोग किया जाता है।

आदिम प्रकार (स्ट्रिंग, संख्या, बूलियन) के लिए छँटाई होती है सामान्य नियम. संदर्भ प्रकार के क्षेत्रों के लिए, संदर्भ के आंतरिक प्रतिनिधित्व के अनुसार सॉर्टिंग होती है ( विशिष्ट पहचानकर्ता), और कोड या लिंक प्रस्तुति द्वारा नहीं।

चुनना

से
निर्देशिका.नामपद्धति नामकरण के रूप में
द्वारा आदेश
नाम

अनुरोध नामकरण निर्देशिका में वर्णानुक्रम में क्रमबद्ध नामों की एक सूची प्रदर्शित करेगा।

स्वत: आदेश

छँटाई के बिना एक क्वेरी का परिणाम पंक्तियों का एक अव्यवस्थित रूप से प्रस्तुत सेट है। 1C प्लेटफ़ॉर्म के डेवलपर्स यह गारंटी नहीं देते हैं कि समान क्वेरी निष्पादित करते समय पंक्तियाँ उसी क्रम में आउटपुट होंगी।

यदि आपको तालिका रिकॉर्ड को निरंतर क्रम में प्रदर्शित करने की आवश्यकता है, तो आपको ऑटो-ऑर्डर निर्माण का उपयोग करना होगा।

चुनना
नामकरण.नाम जैसा नाम
से
निर्देशिका.नामपद्धति नामकरण के रूप में
ऑटो ऑर्डर

वर्चुअल टेबल

1सी में वर्चुअल टेबल हैं अनूठी खासियत 1C क्वेरी भाषा, जो अन्य समान सिंटैक्स में नहीं पाई जाती है। वर्चुअल टेबल - तेज तरीकारजिस्टरों से प्रोफ़ाइल जानकारी प्राप्त करना।

प्रत्येक रजिस्टर प्रकार में वर्चुअल टेबल का अपना सेट होता है, जो रजिस्टर सेटिंग्स के आधार पर भिन्न हो सकता है।

  • पहले का कट;
  • उत्तरार्द्ध की कटौती.
  • बचा हुआ;
  • क्रांतियाँ;
  • शेष और कारोबार.
  • उपमहाद्वीप से आंदोलन;
  • क्रांतियाँ;
  • गति डीटी केटी;
  • बचा हुआ;
  • शेष और कारोबार
  • उपमहाद्वीप.
  • आधार;
  • ग्राफ़ डेटा;
  • वैधता की वास्तविक अवधि.

समाधान डेवलपर के लिए, डेटा एक (वर्चुअल) तालिका से लिया जाता है, लेकिन वास्तव में 1C प्लेटफ़ॉर्म इसे कई तालिकाओं से लेता है, उन्हें आवश्यक रूप में परिवर्तित करता है।

चुनना
गोदामों में उत्पाद अवशेष और नामकरण,
उत्पादगोदामों मेंशेषऔर टर्नओवर.मात्राप्रारंभिकशेष,
उत्पादगोदामों में अवशेषऔर टर्नओवर.मात्रा टर्नओवर,
मालगोदामों में अवशेषऔर टर्नओवर.आने वाली मात्रा,
मालगोदामों में अवशेषऔर कारोबार.मात्रा खपत,
उत्पाद गोदामों में शेष और कारोबार। मात्रा अंतिम शेष
से
संचय रजिस्टर करें। गोदामों में सामान। अवशेष और कारोबार जैसा कि माल गोदाम में रहता है और कारोबार होता है

यह अनुरोध आपको शीघ्रता से प्राप्त करने की अनुमति देता है बड़ी संख्याडेटा।

वर्चुअल टेबल विकल्प

वर्चुअल टेबल के साथ काम करने का एक बहुत ही महत्वपूर्ण पहलू पैरामीटर का उपयोग है। वर्चुअल टेबल पैरामीटर चयन और कॉन्फ़िगरेशन के लिए विशेष पैरामीटर हैं।

ऐसी तालिकाओं के लिए, "WHERE" निर्माण में चयन का उपयोग करना गलत माना जाता है। इस तथ्य के अलावा कि क्वेरी इष्टतम नहीं हो जाती है, गलत डेटा प्राप्त करना संभव है।

इन मापदंडों का उपयोग करने का एक उदाहरण:

गोदामों में संचय का रजिस्टर। शेष और टर्नओवर (और अवधि की शुरुआत, और अवधि का अंत, महीना, अवधि की गतिविधियां और सीमाएं, नामकरण = और आवश्यक नामकरण)

वर्चुअल टेबल के लिए एल्गोरिदम

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

वर्चुअल टेबल का उपयोग करते समय, सिस्टम निम्नलिखित जोड़तोड़ करता है:

  1. हमें कुल तालिका में दिनांक और माप के संदर्भ में निकटतम गणना मूल्य मिलता है।
  2. हम संचलन तालिका की राशि को कुल तालिका की राशि में "जोड़" देते हैं।


इस तरह की सरल कार्रवाइयां समग्र रूप से सिस्टम के प्रदर्शन में उल्लेखनीय सुधार ला सकती हैं।

क्वेरी बिल्डर का उपयोग करना

क्वेरी बिल्डर- 1सी एंटरप्राइज सिस्टम में निर्मित एक उपकरण जो डेटाबेस प्रश्नों के विकास को काफी सुविधाजनक बनाता है।

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

क्वेरी टेक्स्ट कंस्ट्रक्टर को प्रोग्राम कोड में वांछित स्थान पर संदर्भ मेनू (दायाँ माउस बटन) से लॉन्च किया जाता है।

1सी अनुरोध कंस्ट्रक्टर का विवरण

आइए डिज़ाइनर के प्रत्येक टैब को अधिक विस्तार से देखें। अपवाद बिल्डर टैब है, जो एक अन्य चर्चा का विषय है।

टेबल्स और फ़ील्ड्स टैब

यह टैब उस डेटा स्रोत और फ़ील्ड को निर्दिष्ट करता है जिन्हें रिपोर्ट में प्रदर्शित करने की आवश्यकता है। संक्षेप में, निर्माण SELECT.. FROM का वर्णन यहां किया गया है।

स्रोत एक भौतिक डेटाबेस तालिका, एक वर्चुअल रजिस्टर तालिका, अस्थायी तालिकाएँ, नेस्टेड क्वेरीज़ आदि हो सकता है।

वर्चुअल टेबल के संदर्भ मेनू में, आप वर्चुअल टेबल पैरामीटर सेट कर सकते हैं:

कनेक्शन टैब

टैब का उपयोग कई तालिकाओं के कनेक्शन का वर्णन करने और CONNECTION शब्द के साथ निर्माण करने के लिए किया जाता है।

समूहीकरण टैब

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

शर्तें टैब

WHERE निर्माण के बाद अनुरोध पाठ में आने वाली हर चीज़ के लिए ज़िम्मेदार है, यानी प्राप्त डेटा पर लगाई गई सभी शर्तों के लिए।

उन्नत टैब

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

समूहन अभिलेखों का चयन करना:

  • पहला एन- एक पैरामीटर जो क्वेरी में केवल एन रिकॉर्ड लौटाता है (पहला ऑपरेटर)
  • कोई डुप्लिकेट नहीं- प्राप्त रिकॉर्ड की विशिष्टता सुनिश्चित करता है (विभिन्न ऑपरेटर)
  • अनुमत- आपको केवल उन्हीं रिकॉर्ड्स को चुनने की अनुमति देता है जिन्हें सिस्टम आपको ध्यान में रखते हुए चुनने की अनुमति देता है (अनुमति निर्माण)

समूहन अनुरोध प्रकारयह निर्धारित करता है कि क्वेरी किस प्रकार की होगी: डेटा पुनर्प्राप्त करना, एक अस्थायी तालिका बनाना, या एक अस्थायी तालिका को नष्ट करना।

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

जोड़/उपनाम टैब

क्वेरी डिज़ाइनर के इस टैब पर, आप विभिन्न तालिकाओं और उपनामों (कैसे निर्माण) में शामिल होने की क्षमता सेट कर सकते हैं। तालिकाएँ बाईं ओर इंगित की गई हैं। यदि आप तालिका के सामने झंडे लगाते हैं, तो UNITE निर्माण का उपयोग किया जाएगा, अन्यथा - UNITE ALL (दोनों विधियों के बीच अंतर)। दाईं ओर, विभिन्न तालिकाओं में फ़ील्ड के पत्राचार को दर्शाया गया है; यदि पत्राचार निर्दिष्ट नहीं है, तो क्वेरी NULL वापस आ जाएगी।

ऑर्डर टैब

यह उस क्रम को निर्दिष्ट करता है जिसमें मानों को क्रमबद्ध किया जाता है (ऑर्डर बाय) - अवरोही (डीईएससी) या आरोही (एएससी)।

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

क्वेरी बैच टैब

क्वेरी डिज़ाइनर टैब पर, आप नई क्वेरी बना सकते हैं, और इसे नेविगेशन के रूप में भी उपयोग कर सकते हैं। अनुरोध पाठ में, पैकेट को प्रतीक ";" (अल्पविराम) द्वारा अलग किया जाता है।

क्वेरी डिज़ाइनर में "क्वेरी" बटन

अनुरोध डिज़ाइनर के निचले बाएँ कोने में एक अनुरोध बटन है, जिसके साथ आप किसी भी समय अनुरोध पाठ देख सकते हैं:

इस विंडो में, आप अनुरोध में समायोजन कर सकते हैं और उसे निष्पादित कर सकते हैं।


क्वेरी कंसोल का उपयोग करना

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

आइए इस टूल पर करीब से नज़र डालें।

1सी क्वेरी कंसोल डाउनलोड करें

सबसे पहले, क्वेरी कंसोल के साथ काम करना शुरू करने के लिए, आपको इसे कहीं से डाउनलोड करना होगा। उपचारों को आमतौर पर दो प्रकारों में विभाजित किया जाता है - नियंत्रित रूप और पारंपरिक (या, कभी-कभी, उन्हें 8.1 और 8.2/8.3 कहा जाता है)।

मैंने इन दो प्रकारों को एक प्रसंस्करण में संयोजित करने का प्रयास किया - वांछित ऑपरेटिंग मोड में यह खुलता है आवश्यक प्रपत्र(प्रबंधित मोड में, कंसोल केवल थिक मोड में काम करता है)।

1सी क्वेरी कंसोल का विवरण

आइए मुख्य प्रोसेसिंग पैनल के विवरण के साथ क्वेरी कंसोल को देखना शुरू करें:

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

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

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

  • निष्पादित करनाअनुरोध- सरल निष्पादन और परिणाम
  • पैकेज निष्पादित करें- आपको प्रश्नों के एक बैच में सभी मध्यवर्ती प्रश्नों को देखने की अनुमति देता है
  • अस्थायी तालिकाएँ देखना- आपको उन परिणामों को देखने की अनुमति देता है जो अस्थायी क्वेरीज़ एक तालिका पर लौटती हैं

अनुरोध पैरामीटर:

आपको अनुरोध के लिए वर्तमान पैरामीटर सेट करने की अनुमति देता है।

क्वेरी पैरामीटर विंडो में, निम्नलिखित दिलचस्प है:

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

मानों की सूची के साथ एक पैरामीटर सेट करेंयह बहुत सरल है, बस एक पैरामीटर मान चुनते समय, स्पष्ट मान बटन (क्रॉस) पर क्लिक करें, सिस्टम आपको डेटा प्रकार का चयन करने के लिए संकेत देगा, जहां आपको "मान सूची" का चयन करने की आवश्यकता है:

शीर्ष पैनल में क्वेरी कंसोल सेटिंग्स को कॉल करने के लिए एक बटन भी है:

यहां आप ऑटोसेविंग क्वेरीज़ और क्वेरी निष्पादन पैरामीटर्स के लिए पैरामीटर निर्दिष्ट कर सकते हैं।

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

1C 8 रिक्वेस्ट कंस्ट्रक्टर को कहा जाता है संदर्भ मेनू(दायाँ माउस बटन) इनपुट फ़ील्ड पर क्लिक करते समय:

इसके अलावा इस मेनू में अनुरोध में लाइन ब्रेक ("|") को साफ़ करने या जोड़ने, या इस सुविधाजनक रूप में अनुरोध कोड प्राप्त करने जैसे उपयोगी कार्य भी हैं:

अनुरोध = नया अनुरोध;
अनुरोध.पाठ = ”
|चुनें
| मुद्राएँ.लिंक
|से
| निर्देशिका.मुद्राएं मुद्राओं के रूप में”;
RequestResult = Request.Execute();

क्वेरी कंसोल का निचला क्षेत्र क्वेरी परिणाम फ़ील्ड प्रदर्शित करता है, यही कारण है कि यह प्रसंस्करण बनाया गया था:



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

क्वेरी अनुकूलन

1सी एंटरप्राइज़ 8.3 की उत्पादकता बढ़ाने में सबसे महत्वपूर्ण बिंदुओं में से एक है अनुकूलनअनुरोध. यह बात भी बहुत महत्वपूर्ण है जब प्रमाणीकरण पारित करना. नीचे हम गैर-इष्टतम क्वेरी प्रदर्शन और अनुकूलन विधियों के विशिष्ट कारणों के बारे में बात करेंगे।

WHERE निर्माण का उपयोग करके वर्चुअल तालिका में चयन

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

सही:

चुनना

से
संचय का रजिस्टर। संगठनों के प्रतिभागियों के साथ पारस्परिक निपटान।
,
संगठन = &संगठन
और व्यक्तिगत = और व्यक्तिगत) संगठनों के प्रतिभागियों के साथ आपसी समझौते कैसे संतुलित होते हैं

गलत:

चुनना
संगठनों के प्रतिभागियों के साथ पारस्परिक समझौता राशि शेष
से
संचय का रजिस्टर। संगठनों के प्रतिभागियों के साथ पारस्परिक निपटान। शेष (,) संगठनों के प्रतिभागियों के साथ पारस्परिक निपटान कैसे होता है
कहाँ
संगठनों के प्रतिभागियों के साथ आपसी समझौते संतुलन संगठन = और संगठन
तथा संगठनों के प्रतिभागियों के साथ पारस्परिक समझौता व्यक्तिगत = एवंव्यक्तिगत

एक बिंदु का उपयोग करके किसी जटिल प्रकार के फ़ील्ड का मान प्राप्त करना

किसी बिंदु के माध्यम से किसी क्वेरी में जटिल प्रकार का डेटा प्राप्त करते समय, सिस्टम बाएं जोड़ से ठीक उतनी ही तालिकाओं से जुड़ता है जितनी जटिल प्रकार के क्षेत्र में संभावित प्रकार होते हैं।

उदाहरण के लिए, रजिस्टर रिकॉर्ड फ़ील्ड - रजिस्ट्रार तक पहुंच को अनुकूलित करना बेहद अवांछनीय है। रजिस्ट्रार के पास एक समग्र डेटा प्रकार होता है, जिसमें सभी संभावित दस्तावेज़ प्रकार होते हैं जो रजिस्टर में डेटा लिख ​​सकते हैं।

गलत:

चुनना
रिकॉर्ड सेट.रिकॉर्डर.दिनांक,
रिकार्डसेट.मात्रा
से
रजिस्टर संचयन.उत्पादसंगठन सेटरिकॉर्ड्स के रूप में

अर्थात्, वास्तव में, ऐसी क्वेरी एक तालिका तक नहीं, बल्कि 22 डेटाबेस तालिकाओं (इस रजिस्टर में 21 रजिस्ट्रार प्रकार हैं) तक पहुँच प्राप्त करेगी।

सही:

चुनना
पसंद
जब उत्पादसंगठन.रजिस्ट्रार लिंक दस्तावेज़.उत्पादों और सेवाओं की बिक्री
फिर व्यक्त करें (उत्पादसंगठन। दस्तावेज़ के रूप में रजिस्ट्रार। माल सेवाओं की बिक्री)। दिनांक
जब GoodsOrg.Registrar लिंक दस्तावेज़. GoodsServices की रसीद
फिर व्यक्त करें (माल संगठन रजिस्ट्रार दस्तावेज़ के रूप में। माल सेवाओं की प्राप्ति)। दिनांक
दिनांक के रूप में समाप्त करें,
उत्पादसंगठन.मात्रा
से
रजिस्टर संचयन.उत्पादसंगठन उत्पादसंगठन के रूप में

या दूसरा विकल्प ऐसी जानकारी को विवरण में जोड़ना है, उदाहरण के लिए, हमारे मामले में, एक तारीख जोड़ना।

सही:

चुनना
उत्पादसंगठन.तिथि,
उत्पादसंगठन.मात्रा
से
संगठनों के सामान के रूप में संचय का रजिस्टर

सम्मिलित स्थिति में उपश्रेणियाँ

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

गलत:

चुनना …

बाँया जोड़ (
RegisterInformation.Limits से चयन करें
कहाँ …
द्वारा समूह बनाएं...
) द्वारा …

सही:

चुनना …
सीमाएं लगाएं
सूचना रजिस्टर.सीमाओं से
कहाँ …
द्वारा समूह बनाएं...
द्वारा सूचकांक...;

चुनना …
दस्तावेज़ से वस्तुओं और सेवाओं की बिक्री
बाएँ शामिल होने की सीमाएँ
द्वारा …;

वर्चुअल टेबल्स के साथ रिकॉर्ड्स को जोड़ना

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

गैर-अनुक्रमित फ़ील्ड के आधार पर चयन का उपयोग करना

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

प्रत्येक स्थिति के लिए एक उपयुक्त सूचकांक होना चाहिए। एक उपयुक्त सूचकांक वह है जो निम्नलिखित आवश्यकताओं को पूरा करता है:

  1. सूचकांक में शर्त में सूचीबद्ध सभी फ़ील्ड शामिल हैं।
  2. ये फ़ील्ड सूचकांक की बिल्कुल शुरुआत में हैं।
  3. ये चयन लगातार होते हैं, अर्थात, जो मान क्वेरी स्थिति में शामिल नहीं होते हैं, उनके बीच "वेज्ड" नहीं होते हैं।

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

तार्किक या शर्तों का उपयोग करना

बस इतना ही, इस लेख में क्वेरी अनुकूलन के बुनियादी पहलुओं को शामिल किया गया है जो प्रत्येक 1C विशेषज्ञ को पता होना चाहिए।

क्वेरी विकास और अनुकूलन पर एक बहुत ही उपयोगी निःशुल्क वीडियो पाठ्यक्रम, मैं पुरजोर अनुशंसा करता हूंशुरुआती और अधिक के लिए!

अनुरोध .मूलपाठ = "चुनना | स्टोरेजयूनिट्स.लिंक |से | निर्देशिका.यूएसस्टोरेजयूनिट्सस्टोरेजयूनिट्स का उपयोग कैसे करें // उदाहरण 1: खाली बूलियन मान के साथ तुलना: |कहां | स्टोरेजयूनिट्स.AllowSelectionFromReserveZone = गलत // उदाहरण 2. लेकिन यदि इस बूलियन को परिभाषित किया गया है, तो यह इस तरह बेहतर है: // एक नकारात्मक बूलियन के लिए शर्त: |कहां | भंडारण इकाइयाँ नहीं। रिजर्व ज़ोन से चयन की अनुमति दें // उदाहरण 3. एक खाली फ़ील्ड की स्थिति के आधार पर चयन जिसमें "एक विशिष्ट प्रकार की निर्देशिका" प्रकार है |कहां | स्टोरेजयूनिट्स.एक्टिवसेलेक्शनएरिया = VALUE(Directory.usSelectionArea.EmptyRef) // उदाहरण 3ए. "एक विशिष्ट प्रकार का दस्तावेज़" प्रकार वाले खाली फ़ील्ड की स्थिति के आधार पर चयन |कहां | ourInformationRegister.Document = VALUE(Document.ourDocument.EmptyLink) // उदाहरण 3बी। "दस्तावेज़" प्रकार के खाली फ़ील्ड की स्थिति के आधार पर चयन अलग - अलग प्रकार" (समग्र क्षेत्र) |कहां | (ourInformationRegister.Document = VALUE(Document.ourDocument1.EmptyLink) | या ourInformationRegister.Document = VALUE(Document.ourDocument2.EmptyLink) | या... (आदि - हम इस मिश्रित क्षेत्र के सभी संभावित प्रकारों के लिए शर्तों को क्रमिक रूप से सूचीबद्ध करते हैं) ) // उदाहरण 4. या इसके विपरीत, यदि आपको "स्ट्रिंग" प्रकार का भरा हुआ मान चुनने की आवश्यकता है, तो स्थिति मदद करेगी: |कहां | भंडारण इकाई.नाम > """" // उदाहरण 5. यदि आपको समग्र डेटा प्रकार के साथ किसी विशिष्ट प्रकार के दस्तावेज़ों का चयन करने की आवश्यकता है, उदाहरण के लिए, "रनिंगटास्क" रजिस्टर में, "टास्क" संसाधन में एक समग्र प्रकार होता है, जिसके मानों के बीच दस्तावेज़ "चयन" संभव है |कहां | एक्सप्रेस (सूचना रजिस्टर निष्पादित कार्य। दस्तावेज़ के रूप में कार्य। चयन) लिंक दस्तावेज़। चयन // उदाहरण 5ए. एक और समान उदाहरण जब आपको किसी विशिष्ट प्रकार के दस्तावेज़ों का चयन करने की आवश्यकता होती है | विकल्प | कब व्यक्त करें (दस्तावेजों का एजी पत्राचार। दस्तावेज़बीयू एएस दस्तावेज़। वस्तुओं और सेवाओं की रसीद) लिंक दस्तावेज़ फिर ""वस्तुओं और सेवाओं की प्राप्ति"" | कब व्यक्त करें (एजी दस्तावेजों का पत्राचार। दस्तावेज़बीयू एएस दस्तावेज़। वस्तुओं और सेवाओं की बिक्री) लिंक दस्तावेज़ फिर ""वस्तुओं और सेवाओं की बिक्री"" | अन्यथा """" | दस्तावेज़ दृश्य के रूप में समाप्त करें // उदाहरण 6. अपरिभाषित मान की शर्त के अनुसार चयन: |कहां | SaveSettings.User = अपरिभाषित // उदाहरण 7. संचलन के प्रकार के आधार पर चयन संचय रजिस्टर की "आने वाली", "व्यय" - इसी तरह): |कहां | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // उदाहरण 8. किसी अनुरोध में कैसे इंगित करें कि अनुरोध को निष्पादित करना आवश्यक नहीं है (उदाहरण के लिए, आपको प्रोग्रामेटिक रूप से, कुछ शर्तों के आधार पर, एक खाली अनुरोध परिणाम लौटाने की आवश्यकता है - Request.Text = StrReplace(Request.Text, "कहाँ Doc.Link = &DocumentLink", "झूठ कहाँ है");). ऐसा करने के लिए, बस "कहां गलत है" शर्त जोड़ें। वैसे, नमूने में अनुरोधित डेटा की मात्रा की परवाह किए बिना, ऐसे अनुरोध को तुरंत निष्पादित किया जाएगा। |झूठ कहाँ है // उदाहरण 9. यह जांचना कि क्वेरी परिणाम में डेटा है: यदि नहींअनुरोध.निष्पादित करना().खाली() तब // उदाहरण 10. रिक्त तिथि के आधार पर चयन: |कहां | tbStrings.CancelationDate = DATETIME(1, 1, 1)

मैंने अपना योगदान देने और भाषा की उन विशेषताओं का वर्णन करने का निर्णय लिया जिनकी चर्चा उपरोक्त लेखों में नहीं की गई थी। यह लेख शुरुआती डेवलपर्स के लिए लक्षित है।

1. "IZ" डिज़ाइन।

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

निर्देशिका चुनें.बैंक.*

बैंक निर्देशिका से सभी फ़ील्ड का चयन करता है। और अनुरोध के समान है:

बैंकों का चयन करें। * निर्देशिका से। बैंकों के रूप में बैंक

2. संदर्भ फ़ील्ड द्वारा डेटा ऑर्डर करना

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

इस मामले में, दस्तावेज़ों के लिए ऑर्डर "दिनांक->संख्या" क्रम में होगा, संदर्भ पुस्तकों के लिए "मुख्य दृश्य" में होगा। यदि ऑर्डरिंग संदर्भ फ़ील्ड द्वारा नहीं होती है, तो "ऑटो ऑर्डर" निर्माण का उपयोग करने की अनुशंसा नहीं की जाती है।

कुछ मामलों में, "ऑटो ऑर्डर" निर्माण चयन प्रक्रिया को धीमा कर सकता है। इसी तरह, आप दस्तावेज़ों के लिए ऑटो-ऑर्डर किए बिना फिर से लिख सकते हैं:

3. एक संदर्भ प्रकार का पाठ प्रतिनिधित्व प्राप्त करना। "प्रस्तुति" डिज़ाइन.

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

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

4. टेम्पलेट के अनुसार डेटा का नमूना लेने की शर्त।

उदाहरण के लिए, आपको प्राप्त करने की आवश्यकता है मोबाइल फ़ोनप्रकार के कर्मचारी (8 -123-456-78-912)। ऐसा करने के लिए, आपको अनुरोध में निम्नलिखित शर्त निर्धारित करनी होगी:

निर्देशिका से कर्मचारी.नाम, कर्मचारी.फोन को फोन के रूप में चुनें। कर्मचारियों को कर्मचारियों के रूप में चुनें जहां फोन "____-___-__-__" जैसा हो।

"_" वर्ण एक सेवा वर्ण है और किसी भी वर्ण को प्रतिस्थापित करता है।

5. योग और समूह का एक साथ उपयोग।


योग का उपयोग अक्सर समूहों के संयोजन में किया जाता है, इस मामले में, कुल कार्यों को योग में निर्दिष्ट नहीं किया जा सकता है।

सेवाओं का प्रावधान चुनें। संगठन के रूप में संगठन, सेवाओं का प्रावधान। नामकरण के रूप में नामकरण, एसयूएम (सेवाओं का प्रावधान। दस्तावेज़ की मात्रा) दस्तावेज़ से दस्तावेज़ का योग। सेवाओं का प्रावधान सेवाओं के प्रावधान के रूप में सेवाओं का समूह। सेवाओं का प्रावधान। संगठन, प्रावधान सेवाओं का नामकरण सामान्य, संगठन, नामकरण द्वारा परिणाम

इस स्थिति में, क्वेरी लगभग निम्न क्वेरी के समान ही वापस आएगी:

सेवाओं के प्रावधान का चयन करें। संगठन के रूप में संगठन, सेवाओं का प्रावधान। नामकरण के रूप में नामकरण, सेवाओं का प्रावधान। दस्तावेज़ की मात्रा दस्तावेज़ से दस्तावेज़ की मात्रा। सेवाओं के प्रावधान के रूप में सेवाओं का प्रावधान परिणाम राशि (दस्तावेज़ की मात्रा) सामान्य, संगठन द्वारा, नामपद्धति

केवल पहली क्वेरी ही समान नामकरण वाले रिकॉर्ड को संक्षिप्त कर देगी।

6. असंदर्भित क्षेत्र।

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

अनुरोध:

इस प्रकार दर्शाया जा सकता है:

भुगतान.लिंक, भुगतान.संगठन, भुगतान.संगठन, संगठन चुनें। दस्तावेज़ से प्रशासनिक इकाई। भुगतान के रूप में भुगतान बाएँ निर्देशिका में शामिल हों। संगठन के रूप में संगठन सॉफ़्टवेयर भुगतान। संगठन = संगठन। लिंक

किसी समग्र प्रकार के संदर्भ फ़ील्ड को डीरेफ़रेंस करते समय, फ़्रेमवर्क उन सभी तालिकाओं में अंतर्निहित जोड़ बनाने का प्रयास करता है जो उस फ़ील्ड के प्रकार का हिस्सा हैं। इस मामले में, क्वेरी इष्टतम नहीं होगी यदि यह स्पष्ट रूप से ज्ञात है कि यह किस प्रकार का फ़ील्ड है, तो ऐसे फ़ील्ड को एक निर्माण के साथ सीमित करना आवश्यक है अभिव्यक्त करना().

उदाहरण के लिए, एक संचय रजिस्टर "अवितरित भुगतान" है, जहां कई दस्तावेज़ रजिस्ट्रार के रूप में कार्य कर सकते हैं। इस मामले में, रजिस्ट्रार विवरण के मान इस प्रकार प्राप्त करना गलत है:

रजिस्टर संचय से UnallocatedPayments.Registrar.Date, ..... को UnallocatedPayments के रूप में चुनें।

आपको समग्र फ़ील्ड के प्रकार को लॉगर तक सीमित रखना चाहिए:

रजिस्टर एक्युमुलेशन से एक्सप्रेस(अनअलोकेटेडपेमेंट्स.रजिस्टर एज़ डॉक्यूमेंट.पेमेंट्स).दिनांक, ..... चुनें। अनअलोकेटेडपेमेंट्स एज़ अनअलोकेटेडपेमेंट्स

7. निर्माण "कहां"

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

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

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

भुगतान का चयन करें। भुगतान के रूप में लिंक करें, भुगतान। ग्राहक के रूप में शेयरधारक दस्तावेज़ से भुगतान का स्थान। भुगतान के रूप में भुगतान जहां भुगतान। शाखा = &शाखा; ///////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// चयन करें। ग्राहक के रूप में लिंक करें, ISNULL(tPayment.Payment, "") निर्देशिका से भुगतान के रूप में। ग्राहक AS ग्राहकों ने भुगतान से कनेक्शन छोड़ दिया, भुगतान सॉफ़्टवेयर क्लाइंट के रूप में। लिंक = भुगतान से।ग्राहक

आप इस स्थिति से दूसरे तरीके से निपट सकते हैं। दो तालिकाओं के बीच संबंध पर सीधे "कहां" शर्त लागू करना आवश्यक है। उदाहरण:

ग्राहकों का चयन करें। लिंक, भुगतान। निर्देशिका से लिंक। यूएस_सब्सक्राइबर के रूप में यूएस_सब्सक्राइबर ने कनेक्शन दस्तावेज़ छोड़ दिया। भुगतान सॉफ्टवेयर के रूप में भुगतान (क्लाइंट। लिंक = भुगतान। क्लाइंट और भुगतान। क्लाइंट का नाम "चीनी पैकेट" जैसा) ग्राहकों द्वारा समूह। लिंक, भुगतान। जोड़ना

8. नेस्टेड और वर्चुअल टेबल्स के साथ जुड़ता है

नेस्टेड क्वेरीज़कुछ स्थितियों के आधार पर डेटा पुनः प्राप्त करना अक्सर आवश्यक होता है। यदि आप उन्हें अन्य तालिकाओं के साथ संयोजन में उपयोग करते हैं, तो यह क्वेरी के निष्पादन को गंभीर रूप से धीमा कर सकता है।

उदाहरण के लिए, हमें कुछ ग्राहकों के लिए वर्तमान तिथि तक शेष राशि प्राप्त करने की आवश्यकता है।

UnallocatedPaymentsBalances.Customer का चयन करें, UnallocatedPaymentsBalances.AmountBalance FROM (क्लाइंट का चयन करें। डायरेक्ट्री से लिंक के रूप में लिंक करें। क्लाइंट जहां क्लाइंट हैं वहां क्लाइंट के रूप में लिंक करें। (&Clients)) नेस्टेडक्वेरी के रूप में नेस्टेड द्वारा UnallocatedPayments के रूप में शामिल हों nyRequest.Link = UnallocatedPaymentsBalances. ग्राहक

ऐसी क्वेरी को निष्पादित करते समय, डीबीएमएस ऑप्टिमाइज़र एक योजना चुनते समय त्रुटियां कर सकता है, जिससे क्वेरी का इष्टतम निष्पादन नहीं होगा। दो तालिकाओं को जोड़ते समय, DBMS ऑप्टिमाइज़र दोनों तालिकाओं में रिकॉर्ड की संख्या के आधार पर एक तालिका में शामिल होने वाले एल्गोरिदम का चयन करता है। यदि कोई नेस्टेड क्वेरी है, तो नेस्टेड क्वेरी द्वारा लौटाए गए रिकॉर्ड की संख्या निर्धारित करना बेहद मुश्किल है। इसलिए, आपको नेस्टेड क्वेरीज़ के बजाय हमेशा अस्थायी तालिकाओं का उपयोग करना चाहिए। तो चलिए अनुरोध को फिर से लिखते हैं।

ग्राहकों का चयन करें। लिंक के रूप में लिंक करें, निर्देशिका से ग्राहकों को रखें। ग्राहकों को ग्राहकों के रूप में कहां रखें
क्लाइंट्स.लिंक बी (&क्लाइंट्स); ///////////////////////////////////////////// // //////////////////////////// चयन करें tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, tClients से जैसे ही tClients Join RegisterAccumulations.UnallocatedPayments.Balances (, client IN (tClients चुनें। tClients से लिंक करें)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

इस मामले में, ऑप्टिमाइज़र यह निर्धारित करने में सक्षम होगा कि अस्थायी तालिका tClients कितने रिकॉर्ड का उपयोग करती है और तालिकाओं में शामिल होने के लिए इष्टतम एल्गोरिदम का चयन करने में सक्षम होगी।

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

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

ग्राहकों का चयन करें। लिंक के रूप में लिंक करें, निर्देशिका से ग्राहकों को रखें। ग्राहकों को ग्राहकों के रूप में लिंक द्वारा अनुक्रमित करें जहां
क्लाइंट्स.लिंक बी (&क्लाइंट्स); ///////////////////////////////////////////// // //////////////////////////// चयन करें UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS क्लाइंट PLACE Balance FROM RegisterAccumulations.UnallocatedPayments.Balances(, क्लाइंट B ( tClients का चयन करें। tClients से लिंक)) UnallocatedPaymentsBalances के रूप में; ///////////////////////////////////////////// // ///////////////////////////////////////////////////// चुनें tClients.Link, toRemainders.AmountRemaining AS Amount शेष from tClients as tClients LEFT JOIN toRemaining as Remainder PO tClients.Link = tRemainings.ग्राहक

9.अनुरोध के परिणाम की जाँच करना।

क्वेरी का परिणाम खाली हो सकता है; खाली मानों की जांच करने के लिए, निम्नलिखित निर्माण का उपयोग करें:

ResRequest = Request.Execute(); यदि resQuery.Empty() तो वापस लौटें; अंतयदि;

तरीका खाली()तरीकों से पहले इस्तेमाल किया जाना चाहिए चुनना()या उतारना(), क्योंकि संग्रह को पुनः प्राप्त करने में समय लगता है।

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

अनुरोध = नया अनुरोध; Query.Text = "चुनें | क्लाइंट्स.लिंक, | क्लाइंट्स.जन्मतिथि |FROM | डायरेक्ट्री.क्लाइंट्स AS क्लाइंट्स | WHERE | क्लाइंट्स.लिंक = &क्लाइंट"; TableClients Loop Query.SetParameter("क्लाइंट", क्लाइंट) से प्रत्येक पंक्ति के लिए;

QueryResult = Query.Execute().Select(); अंतचक्र;

यह सिस्टम को लूप में अनुरोध की जाँच करने वाले सिंटैक्स से बचाएगा।

11. निर्माण "हो रहा है"।

भुगतान का चयन करें। ग्राहक, राशि (भुगतान राशि) दस्तावेज़ से राशि के रूप में। भुगतान भुगतान के रूप में जहां माह (भुगतान तिथि) = 9 भुगतान द्वारा समूह। ग्राहक के पास राशि (भुगतान राशि) > 13000

कंस्ट्रक्टर में, ऐसा करने के लिए, बस "शर्तें" टैब पर जाएं, एक नई शर्त जोड़ें और "कस्टम" चेकबॉक्स को चेक करें। तो बस लिखो राशि (भुगतान राशि) > 13000


12. शून्य मान

मैं यहां तीन-मूल्यवान तर्क के सिद्धांतों का वर्णन नहीं करूंगा, इस विषय पर डेटाबेस में कई लेख हैं। कैसे के बारे में संक्षेप में व्यर्थक्वेरी के परिणाम को प्रभावित कर सकता है. मान NULL वास्तव में एक मान नहीं है, और यह तथ्य कि मान अपरिभाषित है अज्ञात है। इसलिए, NULL के साथ कोई भी ऑपरेशन NULL लौटाता है, चाहे वह जोड़, घटाव, विभाजन या तुलना हो। शून्य मान की तुलना शून्य मान से नहीं की जा सकती क्योंकि हम नहीं जानते कि तुलना किससे करें। वे। ये दोनों तुलनाएँ हैं: NULL = NULL, NULL<>NULL सत्य या असत्य नहीं है, यह अज्ञात है।

आइए एक उदाहरण देखें.

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

विशेषता के रूप में "कोई भुगतान नहीं" चुनें, भुगतान के स्थान पर दस्तावेज़ स्थान के रूप में शून्य चुनें; ///////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////////////////// चयन करें। क्लाइंट के रूप में लिंक करें, भुगतान करें। लिंक करें कि भुगतान कैसे होता है, डायरेक्ट्री से tClientPayment डालें। क्लाइंट के रूप में क्लाइंट ने कनेक्शन दस्तावेज़ छोड़ा। भुगतान एएस भुगतान सॉफ्टवेयर क्लाइंट.लिंक = भुगतान.शेयरधारक; ///////////////////////////////////////////// // /////////////////////////// tClientPayment से tClientPayment का चयन करें

दूसरी अस्थायी तालिका tClientPayment पर ध्यान दें। बाएं जुड़ाव से मैं सभी ग्राहकों और इन ग्राहकों के लिए सभी भुगतानों का चयन करता हूं। उन ग्राहकों के लिए जिनके पास भुगतान नहीं है, "भुगतान" फ़ील्ड शून्य होगी। तर्क का पालन करते हुए, पहली अस्थायी तालिका "tPayments" में मैंने 2 फ़ील्ड निर्दिष्ट किए, उनमें से एक NULL, दूसरी पंक्ति "भुगतान नहीं है"। तीसरी तालिका में मैं शामिल होता हूं आंतरिक रूप से जुड़ा"भुगतान" और "दस्तावेज़" फ़ील्ड के लिए तालिकाएँ "tClientPayment" और "tPayment"। हम जानते हैं कि पहली तालिका में "दस्तावेज़" फ़ील्ड शून्य है, और दूसरी तालिका में, जिनके पास "भुगतान" फ़ील्ड में भुगतान नहीं है वे भी शून्य हैं। ऐसा कनेक्शन हमें क्या लौटाएगा? लेकिन यह कुछ भी वापस नहीं करेगा. क्योंकि तुलना NULL = NULL सत्य का मूल्यांकन नहीं करती है।

अपेक्षित परिणाम लौटाने के अनुरोध के लिए, आइए इसे फिर से लिखें:

विशेषता के रूप में "कोई भुगतान नहीं" चुनें, भुगतान के दस्तावेज़ स्थान के रूप में मान (Document.Payment.EmptyLink) चुनें; ///////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////चयन करें। क्लाइंट का चयन करें। क्लाइंट के रूप में लिंक करें, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) कैसे भुगतान निर्देशिका से tClientPayment डालें। ग्राहकों द्वारा छोड़े गए कनेक्शन दस्तावेज़ के रूप में ग्राहक। ग्राहकों द्वारा भुगतान के रूप में भुगतान। लिंक = भुगतान। शेयरधारक; ///////////////////////////////////////////// // /////////////////////////// tClientPayment से tClientPayment का चयन करें

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

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

13. "चॉइस व्हेन...थेन...एंड" डिज़ाइन की एक अनिर्दिष्ट विशेषता।

ऐसे मामले में जब अनुरोध में "शर्तों" के निर्माण का वर्णन करना आवश्यक हो, हम मानक वाक्यविन्यास का उपयोग करते हैं:

चयन का चयन करें जब Users.Name = "वास्या पुपकिन" तब "हमारा पसंदीदा कर्मचारी" अन्यथा "हम यह नहीं जानते" निर्देशिका से फ़ील्ड 1 के रूप में समाप्त होता है। Users AS Users

लेकिन क्या होगा यदि, उदाहरण के लिए, हमें अनुरोध में महीने का नाम प्राप्त करने की आवश्यकता हो? किसी अनुरोध में एक विशाल निर्माण लिखना बदसूरत और समय लेने वाला है, इसलिए उपरोक्त लेखन का यह रूप हमारी मदद कर सकता है:

महीना चुनें (यूएस_गणना खपत_टर्नओवर शेड्यूल.गणना अवधि) कब 1 तब "जनवरी" कब 2 तब "फरवरी" कब 3 तब "मार्च" कब 4 तब "अप्रैल" कब 5 फिर "मई" कब 6 तब "जून" कब 7 तब "जुलाई" कब 8 तब "अगस्त" जब 9 तब "सितंबर" जब 10 तब "अक्टूबर" जब 11 तब "नवंबर" जब 12 तब "दिसंबर" एक महीने के रूप में समाप्त होता है

अब डिज़ाइन कम बोझिल लगता है और समझने में आसान है।

14. अनुरोध का बैच निष्पादन।


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

उपयोगकर्ताओं का चयन करें। पूर्ण नाम के रूप में लिंक करें, उपयोगकर्ता। जन्मतिथि, उपयोगकर्ता। भूमिका निर्देशिका से vtUsers डालें। उपयोगकर्ताओं के रूप में उपयोगकर्ता; ///////////////////////////////////////////// // //////////////////////////// चुनें TueUsers.पूरा नाम, TueUsers.जन्मतिथि TueUsers से TueUsers के रूप में समूह TueUsers.पूरा नाम, TueUsers के अनुसार जन्म तिथि; ///////////////////////////////////////////// // //////////////////////////// चुनें wUsers.पूरा नाम, wUsers.भूमिका wUsers से wUsers के अनुसार समूहित करें wUsers.पूरा नाम, wUsers दिनांक जन्म से

tPackage = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

जैसा कि हम देख सकते हैं, क्वेरी को एक बैच में निष्पादित किया जा सकता है और परिणाम को एक सरणी के रूप में संसाधित किया जा सकता है। कुछ मामलों में यह बहुत सुविधाजनक है.

15. बैच अनुरोध में शर्तें

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

उपयोगकर्ता.व्यक्तिगत.नाम को नाम के रूप में चुनें, उपयोगकर्ता.व्यक्तिगत.जन्मतिथि को जन्मतिथि के रूप में चुनें, उपयोगकर्ता.व्यक्तिगत.कोड को कोड के रूप में चुनें निर्देशिका से उपयोगकर्ता को स्थान दें।उपयोगकर्ता को उपयोगकर्ता के रूप में चुनें; ///////////////////////////////////////////// // ///////////////////////////निर्देशिका से व्यक्तियों का चयन करें

आप इस तरह शर्तें लगा सकते हैं:

जहां व्यक्ति.कोड IN (मंगलवार उपयोगकर्ताओं से चयन करें TueUsers.Code) और व्यक्तियों.नाम IN (मंगलवार उपयोगकर्ताओं से चयन करें TueUsers.Code) और व्यक्तियों.जन्मतिथि IN (मंगलवार उपयोगकर्ताओं से TueUsers.DateBirth चुनें)

और आप इसे इस तरह कर सकते हैं:

कहां (व्यक्ति.कोड, व्यक्ति.नाम, व्यक्ति.जन्मतिथि) में (मंगलवार.कोड, मंगलउपयोगकर्ता.नाम, मंगलउपयोगकर्ता.जन्मतिथि का चयन मंगलवार से करें)

इसके अलावा व्यवस्था बनाए रखना भी जरूरी है।

16. बैच अनुरोध में "स्थिति" के लिए क्वेरी बिल्डर को कॉल करना

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

कंस्ट्रक्शन "बी" के बाद ब्रैकेट लगाना और ब्रैकेट के बीच खाली जगह (स्पेस) छोड़ना जरूरी है, इस स्पेस को सेलेक्ट करें और क्वेरी कंस्ट्रक्टर को कॉल करें। डिज़ाइनर के पास बैच क्वेरी की सभी तालिकाओं तक पहुंच होगी। तकनीक वर्चुअल रजिस्टर टेबल और "शर्तें" टैब दोनों पर काम करती है। बाद वाले मामले में, आपको "पी (मनमानी स्थिति)" बॉक्स को चेक करना होगा और संपादन मोड "एफ4" दर्ज करना होगा।

प्रश्न अक्सर अचानक ही बना दिए जाते थे और वे बस उन "तकनीकों" को स्पष्ट करने का काम करते हैं जिन पर मैं विचार कर रहा था।

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

अद्यतन1. अंक 11,12
upd2. अंक 13,14,15,16

प्रयुक्त साहित्य:
क्वेरी भाषा "1सी:एंटरप्राइज़ 8" - ई.यू. ख्रुस्तलेवा
1सी:एंटरप्राइज़ 8 प्रणाली में व्यावसायिक विकास।"