प्रोग्रामर की नोटबुक. प्रोग्रामर की नोटबुक 1सी चयन की अनुमति

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

क्वेरी भाषा 1सी एंटरप्राइज़ 8 - ऑपरेटर संरचना चयन

आइए SELECT ऑपरेटर की संरचना को देखें (ऑपरेटर के वैकल्पिक हिस्से वर्गाकार कोष्ठक में दर्शाए गए हैं)। 1C क्वेरी भाषा डेटा नमूने बनाने के लिए उपकरणों की एक विस्तृत श्रृंखला प्रदान करती है।

[अनुमति] [अलग] [प्रथम ए] [फ़ील्ड1] [उपनाम 1 के रूप में], [फ़ील्ड2] [उपनाम 2 के रूप में], ... [फ़ील्डएम] [उपनाम बी के रूप में] [अस्थायी तालिका का नाम डालें] [तालिका 1 से उपनाम तालिका 1 के रूप में [[आंतरिक जुड़ाव] चुनें ][बाएं जोड़][पूरा जोड़] तालिका2 उपनाम के रूप में तालिका2 [[आंतरिक जोड़][बाएं जोड़][पूर्ण जुड़ाव] अभिव्यक्ति1 के अनुसार उपनाम तालिकासी के रूप में टेबलसी [और अभिव्यक्ति2]...[और अभिव्यक्तिडी]] .. ... एक्सप्रेशन1 द्वारा [और एक्सप्रेशन2]...[और एक्सप्रेशनई]] ... [टेबलएफ एएस टेबलएफ उपनाम] ... ] [ग्रुपिंगफील्ड1 द्वारा ग्रुप[,] ... [ग्रुपिंगफिल्डजी]] [जहां एक्सप्रेशन1 [और अभिव्यक्ति2] ... [और अभिव्यक्तिएच]] [सभी को एकजुट करें...] [; ...] [अलियास1 द्वारा सूचकांक... उपनामबी] [कुल [एकत्रीकरणफ़ंक्शन(फ़ील्ड1)][,] [एकत्रीकरणफ़ंक्शन(फ़ील्ड2)][,] ... [एकत्रीकरणफ़ंक्शन(फ़ील्डआई)] [सामान्य][,] द्वारा ग्रुपिंगफ़ील्ड1][,] ... [ग्रुपिंगफ़ील्डजे]]

फ़ील्ड के साथ काम करने के लिए कीवर्ड और ब्लॉक

  • चुनना- ऑपरेटर की शुरुआत का संकेत देने वाला एक कीवर्ड;
  • अनुमतइंगित करता है कि चयन में तालिका रिकॉर्ड शामिल होना चाहिए जिसमें दिए गए उपयोगकर्ता के लिए पढ़ने की पहुंच हो;
  • विभिन्नइंगित करता है कि नमूने में केवल भिन्न (सभी क्षेत्रों में) प्रवाह शामिल होना चाहिए। दूसरे शब्दों में, डुप्लिकेट पंक्तियों को नमूने से बाहर रखा जाएगा;
  • पहले एकयदि आप यह कीवर्ड निर्दिष्ट करते हैं, तो क्वेरी द्वारा चयनित पंक्तियों में से केवल पहला ए चयन में शामिल किया जाएगा, जहां ए एक प्राकृतिक संख्या है;
  • फ़ील्ड ब्लॉक- यह ब्लॉक उन क्षेत्रों को इंगित करता है जिन्हें चयन में शामिल करने की आवश्यकता है। ये फ़ील्ड चयनित कॉलम होंगे. सबसे सरल मामले में, फ़ील्ड इस तरह दिखती है: तालिका उपनाम.TableFieldName AS फ़ील्ड उपनाम

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

तालिकाओं के साथ काम करने के लिए कीवर्ड और ब्लॉक

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

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

कीवर्ड और डेटा रूपांतरण ब्लॉक

  • समूह ब्लॉक- इस ब्लॉक का उपयोग तालिका पंक्तियों को समूहीकृत करने के लिए किया जाता है। यदि कीवर्ड के बाद फ़ील्ड के मान निर्दिष्ट किए जाते हैं तो पंक्तियों को एक में जोड़ दिया जाता है द्वारा समूह बनाएंवैसा ही हो जाओ. इस मामले में, अन्य सभी क्षेत्रों को कुल कार्यों का उपयोग करके सारांशित, औसत, अधिकतम या न्यूनतम किया जाता है। एग्रीगेट फ़ंक्शंस का उपयोग फ़ील्ड ब्लॉक में किया जाता है। उदाहरण: अधिकतम(TableAlias.TableFieldName) AS फ़ील्डअलियास
  • शर्त ब्लॉक- इस ब्लॉक में कीवर्ड के बाद कहाँतार्किक ऑपरेटरों द्वारा अलग किए गए सशर्त अभिव्यक्तियों को दर्शाया गया है और, या, किसी भी चयनित पंक्ति को नमूने में शामिल करने के लिए, यह आवश्यक है कि समुच्चय में सभी शर्तों का एक मान हो सत्य।
  • सब कुछ मिलाओ- इस कीवर्ड का उपयोग क्वेरीज़ (ऑपरेटरों) को संयोजित करने के लिए किया जाता है चुनना). 1C क्वेरी भाषा आपको कई क्वेरीज़ को एक में संयोजित करने की अनुमति देती है। क्वेरीज़ को मर्ज करने के लिए, उनके पास फ़ील्ड का समान सेट होना चाहिए;
  • «;» - अर्धविराम का उपयोग उन कथनों को अलग करने के लिए किया जाता है जो एक दूसरे से स्वतंत्र होते हैं चुनना;
  • द्वारा सूचकांक- कीवर्ड का उपयोग इसके बाद निर्दिष्ट फ़ील्ड को अनुक्रमित करने के लिए किया जाता है;
  • सारांश ब्लॉक- पेड़ जैसे नमूने बनाने के लिए उपयोग किया जाता है। कीवर्ड के बाद निर्दिष्ट प्रत्येक ग्रुपिंग फ़ील्ड के लिए द्वारा,चयन में एक अलग पंक्ति बनाई जाएगी. इस पंक्ति में, समग्र फ़ंक्शंस का उपयोग करके, कीवर्ड के बाद निर्दिष्ट फ़ील्ड के कुल मानों की गणना की जाएगी परिणाम।

क्या आप 1सी 8 क्वेरी भाषा सीखना जारी रखना चाहते हैं? फिर अगला लेख पढ़ें.

   

1C डेटाबेस डेटा के लिए इष्टतम QUERY तैयार करने के 17 नियम

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

अनुरोध निकाय वह निर्देश है जिसके अनुसार अनुरोध निष्पादित किया जाना चाहिए। अनुरोध निकाय वर्णन करता है:

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

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

1C प्लेटफ़ॉर्म की क्वेरी भाषा अन्य SQL भाषाओं के सिंटैक्स के समान है, लेकिन इसमें अंतर हैं। अंतर्निहित क्वेरी भाषा के मुख्य लाभ हैं: डीरेफ़रेंसिंग फ़ील्ड, वर्चुअल टेबल की उपस्थिति, परिणामों के साथ सुविधाजनक कार्य, प्रश्नों में अनटाइप फ़ील्ड।

1C प्लेटफ़ॉर्म क्वेरी भाषा में डेटाबेस क्वेरी लिखने के लिए अनुशंसाएँ:

1) अनुरोध निकाय में पूर्वनिर्धारित कॉन्फ़िगरेशन डेटा हो सकता है, जैसे:

  • एनम मान;
  • पूर्वनिर्धारित डेटा:
  • धार्मिक आस्था;
  • विशेषताओं के प्रकार की योजनाएँ;
  • खातों के चार्ट;
  • गणना के प्रकार की योजनाएँ;
  • खाली लिंक;
  • व्यवसाय प्रक्रिया मार्ग बिंदु मान।

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

शाब्दिक उपयोग का उदाहरण अर्थ:

  • जहां शहर = मान(निर्देशिका.शहर.मास्को)
  • जहां शहर = मान(निर्देशिका.शहर.खाली लिंक)
  • WHEREProductType = VALUE(गणना.ProductTypes.Service)
  • WHEREMmovementType = VALUE(MovementTypeAccumulation.Incoming)
  • जहां रूटप्वाइंट = VALUE(BusinessProcess.BusinessProcess1.RoutePoint.Action1

2) निर्देशों का उपयोग करना ऑटो ऑर्डरक्वेरी को पूरा होने में लंबा समय लग सकता है, इसलिए यदि सॉर्टिंग की आवश्यकता नहीं है, तो इसका उपयोग बिल्कुल न करना बेहतर है। ज्यादातर मामलों में, निर्देश सॉर्टिंग का उपयोग करना सबसे अच्छा है द्वारा आदेश.

ऑटो-ऑर्डरिंग निम्नलिखित सिद्धांतों के अनुसार काम करती है:

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

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

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

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

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

कोड 1C v 8.x चुनें
एक्सप्रेस (शेष माल। दस्तावेज़ के रूप में रजिस्ट्रार। माल की प्राप्ति)। रसीद संख्या के रूप में संख्या,
एक्सप्रेस (शेष माल। दस्तावेज के रूप में रजिस्ट्रार। माल की प्राप्ति)। प्राप्ति की तारीख के रूप में तारीख
से
शेष माल के रूप में संचय का रजिस्टर

यदि किसी टाइप कास्ट को व्यवहार्य नहीं माना जाता है, तो टाइप कास्ट का परिणाम मूल्य होगा व्यर्थ.

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

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

कोड 1C v 8.x // फ़ील्ड संख्या और संरचना का चयन करें
// वर्चुअल टेबल से दस्तावेज़.व्यय
संरचना के रूप में लिंक, संख्या, खाली तालिका (संख्या, आइटम, मात्रा) का चयन करें
दस्तावेज़ से. व्यय चालान
सब कुछ मिलाओ
लिंक चुनें.संख्या, सामग्री.(लाइननंबर, उत्पाद, मात्रा)
दस्तावेज़ से. चालान दस्तावेज़. चालान. संरचना.*

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

कोड 1C v 8.x // यह पता लगाना आवश्यक है कि कौन से प्रतिपक्ष हैं
// माल इस अवधि के लिए भेज दिया गया था।
विभिन्न का चयन करें
दस्तावेज़.चालान.प्रतिपक्ष

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

कोड 1C v 8.x चुनें
वस्तुओं और सेवाओं की प्राप्ति (एसयूएम (मात्रा), नामकरण)।
वस्तुओं और सेवाओं की प्राप्ति लिंक,
सामान और सेवाओं की प्राप्ति
से
दस्तावेज़। वस्तुओं और सेवाओं की प्राप्ति। वस्तुओं और सेवाओं की प्राप्ति कैसे होती है
द्वारा समूह बनाएं
वस्तुओं और सेवाओं की प्राप्ति (नामपद्धति)

9) निर्देश ISNULLमूल्य को प्रतिस्थापित करने का इरादा है व्यर्थकिसी अन्य मान पर, लेकिन यह न भूलें कि यदि पहले पैरामीटर का प्रकार एक स्ट्रिंग या संख्या है तो दूसरा पैरामीटर पहले के प्रकार में परिवर्तित हो जाएगा।

10) मुख्य तालिका तक पहुँचते समय, आप सशर्त रूप से अधीनस्थ तालिका में डेटा तक पहुँच सकते हैं। इस सुविधा को अधीनस्थ तालिका के डीरेफ़रेंसिंग फ़ील्ड कहा जाता है।

उदाहरण (सारणीबद्ध अनुभाग में किसी विशिष्ट उत्पाद वाले दस्तावेज़ खोजें):

अधीनस्थ तालिका Receipt.Goods पर एक क्वेरी पर इस क्वेरी का लाभ यह है कि यदि दस्तावेज़ों में डुप्लिकेट हैं, तो क्वेरी परिणाम अलग-अलग कीवर्ड का उपयोग किए बिना केवल अद्वितीय दस्तावेज़ लौटाएगा।

11) दिलचस्प विकल्पऑपरेटर बी ऐसे सेट (फ़ील्ड1, फ़ील्ड2, ..., फ़ील्डएन) बी (फ़ील्ड1, फ़ील्ड2, ..., फ़ील्डएन) के सेट में एक ऑर्डर किए गए सेट को शामिल करने के लिए एक चेक है।

कोड 1C v 8.x चुनें
प्रतिपक्ष.लिंक
कहाँ
(प्रतिपक्ष.लिंक, उत्पाद.लिंक) बी
(बिक्री, ग्राहक, बिक्री, उत्पाद चुनें
रजिस्टर संचय से। बिक्री के रूप में बिक्री)
से
निर्देशिका.
निर्देशिका.उत्पाद

12) जब भी संभव हो वर्चुअल क्वेरी टेबल का उपयोग करें। क्वेरी बनाते समय, सिस्टम डेटा स्रोतों के रूप में कई वर्चुअल टेबल प्रदान करता है - ये टेबल हैं जो क्वेरी का परिणाम भी हैं जो सिस्टम कोड के संबंधित अनुभाग को निष्पादित करने के समय उत्पन्न करता है।

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

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

किसी डेवलपर के लिए उस डेटा तक पहुंच प्राप्त करना हमेशा संभव नहीं होता है जिस तक सिस्टम की पहुंच होती है।

