अनुरोध 1s 8.3 के अनुसार व्यक्त करें। फ़ंक्शंस प्रकार और टाइपवैल्यू

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

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

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

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

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

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

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

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

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

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

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

इन कीवर्ड का उपयोग एक साथ या अलग-अलग किया जा सकता है।

को बदलने

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

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

चुनना
कर्मचारी,
आपसी हिसाब-किताब। आपसी हिसाब-किताब की रकम
से
संचय का रजिस्टर, कर्मचारियों के साथ पारस्परिक निपटान
को बदलने

कहाँ

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

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

चयन (मामला)

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

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

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

जोड़ना

एक विशिष्ट संबंध स्थिति के आधार पर दो तालिकाओं को लिंक से जोड़ता है।

बाएँ/दाएँ कनेक्शन

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

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

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

दाहिनी ओर सब कुछ बिल्कुल विपरीत है।

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

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

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

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

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

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

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

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

चुनना
,
अधिकतम(मूल्य.मूल्य) मूल्य के रूप में
से

द्वारा समूह बनाएं
कीमतें.नामकरण.नामकरण का प्रकार

परिणाम

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

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

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

चुनना
कीमतें, नामकरण, नामकरण का प्रकार, नामकरण का प्रकार,
कीमतें. कीमत के रूप में कीमत
से
सूचना का रजिस्टर, नवीनतम एएस कीमतों का स्नैपशॉट
परिणाम
अधिकतम(कीमत)
द्वारा
प्रकारनामपद्धति

होना

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

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

चुनना

अधिकतम(मूल्य.मूल्य) मूल्य के रूप में
से
सूचना का रजिस्टर, नवीनतम एएस कीमतों का स्नैपशॉट
द्वारा समूह बनाएं
कीमतें.नामकरण.नामकरण का प्रकार
होना
अधिकतम(मूल्य.कीमत) > 1000

द्वारा आदेश

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

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

चुनना
कर्मचारी.नाम जैसा नाम
से
निर्देशिका.कर्मचारी कैसे कर्मचारी
द्वारा आदेश
नाम
ऑटो ऑर्डर

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

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

क्वेरी भाषा विशेषताएँ

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

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

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

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

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


कंसोल का अनुरोध करें

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

आप क्वेरी कंसोल को ITS डिस्क पर या इसके माध्यम से डाउनलोड कर सकते हैं।

इस लेख में हम आपसे हर बात पर चर्चा करना चाहते हैं 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 = //यदि रिकॉर्डर मान प्रकार दस्तावेज़ रसीद है, //तो क्वेरी "माल की रसीद" लौटाएगी, अन्यथा "माल की बिक्री" "चयन करें | चयन करें | शेष होने पर। रजिस्ट्रार लिंक दस्तावेज़। माल सेवाओं की रसीद | फिर ""प्राप्ति"" |. अन्यथा ""उपभोग" |. गोदामों में शेष उत्पादों का रजिस्टर |

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

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

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

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

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

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

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

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

Query.Text = //संपूर्ण नामकरण ढूंढें जिसमें मूल TABUR शामिल है और //या तो छोटे या बड़े अक्षर t से शुरू होता है t "SELECT | Nomenclature. Link | FROM | Directry. Nomenclature AS Nomenclature | WHERE | Product. Name LIKE "" [टीटी ]अबुर%""" ;

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

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

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

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.ItemsInStocks 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 | संचय का रजिस्टर। पारस्परिक प्रतिपक्षों के साथ निपटान। गणना के रूप में शेष | कुल |। राशि (शेष राशि) | सामान्य, | समझौते का प्रकार";

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

आइए अब बाकी पर नजर डालें।

1सी प्रश्नों में स्ट्रिंग्स के साथ काम करने के लिए कार्य

1सी प्रश्नों में स्ट्रिंग डेटा के साथ काम करने के लिए कुछ फ़ंक्शन और ऑपरेटर हैं।

सबसे पहले, प्रश्नों में स्ट्रिंग्स जोड़ी जा सकती हैं। ऐसा करने के लिए, "+" ऑपरेटर का उपयोग करें:

अनुरोध। पाठ = "चुनें
" "रेखा: " " + स्रोत.नाम
;

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

  1. स्रोत स्ट्रिंग.
  2. उस वर्ण की संख्या जिससे चयनित पंक्ति प्रारंभ होनी चाहिए.
  3. वर्णों की संख्या.

अनुरोध। पाठ= "चुनना
सबस्ट्रिंग("
"रेखा: " ", 4, 3) परिणाम के रूप में";

// परिणाम: ठीक है ISNULL

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

क्योंकि NULL न तो शून्य है, न ही खाली स्ट्रिंग है, न ही कोई मान है अपरिभाषित,इसे किसी और चीज़ से बदलना अक्सर उपयोगी होता है उपयोगी प्रकारडेटा। यह फ़ंक्शन इसी के लिए डिज़ाइन किया गया है। ISNULL.

इसके दो पैरामीटर हैं:

  1. मूल्य की जाँच की जा रही है.
  2. यदि पहला पैरामीटर शून्य हो जाता है तो उसे प्रतिस्थापित करने का मान।

अनुरोध। पाठ= "चुनना
ISNULL(स्रोत.शेष, 0) शेष के रूप में"
; // यदि अनुरोध का परिणाम फ़ील्ड शेष = शून्य है,
// फिर इसे 0 से बदल दिया जाएगा, और आप इसके साथ गणितीय कार्य कर सकते हैं

कार्य प्रदर्शनऔर परिचयलिंक

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

अनुरोध। पाठ= "चुनना
प्रतिनिधित्व(सही) बूलियन के रूप में,
प्रतिनिधित्व (4) एक संख्या के रूप में,
प्रतिनिधित्व (स्रोत.लिंक) एएस लिंक,
प्रतिनिधित्व(दिनांकसमय(2016,10,07)) दिनांक के अनुसार"
;
// बूलियन = "हां", संख्या = "4", लिंक = "दस्तावेज़ नकद रसीद आदेश संख्या....से..."
//दिनांक='07.10.2016 0:00:00'

अनुरोध। पाठ= "चुनना
प्रतिनिधित्वसंदर्भ(सत्य) बूलियन के रूप में,
प्रतिनिधित्वसंदर्भ(4) संख्या के रूप में
प्रेजेंटिंगलिंक(स्रोत.लिंक) लिंक के रूप में,
प्रतिनिधित्वसंदर्भ(दिनांकसमय(2016,10,07)) दिनांक के अनुसार"
;
// बूलियन = सत्य, संख्या = 4, लिंक = "दस्तावेज़ नकद रसीद आदेश संख्या....से..."
// दिनांक=07.10.2016 0:00:00

कार्य प्रकारऔर प्रकार मान

// परिणाम: ठीक है प्रकार 1C:एंटरप्राइज़ प्लेटफ़ॉर्म डेटा प्रकार लौटाता है।

अनुरोध। पाठ= "चुनना
प्रकार (संख्या)
प्रकार (स्ट्रिंग),
प्रकार (दस्तावेज़. व्यय नकद आदेश)"
;

// परिणाम: ठीक है प्रकार मानउसे दिए गए मान का प्रकार लौटाता है।

अनुरोध। पाठ= "चुनना
मान प्रकार (5) संख्या के रूप में,
प्रकार ("
"रेखा" ") रस्सी जैसी,
संदर्भ के रूप में टाइप करें (स्रोत.लिंक)।
निर्देशिका से। स्रोत एएस स्रोत"
;
//संख्या=संख्या, स्ट्रिंग=स्ट्रिंग, निर्देशिका = निर्देशिकालिंक.स्रोत

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

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

से

कहाँ
मान प्रकार(संपर्क सूचना.ऑब्जेक्ट) = प्रकार(निर्देशिका.प्रतिपक्ष)"
;

// परिणाम: ठीक है अर्थ

// परिणाम: ठीक है अर्थआपको बिना उपयोग किए सीधे अनुरोध में 1C कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग करने की अनुमति देता है।

आइए पिछले उदाहरण में एक और शर्त जोड़ें। आपको केवल अपने समकक्षों के फ़ोन नंबर प्राप्त करने की आवश्यकता है।

अनुरोध। पाठ= "चुनना
संपर्क जानकारी.परिचय
से
सूचना का रजिस्टर. संपर्क जानकारी कैसे संपर्क जानकारी
कहाँ
मान प्रकार(संपर्क सूचना.ऑब्जेक्ट) = प्रकार(निर्देशिका.प्रतिपक्ष)
और contactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

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

संचालिका जोड़ना

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

उदाहरण के लिए, प्रतिपक्षों के लिए संपर्क जानकारी चुनने का कार्य इस प्रकार हल किया जा सकता है:

अनुरोध। पाठ= "चुनना
संपर्क जानकारी.परिचय
से
सूचना का रजिस्टर. संपर्क जानकारी कैसे संपर्क जानकारी
कहाँ
संपर्क जानकारी.ऑब्जेक्ट लिंक निर्देशिका.प्रतिपक्ष"
;

संचालिका अभिव्यक्त करना

संचालिका अभिव्यक्त करनादो मामलों में 1C प्रश्नों में उपयोग किया जाता है:

  • जब आपको किसी आदिम प्रकार की विशेषताओं को बदलने की आवश्यकता हो;
  • जब आपको किसी मिश्रित डेटा प्रकार वाले फ़ील्ड को एकल प्रकार वाले फ़ील्ड में बदलने की आवश्यकता होती है।

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

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

अनुरोध। पाठ= "चुनना
मात्रा (वस्तुओं और सेवाओं का अलग-अलग आगमन। लिंक) एएस लिंक
से
दस्तावेज़। वस्तुओं और सेवाओं की प्राप्ति। वस्तुओं और सेवाओं की प्राप्ति कैसे होती है
द्वारा समूह बनाएं
एक्सप्रेस(वस्तुओं और सेवाओं की प्राप्ति। पंक्ति के अनुसार टिप्पणी करें (200))"
;

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

अनुरोध। पाठ= "चुनना
एक्सप्रेस (माल की आवाजाही। दस्तावेज़ के रूप में ऑर्डर। ग्राहक का ऑर्डर)। ऑर्डर की तारीख के रूप में दिनांक,
माल कारोबार का संचलन, नामकरण
से
संचय रजिस्टर करें। माल का संचलन। माल के कारोबार के रूप में कारोबार
कहाँ
गुड्स टर्नओवर का संचलन। ऑर्डर लिंक दस्तावेज़। क्लाइंट ऑर्डर"
;

ऑपरेटर्स पसंदऔर शून्य है

संचालिका पसंदऑपरेटर के समान अगरअंतर्निहित 1C भाषा में, लेकिन इसकी कार्यक्षमता कुछ हद तक कम हो गई है।

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

अनुरोध। पाठ= "चुनना
संपर्क जानकारी.परिचय,
पसंद
जब मान प्रकार(ContactInformation.Object) = प्रकार(निर्देशिका.प्रतिपक्ष)
तब "
प्रतिपक्ष "
अन्य विकल्प
जब मान प्रकार(संपर्क सूचना.वस्तु) = प्रकार(निर्देशिका.व्यक्ति)
तब "
व्यक्ति"
अन्यथा "कोई और" "
अंत
स्वामी के रूप में समाप्त करें
से
सूचना का रजिस्टर. संपर्क जानकारी के रूप में संपर्क जानकारी"
;

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

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

अनुरोध। पाठ= "चुनना
पसंद
जब मान शून्य हो तो 0
अन्य का अर्थ
अंत"
;

इसके अलावा, ऑपरेटर शून्य हैक्वेरी स्थितियों में उपयोग किया जा सकता है, जैसे कि एक वाक्य में कहाँ।

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

इसलिए, बहुत से लोग गलती से मानते हैं कि वे किसी फ़ील्ड को प्रकार से परिवर्तित कर सकते हैं रेखाप्रकार के साथ क्षेत्र में संख्याया लाइन में लिंक करें. वास्तव में, एक्सप्रेस ऑपरेटर परिवर्तित कर सकता है:

  • आदिम प्रकार की सेटिंग्स;
  • एक मिश्रित प्रकार के क्षेत्र को एक ही प्रकार के क्षेत्र में बदलना;

आइए इन स्थितियों पर अधिक विस्तार से नजर डालें...

आदिम प्रकार की सेटिंग्स परिवर्तित करना

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

चुनना
एक्सप्रेस(प्रवेश.टिप्पणी AS लाइन(300)) टिप्पणी के रूप में,
मात्रा (आने वाली लिंक) लिंक के रूप में
से
दस्तावेज़। प्रवेश कक्ष एएस प्रवेश कक्ष

द्वारा समूह बनाएं
एक्सप्रेस(प्रवेश. टिप्पणी पंक्ति के रूप में(300))

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

चुनना
बिक्री.उत्पाद,
एक्सप्रेस(बिक्री.मात्रा * बिक्री.मूल्य संख्या के अनुसार(15, 2)) राशि के रूप में
से

एक यौगिक प्रकार को एक प्रकार में परिवर्तित करना

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

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

विभिन्न चुनें
सेल्स.रजिस्ट्रार.नंबर
से
रजिस्टरसंचय.बिक्री कैसे बिक्री

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

विभिन्न चुनें
सेल्स.रजिस्ट्रार.नंबर,
पसंद
जब सेल्स.रजिस्ट्रार लिंक दस्तावेज़.उपभोज्य
फिर एक्सप्रेस (सेल्स.रजिस्ट्रार एएस दस्तावेज़.उपभोज्य)
अन्य विकल्प
जब सेल्स.रजिस्ट्रार लिंक दस्तावेज़.कार्यान्वयन
फिर एक्सप्रेस (सेल्स.रजिस्ट्रार एएस दस्तावेज़.कार्यान्वयन)
अंत
...
संख्या के रूप में समाप्त करें
से
रजिस्टरसंचय.बिक्री कैसे बिक्री

अब बाएं जोड़ में एक विशिष्ट तालिका शामिल होगी।

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

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

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

जहां शहर = मान(निर्देशिका.शहर.मास्को)

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

WHEREProductType = VALUE(गणना.ProductTypes.Service)

WHEREMmovementType = VALUE(MovementTypeAccumulation.Incoming)

मार्ग बिंदु कहां है =

मूल्य(बिजनेसप्रोसेस.एग्रीमेंट.रूटप्वाइंट.एग्रीमेंट)

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

2. किसी क्वेरी में ऑटो-ऑर्डरिंग प्रक्रिया को काफी धीमा कर सकती है। यदि छँटाई की आवश्यकता नहीं है, तो इसका उपयोग न करना ही बेहतर है। कई मामलों में किसी कीवर्ड का उपयोग करके सॉर्टिंग लिखना अधिक कुशल होता है द्वारा आदेश.

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

अस्पष्ट फ़ील्ड वाले अनुरोध का उदाहरण:

चुनना

शेष मालशेष.मात्राशेष

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

बायां कनेक्शन शेष माल शेष के रूप में रजिस्टर करें

सॉफ़्टवेयर शेष उत्पाद अवशेष.नामपद्धति = नामकरण.लिंक

तालिका उपनाम को सही करना आवश्यक है, उदाहरण के लिए, इस तरह: "Directory.Nomenclature AS Nomenclature1", और "Nomenclature.Link" को "Nomenclature1.Link" के अनुसार सही किया जाना चाहिए।

4.कभी-कभी किसी कीवर्ड का उपयोग करके संदर्भ फ़ील्ड का प्रतिनिधित्व प्राप्त करना उपयोगी होता है प्रदर्शनएक लिंक के साथ ताकि डेटाबेस तक बार-बार पहुंच न हो। किसी तालिका में किसी क्वेरी का परिणाम प्रदर्शित करते समय यह उपयोगी हो सकता है।

चुनना

प्राप्तकर्ता के रूप में प्रतिनिधित्व (दस्तावेज़.प्रतिपक्ष),

प्रस्तुति(दस्तावेज़.आधार)

दस्तावेज़। दस्तावेज़ के रूप में चालान

5. अनुरोध में उपयोग करें एक्सप्रेस (फ़ील्ड एएस प्रकार)आपको जटिल डेटा प्रकार के फ़ील्ड के कनेक्शन से अनावश्यक तालिकाओं को हटाने की अनुमति देता है। जिससे अनुरोध के निष्पादन में तेजी आये.

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

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

एक्सप्रेस (शेष माल। दस्तावेज के रूप में रजिस्ट्रार। माल की प्राप्ति)। प्राप्ति की तारीख के रूप में तारीख

से
शेष माल के रूप में संचय का रजिस्टर
कहाँ
(एक्सप्रेस (शेष माल। दस्तावेज़ के रूप में रजिस्ट्रार। माल की प्राप्ति) शून्य नहीं है)

6.जब 1सी कॉन्फ़िगरेशन में ऐसे उपयोगकर्ता होते हैं जिनके पास कुछ कॉन्फ़िगरेशन ऑब्जेक्ट्स पर सीमित अधिकार होते हैं, तो ऐसे ऑब्जेक्ट्स के अनुरोध में कीवर्ड का उपयोग किया जाना चाहिए अनुमतताकि अनुरोध बिना किसी त्रुटि के निष्पादित हो जाए (अनुमति चुनें...)

7.नेस्टेड तालिकाओं वाली तालिकाओं को मर्ज करते समय (उदाहरण के लिए, सारणीबद्ध भाग वाला एक दस्तावेज़), कीवर्ड उपयोगी हो सकता है खाली करने योग्यजब, उदाहरण के लिए, किसी दस्तावेज़ में सारणीबद्ध भाग न हो।

सब कुछ मिलाओ

दस्तावेज़.चालान से

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

उदाहरण (पूर्ण जुड़ाव के लिए निश्चित रूप से मनगढ़ंत):

चुनना

के. प्रतिपक्ष

लिंग के रूप में गणना

पूर्ण कनेक्शन (दस्तावेज़ से पहले 1 डी. प्रतिपक्ष का चयन करें। माल की बिक्री कैसे डी द्वारा व्यवस्थित करें। समय का क्षण) कैसे करें

चालू(सही)

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

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

पहले 5 का चयन करें

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

निर्देशिका.नामकरण.क्रयमूल्य

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

निर्देशिका.नामकरण.खरीद मूल्य घटता हुआ

के लिए उदाहरण विभिन्न:

विभिन्न का चयन करें

दस्तावेज़.उपभोज्य.प्रतिपक्ष

10. किसी क्वेरी में एकत्रीकरण फ़ंक्शन का उपयोग बिना कीवर्ड के किया जा सकता है समूह. इस स्थिति में, सभी परिणामों को एक पंक्ति में समूहीकृत किया जाएगा।

चुनना

राशि(चालान.राशि) राशि के रूप में

दस्तावेज़.चालान.संरचना चालान के रूप में

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

चुनना


वस्तुओं और सेवाओं की प्राप्ति मात्रा के रूप में मात्रा,
वस्तुओं और सेवाओं की प्राप्ति Goods.Link.Counterparty
से

कहाँ
वस्तुओं और सेवाओं की प्राप्ति Goods.Link = &Link

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

चुनना

वस्तुओं एवं सेवाओं की प्राप्ति, वस्तुओं का नामकरण।

माल और सेवाओं की प्राप्ति माल का नामकरण।

एसयूएम (वस्तुओं और सेवाओं की प्राप्ति माल। मात्रा) एएस मात्रा,

दस्तावेज़। माल और सेवाओं की प्राप्ति। माल और सेवाओं की प्राप्ति

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

वस्तुओं एवं सेवाओं की प्राप्ति, वस्तुओं का नामकरण।

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

चुनना

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

सामान और सेवाओं की प्राप्ति

दस्तावेज़। वस्तुओं और सेवाओं की प्राप्ति। वस्तुओं और सेवाओं की प्राप्ति कैसे होती है

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

वस्तुओं एवं सेवाओं की प्राप्ति (नामपद्धति)

12. कभी-कभी, समूहीकरण में किसी फ़ील्ड को निर्दिष्ट करने के बजाय, क्वेरी चयन फ़ील्ड में निम्नलिखित पैरामीटर को शामिल करना उपयोगी होता है:

चुनना
DocProducts.नामपद्धति,
&प्रतिपक्ष,
&अवधि,
SUM(DocProducts.Quantity * DocProducts.K) AS मात्रा,
SUM(DocProducts.Amount) AS राशि
से
दस्तावेज़.प्रवेश.उत्पाद AS DocProducts
कहाँ
DocProducts.Link = &Link

द्वारा समूह बनाएं
DocProducts.नामपद्धति

और फिर अनुरोध निकाय में पैरामीटर सेट करें:

Request.SetParameter ("&खाता", चयनखाता);

Query.SetParameter("&अवधि", दिनांक);

13. सार्वभौमिक प्रश्नों में, पैरामीटर्स का उपयोग क्वेरी डेटा स्रोतों के विवरण में, शर्तों में किया जा सकता है कहाँ,टेबल कनेक्शन शर्तों और वर्चुअल टेबल पैरामीटर्स में। सामान्य प्रश्न बनाने की दो तकनीकें हैं:

ए) स्ट्रिंग कॉन्सटेनेशन तंत्र का उपयोग करके, अनुरोध पाठ में चर जोड़ना;

ऑर्डरिंग प्रकार = ?(कुछ परिवर्तनीय,"","DESC");

Query.Text = "चुनें... फ़ील्ड1 के अनुसार व्यवस्थित करें" + ऑर्डर प्रकार + "...";

Query.Text = "फ़ील्ड1 चुनें...";

यदि कुछ चर = 1 है तो

Request.Text = Request.Text + ",Field2 ...";

अंतयदि;

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

चुनना

DocTch.नामपद्धति,

&कुछ DocTC AS DocTC

और फिर अनुरोध निकाय में पैरामीटर सेट करें

Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Document."+Link.Metadata().Name+.Products");

