1सी 8.3 रिपोर्ट एसकेडी परिकलित फ़ील्ड। डेटा संरचना स्कीमा के उपयोगी उदाहरण. विभाजन का शेष भाग

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

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


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

    इतिहास का हिस्सा

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

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

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

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

    दो भाषाएं

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

    पूछताछ भाषा

    क्वेरी भाषा SQL पर आधारित है और SQL जानने वाले इसे आसानी से सीख लेते हैं। उदाहरण का अनुरोध करें:

    मानक SQL क्वेरी अनुभागों के एनालॉग्स को देखना आसान है - चयन करें, FROM, ग्रुप बाय, ऑर्डर बाय।

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

    • एक बिंदु के माध्यम से फ़ील्ड को संदर्भित करना। यदि किसी तालिका के फ़ील्ड में एक संदर्भ प्रकार है (वे किसी अन्य तालिका की वस्तुओं के लिंक संग्रहीत करते हैं), तो डेवलपर उन्हें क्वेरी टेक्स्ट में "।" के माध्यम से संदर्भित कर सकता है, जबकि ऐसे लिंक के नेस्टिंग स्तरों की संख्या सिस्टम द्वारा सीमित नहीं है (उदाहरण के लिए, ग्राहक ऑर्डर.समझौता.संगठन.फोन)।
    • परिणामों का बहुआयामी एवं बहुस्तरीय गठन। समूहीकरण और पदानुक्रम को ध्यान में रखते हुए कुल और उप-योग बनाए जाते हैं, उप-योग के योग के साथ स्तरों को मनमाने ढंग से क्रम में दरकिनार किया जा सकता है, समय आयामों द्वारा योग का सही निर्माण सुनिश्चित किया जाता है।
    • वर्चुअल टेबल के लिए समर्थन. सिस्टम द्वारा प्रदान की गई वर्चुअल टेबल आपको जटिल क्वेरी लिखने की आवश्यकता के बिना अधिकांश एप्लिकेशन कार्यों के लिए लगभग तैयार डेटा प्राप्त करने की अनुमति देती है। इस प्रकार, एक आभासी तालिका एक निश्चित समय पर अवधि के संदर्भ में माल के संतुलन पर डेटा प्रदान कर सकती है। साथ ही, वर्चुअल तालिकाएँ संग्रहीत जानकारी का अधिकतम लाभ उठाती हैं, उदाहरण के लिए, पहले से गणना की गई कुल राशि आदि।
    • अस्थायी टेबल. क्वेरी भाषा आपको प्रश्नों में अस्थायी तालिकाओं का उपयोग करने की अनुमति देती है। उनकी मदद से, आप क्वेरीज़ के प्रदर्शन में सुधार कर सकते हैं, कुछ मामलों में लॉक की संख्या कम कर सकते हैं, और क्वेरी टेक्स्ट को पढ़ने में आसान बना सकते हैं।
    • बैच अनुरोध. अस्थायी तालिकाओं के साथ अधिक सुविधाजनक कार्य के लिए, क्वेरी भाषा बैच क्वेरीज़ के साथ काम करने का समर्थन करती है - इस प्रकार, एक अस्थायी तालिका का निर्माण और उसका उपयोग एक क्वेरी में रखा जाता है। बैच अनुरोध अर्धविराम (";") द्वारा अलग किए गए अनुरोधों का एक क्रम है। बैच में अनुरोधों को एक के बाद एक निष्पादित किया जाता है। बैच क्वेरी निष्पादित करने का परिणाम, उपयोग की गई विधि के आधार पर, या तो बैच की अंतिम क्वेरी द्वारा लौटाया गया परिणाम होगा, या बैच में अनुरोधों का पालन करने वाले क्रम में सभी बैच अनुरोधों के परिणामों की एक सरणी होगी।
    • संदर्भ फ़ील्ड दृश्य प्राप्त करना. प्रत्येक ऑब्जेक्ट तालिका (जिसमें एक निर्देशिका या दस्तावेज़ संग्रहीत है) में एक आभासी फ़ील्ड है - "प्रतिनिधित्व"। इस फ़ील्ड में वस्तु का पाठ्य प्रतिनिधित्व होता है और रिपोर्टर का काम आसान हो जाता है। इसलिए, एक दस्तावेज़ के लिए, इस फ़ील्ड में सभी महत्वपूर्ण जानकारी शामिल होती है - दस्तावेज़ प्रकार का नाम, उसकी संख्या और दिनांक (उदाहरण के लिए, "07/06/2017 17:49:14 से बिक्री 000000003"), जिससे डेवलपर को परिकलित फ़ील्ड लिखने से बचाया जा सके।
    • और आदि।
    क्वेरी इंजन स्वचालित रूप से क्वेरी को संशोधित करता है, उस उपयोगकर्ता की भूमिका को ध्यान में रखता है जिसकी ओर से क्वेरी निष्पादित की जाती है (यानी, उपयोगकर्ता केवल वही डेटा देखेगा जिसे उसे देखने का अधिकार है) और कार्यात्मक विकल्प (यानी, एप्लिकेशन समाधान में कॉन्फ़िगर की गई कार्यक्षमता के अनुसार)।

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

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

    • चुनना। यह वाक्य उन फ़ील्ड्स का वर्णन करता है जिन्हें उपयोगकर्ता आउटपुट के लिए चुनने में सक्षम होगा। इस कीवर्ड के बाद, मुख्य क्वेरी चयन सूची से फ़ील्ड के उपनाम, जो अनुकूलन के लिए उपलब्ध होंगे, अल्पविराम द्वारा अलग किए गए सूचीबद्ध हैं। उदाहरण: (नामपद्धति, गोदाम चुनें)
    • कहाँ। उन फ़ील्ड का वर्णन करता है जिन पर उपयोगकर्ता चयन लागू कर सकता है। यह प्रस्ताव तालिका फ़ील्ड का उपयोग करता है. चयन सूची फ़ील्ड उपनामों के उपयोग की अनुमति नहीं है। प्रत्येक संघ भाग में अपना स्वयं का WHERE तत्व हो सकता है। उदाहरण: (जहां नामकरण.*, गोदाम ), (जहां दस्तावेज़.दिनांक >= &प्रारंभदिनांक, दस्तावेज़.दिनांक<= &ДатаКонца}
    • और आदि।
    एक्सटेंशन का उपयोग करने का एक उदाहरण:

    डेटा संरचना अभिव्यक्ति भाषा

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

    उदाहरण:

    एसीएस पर रिपोर्ट बनाने की प्रक्रिया

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

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

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

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

    लेकिन डेटा संरचना योजना स्तर पर, हम पहले से ही कस्टम फ़ील्ड जोड़ सकते हैं और अंतर्निहित 1C विकास भाषा (हमारे द्वारा लिखी गई भाषाओं सहित) में उनमें फ़ंक्शंस का उपयोग कर सकते हैं, जो रिपोर्ट की क्षमताओं का काफी विस्तार करता है। तकनीकी रूप से, यह इस तरह दिखता है - जो कुछ भी SQL में अनुवादित किया जा सकता है उसे SQL में अनुवादित किया जाता है, क्वेरी को DBMS स्तर पर निष्पादित किया जाता है, क्वेरी परिणाम 1C एप्लिकेशन सर्वर की मेमोरी में रखे जाते हैं, और ACS प्रत्येक रिकॉर्ड के लिए गणना किए गए फ़ील्ड के मानों की गणना करता है, जिनके सूत्र 1C भाषा में लिखे गए हैं।


    कस्टम फ़ील्ड जोड़ना

    आप रिपोर्ट में कितनी भी संख्या में तालिकाएँ और चार्ट जोड़ सकते हैं:


    रिपोर्ट डिज़ाइनर


    रन टाइम पर रिपोर्ट करें

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

    रिपोर्ट बनाने और तैयार करने की प्रक्रिया का संक्षेप में वर्णन इस प्रकार करें:

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


    एसीएस तंत्र द्वारा रिपोर्ट तैयार करने की प्रक्रिया

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

    उपयोगकर्ता सेटिंग

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


    डिज़ाइन समय में डिस्प्ले मोड सेट करना


    रनटाइम पर क्विक एक्सेस मोड में सेटिंग प्रदर्शित करें (जेनरेट बटन के नीचे)

    विकास योजनाएं

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

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

    आइए डेटा संरचना योजना (1सी एसकेडी) के पहले तीन टैब का विश्लेषण करें - डेटा सेट, डेटा सेट लिंक और परिकलित फ़ील्ड।

    1सी एसकेडी में डेटा सेट

    डेटा सेट में तीन ऑब्जेक्ट बनाने की क्षमता शामिल है - क्वेरी, ऑब्जेक्ट और यूनियन, आइए उनमें से प्रत्येक पर अधिक विस्तार से ध्यान दें:

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

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

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

    शर्तें, यहां हम उन वस्तुओं का चयन करते हैं जिनका उपयोग एसीएस की शर्तों में किया जा सकता है।

    काम का एक हिस्सा डेटा संरचना योजना में किया जाता है, कुछ प्रोग्रामेटिक रूप से, आइए एक सरल उदाहरण देखें:

    सबसे पहले, आइए दस्तावेज़ के लिए डेटा लेआउट योजना का एक लेआउट बनाएं और इसे SKD कहें (उदाहरण के लिए: 1C SKD), हम इसमें एक ऑब्जेक्ट डेटा सेट बनाते हैं, फिर फ़ील्ड भरते हैं, उदाहरण के लिए, हमारे पास विवरण के साथ दस्तावेज़ सामान का एक सारणीबद्ध हिस्सा है - नामकरण, मात्रा और कीमत।

    आइए तीन फ़ील्ड जोड़ें और विवरण के नाम के साथ प्रत्येक कॉलम के लिए फ़ील्ड भरें, शेष कॉलम स्वचालित रूप से भर जाएंगे:

    आइए दस्तावेज़ प्रपत्र पर एक बटन बनाएं, प्रबंधित प्रपत्रों में कार्य के तंत्र का वर्णन करें:

    &एटक्लाइंट

    प्रक्रिया प्रिंट()

    हमारी रिपोर्ट = PrintOnServer(); // सर्वर पर फ़ंक्शन को कॉल करें

    हमारीरिपोर्ट.दिखाएँ(); // जेनरेट की गई रिपोर्ट को आउटपुट करें

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

    &सर्वर पर

    फ़ंक्शन प्रिंटऑनसर्वर()

    DocumentObject = formAttributeToValue('ऑब्जेक्ट');

    //हम गुड्स सारणीबद्ध भाग को गुड्सएसकेडी नाम के साथ संरचना में उसी तरह रखते हैं जैसे हमने एसीएस में डेटा वाले ऑब्जेक्ट का नाम दर्शाया था।

    डेटासेट = नई संरचना;

    DataSet.Insert(“SKD Goods”, DocumentObject.Goods);

    //हमारा लेआउट प्राप्त करें और डिफ़ॉल्ट सेटिंग्स सेट करें ताकि सभी रिपोर्ट आउटपुट सेटिंग्स हमारे लेआउट से ली जा सकें

    हमारा लेआउट = DocumentObject.GetLayout(“SKD”);

    सेटिंग्स = हमारालेआउट.डिफ़ॉल्ट सेटिंग्स;

    //हमारी सेटिंग्स के साथ डेटा लेआउट लेआउट बनाएं

    लेआउट लेआउट बिल्डर = नया डेटा लेआउट लेआउट लेआउट बिल्डर;

    LayoutLayout = LayoutComposer.Run(हमाराLayout, सेटिंग्स);

    //हमारे डेटासेट के साथ डेटा संरचना निष्पादित करें

    डेटाकंपोज़िशनप्रोसेसर = नया डेटाकंपोज़िशनप्रोसेसर;

    DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

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

    रिपोर्ट दस्तावेज़ = नया स्प्रेडशीट दस्तावेज़;

    आउटपुटप्रोसेसर = नया आउटपुटप्रोसेसरऑफडेटाकंपोजिशनरिजल्टइनटूस्प्रेडशीटडॉक्यूमेंट;

    आउटपुटप्रोसेसर.सेटडॉक्यूमेंट(रिपोर्टडॉक्यूमेंट);

    आउटपुटप्रोसेसर.आउटपुट(डेटाकंपोजिशनप्रोसेसर);

    रिटर्नडॉक्यूमेंटरिपोर्ट;

    अंतकार्य

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

    के बारे में एकीकरण

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

    हमारे पास टेबल हैं:

    संपर्क करने पर, हमें प्राप्त होगा:

    और जब संयुक्त:

    आइए अब डेटासेट में कॉलम भरने पर विचार करें (हम कुछ को छोड़ देंगे, क्योंकि वे अन्य टैब से संबंधित हैं, हम भविष्य के लेखों में उन पर वापस लौटेंगे):

    - मैदान, विशेषता का सामान्य नाम निर्दिष्ट करें;

    ­­- पथ, उस विशेषता का नाम निर्दिष्ट करें जिसके द्वारा हम इसे एसीएस में संदर्भित करेंगे, उदाहरण के लिए, में परिकलित फ़ील्ड;

    - हैडर, उस विशेषता का नाम निर्दिष्ट करें जो रिपोर्ट में प्रदर्शित की जाएगी;

    - मार्जिन बाधा, इस विशेषता की उपलब्धता इंगित करें;

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

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

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

    - मान प्रकार, विशेषता मान प्रकार दर्शाया गया है, यदि आप निम्नलिखित फ़ील्ड का उपयोग करते हैं तो इसे भरना आवश्यक है;

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

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

    1सी एसकेडी में डेटा सेट लिंक

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

    8.2.14 की आगामी रिलीज़ के आलोक में, मैं डेटा संरचना प्रणाली की कुछ नई विशेषताओं का वर्णन करने का प्रयास करूँगा।

    संपादित करना आसान बनाने के लिए, डेटा संरचना योजना खोलें, अधिमानतः किसी बाहरी रिपोर्ट में।

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

    1. एसीएस में एक अनुरोध सेट करें।

    2. एसीएस में परिकलित फ़ील्ड सेट करें

    3. हम सेटिंग टैब पर डेटा लेआउट कॉन्फ़िगर करते हैं

    4. हमने 1सी एंटरप्राइज 8.2.14 लॉन्च किया। हम रिपोर्ट खोलते हैं. हम बनाते हैं, हम प्राप्त करते हैं।

    नई सुविधाओं का विवरण स्वयं:

    1. वर्तमान तिथि()

    सिस्टम दिनांक लौटाता है. लेआउट का लेआउट बनाते समय, लेआउट में मौजूद सभी अभिव्यक्तियों में, currentDate() फ़ंक्शन को वर्तमान दिनांक के मान से बदल दिया जाता है।

    2. अभिव्यक्ति की गणना करें()

    वाक्य - विन्यास:

    अभिव्यक्ति की गणना करें(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)

    विवरण:

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

    फ़ंक्शन समूहों के चयन को ध्यान में रखता है, लेकिन पदानुक्रमित चयनों को ध्यान में नहीं रखता है।

    फ़ंक्शन को उस समूह के समूह चयन में किसी समूह पर लागू नहीं किया जा सकता है। उदाहरण के लिए, नामकरण समूह के चयन में, आप अभिव्यक्ति कैलकुलेट एक्सप्रेशन ("Sum(SumTurnover)", "TotalTotal") > 1000 का उपयोग नहीं कर सकते। लेकिन ऐसी अभिव्यक्ति का उपयोग पदानुक्रमित चयन में किया जा सकता है।

    यदि अंतिम रिकॉर्ड प्रारंभ रिकॉर्ड से पहले आता है, तो यह माना जाता है कि विस्तृत डेटा की गणना और समग्र कार्यों की गणना के लिए कोई रिकॉर्ड नहीं हैं।

    ग्रैंड टोटल के लिए अंतराल अभिव्यक्तियों की गणना करते समय (ग्रुपिंग पैरामीटर ग्रैंडटोटल पर सेट होता है), यह माना जाता है कि विस्तृत डेटा की गणना और समग्र कार्यों की गणना के लिए कोई रिकॉर्ड नहीं हैं।

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

    विकल्प

    <Выражение>

    प्रकार: स्ट्रिंग. मूल्यांकन की जाने वाली अभिव्यक्ति.

    <Группировка>

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

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

    सम(बिक्री.SumTurnover)/गणना(“Sum(Sales.SumTurnover)”, “कुलकुल”)

    इस उदाहरण में, परिणाम समूहीकरण रिकॉर्ड के फ़ील्ड Sales.AmountVolume की राशि और संपूर्ण लेआउट में समान फ़ील्ड की मात्रा का अनुपात होगा;

    <ОбластьВычисления>

    प्रकार: स्ट्रिंग. पैरामीटर निम्नलिखित मान ले सकता है:

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

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

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

    <Начало>

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

    <Конец>

    प्रकार: स्ट्रिंग. यह इंगित करता है कि किस रिकॉर्ड को उस टुकड़े को जारी रखना है जिसमें अभिव्यक्ति के समग्र कार्यों की गणना करनी है। मान निम्न में से एक हो सकता है:

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

    यदि पहली प्रविष्टि समूह के बाहर है, तो यह माना जाता है कि कोई प्रविष्टियाँ नहीं हैं। उदाहरण के लिए, यदि 3 रिकॉर्ड हैं, और आप फर्स्ट(4) प्राप्त करना चाहते हैं, तो यह माना जाता है कि कोई रिकॉर्ड नहीं हैं।

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

    यदि अंतिम प्रविष्टि समूह के बाहर है, तो यह माना जाता है कि कोई प्रविष्टियाँ नहीं हैं। उदाहरण के लिए, यदि 3 रिकॉर्ड हैं, और आप अंतिम(4) प्राप्त करना चाहते हैं, तो यह माना जाता है कि कोई रिकॉर्ड नहीं हैं।

    • पहले का। आपको पिछली ग्रुपिंग प्रविष्टि प्राप्त करने की आवश्यकता है. कोष्ठक में शब्द के बाद, आप एक अभिव्यक्ति निर्दिष्ट कर सकते हैं, जिसके परिणाम का उपयोग वर्तमान समूहीकरण रिकॉर्ड से पीछे बदलाव के रूप में किया जाएगा। उदाहरण के लिए, पिछला (2) - पिछले रिकॉर्ड से पिछला प्राप्त करें।

    यदि पिछला रिकॉर्ड ग्रुपिंग के बाहर है (उदाहरण के लिए, दूसरे ग्रुपिंग रिकॉर्ड को पिछला (3) प्राप्त करने की आवश्यकता है, तो पहला ग्रुपिंग रिकॉर्ड प्राप्त किया जाता है।

    समूहीकरण के कुल के लिए पिछला रिकॉर्ड प्राप्त करते समय, यह माना जाता है कि पहला रिकॉर्ड प्राप्त हो गया है।

    • अगला (अगला)। आपको अगली ग्रुपिंग प्रविष्टि प्राप्त करने की आवश्यकता है. कोष्ठक में शब्द के बाद, आप एक अभिव्यक्ति निर्दिष्ट कर सकते हैं, जिसके परिणाम का उपयोग वर्तमान समूहीकरण रिकॉर्ड से आगे की पारी के रूप में किया जाएगा। उदाहरण के लिए, अगला(2) - अगले रिकॉर्ड से अगला प्राप्त करें।

    यदि अगला रिकॉर्ड समूहीकरण से आगे चला जाता है, तो यह माना जाता है कि कोई रिकॉर्ड नहीं हैं। उदाहरण के लिए, यदि 3 रिकॉर्ड हैं और तीसरा रिकॉर्ड Next() मिलता है, तो यह माना जाता है कि कोई रिकॉर्ड नहीं है।

    जब समूहीकरण के कुल के लिए अगला रिकॉर्ड प्राप्त होता है, तो यह माना जाता है कि कोई रिकॉर्ड नहीं है।

    • वर्तमान (वर्तमान)। आपको वर्तमान प्रविष्टि प्राप्त करने की आवश्यकता है.

    जब समूहीकरण कुल के लिए पुनर्प्राप्त किया जाता है, तो पहला रिकॉर्ड पुनर्प्राप्त किया जाता है।

    • सीमामूल्य. निर्दिष्ट मूल्य से रिकॉर्ड प्राप्त करने की आवश्यकता। कोष्ठक में RestrictingValue शब्द के बाद, आपको उस अभिव्यक्ति को निर्दिष्ट करने की आवश्यकता है जिसके मूल्य के साथ आप टुकड़ा शुरू करना चाहते हैं, पहला ऑर्डरिंग फ़ील्ड।

    रिकॉर्ड पहला रिकॉर्ड होगा जिसका ऑर्डरिंग फ़ील्ड मान निर्दिष्ट मान से अधिक या उसके बराबर है। उदाहरण के लिए, यदि अवधि फ़ील्ड का उपयोग ऑर्डरिंग फ़ील्ड के रूप में किया जाता है, और इसमें मान 01/01/2010, 02/01/2010, 03/01/2010 हैं, और आप LimitValue(DateTime(2010, 1, 15)) प्राप्त करना चाहते हैं, तो दिनांक 02/01/2010 वाला एक रिकॉर्ड प्राप्त होगा।

    <Сортировка>

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

    <ИерархическаяСортировка>

    प्रकार: स्ट्रिंग. सॉर्ट विकल्प के समान। पदानुक्रमित अभिलेखों को व्यवस्थित करने के लिए उपयोग किया जाता है। यदि निर्दिष्ट नहीं है, तो लेआउट बिल्डर सॉर्ट पैरामीटर में निर्दिष्ट ऑर्डर के अनुसार ऑर्डर उत्पन्न करता है।

    <ОбработкаОдинаковыхЗначенийПорядка>

    प्रकार: स्ट्रिंग. यदि समान ऑर्डरिंग मान वाले कई रिकॉर्ड हैं तो पिछले या अगले रिकॉर्ड को निर्धारित करने के लिए एक नियम निर्दिष्ट करता है:

    • अलग-अलग का मतलब है कि पिछले और अगले रिकॉर्ड को निर्धारित करने के लिए ऑर्डर किए गए रिकॉर्ड के अनुक्रम का उपयोग किया जाता है। डिफ़ॉल्ट मान।
    • टुगेदर (एक साथ) का अर्थ है कि पिछले और अगले रिकॉर्ड क्रमबद्ध अभिव्यक्तियों के मूल्यों के आधार पर निर्धारित किए जाते हैं।

    उदाहरण के लिए, यदि परिणामी अनुक्रम दिनांक के अनुसार क्रमबद्ध है:

    तारीख पूरा नाम अर्थ
    1 01 जनवरी 2001 इवानोव एम. 10
    2 02 जनवरी 2001 पेत्रोव एस. 20
    3 03 जनवरी 2001 सिदोरोव आर. 30
    4 04 जनवरी 2001 पेत्रोव एस. 40

    यदि पैरामीटर मान अलग है, तो:

    § प्रविष्टि 3 की पिछली प्रविष्टि प्रविष्टि 2 होगी।

    § यदि गणना खंड को वर्तमान, वर्तमान (क्रमशः, प्रारंभ और अंत पैरामीटर) के रूप में परिभाषित किया गया है, तो रिकॉर्ड 2 के लिए इस खंड में एक रिकॉर्ड 2 शामिल होगा। अभिव्यक्ति गणना अभिव्यक्ति ("योग (मूल्य)", वर्तमान, वर्तमान) 20 के बराबर होगी।

    यदि पैरामीटर मान एक साथ है, तो:

    § प्रविष्टि 3 की पिछली प्रविष्टि प्रविष्टि 1 होगी।

    § यदि गणना खंड को करंट, करंट (क्रमशः, प्रारंभ और अंत पैरामीटर) के रूप में परिभाषित किया गया है, तो रिकॉर्ड 2 के लिए इस खंड में रिकॉर्ड 2 और 3 शामिल होंगे। एक्सप्रेशन कैलकुलेट एक्सप्रेशन ("सम (वैल्यू)", करंट, करंट) 50 के बराबर होगा।

    प्रारंभ और अंत पैरामीटर में एक साथ के बराबर पैरामीटर का मान निर्दिष्ट करते समय, आप पहले, अंतिम, पिछले, अगले पदों के लिए ऑफसेट निर्दिष्ट नहीं कर सकते।

    अभिव्यक्ति की गणना करें ("राशि(राशि टर्नओवर)", "प्रथम", "वर्तमान")

    यदि आप पिछली पंक्ति में समूहीकरण मान प्राप्त करना चाहते हैं, तो आप निम्नलिखित अभिव्यक्ति का उपयोग कर सकते हैं:

    कैलकुलेटएक्सप्रेशन('कोर्स', 'पिछला')

    सूची नयाविशेषताएँ:

    ComputeExpressionGroupedArray(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

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

    ComputeExpressionGroupedValueTable(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

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

    वैल्यूफिल्ड(<Выражение>) - यदि मान दिए गए प्रकार के डिफ़ॉल्ट मान के अलावा, NULL के अलावा, शून्य संदर्भ के अलावा, अपरिभाषित के अलावा अन्य है, तो सही लौटाता है। बूलियन मानों का परीक्षण NULL के लिए किया जाता है। गैर-व्हाट्सएप वर्णों के लिए स्ट्रिंग्स की जाँच की जाती है।

    प्रारूप(<Выражение>, <Форматная строка>) - पारित मूल्य की स्वरूपित स्ट्रिंग प्राप्त करें। प्रारूप स्ट्रिंग को 1C:एंटरप्राइज़ सिस्टम के प्रारूप स्ट्रिंग के अनुसार सेट किया गया है।

    सबस्ट्रिंग(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) - यह फ़ंक्शन एक स्ट्रिंग से एक सबस्ट्रिंग का चयन करने के लिए डिज़ाइन किया गया है।

    स्ट्रिंग लंबाई(<Выражение>) - फ़ंक्शन को स्ट्रिंग की लंबाई निर्धारित करने के लिए डिज़ाइन किया गया है। पैरामीटर - स्ट्रिंग प्रकार अभिव्यक्ति

    पंक्ति(<Выражение>) - यदि किसी सरणी को एक पैरामीटर के रूप में पारित किया जाता है, तो फ़ंक्शन एक स्ट्रिंग लौटाता है जिसमें सरणी के सभी तत्वों के स्ट्रिंग प्रतिनिधित्व होते हैं, जो वर्णों द्वारा अलग किए जाते हैं; “. यदि मानों की एक तालिका को एक पैरामीटर के रूप में पारित किया जाता है, तो फ़ंक्शन मानों की तालिका की सभी पंक्तियों के स्ट्रिंग प्रतिनिधित्व वाले एक स्ट्रिंग को लौटाता है, और प्रत्येक पंक्ति के सेल प्रतिनिधित्व को वर्णों द्वारा अलग किया जाता है; ", और एक न्यूलाइन कैरेक्टर के साथ स्ट्रिंग्स। यदि किसी तत्व में खाली स्ट्रिंग प्रतिनिधित्व है, तो उसके प्रतिनिधित्व के बजाय, एक स्ट्रिंग प्रदर्शित होती है<Пустое значение>.

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

    ACS फ़ील्ड के लिए अतिरिक्त सेटिंग्स.

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

    कॉलम "उपलब्ध मान"आपको चयन के लिए उपलब्ध मान निर्दिष्ट करने और उपयोगकर्ता की पसंद को कुछ सीमाओं तक सीमित करने की अनुमति देता है।

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

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

    परिकलित फ़ील्ड

    आप डेटा संरचना के परिकलित फ़ील्ड टैब पर अपने स्वयं के परिकलित फ़ील्ड बना सकते हैं।

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

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

    राशि - कीमत* मात्रा

    किसी अन्य को देखें, और आप इन फ़ंक्शंस का उपयोग करके डाउनलोड भी कर सकते हैं।

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

    रिपोर्ट फॉर्म बनाए बिना एसीएस पर बनी रिपोर्ट में पैरामीटर और चयन कैसे स्थानांतरित करें?

    &एटक्लाइंट // एसीएस रिपोर्ट में पैरामीटर पास करनाप्रक्रिया कमांड प्रोसेसिंग (कमांड पैरामीटर, कमांड निष्पादन पैरामीटर) चयन = नई संरचना ("नामकरण", कमांड पैरामीटर); फिक्स्डसेटिंग्स = गेटफिक्स्डसेटिंग्स(); फॉर्मपैरामीटर = नई संरचना( "शेपऑनओपन, चयन, वैरिएंट कुंजी, निश्चित सेटिंग्स", सत्य , चयन , "बिक्री रिपोर्ट संस्करण", फिक्स्डसेटिंग्स); ओपनफॉर्म( "रिपोर्ट.बिक्रीरिपोर्ट.प्रपत्र", फॉर्मपैरामीटर); EndProcedure &AtServer फ़ंक्शन GetFixedSettings() बिक्री रिपोर्ट = रिपोर्ट। विक्रय विवरण। बनाएं() ; एसकेडी = बिक्री रिपोर्ट। डेटा संरचना योजना; सेटिंग्स = एसकेडी। न्यूनता समायोजन; प्रारंभ अवधि = सेटिंग्स. पैरामीटरडेटा. FindParameterValue(NewDataCompositionParameter("PeriodStart")); अवधि की शुरुआत. मान = महीना प्रारंभ(वर्तमान दिनांक()); अवधि की शुरुआत. प्रयोग = सत्य ; प्रारंभ अवधि = सेटिंग्स. पैरामीटरडेटा. FindParameterValue( NewDataCompositionParameter("EndPeriod" ) ); समाप्ति अवधि. मान = अंतिम महीना(वर्तमान दिनांक()); समाप्ति अवधि. प्रयोग = सत्य ; वापसी सेटिंग्स; अंतकार्य // GetFixedSettings()

    एसकेडी रिपोर्ट में कॉलम शीर्षकों को केंद्र में कैसे संरेखित करें?

    आपको "डेटा सेट" टैब पर "डिज़ाइन" फ़ील्ड में दो पैरामीटर सेट करने होंगे:

    क्षैतिज स्थिति: केंद्र लंबवत स्थिति: केंद्र

    इसके अलावा नीचे "सेटिंग्स" टैब पर आपको एक और टैब मिलेगा: "सशर्त उपस्थिति"। वहां प्रत्येक समूह, पैरामीटर आदि के लिए। आप अपना इच्छित लेआउट सेट कर सकते हैं.

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

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

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


    इस मान की गणना केवल इस समूहीकरण स्तर पर ही की जा सकती है, क्योंकि, ऊपर या नीचे, गणना करने के लिए कोई मान नहीं हैं। उदाहरण के लिए, विस्तृत रिकॉर्ड के स्तर पर, किसी समूह में अधिकतम संख्या पर कोई डेटा नहीं है, क्योंकि ये डेटा केवल संपूर्ण समूह के लिए सत्य हैं, न कि उसके व्यक्तिगत घटकों के लिए।

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

    ग्रुपिंगएरे के साथ एक्सप्रेशन की गणना करें ("राशि(राशि टर्नओवर)", "प्रतिपक्ष")
    लेआउट बिल्डर आउटपुट के लिए निम्नलिखित अभिव्यक्ति उत्पन्न करेगा:

    कॉन्टेननेटस्ट्रिंग्स(ऐरे(ऑर्डर(कैलकुलेटग्रुप एक्सप्रेशनवैल्यूटेबल("देखें(राशि(डेटासेट.अमाउंटटर्नओवर)),राशि(डेटासेट.अमाउंटटर्नओवर)","डेटासेट.काउंटरपार्टी"),"2")))

    विकल्प:

    प्रकार: स्ट्रिंग. मूल्यांकन की जाने वाली अभिव्यक्ति. एक स्ट्रिंग, उदाहरण के लिए, राशि (राशि टर्नओवर)।

    प्रकार: स्ट्रिंग. फ़ील्ड अभिव्यक्तियों को समूहीकृत करना - फ़ील्ड अभिव्यक्तियों को अल्पविराम से अलग करके समूहीकृत करना। उदाहरण के लिए, ठेकेदार, पार्टी।

    प्रकार: स्ट्रिंग. एक अभिव्यक्ति जो विवरण रिकॉर्ड पर लागू फ़िल्टर का वर्णन करती है। किसी अभिव्यक्ति में समग्र फ़ंक्शन समर्थित नहीं हैं. उदाहरण के लिए, DeletionMark = गलत।

    प्रकार: स्ट्रिंग. एक अभिव्यक्ति जो समूह रिकॉर्ड पर लागू फ़िल्टर का वर्णन करती है। उदाहरण के लिए, राशि(राशि टर्नओवर) > &पैरामीटर1।
    उदाहरण:

    अधिकतम (ग्रुपिंगएरे के साथ एक्सप्रेशन की गणना करें ("राशि(राशि टर्नओवर)", "प्रतिपक्ष"));

    फ़ंक्शन सिंटैक्स का विस्तृत विवरण http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582 पर पाया जा सकता है
    अब गणना के लिए, हम निम्नलिखित अभिव्यक्तियों का उपयोग करके "गणना करें ..." के विभिन्न मूल्यों के साथ "ऑर्डर" फ़ील्ड को डुप्लिकेट करेंगे, ध्यान दें कि प्रत्येक उच्च स्तर में, निचले समूहों के स्तरों के मूल्यों का उपयोग किया जाता है।

    परिणामस्वरूप, हमें निम्नलिखित निर्माण मिलता है: