इस मोड में मोडल विंडोज़ का उपयोग निषिद्ध है कैसे सक्षम करें। "इस मोड में मोडल विंडोज़ का उपयोग निषिद्ध है" त्रुटि क्यों होती है? सामान्य उपयोगकर्ताओं के लिए त्रुटि सुधार के निर्देश

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

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

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

&ऑनक्लाइंट

मानक प्रसंस्करण = ग़लत;




यदि Dialog.Edit() तो //मोडल फॉर्म को कॉल करें। फॉर्म बंद होने के बाद ही कोड निष्पादन जारी रहेगा।
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = डायलॉग.अवधि.EndDate;
अगर अंत;

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


जैसा कि हम देख सकते हैं, अवधि चयन मोडल विंडो पर कॉल को संसाधित करने के लिए एक प्रक्रिया पर्याप्त है।

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

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

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

और अंत में, 1C मोबाइल एप्लिकेशन भी मोडल विंडोज़ के साथ पूरी तरह से अनुकूल नहीं है।

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

&ऑनक्लाइंट
सेवा प्रक्रियास्टार्टडेटस्टार्टचयन(तत्व, चयनडेटा, मानक प्रसंस्करण)

मानक प्रसंस्करण = ग़लत;

डायलॉग = NewEditingDialogStandardPeriod();
मानक अवधि = नया मानक अवधि();

प्रारंभ दिनांक = आइटम.सेवाएं.वर्तमानडेटा.प्रारंभ दिनांक;
समाप्ति तिथि = आइटम.सेवाएं.वर्तमानडेटा.अंतिम तिथि;

मानक अवधि.प्रारंभ दिनांक = प्रारंभ दिनांक;
मानक अवधि.अंततिथि = समाप्तितिथि;
संवाद.अवधि = मानक अवधि;

अलर्ट विवरण = नया अलर्ट विवरण ("अवधि चयन प्रसंस्करण", यह फॉर्म);

डायलॉग.शो(विवरणअलर्ट)

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

&ऑनक्लाइंट
प्रक्रिया अवधि चयन प्रसंस्करण (अवधि, पैरामीटर) निर्यात

यदि अवधि<>फिर अपरिभाषित

Elements.Services.CurrentData.StartDate = अवधि.StartDate;
Elements.Services.CurrentData.EndDate = अवधि.EndDate;

अगर अंत;

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


जैसा कि हम देख सकते हैं, Edit() के बजाय, show() कहा जाता है। और चयन ईवेंट को संसाधित करना पहले से ही एक अन्य प्रक्रिया में है।

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

खैर, आइए ब्राउज़रों और मोबाइल कंप्यूटरों में 1C कार्य के लिए तौर-तरीकों को छोड़ें और नई तकनीकों में महारत हासिल करें।

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

यह आलेख मोडल मोड अक्षम होने पर उपयोगकर्ता से एक प्रश्न के उदाहरण का उपयोग करके प्रोग्राम कोड बदलने की व्यवस्था दिखाता है।

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

कोड का प्रश्न भाग कुछ इस तरह दिख सकता है:

यदि पी.एम. मात्रा()< >0 तो उत्तर = प्रश्न(" // यह लाइन एक प्रश्न के साथ एक मोडल विंडो प्रदर्शित करेगी और उपयोगकर्ता के उत्तर देने तक कोड निष्पादन रुक जाएगायदि उत्तर = DialogReturnCode. नहीं फिर वापसी ; अगर अंत ; // उपयोगकर्ता जारी रखने के लिए सहमत हैपीएम. स्पष्ट() ; अगर अंत ; // आगे की कार्रवाई करें // यदि पीएम खाली था या उपयोगकर्ता ने रिफिलिंग के बारे में प्रश्न का सकारात्मक उत्तर दिया तो प्रोग्राम यहां जाएगाआगे की कार्रवाई करें () ;

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

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

पहले लिखा गया कोड कैसे बदलेगा:

// पीएम डेटा भरना जरूरी है // पूर्णता के लिए पीएम की जाँच करनायदि पी.एम. मात्रा()< >0 फिर // पीएम खाली नहीं है, आपको उपयोगकर्ता से रीफिलिंग के बारे में पूछना होगाप्रश्न दिखाएँ(नया विवरणअलर्ट्स(" टीसी पूर्णता को फिर से भरना" , यहऑब्जेक्ट, अतिरिक्त पैरामीटर्स ), " पीएम फिर से भरा जाएगा. जारी रखना ?", संवाद मोडप्रश्न। हाँनहीं); // यह पंक्ति एक प्रश्न विंडो प्रदर्शित करेगी, लेकिन कोड निष्पादित होना बंद नहीं करेगाअन्यथा // यदि पीएम खाली था तो कार्यक्रम यहां जाएगाआगे की कार्रवाई करें() ; अगर अंत ; // कार्यक्रम हर हाल में यहां पहुंचेगा, चाहे पीएम खाली हो या नहीं // (बशर्ते, निश्चित रूप से, पिछले कोड में कोई त्रुटि न हो) . . . // उसी मॉड्यूल में निर्यात प्रक्रिया // उपयोगकर्ता द्वारा प्रश्न का उत्तर देने के बाद कॉल किया जाता है& क्लाइंट प्रक्रिया पर रिफिल टीसी पूर्णता (प्रतिक्रिया परिणाम, अतिरिक्त पैरामीटर) निर्यात करें यदि प्रतिक्रिया परिणाम = संवाद रिटर्न कोड। नहीं तो // उपयोगकर्ता ने जारी रखने से इनकार कर दियावापस करना ; अगर अंत ; // आगे की कार्रवाई करें // यदि पीएम खाली नहीं था और उपयोगकर्ता ने रिफिलिंग के बारे में सवाल का सकारात्मक उत्तर दिया तो प्रोग्राम यहां जाएगापीएम. स्पष्ट() ; आगे की कार्रवाई करें() ; अंतिम प्रक्रिया

इस प्रकार, चूंकि शोक्वेस्टियन प्रक्रिया निष्पादित होने पर प्रोग्राम बंद नहीं होगा, इसलिए सभी घटनाओं को सावधानीपूर्वक संभालना आवश्यक है
इस समस्या को हल करते समय, दो घटनाएँ घटित होने पर आगे की कार्रवाइयां हो सकती हैं:
1. यदि पीएम खाली था
2. यदि पीएम खाली नहीं था और उपयोगकर्ता ने प्रश्न का सकारात्मक उत्तर दिया, तो पुनः भरें

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

समान उपयोगकर्ता इंटरैक्शन फ़ंक्शंस (SelectValue, SelectFromList, आदि) के लिए एक समान तंत्र का उपयोग किया जाता है।

लेख 1C:एंटरप्राइज़ प्लेटफ़ॉर्म में तौर-तरीकों को छोड़ने के मुख्य कारणों और कोड अनुभागों को एक नए अतुल्यकालिक मॉडल में परिवर्तित करने के मुख्य तरीकों पर चर्चा करेगा।

प्रयोज्यता

आलेख व्यावसायिक तर्क के निर्माण के लिए अतुल्यकालिक मॉडल, अतिरिक्त प्लेटफ़ॉर्म "1सी:एंटरप्राइज़" संस्करण 8.3 पर चर्चा करता है। प्रस्तुत जानकारी वर्तमान प्लेटफ़ॉर्म रिलीज़ के लिए प्रासंगिक है।

1सी:एंटरप्राइज़ 8.3 प्लेटफ़ॉर्म में मोडल विंडोज़ का उपयोग करने से इंकार

1सी:एंटरप्राइज़ 8 प्लेटफ़ॉर्म पर कॉन्फ़िगरेशन विकसित करते समय, समय-समय पर प्रोग्राम को तब तक रोकने की आवश्यकता उत्पन्न होती है जब तक कि उपयोगकर्ता कोई निर्णय नहीं लेता या कोई कार्रवाई नहीं करता।

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

यह व्यवहार, उदाहरण के लिए, निम्नलिखित कोड द्वारा प्राप्त किया जा सकता है:

&ऑनक्लाइंट
प्रक्रिया उत्पाद भरें(टीम )
उत्तर = प्रश्न ("तालिका भाग साफ़ हो जाएगा। जारी रखें?", संवाद विधाप्रश्न.हांनहीं);
यदि उत्तर = डायलॉग रिटर्न कोड.हांतब
//भरने का एल्गोरिदम
अगर अंत ;
अंतिम प्रक्रिया

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

OpenModal() विधि को कॉल करके मोडल विंडो खोलने से भी कोड निष्पादन में रुकावट आती है और इंटरफ़ेस अवरुद्ध हो जाता है।

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

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

इस मामले में, ब्राउज़र के माध्यम से 1C:Enterprise 8 कॉन्फ़िगरेशन के साथ काम करने के लिए, आपको पॉप-अप ब्लॉकिंग को अक्षम करना होगा।

मोबाइल उपकरणों पर काम करते समय भी समस्याएँ आती हैं। उदाहरण के लिए, आईपैड पर मोडल विंडोज़ समर्थित नहीं हैं।

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

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

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

कॉन्फ़िगरेशन के मूल तत्व में एक गुण "मॉडेलिटी मोड" होता है, जो यह निर्धारित करता है कि कॉन्फ़िगरेशन में मोडल विंडो खोली जा सकती हैं या नहीं।

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

"मोडैलिटी उपयोग मोड" प्रॉपर्टी के इस मान के साथ, केवल विंडोज़ को ब्लॉक करने की अनुमति है।

यदि "चेतावनी के साथ उपयोग करें" विकल्प चुना गया है, तो जब मोडल विंडो खोली जाती है, तो संदेश विंडो में निम्न पाठ प्रदर्शित होता है:

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

ब्लॉकिंग विंडो और मोडल विंडो के बीच मुख्य अंतर यह है कि ब्लॉकिंग विंडो खोलने से कोड निष्पादन नहीं रुकता है।

इसलिए, डेवलपर्स को इस सुविधा को ध्यान में रखने के लिए प्रोग्राम कोड को फिर से लिखना होगा जो मोडल विंडोज़ का उपयोग करता है।

कोड को दो भागों में विभाजित करने की आवश्यकता है:

  • एक अवरुद्ध विंडो खोलना;
  • उपयोगकर्ता चयन को संसाधित करना।

लेख की शुरुआत में दिए गए कोड खंड को निम्नानुसार फिर से लिखने की आवश्यकता है:

&ऑनक्लाइंट
प्रक्रिया उत्पाद भरें(टीम )
चेतावनी = नया विवरणअलर्ट(, यहऑब्जेक्ट);

संवाद विधाप्रश्न.हांनहीं);
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया (परिणाम, अतिरिक्त विकल्प) निर्यात
यदि परिणाम = डायलॉग रिटर्न कोड.हांतब
//भरने का एल्गोरिदम
अगर अंत ;
अंतिम प्रक्रिया

शोक्वेस्टियन() प्रक्रिया को निष्पादित करने के बाद, सिस्टम बंद नहीं होता है, उपयोगकर्ता की प्रतिक्रिया की प्रतीक्षा में, कोड निष्पादन जारी रहता है।

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

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

विचारित उदाहरण में, कॉल की गई प्रक्रिया एक प्रबंधित फॉर्म मॉड्यूल में स्थित है, इसलिए हम ThisObject पैरामीटर में पास हुए।

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

फिर भरण कमांड हैंडलर इस तरह दिखेगा:

&ऑनक्लाइंट
प्रक्रिया उत्पाद भरें(टीम )
चेतावनी = नया विवरणअलर्ट("उत्पाद प्रश्न पूर्णता भरें",
प्रोसेसिंगअलर्ट);
प्रश्न पाठ = “सारणीबद्ध भाग साफ़ कर दिया जाएगा। जारी रखना?" ;
प्रश्न दिखाएं (चेतावनी, प्रश्न पाठ, संवाद विधाप्रश्न.हांनहीं);
अंतिम प्रक्रिया

ब्लॉकिंग विंडो खोलने वाली किसी भी विधि को कॉल करने के बाद, प्रक्रिया से बाहर निकलना होगा, और आगे चलने वाले कोड को उस प्रक्रिया में रखा जाना चाहिए जिसे विंडो बंद होने के बाद बुलाया जाएगा।

संदर्भ (सहायक डेटा, कुछ पैरामीटर, परिवर्तनीय मान) को उस प्रक्रिया से स्थानांतरित करने के लिए जो मोडल विंडो को बंद होने पर बुलाए जाने वाली प्रक्रिया में खोलती है, ऑब्जेक्ट कंस्ट्रक्टर का एक तीसरा वैकल्पिक पैरामीटर प्रदान किया जाता है: विवरण अलर्ट - अतिरिक्त पैरामीटर।

यह ऑब्जेक्ट (किसी भी प्रकार का) अंतिम पैरामीटर के रूप में अलर्ट विवरण में वर्णित प्रक्रिया में पास किया जाएगा।