वैकल्पिक स्थिति को सक्षम करने के लिए पैरामीटर्स का उपयोग क्वेरी स्थितियों में किया जा सकता है &पैरामीटर या कुछ संपत्ति नहीं:

Request.SetParameter('&Parameter', 'Counterparty.Name=''Ivanov'''');

शाब्दिक का उपयोग करना सत्यआप अनुरोध में कुछ फ़िल्टर हटा सकते हैं

Query.SetParameter("&Parameter", True);

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

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

नेस्टेड क्वेरी का उदाहरण:

उत्पाद बी (उत्पाद का चयन करें...)

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

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

शून्य है(Reg.शेष,0)

IsNull(Doc.Product,Doc1.Item)

18. सशर्त निर्माण पर पसंदएक निश्चित मूल्य पर समानता के परीक्षण के सरल मामले के लिए एक वैकल्पिक वाक्यविन्यास है, लेकिन यह, हालांकि, अप्रलेखित है:

विकल्प अभिव्यक्ति जब 1 तब "उच्च" जब 2 तब "मध्यम" अन्यथा "निम्न" अंत

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

20. कभी-कभी ऑपरेटर फॉर्म उपयोगी होता है मेंसूचीबद्ध मानों में से किसी एक के साथ मिलान की जाँच करने के लिए।

...उत्पाद कहां है। नाम बी ("घरेलू उपकरण", "कंप्यूटर")

संदर्भ पुस्तकों के लिए, ऑपरेटर प्रपत्र उपयोगी हो सकता है मेंपदानुक्रम सदस्यता जाँच।

...पदानुक्रम में नामकरण कहां है (और समूह)

संचालिका मेंइसका उपयोग अक्सर यह जांचने के लिए किया जाता है कि सबक्वेरी के परिणाम में कोई मान शामिल है या नहीं।

सबक्वेरी में, आप किसी शर्त में बाहरी क्वेरी फ़ील्ड तक पहुंच सकते हैं।

// मौजूद उत्पादों के नाम चुनें

// चालान में

चुनना

उत्पाद.नाम

निर्देशिका.नामकरण कैसे उत्पाद

(चुनना

बीजक संरचना.नामपद्धति

Document.Invoice.Composition AS InvoiceComposition

InvoiceContent.Nomenclature = उत्पाद.लिंक)

संचालन मेंसरणियों, मानों की सूची, मानों की तालिकाओं, नेस्टेड क्वेरीज़ के साथ उपयोग किया जा सकता है। ऐसे में शर्तों को कम करना संभव है

सबक्वेरी के लिए सिंटेक्स

(अभिव्यक्ति1, अभिव्यक्ति2,...,अभिव्यक्तिएन) में (अभिव्यक्ति1, अभिव्यक्ति2,...,अभिव्यक्तिएन... का चयन करें)

मान तालिका के लिए सिंटैक्स

(अभिव्यक्ति1, अभिव्यक्ति2,...,अभिव्यक्तिएन) (&टीके) में, जहां टीके मानों की तालिका में पहले एन कॉलम का उपयोग किया जाता है

20. इंटरनेट पर एक चुटकुला है कि क्वेरी डिज़ाइनर हमेशा कैसे बनाता है बाएंतालिकाओं को जोड़ना (और उनकी अदला-बदली करना), चाहे हम कैसे भी निर्दिष्ट करें सही:

1सी: उद्यम को "बाईं ओर" पसंद है।

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

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

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

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

चुनना

उपभोज्य.लाइन नंबर,

उपभोज्य उत्पाद.उत्पाद,

उपभोज्य वस्तुएँ.मात्रा,

उपभोज्य उत्पाद,

उपभोज्य वस्तुएँ.राशि

दस्तावेज़. उपभोज्य एएस डी

संभावित समाधान:

ए) के साथ बदलें द्वारा आदेशपर

दिनांक डीईएससी द्वारा आदेश।

बी) आप नेस्टेड क्वेरी को एक अस्थायी तालिका में ले जा सकते हैं:

दस्तावेज़. उपभोज्य एएस डी

और डी.प्रतिपक्ष = &प्रतिपक्ष

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

चुनना

उपभोज्य.लाइन नंबर,

उपभोज्य उत्पाद.उत्पाद,

उपभोज्य वस्तुएँ.मात्रा,

उपभोज्य उत्पाद,

उपभोज्य वस्तुएँ.राशि

दस्तावेज़.उपभोज्य वस्तुएँ उपभोग योग्य वस्तुएँ के रूप में

सी) आप दस्तावेज़ की मुख्य तालिका का संदर्भ ले सकते हैं, और उसके बाद ही सारणीबद्ध भाग का

शीर्ष 1 चुनें

लाइन नंबर,

उत्पाद,

मात्रा,

कीमत,

जोड़

दस्तावेज़. उपभोग्य सामग्रियों के रूप में उपभोग्य वस्तुएं

व्यय.प्रतिपक्ष = &प्रतिपक्ष

और उपभोग्य सामग्रियों का संचालन किया गया

द्वारा आदेश

उपभोज्य। समय में कमी का क्षण

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

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

तुलना करना:

संभवतः इसमें बस इतना ही है। यह स्पष्ट है कि क्वेरी भाषा में अभी भी कई प्रश्न हैं जिन्हें मैंने कवर नहीं किया है। इस लेख को लिखने के लिए, मैंने बुनियादी पाठ्यक्रम 1C 8.2 spec8.ru को पूरा करने के बाद प्राप्त जानकारी के साथ-साथ "1C 8.2 डेवलपर गाइड" पुस्तक और इंटरनेट से प्राप्त जानकारी का उपयोग किया।



यादृच्छिक लेख

ऊपर