एक अनुरोध में दिनांकों की 1सी तुलना। किसी अनुरोध में रिक्त दिनांक कैसे निर्दिष्ट करें? दिनांक में कनवर्ट करें

अक्सर "दिनांक" प्रकार के चर के साथ काम करने की आवश्यकता होती है। इस लेख में हम बुनियादी तकनीकों को देखेंगे - वर्तमान तिथि को पास करना, खाली मान की जाँच करना, एक मनमानी तारीख।

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

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

उदाहरण अनुरोध = नया अनुरोध;
उदाहरण अनुरोध.पाठ = "
|चुनें
| एडवांसरिपोर्टअटैच्डफाइल्स.लिंक
|से
| निर्देशिका.एडवांसरिपोर्टअटैच्डफाइल्सएएस एडवांसरिपोर्टअटैच्डफाइल्स
|कहां
| एडवांसरिपोर्टअटैच्डफाइल्स.दिनांक< &ТекДата»;
उदाहरण Request.SetParameter('CurrentDate', currentDate());

कस्टम तिथि

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

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

यह उदाहरण पिछले वर्ष 2016 के अंत तक व्यय रिपोर्ट से जुड़ी सभी फाइलों को पुनः प्राप्त करेगा। इस संबंध में, हम समय बिंदु "दिसंबर 31, 2016 23:59:59" की तुलना करने के लिए घंटा, मिनट और सेकंड का संकेत देंगे।

चुनना
एडवांसरिपोर्टअटैच्डफाइल्स.लिंक
से
निर्देशिका.एडवांसरिपोर्टअटैच्डफाइलें एडवांसरिपोर्टअटैच्डफाइल्स के रूप में
कहाँ
एडवांसरिपोर्टअटैच्डफाइल्स.दिनांक< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

रिक्त तिथि

किसी वेरिएबल की जांच करने का सबसे आसान तरीका यह देखना है कि उसमें कोई खाली तारीख है या नहीं, एक साधारण तुलना का उपयोग करना है। इस उदाहरण में, एक क्वेरी का उपयोग करके, हम उस खाते की सभी नकद प्राप्तियों का चयन करेंगे जिनके लिए आने वाली तारीख नहीं भरी गई है।

43
शून्य - गुम मान। शून्य मान से भ्रमित न हों! NULL एक संख्या नहीं है, एक स्थान के बराबर नहीं है, एक खाली संदर्भ या अपरिभाषित है। NULL एक प्रकार बनाने वाला मान है, अर्थात। एक प्रकार NULL और इस प्रकार का एक एकल मान है। व्यर्थ... 26
1C प्लेटफ़ॉर्म में डेटाबेस तालिकाओं में क्वेरी उत्पन्न करने और निष्पादित करने के लिए, क्वेरी प्रोग्रामिंग भाषा के एक विशेष ऑब्जेक्ट का उपयोग किया जाता है। यह ऑब्जेक्ट न्यू रिक्वेस्ट कंस्ट्रक्शन को कॉल करके बनाया गया है। सुविधाजनक अनुरोध... 18
यह आलेख 1C v.8.2 प्रश्नों के साथ काम करते समय उपयोगी तकनीकें प्रदान करता है, साथ ही ऐसी जानकारी भी प्रदान करता है जो क्वेरी भाषा के बारे में इतनी अच्छी तरह से ज्ञात नहीं है। मैं देने की कोशिश नहीं कर रहा हूँ पूर्ण विवरणक्वेरी भाषा, लेकिन मैं सिर्फ इस पर ध्यान देना चाहता हूं... 13
जैसे - एक पैटर्न की समानता के लिए एक स्ट्रिंग की जाँच करने के लिए ऑपरेटर। SQL में LIKE का एनालॉग। SIMILAR ऑपरेटर आपको बाईं ओर निर्दिष्ट अभिव्यक्ति के मान की तुलना दाईं ओर निर्दिष्ट पैटर्न स्ट्रिंग से करने की अनुमति देता है। अभिव्यक्ति का अर्थ...

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

1सी प्रश्नों में तिथियों के साथ काम करने के उदाहरण

सबसे पहले, आपको आवश्यक प्रारूप में अनुरोध में तारीख प्राप्त करने की आवश्यकता है - समय के साथ या उसके बिना। इस कार्य को पूरा करने के कई तरीके हैं:

  1. पैरामीटर से गुजरें. आप इस पद्धति का उपयोग करके केवल वर्तमान सत्र की तारीख प्राप्त कर सकते हैं;
  2. चयन फ़ील्ड से क्वेरी में दिनांक प्राप्त करें;
  3. DATETIME() फ़ंक्शन का उपयोग करके संख्यात्मक मानों से कनवर्ट करें।

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

दिनांकसमय (1, 1, 1)

समान कमांड का उपयोग करके, आप अनुरोध में एक मनमाना दिनांक और समय प्राप्त कर सकते हैं। इसके अलावा, उन्हें पैरामीटर के रूप में 6 संख्याओं को निर्दिष्ट करके एक सेकंड तक की सटीकता के साथ निर्दिष्ट किया जा सकता है। यदि केवल 3 संख्याओं का उपयोग किया जाता है, तो घंटे, मिनट और सेकंड 0 (दिन की शुरुआत) पर सेट किए जाएंगे। उदाहरण के लिए, हमें अनुरोध में जनवरी 2018 के पहले 10 दिनों के लिए दस्तावेज़ों का चयन करना होगा:

चालू खाते के लिए रसीद का चयन करें। दस्तावेज़ से लिंक के रूप में लिंक करें। चालू खाते की रसीद, चालू खाते की रसीद के रूप में, जहां चालू खाते की रसीद। दिनांक समय (2018, 1, 1, 0, 0, 0) और दिनांक समय (2018, 1) के बीच की तारीख 10, 23, 59, 59)

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

  • काल की शुरुआत.पैरामीटर उस दिनांक और समय अवधि को इंगित करते हैं जिसके संदर्भ में दिनांक की शुरुआत प्राप्त करना आवश्यक है। किसी दिनांक को कालातीत प्रारूप में परिवर्तित करने के लिए उपयोग किया जाता है। ऐसा करने के लिए, आपको दूसरा पैरामीटर सेट करना होगा - "DAY";
अवधि की शुरुआत(,) अवधि की शुरुआत(&तारीख, दिन) अवधि>तिथि>
  • अवधि का अंत.एक समान आदेश जो मापदंडों में निर्दिष्ट इकाइयों के संदर्भ में अंतिम तिथि लौटाता है;
  • दिनांक जोड़ें.आपको एक ऐसी तारीख प्राप्त करने की अनुमति देता है जो निर्दिष्ट समय इकाइयों की एक निर्दिष्ट संख्या से अधिक है। फ़ंक्शन पैरामीटर में दिनांक, समय इकाई और संख्या शामिल हैं;
ADDKDATE(,) ADDKDATE(&दिनांक, दिन, 10) मात्रा>प्रकार>दिनांक>
  • विभेदित दिनांक।निर्दिष्ट इकाइयों में तिथियों के बीच अंतर प्राप्त करता है;
भिन्नतिथि(,) भिन्नतिथि(&दिनांक1, औरदिनांक2, दिन) प्रकार>दिनांक2>दिनांक1>
  • सप्ताह का दिन।सप्ताह के किसी एक दिन की क्रम संख्या लौटाता है।

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

सप्ताह का कौन सा दिन चुनें (और वर्तमान दिनांक) = 1 फिर "सोमवार" किस दिन (और वर्तमान दिनांक) = 2 फिर "मंगलवार" सप्ताह का कौन सा दिन (और वर्तमान दिनांक) = 3 फिर "बुधवार" कब सप्ताह का दिन (और वर्तमान दिनांक) = 4 फिर "गुरुवार" कब दिन सप्ताह (&वर्तमान दिनांक) = 5 फिर "शुक्रवार" सप्ताह का कौन सा दिन (और वर्तमान दिनांक) = 6 फिर "शनिवार" अन्यथा "रविवार" समाप्त

1C क्वेरी में प्रकारों को किसी संख्या या स्ट्रिंग से दिनांक में परिवर्तित करना एक श्रम-केंद्रित कार्य है। आप DATETIME फ़ंक्शन का उपयोग करके संख्याओं से एक तारीख प्राप्त कर सकते हैं, एक स्ट्रिंग से - SUBSTRING फ़ंक्शन और SELECT WHEN THEN ELSE निर्माण को मिलाकर। इसके आधार पर, डेवलपर्स मॉड्यूल में अन्य प्रकारों से तारीख प्राप्त करना पसंद करते हैं और इसे एक पैरामीटर का उपयोग करके अनुरोध में पास करते हैं। दुर्भाग्य से, यह हमेशा संभव नहीं है, इसलिए आपको अनुरोध में दिनांक प्रारूप बदलना होगा।

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

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

  • दिनांक समय

    आपको वर्ष, माह, दिन, घंटा, मिनट, सेकंड निर्दिष्ट करके अनुरोध में (समय के साथ या बिना) तारीख प्राप्त करने की अनुमति देता है।
    वाक्य - विन्यास:
    दिनांकसमय(वर्ष, माह, दिन, घंटा, मिनट, दूसरा)
    आमतौर पर घंटा, मिनट और सेकंड का संकेत नहीं दिया जाता है। चलिए एक छोटा सा उदाहरण देते हैं. क्वेरी कंसोल में निम्नलिखित पाठ दर्ज करें:

    दिनांक समय चुनें(2016, 1, 1)

    अनुरोध को निष्पादित करने के परिणामस्वरूप, हमें दिनांक प्राप्त होती है - 01/01/2016
    वास्तव में, ऐसी स्थिति की कल्पना करना कठिन है जिसमें किसी अनुरोध में तारीख इस प्रकार इंगित की जाएगी। आख़िरकार, जब आपको कोई अवधि निर्दिष्ट करने की आवश्यकता होती है, तो पैरामीटर का उपयोग किया जाता है। लेकिन एक ऐसा मामला है जब यह फ़ंक्शन विशेष महत्व का होता है। यह तब होता है जब हमें फ़ील्ड में या अनुरोध शर्तों में एक खाली तारीख इंगित करने की आवश्यकता होती है। मैं आपको याद दिला दूं कि 1सी भाषा के लिए एक खाली तारीख का फॉर्म होता है - 0001.01.01। इस प्रकार, अनुरोध में एक खाली तारीख प्राप्त करने के लिए, बस निर्दिष्ट करें दिनांकसमय(1, 1, 1). उदाहरण के तौर पर, आइए सूचना रजिस्टर से चयन करें कर्मचारीसंगठनजो रिकार्ड भरे नहीं गए हैं समापन अवधि:

    संगठनात्मक कर्मचारियों का चयन करें। अवधि, संगठनात्मक कर्मचारी। कर्मचारी, संगठनात्मक कर्मचारी। स्थिति, संगठनात्मक कर्मचारी। रजिस्टर जानकारी से संगठन प्रभाग। संगठनात्मक कर्मचारी जहां संगठनात्मक कर्मचारी हैं। समापन अवधि = दिनांक समय (1, 1, 1)

  • काल की शुरुआत

    के लिए निर्दिष्ट तिथिजिस अवधि में यह प्रवेश करता है उसकी शुरुआत लौटाता है।
    वाक्य - विन्यास:
    अवधि की शुरुआत (दिनांक, अवधि प्रकार)
    periodType निम्नलिखित मान ले सकता है: मिनट, घंटा, दिन, सप्ताह, महीना, तिमाही, वर्ष, दशक, आधा वर्ष
    क्वेरी कंसोल में, दर्ज करें:

    अवधि की शुरुआत चुनें (दिनांकसमय(2016, 1, 15), महीना)

    अनुरोध वापस आएगा - 01/01/2016
    और अब एक उदाहरण. जैसा कि आप जानते हैं, रजिस्टर की आवधिकता कर्मचारीसंगठनएक दिन। आइए एक क्वेरी बनाएं जिसमें वास्तविक रिकॉर्ड अवधि के बजाय महीने की आरंभ तिथि प्रदर्शित की जाएगी।

    माह की शुरुआत के रूप में अवधि की शुरुआत (संगठनों के कर्मचारी। अवधि, महीना) का चयन करें, संगठनों के कर्मचारी। कर्मचारी, संगठनों के कर्मचारी। पद, संगठनों के कर्मचारी। रजिस्टर जानकारी से संगठन का विभाजन। संगठनों के कर्मचारी संगठनों के कर्मचारियों के रूप में चुनें

  • अवधि का अंत

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

    अवधि का अंत चुनें (दिनांकसमय(2016, 1,15), महीना)

    रिटर्न 01/31/2016 23:59:59
    जैसा कि आप देख सकते हैं, मान दूसरे पर सटीक लौटाया जाता है।

  • दिनांक जोड़ें

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

    अतिरिक्त दिनांक (दिनांक समय (2016, 2, 15), माह, 2) चुनें

    हमें तारीख मिलती है 04/15/2016 0:00:00 इस तथ्य के बावजूद कि फरवरी एक छोटा महीना है, प्राप्त तारीख का दिन मूल तारीख के समान ही है। यह बहुत सुविधाजनक है कि आपको महीनों में दिनों की संख्या के बारे में सोचने की ज़रूरत नहीं है।
    मात्रा ऋणात्मक भी हो सकती है. फिर अंतराल को विपरीत दिशा में गिना जाता है।

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

    निर्दिष्ट इकाइयों में दो तिथियों के बीच अंतर की गणना करें।
    वाक्य - विन्यास:
    तिथि अंतर (प्रारंभ तिथि, समाप्ति तिथि, अवधि प्रकार)
    अवधि प्रकार निम्नलिखित मान ले सकता है: दूसरा, मिनट, घंटा, दिन, महीना, तिमाही, वर्ष
    उदाहरण के लिए:

    भिन्न दिनांक (दिनांक समय (2016, 2, 15), दिनांक समय (2016, 3, 1), दिन) का चयन करें।

    रिटर्न 15

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



गलती:सामग्री सुरक्षित है!!