ऊपर चर्चा किए गए कोड अनुभाग के उदाहरण का उपयोग करके, इसे इस प्रकार किया जा सकता है:

&ऑनक्लाइंट
प्रक्रिया उत्पाद भरें(टीम )
पैरामीटर1 = 0 ;
पैरामीटर2 = 0 ;
पैरामीटर्स की सूची= नई संरचना ("पैरामीटर1, पैरामीटर2″, पैरामीटर1, पैरामीटर2);
चेतावनी = नया विवरणअलर्ट("उत्पाद प्रश्न पूर्णता भरें", यहऑब्जेक्ट ,
पैरामीटर्स की सूची);
प्रश्न दिखाएँ (चेतावनी, "तालिका भाग साफ़ कर दिया जाएगा। जारी रखें?",
संवाद विधाप्रश्न.हांनहीं);
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया उत्पादप्रश्नपूर्णता भरें(परिणाम , अतिरिक्त विकल्प) निर्यात
यदि परिणाम = डायलॉग रिटर्न कोड.हांतब
//अतिरिक्त पैरामीटर्स का विश्लेषण करें.पैरामीटर1
//अतिरिक्त पैरामीटर्स का विश्लेषण करें। पैरामीटर2
अगर अंत ;
अंतिम प्रक्रिया

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

आइए ब्लॉकिंग विंडो के साथ काम करने के कुछ उदाहरण देखें।

कार्य 1: दूसरा फॉर्म खोलें

दस्तावेज़ फॉर्म से, "ओपन पैरामीटर्स" बटन पर क्लिक करके, आपको एक फॉर्म खोलना होगा जिस पर दो चेकबॉक्स पैरामीटर 1 और पैरामीटर 2 हैं, जिन्हें उपयोगकर्ता को सेट करना होगा। फॉर्म बंद करने के बाद, संदेश पंक्ति में पैरामीटर मान प्रदर्शित करें।

हम एक सामान्य फॉर्म "पैरामीटर्सफॉर्म" बनाते हैं, जिस पर हम विवरण पैरामीटर1 और पैरामीटर2, साथ ही क्लोजफॉर्म कमांड डालते हैं:

कमांड हैंडलर इस तरह दिखता है:

कमांड हैंडलर इस तरह दिखता है: &OnClient
प्रक्रिया क्लोजफॉर्म (कमांड)
पैरामीटर्स की सूची= नई संरचना ( "पैरामीटर1, पैरामीटर2", पैरामीटर1 , पैरामीटर2 );
बंद करना ( पैरामीटर्स की सूची); अंतिम प्रक्रिया

फ़ॉर्म के लिए, विंडोओपनमोड प्रॉपर्टी को "संपूर्ण इंटरफ़ेस को ब्लॉक करें" पर सेट करें:

दस्तावेज़ प्रपत्र पर हम OpenParameters कमांड रखते हैं, जिसका हैंडलर इस प्रकार वर्णित है:

&ऑनक्लाइंट
प्रक्रिया खुले विकल्प(टीम )
चेतावनी = नया विवरणअलर्ट("विकल्प खोलें समाप्त", यहऑब्जेक्ट);
ओपनफॉर्म ( "सामान्य प्रपत्र. प्रपत्र पैरामीटर्स", , , , , , अधिसूचना);
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया खुले विकल्पपूर्ण(परिणाम , अतिरिक्त विकल्प) निर्यात
यदि टाइपवैल्यू (परिणाम) = टाइप करें ("संरचना") तो
परिणाम लूप से प्रत्येक कुंजी-मूल्य के लिए
संदेश = नया उपयोगकर्ता को संदेश;
संदेश.पाठ = "कुंजी:" ” + KeyValue.Key + “””, मूल्य = "
+ कुंजीमूल्य.मूल्य;
संदेश.रिपोर्ट();
अंतचक्र ;
अगर अंत ;
अंतिम प्रक्रिया

उपयोगकर्ता मोड में, वेब क्लाइंट के अंतर्गत कॉन्फ़िगरेशन चलाने पर, हमें निम्नलिखित परिणाम मिलते हैं:

बड़ा करने के लिए छवि पर क्लिक करें.

विंडो खोलने का मोड ओपनफॉर्म प्रक्रिया के अंतिम पैरामीटर में भी निर्दिष्ट किया जा सकता है।

&ऑनक्लाइंट
प्रक्रिया खुले विकल्प(टीम )
चेतावनी = नया विवरणअलर्ट("विकल्प खोलें समाप्त", यहऑब्जेक्ट);
ओपनफॉर्म ( "सामान्य प्रपत्र. प्रपत्र पैरामीटर्स", , , , , , अधिसूचना
फॉर्मविंडोओपनमोड.लॉकएंटायरइंटरफेस
);
अंतिम प्रक्रिया

कार्य 2. फॉर्म बंद करते समय प्रश्न

प्रोसेसिंग विंडो बंद करते समय, उपयोगकर्ता से पूछें कि क्या वह वास्तव में विंडो बंद करना चाहता है।

प्रोसेसिंग फॉर्म मॉड्यूल में स्थित निम्नलिखित कोड का उपयोग करके इस समस्या को हल किया जा सकता है:

&ऑनक्लाइंट
पेरेम फॉर्म को बंद करने की आवश्यकता है;
&ऑनक्लाइंट
बंद करने से पहले की प्रक्रिया (विफलता, मानक प्रसंस्करण)
अगर नहीं फॉर्म को बंद करने की आवश्यकता है= तो फिर सच है
इनकार = सच ;
चेतावनी = नया विवरणअलर्ट("समापन समापन से पहले", यहऑब्जेक्ट);
प्रश्न दिखाएं (चेतावनी, "क्या आप वाकई विंडो बंद करना चाहते हैं?",
संवाद विधाप्रश्न.हांनहीं
);
अगर अंत ;
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया समापन समापन से पहले(परिणाम , अतिरिक्त विकल्प) निर्यात
यदि परिणाम = डायलॉग रिटर्न कोड.हांतब
फॉर्म को बंद करने की आवश्यकता है= सत्य ;
बंद करना();
अन्यथा
फॉर्म को बंद करने की आवश्यकता है= अपरिभाषित;
अगर अंत ;
अंतिम प्रक्रिया

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

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

कार्य 3: संख्यात्मक मान दर्ज करना

जब आप प्रोसेसिंग फॉर्म पर बटन पर क्लिक करते हैं, तो एक मानक संख्या प्रविष्टि संवाद खोलें।

ऐसा करने के लिए, आपको EnterNumber() के बजाय showNumberInput() विधि का उपयोग करना होगा, जो एक मोडल के बजाय एक ब्लॉकिंग विंडो खोलता है।

&ऑनक्लाइंट
नंबर दर्ज करने की प्रक्रिया (कमांड)
चेतावनी = नया विवरणअलर्ट(“नंबरपूरा दर्ज करें”, यहऑब्जेक्ट);
EnterNumbers दिखाएँ(चेतावनी, 0, "मात्रा दर्ज करें", 15, 3);
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया नंबर दर्ज करना, पूरा करना(परिणाम , अतिरिक्त विकल्प) निर्यात

संदेश = नया उपयोगकर्ता को संदेश;
Message.Text = "आपने एक मात्रा दर्ज की है" + परिणाम;
संदेश.रिपोर्ट();
अगर अंत ;
अंतिम प्रक्रिया

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

कार्य 4. रंग चुनना

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

निम्नलिखित हैंडलर के साथ फॉर्म में सेलेक्ट कलर कमांड जोड़ें:

&ऑनक्लाइंट
प्रक्रिया रंग चयन (कमांड)
रंग चयन संवाद= नया रंग चयन संवाद;
चेतावनी = नया विवरणअलर्ट("रंग चयन पूर्ण", यहऑब्जेक्ट);
रंग चयन संवाद.दिखाएँ(चेतावनी);
अंतिम प्रक्रिया
&ऑनक्लाइंट
प्रक्रिया च्वाइस कलर्स कंप्लीशन(परिणाम , अतिरिक्त विकल्प) निर्यात
यदि परिणाम नहीं = अपरिभाषित तो
तत्व.रंग चयन.पृष्ठभूमि रंग= परिणाम ;
अगर अंत ;
अंतिम प्रक्रिया

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

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

यह ध्यान दिया जाना चाहिए कि FileSelectionDialog ऑब्जेक्ट में रंग या फ़ॉन्ट चयन संवादों के विपरीत शो() विधि नहीं है, क्योंकि इन संवादों का कार्यान्वयन काफी भिन्न है।

वेब क्लाइंट पर फ़ाइल चयन संवाद का उपयोग करने के लिए, आपको पहले फ़ाइल एक्सटेंशन को सक्षम करना होगा।

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

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

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

और आपके पास ऊपर वर्णित समस्या को हल करने के केवल दो तरीके हैं:

  1. प्लेटफ़ॉर्म को 8.3.10+ (8.3.11) जारी करने के लिए अपडेट करें, "संगतता मोड" कॉन्फ़िगरेशन प्रॉपर्टी को "उपयोग न करें" पर सेट करें और कोड टुकड़े को फिर से लिखें जो एक एसिंक्रोनस बिजनेस लॉजिक मॉडल में मोडल तरीकों का उपयोग करते हैं
  2. अपने ग्राहकों को पुराने ब्राउज़र का उपयोग करने की सलाह दें जो अभी भी मोडल कॉल का समर्थन करते हैं (मोज़िला फ़ायरफ़ॉक्स संस्करण 37 और उससे नीचे, क्रोम संस्करण 37 से नीचे, आदि)।

वैसे, रिलीज़ 8.3.11 से शुरू होकर, माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर वेब ब्राउज़र संस्करण 8 और 9 अब समर्थित नहीं हैं।

हमने वेब ब्राउज़र के साथ तौर-तरीकों के आधार पर निपटा है, अब अन्य ग्राहकों के साथ स्थिति स्पष्ट करने का समय आ गया है।

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

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

वैसे! इस तथ्य के कारण कि प्लेटफ़ॉर्म आत्मविश्वास से वेब की ओर बढ़ रहा है, संस्करण 8.3.8 के साथ डेवलपर्स ने प्रोग्राम कोड पर कुछ प्रतिबंध लगाए हैं जो मोटे और पतले क्लाइंट में निष्पादित फॉर्म या एप्लिकेशन को बंद करने के तर्क से जुड़े हैं। इस बारीकियों को विस्तार से कवर करने वाले हमारे लेख को अवश्य पढ़ें। इसके अलावा, पाठ्यक्रम में "1सी: एंटरप्राइज 8.3 में इंटरफेस और फॉर्म का व्यावसायिक विकास" में तौर-तरीकों के परित्याग के लिए समर्पित एक अध्याय है, और आप इस विषय पर बहुत सारी उपयोगी और प्रासंगिक जानकारी प्राप्त कर सकते हैं।

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

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

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

निष्कर्ष के बजाय

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

विशेष इंटरनेट संसाधनों पर आप अक्सर नौसिखिया प्रोग्रामर और उनके अधिक परिपक्व सहयोगियों से सामग्री की सिफारिश करने के अनुरोध पढ़ सकते हैं जो उन्हें 1 सी प्लेटफ़ॉर्म की व्यापक और कभी-कभी प्रतीत होने वाली अंतहीन क्षमताओं को समझने में मदद करेगी। हम, परंपरागत रूप से, अनुशंसा करते हैं कि आप हमारे प्रोग्रामिंग पाठ्यक्रमों पर ध्यान दें

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

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

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

1C प्लेटफ़ॉर्म के डेवलपर्स ने एप्लिकेशन समाधान के डेवलपर्स को "नए तरीके" से काम करने में शामिल करने का प्रयास किया। नए "टैक्सी" इंटरफ़ेस की शुरुआत के साथ, उन्होंने नए प्लेटफ़ॉर्म में एक नई सुविधा जोड़ी - "मोडेलिटी मोड"।

जल्दी ठीक

समय के अभाव में, यदि आपको समस्या को शीघ्रता से हल करने की आवश्यकता है, तो आप काफी सरल, लेकिन बहुत सही समाधान का सहारा नहीं ले सकते हैं - आपको बस कॉन्फ़िगरेशन गुणों में मॉडेलिटी मोड को बदलने की आवश्यकता है।

ऐसा करने के लिए, कॉन्फ़िगरेशन मोड में सिस्टम में लॉग इन करें और कॉन्फ़िगरेशन खोलें:

इसके बाद, संदर्भ मेनू खोलने के लिए कॉन्फ़िगरेशन रूट पर राइट-क्लिक करें और "गुण" चुनें:


चावल। 3

खुलने वाले कॉन्फ़िगरेशन गुणों में, टैब में, "मोडेलिटी उपयोग मोड" ढूंढें, इसमें "उपयोग करें" चुनें:


चावल। 4

"F7" कुंजी दबाकर अपने परिवर्तन सहेजें और लागू करें।