13) ऑपरेशन के क्लाइंट-सर्वर मोड में, फ़ंक्शन सबस्ट्रिंग()संबंधित SQL कथन के SUBSTRING() फ़ंक्शन का उपयोग करके कार्यान्वित किया जाता है, जो SQL सर्वर डेटाबेस सर्वर को पास किया जाता है, जो SUBSTRING() फ़ंक्शन के परिणाम प्रकार की गणना करता है जटिल नियमइसके मापदंडों के प्रकार और मूल्यों के साथ-साथ उस संदर्भ पर निर्भर करता है जिसमें इसका उपयोग किया जाता है। ज्यादातर मामलों में, इन नियमों का क्वेरी निष्पादन पर कोई प्रभाव नहीं पड़ता है, लेकिन ऐसे समय होते हैं जब SQL सर्वर द्वारा गणना की गई अधिकतम परिणाम पंक्ति लंबाई क्वेरी निष्पादन के लिए महत्वपूर्ण होती है। यह ध्यान रखना महत्वपूर्ण है कि कुछ संदर्भों में SUBSTRING() फ़ंक्शन का उपयोग करते समय, इसके परिणाम की अधिकतम लंबाई बराबर हो सकती है ज्यादा से ज्यादा लंबाईस्ट्रिंग्स की एक सीमित लंबाई होती है, जो SQL सर्वर में 4000 वर्ण होती है। इससे क्वेरी अप्रत्याशित रूप से क्रैश हो सकती है:

SQL सर्वर के लिए Microsoft OLE DB प्रदाता: चेतावनी: क्वेरी प्रोसेसर ऑप्टिमाइज़र से क्वेरी प्लान तैयार नहीं कर सका क्योंकि कुल लंबाई सभीग्रुप बाय या ऑर्डर बाय क्लॉज में कॉलम 8000 बाइट्स से अधिक है।

HRESULT=80040E14, SQLSTATE=42000, मूल=8618

14) सावधानी से प्रयोग करें याडिजाइन में कहाँ, क्योंकि OR शर्त का उपयोग करने से क्वेरी काफी भारी हो सकती है। समस्या को डिज़ाइन द्वारा हल किया जा सकता है सब कुछ मिलाओ. उदाहरण:

कोड 1C v 8.x चुनें

से

कहाँ
_डेमो कॉन्ट्रैक्टर्स.लिंक =लिंक1
सब कुछ मिलाओ
चुनना
_डेमो कॉन्ट्रैक्टर्स.नाम पूरा
से
निर्देशिका._डेमो प्रतिपक्ष कैसे करें _डेमो प्रतिपक्ष
कहाँ
_डेमो कॉन्ट्रैक्टर्स.लिंक = लिंक2

15) हालत में नहींडिजाइन में कहाँक्वेरी निष्पादन समय बढ़ाता है, क्योंकि यह एक प्रकार का है नहीं (OR1 OR2...ORn), इसलिए बड़ी तालिकाओं के लिए उपयोग करने का प्रयास करें शून्य है शर्त के साथ बायां जोड़. उदाहरण:

कोड 1C v 8.x चुनें
_डेमो कॉन्ट्रैक्टर्स.लिंक
से
निर्देशिका._डेमो प्रतिपक्ष कैसे करें _डेमो प्रतिपक्ष
बाएं कनेक्शन दस्तावेज़._क्रेता डेमो ऑर्डर कैसे करें _क्रेता डेमो ऑर्डर
सॉफ़्टवेयर _डेमो प्रतिपक्ष। लिंक = _क्रेता का डेमो ऑर्डर
कहाँ
_क्रेता का डेमो ऑर्डर शून्य है

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

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

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

और एवगेनी गिलेव के वीडियो के अलावा: 1C पर प्रश्न लिखते समय विशिष्ट त्रुटियाँ:

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

1सी क्वेरी भाषा कार्य

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

1. समारोह दिनांक समय- यह फ़ंक्शन "दिनांक" प्रकार के साथ एक स्थिर फ़ील्ड बनाता है।

सिंटेक्स: दिनांक समय(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

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

2. दिनांक अंतर फ़ंक्शन- किसी एक आयाम (वर्ष, माह, दिन, घंटा, मिनट, सेकंड) में दो तिथियों के बीच का अंतर लौटाता है। माप को एक पैरामीटर के रूप में पारित किया जाता है।

सिंटेक्स: विभेदित दिनांक(<Дата1>, <Дата2>, <Тип>)

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

Query.Text = "चयन करें | भिन्न दिनांक (दिनांक समय (2015, 4, 17), दिनांक समय (2015, 2, 1), दिन) | दिनों की संख्या के अनुसार";

3. फ़ंक्शन मान- डेटाबेस से पूर्वनिर्धारित रिकॉर्ड के साथ एक स्थिर फ़ील्ड सेट करता है, आप किसी भी प्रकार का एक खाली लिंक भी प्राप्त कर सकते हैं।

सिंटैक्स: मान(<Имя>)

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

Request.Text = "SELECT //पूर्वनिर्धारित तत्व | VALUE(निर्देशिका.मुद्राएँ.Dollar) AS डॉलर, //खाली लिंक | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //transfer value | VALUE(Transfer) . कानूनी व्यक्ति। व्यक्तिगत) एएस व्यक्तिगत, //पूर्वनिर्धारित खाता मूल्य (खातों का चार्ट। स्व-लेखा। सामग्री) एएस खाता_10" ;

4. फ़ंक्शन चुनें- हमारे सामने IF निर्माण का एक एनालॉग है, जिसका उपयोग कोड में किया जाता है, केवल इसका उपयोग 1C प्रश्नों में किया जाता है।

सिंटेक्स: कब चुनें<Выражение>तब<Выражение>अन्यथा<Выражение>अंत

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

Request.Text = //यदि राशि 7500 से अधिक है, तो 300 रूबल की छूट होनी चाहिए, //इसलिए यदि स्थिति चालू हो जाती है तो फ़ंक्शन //राशि लौटाता है - 300 //अन्यथा अनुरोध केवल राशि लौटाएगा "चुनें | चुनें | जब TCReceipts.Amount > 7500 | तब TCReceipts.Amount - 300 | अन्यथा TCReceipts.Amount | AmountWithDiscount के रूप में समाप्त करें | FROM |

5. एक्सप्रेस समारोह- आपको एक विशिष्ट प्रकार के साथ एक स्थिर क्षेत्र को व्यक्त करने की अनुमति देता है।

सिंटेक्स: एक्सप्रेस (फ़ील्डनाम जैसा टाइपनाम)

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

Query.Text = "विभिन्न चुनें | सेल्स.रजिस्ट्रार.नंबर, | चुनें | जब सेल्स.रजिस्ट्रार दस्तावेज़.व्यय को लिंक करें | तब व्यक्त करें (सेल्स.रजिस्ट्रार दस्तावेज़.व्यय के रूप में) | अन्यथा चुनें | जब सेल्स.रजिस्ट्रार दस्तावेज़.कार्यान्वयन को लिंक करें | फिर व्यक्त करें (बिक्री रजिस्ट्रार दस्तावेज़ कार्यान्वयन के रूप में) |। अंत |। संख्या के रूप में संचय रजिस्टर करें";

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

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

Query.Text = "चयन करें | एक्सप्रेस (नामपद्धति। लाइन के रूप में टिप्पणी करें (300)) टिप्पणी के रूप में, | एक्सप्रेस (नामकरण। संख्या के रूप में योग (15,2)) योग के रूप में | FROM | निर्देशिका। नामकरण के रूप में नामकरण";

6. ISNULL फ़ंक्शन(वैकल्पिक वर्तनी ISNULL) - यदि फ़ील्ड NULL प्रकार का है, तो इसे फ़ंक्शन के दूसरे पैरामीटर से बदल दिया जाता है।

सिंटेक्स: शून्य(<Поле>, <ПодставляемоеЗначение>)

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

यह भी ध्यान दें कि हमेशा NULL प्रकार को कुछ मान से बदलने की सलाह दी जाती है, क्योंकि NULL प्रकार के साथ तुलना हमेशा FALSE लौटाती है, भले ही आप NULL की तुलना NULL से करें। अधिकतर, NULL मान तालिकाओं में शामिल होने (आंतरिक को छोड़कर सभी प्रकार के जुड़ाव) के परिणामस्वरूप बनते हैं।

Query.Text = //संपूर्ण आइटम और उसके शेष का चयन करें //यदि किसी आइटम में कोई शेष नहीं है, तो एक फ़ील्ड होगा //NULL जिसे मान 0 "SELECT | No. Link, | ISNULL" से बदल दिया जाएगा (ProductsInStockRemains.InStockRemaining, 0) कैसे शेष |

7. प्रतिनिधित्व समारोह- आपको अनुरोध फ़ील्ड का प्रतिनिधित्व प्राप्त करने की अनुमति देता है।

सिंटेक्स: प्रदर्शन(<НаименованиеПоля>)

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

Query.Text = "चयन | प्रतिनिधित्व(FreeRemainingRemains.Nomenclature) नामकरण के रूप में, | प्रतिनिधित्व(FreeRemainingRemaining.Warehouse) गोदाम के रूप में, | FreeRemainingRemaining.InStockRemaining |FROM |Accumulation Register.FreeRemaining.Remaining as FreeRemainingRemaining";

1C क्वेरी भाषा में निर्माण करता है

हमने आपसे ऊपर चर्चा की 1C क्वेरी भाषा फ़ंक्शन, अब विचार करने का समय आ गया है 1C क्वेरी भाषा में निर्माण करता है, वे कम महत्वपूर्ण और उपयोगी नहीं हैं, आइए शुरू करें।

1. निर्माण लिंक- संदर्भ प्रकार की जाँच के लिए एक तार्किक ऑपरेटर है। किसी विशिष्ट प्रकार के विरुद्ध किसी जटिल प्रकार के फ़ील्ड की जाँच करते समय अक्सर इसका सामना करना पड़ता है। सिंटेक्स: जोड़ना<Имя таблицы>

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

Request.Text = //यदि मान प्रकार लकड़हारा है दस्तावेज़ प्रवेश कक्ष, //तब अनुरोध "माल की रसीद" लौटाएगा, अन्यथा "माल की बिक्री" "चयन करें | चयन करें | जब शेष। रजिस्ट्रार लिंक दस्तावेज़। माल और सेवाओं की रसीद | फिर ""रसीद"" | अन्यथा ""उपभोग" " | END AS मूवमेंट टाइप | FROM | संचय रजिस्टर। गोदामों में शेष माल यथा अवशेष" ;

2. के बीच डिज़ाइन करें- यह ऑपरेटर जाँचता है कि मान निर्दिष्ट सीमा के भीतर है या नहीं।

सिंटेक्स: बीच में<Выражение>और<Выражение>

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

Request.Text = //संपूर्ण नामकरण प्राप्त करें जिसका कोड 1 से 100 तक की सीमा में है "SELECT | Nomenclature.Link |FROM | Directry.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. निर्माण बी और बी पदानुक्रम- जांचें कि क्या मान हस्तांतरित सूची में है (सरणियाँ, मूल्यों की तालिकाएँ, आदि को एक सूची के रूप में स्थानांतरित किया जा सकता है)। IN HIERARCHY ऑपरेटर आपको पदानुक्रम देखने की अनुमति देता है (खातों के चार्ट का उपयोग करने का एक उदाहरण)।

सिंटेक्स: में(<СписокЗначений>), पदानुक्रम में(<СписокЗначений>)

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

Request.Text = //खाते के सभी उप-खातों का चयन करें "चयन करें | स्वावलंबी। खाते के रूप में लिंक करें | FROM | खातों का चार्ट। स्वावलंबी के रूप में स्वावलंबी | कहां | स्वावलंबी। पदानुक्रम मान में लिंक करें (चार्ट का लेखा। स्वावलंबी सामान)";

4. डिज़ाइन समान- यह फ़ंक्शन हमें एक स्ट्रिंग की तुलना एक स्ट्रिंग पैटर्न से करने की अनुमति देता है।

सिंटेक्स: पसंद "<ТекстШаблона>"

पंक्ति पैटर्न विकल्प:

% - एक अनुक्रम जिसमें किसी भी संख्या में मनमाने वर्ण हों।

एक मनमाना चरित्र.

[...] - वर्गाकार कोष्ठकों के अंदर सूचीबद्ध कोई एकल वर्ण या वर्णों का क्रम। गणना श्रेणियाँ निर्दिष्ट कर सकती है, उदाहरण के लिए a-z, जिसका अर्थ है सीमा में शामिल एक मनमाना वर्ण, जिसमें सीमा के सिरे भी शामिल हैं।

[^...] - निषेध चिह्न के बाद सूचीबद्ध वर्णों को छोड़कर वर्गाकार कोष्ठक के अंदर सूचीबद्ध कोई एकल वर्ण या वर्णों का क्रम।

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

Query.Text = //संपूर्ण नामकरण ढूंढें जिसमें मूल TABUR शामिल है और //या तो एक छोटे अक्षर से या इसके साथ शुरू होता है बड़े अक्षरटी "चयन करें | नामकरण। लिंक | से | निर्देशिका। नामकरण के रूप में नामकरण | कहां | उत्पाद। नाम जैसे "" [टीटी]अबुर%""" ;

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

सिंटेक्स: कीवर्ड SELECT के बाद ALLOWED लिखा होता है

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

Request.Text = "चयन की अनुमति है | प्रतिपक्ष। लिंक | FROM | निर्देशिका। प्रतिपक्षों के रूप में प्रतिपक्ष";

6. विभिन्न डिज़ाइन करें- आपको उन रिकॉर्ड्स का चयन करने की अनुमति देता है जिनमें कोई डुप्लिकेट रिकॉर्ड नहीं हैं।

सिंटेक्स: कीवर्ड SELECT के बाद VARIOUS लिखा होता है

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

Request.Text = // उन रिकॉर्ड्स का चयन करता है जिन पर पाठक के पास अधिकार हैं "विभिन्न का चयन करें | प्रतिपक्ष.नाम | FROM | निर्देशिका। प्रतिपक्षों के रूप में प्रतिपक्ष" ;

इसके अलावा, विभिन्न निर्माण का उपयोग स्वीकृत ऑपरेटर और अन्य ऑपरेटरों के साथ किया जा सकता है।

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

Request.Text = // विभिन्न रिकॉर्ड्स का चयन करता है जिन पर पाठक के पास अधिकार हैं "अनुमत विभिन्न का चयन करें | प्रतिपक्ष.नाम | FROM | निर्देशिका। प्रतिपक्षों के रूप में प्रतिपक्ष";

7. पहले डिज़ाइन करें- क्वेरी परिणाम से पैरामीटर में निर्दिष्ट रिकॉर्ड की संख्या का चयन करता है।

सिंटैक्स: प्रथम<число>

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

Request.Text = //निर्देशिका से पहले 4 सीसीडी नंबर चुनें "पहले 4 चुनें | सीसीडी नंबर। लिंक | FROM | निर्देशिका। सीसीडी नंबर सीसीडी नंबर के रूप में";

8. बदलाव के लिए डिज़ाइन- आपको एक टेबल लॉक करने की अनुमति देता है, केवल लेनदेन में काम करता है (केवल स्वचालित लॉक के लिए प्रासंगिक)।

सिंटेक्स: को बदलने<НаименованиеТаблицы>

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

Query.Text = "चयन करें | निःशुल्क शेष अवशेष। नामकरण, | निःशुल्क शेष शेष। गोदाम, | निःशुल्क शेष शेष। स्टॉक में शेष | FROM | संचय का रजिस्टर। निःशुल्क शेष। निःशुल्क शेष के रूप में शेष | परिवर्तन के लिए | संचय का रजिस्टर . निःशुल्क शेष";

9. डिज़ाइन ऑर्डर द्वारा- एक विशिष्ट क्षेत्र द्वारा डेटा व्यवस्थित करता है। यदि फ़ील्ड एक लिंक है, तो ध्वज सेट करते समय ऑटो ऑर्डरसॉर्टिंग लिंक प्रतिनिधित्व के आधार पर होगी; यदि ध्वज बंद है, तो लिंक को मेमोरी में लिंक पते की वरिष्ठता के आधार पर सॉर्ट किया जाता है।

सिंटेक्स: द्वारा आदेश<НаименованиеПоля>ऑटो ऑर्डर

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

Query.Text = "चयन करें | निःशुल्क शेष शेष। नामकरण के रूप में नामकरण, | निःशुल्क शेष शेष। गोदाम के रूप में गोदाम, | निःशुल्क शेष शेष। स्टॉक में शेष | FROM | रजिस्टर संचय। निःशुल्क शेष। शेष निःशुल्क शेष के रूप में | | ऑर्डर द्वारा |. नामकरण |. ऑटो ऑर्डर रीडिंग";

10. डिज़ाइन ग्रुप बाय- विशिष्ट फ़ील्ड द्वारा क्वेरी स्ट्रिंग्स को समूहीकृत करने के लिए उपयोग किया जाता है। किसी भी समग्र फ़ंक्शन के साथ संख्यात्मक फ़ील्ड का उपयोग किया जाना चाहिए।

सिंटेक्स: द्वारा समूह बनाएं<НаименованиеПоля1>, .... , <НаименованиеПоляN>

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

Query.Text = "SELECT | ProductInWarehouses.Nomenclature as Nomenclature, | ProductInWarehouses.Nomenclature, | SUM(GoodsInWarehouses.InStock) as INSTOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductInWarehouses | | Group BY | ProductInWarehouses.Nomenclature, | Treasures.Warehouse";

11. डिजाइन होना- आपको WHERE निर्माण के समान, डेटा चयन स्थिति में एक समग्र फ़ंक्शन लागू करने की अनुमति देता है।

सिंटेक्स: होना<агрегатная функция с условием>

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

Query.Text = // समूहीकृत रिकॉर्ड का चयन करता है जहां इनस्टॉक फ़ील्ड 3 से अधिक है "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInStocks | | समूह द्वारा |. उत्पाद गोदामों में. नामकरण, | उत्पाद गोदामों में | उपलब्ध राशि |

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

सिंटेक्स: द्वारा सूचकांक<Поле1, ... , ПолеN>

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

Request.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | Place DataTs | FROM | &Ts AS Ts | | Index BY | Ts.NameOS, | Ts .कोडओएस";

13. डिज़ाइन कहां- आपको किसी भी चयन फ़ील्ड पर एक शर्त लगाने की अनुमति देता है। परिणाम में केवल वही रिकॉर्ड शामिल होंगे जो शर्त को पूरा करते हैं।

सिंटेक्स: कहाँ<Условие1 ОператорЛогСоединения УсловиеN>

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

Query.Text = //CompensationRemaining वाले सभी रिकॉर्ड चयनित हैं<>0 और //AmountForcalcCompRemaining > 100 "चयन करें | CompensationRPOREmains.Counterparty, |CompensationRPOREmains.Child, | CompensationRPOREmains.CompensationRemaining, | CompensationRPORmains.AmountForcalcCompRemains |Place DataTz |FROM |Accumulation Register.CompensationRP.Remains AS CompensationRPRemains |WHERE |Compensation RPORemaining.CompensationRemaining<>0 | और CompensationRPOREmains.AmountForcalcCompRemaining> 100" ;

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

सिंटेक्स: परिणाम<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>द्वारा<ОБЩИЕ> <Поле1, ... , ПолеN>

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

Request.Text = "चयन करें | गणना। प्रतिपक्ष समझौता। अनुबंध के प्रकार के रूप में समझौते का प्रकार, | गणना। अनुबंध के रूप में प्रतिपक्ष समझौता, | गणना। प्रतिपक्ष, | गणना। पारस्परिक निपटान शेष की राशि शेष राशि के रूप में | FROM | संचय का रजिस्टर। पारस्परिक प्रतिपक्षों के साथ निपटान। गणना के रूप में शेष | कुल |। राशि (शेष राशि) | सामान्य, | समझौते का प्रकार";

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

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

संकट: कुछ मामलों में, 1C 8.3 में डेटा एक्सेस प्रतिबंधों का परिणाम DBMS क्वेरी योजना पर निर्भर हो सकता है। यह लेख संभावित स्थितियों पर चर्चा करता है और इससे बचने के तरीके के बारे में सिफारिशें देता है।

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

  • <Выражение над полями>(में|नहींमें) (<Вложенный запрос>)
  • (<Выражение над полями 1>, …, <Выражение над полями N>) (में|नहींमें) (<Вложенный запрос>)

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

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

मतभेद का कारण

व्यवहार में संभावित अंतर कीवर्ड के बिना डेटा एक्सेस प्रतिबंधों के कार्यान्वयन के कारण है अनुमत 1सी एंटरप्राइज़ 8.3 में।

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

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

हालाँकि, क्वेरी योजना बनाते समय, DBMS को पूरा नमूना प्राप्त नहीं हो सकता है <Вложенным запросом> , और केवल वही रिकॉर्ड प्राप्त करें जो वास्तव में स्थिति की जांच करने के लिए आवश्यक हैं में/अंदर नही. इस मामले में, अनुरोध सफल हो सकता है, भले ही <Вложенного запроса> एक स्वतंत्र अनुरोध के रूप में, निषिद्ध डेटा तक पहुंच हो सकती है।

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

तालिका। व्यक्तिगत के रूप में व्यक्तिगत

निषिद्ध डेटा तक पहुँचने के प्रयास के कारण त्रुटि के साथ निष्पादित किया जाएगा। यदि यह क्वेरी तुलना में शामिल है, उदाहरण के लिए:

तालिका। व्यक्तिगत के रूप में व्यक्तिगत

निर्देशिका.व्यक्तिगत एएस तालिका)

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

किसी व्यक्ति.कर्मचारी.व्यक्ति के साथ कार्य निष्पादन हेतु समझौता

दस्तावेज़। एक शारीरिक व्यक्ति के साथ कार्य करने के लिए एक समझौता एक शारीरिक व्यक्ति के साथ कार्य करने के लिए एक समझौता

व्यक्तिगत.कर्मचारी.व्यक्तिगत बी के साथ कार्य निष्पादन हेतु समझौता (

तालिका। व्यक्तिगत के रूप में व्यक्तिगत

निर्देशिका.व्यक्तिगत एएस तालिका