কনস্ট্রাক্টরে নেস্টেড প্রশ্ন। ক্যোয়ারী কনস্ট্রাক্টর 1c ক্যোয়ারী কনস্ট্রাক্টর শর্ত

সুতরাং, আসুন সহজ কিছু দিয়ে শুরু করা যাক: কনফিগারেটে একটি নতুন প্রসেসিং তৈরি করুন, এটিকে কোয়েরি কনসোল বা কোয়েরি বিল্ডার নাম দিন, আপনার পছন্দ মতো।

আমাদের প্রয়োজনীয় ভবিষ্যতের প্যারামিটারগুলির জন্য আমরা অবিলম্বে "ডেটা" এ একটি টেবিল যোগ করতে পারি, যাতে আমাদের কনসোলে আমরা সবচেয়ে আদিম অনুরোধ চালাতে পারি না, তবে প্যারামিটার এবং লিঙ্কগুলির সাথে, উদাহরণস্বরূপ, আমাদের কাজের জন্য আমরা পর্যায়ক্রমিক নিবন্ধনগুলির জন্য একটি অনুরোধ তৈরি করব , কিন্তু এখানে প্যারামিটার নির্দেশাবলী ছাড়াই=&date কোথাও নেই।

আমাদের প্যারামিটার টেবিল তৈরি করতে, "ডেটা" ট্যাবে এর "টেবুলার অংশে" আমরা একটি নতুন টেবিল যোগ করব, আসুন এটিকে কোয়েরি প্যারামিটার বলি, এখানে আমরা এই টেবিলের কলামগুলি যুক্ত করব: 1) প্যারামিটার নাম, স্ট্রিং = 25 অক্ষর টাইপ করুন ; প্যারামিটার ভ্যালু, এখানে একটি যৌগিক ডেটা টাইপ রয়েছে, চিত্র দেখুন:

সুতরাং, ছবিতে দেখানো হিসাবে, আমরা প্যারামিটার মান কলামের জন্য একটি যৌগিক প্রকার নির্বাচন করি: খোলে টাইপ মেনুতে, "যৌগিক প্রকার" চেকবক্সটি চেক করুন, নম্বর, স্ট্রিং (20টি অক্ষর নির্দিষ্ট করুন), তারিখ, বুলিয়ান এবং চেক করুন। নীচের চেকবক্স - যেকোন লিঙ্ক - এর অর্থ হল যা অনুসরণ করে, আমাদের অনুরোধের পরামিতিগুলি নির্দিষ্ট করার সময়, আমরা আমাদের কনফিগারেশনের যেকোন বস্তুর উল্লেখ করতে পারি, উদাহরণস্বরূপ, ডিরেক্টরি বা নথি।

এখন আমাদের ভবিষ্যতের ক্যোয়ারী কনসোলের ফর্ম তৈরি করতে হবে। প্রক্রিয়াকরণে, আসুন "ফর্ম" ট্যাবে যান এবং একটি নতুন যোগ করি৷ আমরা এই ফর্মটি প্রবেশ করি এবং এখানে ইতিমধ্যেই সৃজনশীলতার জন্য একটি সীমাহীন ক্ষেত্র রয়েছে - আপনি এইমাত্র তৈরি করা দুটি বিবরণ এবং আপনার পছন্দ মতো পরামিতি সহ একটি প্লেট সাজাতে পারেন! এটি করার জন্য, আপনি একটি গ্রুপ বা পৃষ্ঠা সহ একটি পৃষ্ঠার মতো স্ট্যান্ডার্ড ফর্ম উপাদান ব্যবহার করতে পারেন (যদি আপনি পৃষ্ঠাগুলি উল্টানো পছন্দ করেন।

এখানে প্রধান জিনিস হল একটি জিনিস: ফর্ম সম্পাদনার বাম ক্ষেত্রের মধ্যে "TextValues" বৈশিষ্ট্যটি টেনে আনার পরে, "View"=Text Document Field এর বৈশিষ্ট্যগুলিতে সেট করতে ভুলবেন না। চিত্র দেখুন:

"কোয়েরি টেবিল" অ্যাট্রিবিউটের বৈশিষ্ট্যগুলিতে, আপনি ঐচ্ছিকভাবে "ডিসপ্লে গ্রিড" এবং "ডিসপ্লে হেডার" নির্দিষ্ট করতে পারেন।

এর পরে, ফর্মটি সম্পাদনা করার জন্য ডান উইন্ডোতে, "কমান্ড" ট্যাবে যান এবং একটি নতুন বোতাম যোগ করুন, যখন ক্লিক করা হবে, আমাদের কনসোল একটি নির্দিষ্ট ক্রিয়া সম্পাদন করবে৷ আসুন একটি "কোয়েরি ডিজাইনার" বোতাম তৈরি করি, যদি আপনি চান, আপনি বোতামটিতে একটি আইকন যুক্ত করতে পারেন, প্রধান জিনিসটি হল ফর্মটি সম্পাদনা করার জন্য বাম উইন্ডোতে বোতামটি নিজেই স্থাপন করা - যাতে আমরা এটি দেখতে পারি৷ তারপরে ফর্ম সম্পাদনা করার জন্য ডান উইন্ডো, আমাদের বোতামে ডান-ক্লিক করুন এবং বৈশিষ্ট্য নির্বাচন করুন - বৈশিষ্ট্যগুলিতে, "অ্যাকশন" আইটেমটিতে ক্লিক করুন, একটি মডেল উইন্ডো আসবে যেখানে জিজ্ঞাসা করা হবে যে আমাদের প্রোগ্রাম কোডটি ঠিক কোথায় কার্যকর করা হবে, যা আমরা আপনাকে বরাদ্দ করব। বোতাম - "ক্লায়েন্টে" নির্বাচন করুন।

ফর্ম মডিউলটি একটি রেডিমেড খালি পদ্ধতি "প্রক্রিয়া ক্যোয়ারী কনস্ট্রাক্টর (কমান্ড)" দিয়ে খুলবে। এই পদ্ধতির ভিতরে আমরা স্ট্যান্ডার্ড 1c8 ক্যোয়ারী বিল্ডারের কলটি বর্ণনা করব। এটা খুব সহজ: কনস্ট্রাক্টর = নতুন অনুরোধ কনস্ট্রাক্টর;কিন্তু এখানে সমস্যা আছে - প্ল্যাটফর্মে তৈরি ক্যোয়ারী কনস্ট্রাক্টর শুধুমাত্র একটি মোটা ক্লায়েন্টের অধীনে ব্যবহারকারী মোডে কাজ করে! অতএব, আমরা প্রিপ্রসেসর নির্দেশের শর্ত সন্নিবেশ করব # যদি, তবে এখানে আপনি নিজের জন্য সিদ্ধান্ত নিন, আপনার প্ল্যাটফর্মের উপর ভিত্তি করে, বা আপনার কাছে সাধারণ ফর্ম আছে, তারপর "নির্বাচন করুন FatClientRegularApp"অথবা আপনার পরিচালিত ফর্মের উপর ভিত্তি করে একটি প্ল্যাটফর্ম আছে, তারপর " ThickClientManaged Applicationডুমুর দেখুন।

এখন এই পদ্ধতিতে অনুরোধের পাঠ্য রেকর্ড করার জন্য একটি শর্ত যোগ করা বাকি আছে, যা কোয়েরি নির্মাতা আমাদের জন্য আমাদের "অনুরোধ পাঠ্য" ফর্মের বিবরণে তৈরি করবে:

যদি Constructor.OpenModal()=True তাহলে Object.RequestText=Constructor.Text; যদি শেষ;

কিন্তু আমরা ম্যানুয়ালি রিকোয়েস্ট টেক্সটে কিছু পরিবর্তন করতে পারি (ব্যবহারকারী মোডে - "রিকোয়েস্ট টেক্সট" অ্যাট্রিবিউট উইন্ডোতে) যাতে আমাদের পরিবর্তনগুলি আবার কল করা হলে ক্যোয়ারী কনস্ট্রাক্টরে আসে - আমরা এখানে একটি সাধারণ শর্ত যোগ করব:

যদি EmptyString(Object.QueryText) না হয় তাহলে Constructor.Text = Object.QueryText; যদি শেষ;

এটাই, আমরা 1c8 প্ল্যাটফর্মে নির্মিত ক্যোয়ারী কনস্ট্রাক্টরকে সংযুক্ত করেছি, আসুন আমাদের কাজটি দেখি। এটি করার জন্য, 1C চালু করুন: নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে ঘন ক্লায়েন্ট মোডে এন্টারপ্রাইজ: 1) কনফিগারারের প্রধান মেনু - ডিবাগিং - ডিবাগিং শুরু করুন - পুরু ক্লায়েন্ট; 2) অথবা আপনার যদি কনফিগারেটে কন্ট্রোল প্যানেলে এই কীগুলি থাকে - কেবল একটি পুরু বিন্দু সহ একটি হলুদ বৃত্ত সহ বোতাম টিপুন, চিত্রটি দেখুন:

1cEnterprise8-এর ব্যবহারকারী মোড শুরু হয়, আমরা আমাদের প্রক্রিয়াকরণ খুঁজে পাই, এটি চালু করি, আমাদের "কোয়েরি ডিজাইনার" বোতামে ক্লিক করুন এবং প্ল্যাটফর্মে তৈরি ডিজাইনার কীভাবে খোলে তা দেখুন। ডুমুর দেখুন

সুতরাং, আমাদের ক্যোয়ারী কনস্ট্রাক্টর চলছে, আমরা এতে আমাদের ভবিষ্যত ক্যোয়ারী একসাথে রাখা শুরু করতে পারি, কিন্তু আমরা যে ক্যোয়ারী তৈরি করেছি তা কীভাবে কাজ করবে তা দেখতে আগ্রহী! এবং এটি করার জন্য, আমাদের কনসোলের ফর্মটি সম্পাদনা করার সময় আমাদের কনফিগারেটে আরেকটি বোতাম তৈরি করতে হবে, আসুন এটিকে "রান কোয়েরি" বলি। "রান কোয়েরি" বোতামের বৈশিষ্ট্যগুলিতে, "অ্যাকশন" এ ক্লিক করুন, একটি মেনু আবার উপস্থিত হয় যেখানে আমাদের জিজ্ঞাসা করা হয় কোথায় আমাদের প্রোগ্রাম কোড প্রক্রিয়া করা হবে, এই ক্ষেত্রে আমরা "ক্লায়েন্ট এবং সার্ভার উভয়েই" নির্বাচন করি, আবার আমরা ফর্ম মডিউলে নিজেদের খুঁজে পাই।

Execute Query() পদ্ধতিতে, যা আমাদের ক্লায়েন্টে রয়েছে, আমরা একটি শর্ত লিখব যদি ব্যবহারকারী ক্যোয়ারী টেক্সট না দিয়ে থাকে, কিন্তু এটি কার্যকর করতে বলে:

যদি EmptyString(Object.QueryText) তাহলে রিপোর্ট করুন("কয়েরি টেক্সট লিখুন!"); যদি শেষ;

সিস্টেমটি ইতিমধ্যেই Execute RequestOnServer() পদ্ধতিতে স্বয়ংক্রিয়ভাবে একটি লিঙ্ক তৈরি করেছে; - এটি ভাল, আসুন এই পদ্ধতিতে যাই, যা সার্ভারে কার্যকর করা হয় এবং আমাদের প্রবেশ করা অনুরোধটি কার্যকর করার জন্য কোডটি এখানে লিখুন।

এখানে বিকল্প আছে: আপনি নিজেই প্রশ্ন তৈরির সাথে সম্পর্কিত সমস্ত অভিব্যক্তি লিখতে পারেন, যেমন ম্যানুয়ালি, তবে আরও সহজ বিকল্প রয়েছে - পদ্ধতির ভিতরে, ডান-ক্লিক করুন এবং ড্রপ-ডাউন মেনুতে "ফলাফলের প্রক্রিয়াকরণের সাথে কোয়েরি নির্মাতা, চিত্র দেখুন" নির্বাচন করুন:

আপনি যদি "রেজাল্ট প্রসেসিং সহ ক্যোয়ারী বিল্ডার" আইটেমটিতে ক্লিক করেন, একটি মডেল উইন্ডো "কোয়েরি টেক্সট পাওয়া যায়নি। একটি নতুন তৈরি করুন?" আসবে, হ্যাঁ ক্লিক করুন। বিল্ট-ইন ক্যোয়ারী ডিজাইনার খুলবে, যার প্রথম ট্যাবে "ফলাফল প্রক্রিয়াকরণ" - প্রথম আইটেমটি নির্বাচন করুন "ফলাফল বাইপাস করে।" এটাই, এই কনস্ট্রাক্টর থেকে আমাদের আর কিছুর প্রয়োজন নেই, "ওকে" বোতামে ক্লিক করুন - একটি মডেল উইন্ডো আসবে "অনুরোধে কোনও ক্ষেত্র নির্বাচন করা হয়নি, "ঠিক আছে" ক্লিক করুন।

এর পরে, নিম্নলিখিত রেডিমেড টেমপ্লেটটি আমাদের ExecuteRequestOnServer() পদ্ধতির ভিতরে উপস্থিত হবে:

কনস্ট্রাক্টর দ্বারা নির্মিত অভিব্যক্তিতে এগিয়ে যাওয়া যাক:

Request.Text = "";

Request.Text = Object.RequestText;

এটি কতটা সহজ, প্রসেসিং ফর্মে আমাদের "এক্সিকিউট রিকোয়েস্ট" বোতামটি ইতিমধ্যেই কার্যত কার্যকরী, এখন পর্যন্ত এটি শুধুমাত্র প্যারামিটার ছাড়াই সাধারণ অনুরোধগুলিকে প্রক্রিয়া করতে পারে, কিন্তু মূল বিষয় হল এটি কাজ করে! যা অবশিষ্ট থাকে তা হল প্রক্রিয়াকরণ ফর্মের "মান সারণী" বৈশিষ্ট্যে আমাদের অনুরোধের ফলাফলগুলি দৃশ্যমানভাবে প্রদর্শন করা। আমি আপনাকে মনে করিয়ে দিচ্ছি যে আমাদের বৈশিষ্ট্য "মান সারণী" "টেবুলার ডকুমেন্ট" টাইপের, কারণ অন্যথায় আমরা ব্যবহারকারী মোডে আমাদের ফলাফল দেখতে পাব না। ব্যবহারকারীর কাছে ট্যাবুলার ডেটা প্রদর্শন সর্বদা একটি ট্যাবুলার ডকুমেন্ট বা একটি লেআউট দ্বারা করা হয়৷ আমি সত্যিই চাই যে মানগুলির একটি টেবিলের মাধ্যমে ডেটা প্রদর্শন করা সম্ভব - যেহেতু এটি ব্যবহার করা খুব সহজ এবং পরিচিত, কিন্তু , দুর্ভাগ্যবশত, মানগুলির একটি টেবিল শুধুমাত্র একটি টুল যা একজন বিকাশকারীর প্রয়োজন, আপনি এটি ব্যবহার করে স্ক্রিনে ডেটা প্রদর্শন করতে পারবেন না...

আসুন স্প্রেডশীট ডকুমেন্ট কী তা আরও ঘনিষ্ঠভাবে দেখে নেওয়া যাক - এটি একটি এক্সেল শীটের মতো - আপনি শুধুমাত্র টেবিল সেল ব্যবহার করে একটি নির্দিষ্ট ঘরে একটি রেকর্ড পেতে পারেন, এখানে আমরা তাদের একটি এলাকা বলি, কিন্তু আমরা নিজেরাই এই এলাকার পরিসর নির্বাচন করতে পারি একটি নির্দিষ্ট কোষে:

সুতরাং, আমরা একটি স্প্রেডশীট নথি কী তা খুঁজে বের করেছি এবং নিজেদের জন্য নির্ধারণ করেছি যে আমাদের এই স্প্রেডশীট নথির একটি নির্দিষ্ট ঘরে আমাদের ক্যোয়ারী থেকে ডেটা সংজ্ঞায়িত করতে হবে। তবে আসুন চিন্তা করি: ডিজাইনার আমাদের জন্য এত তাড়াতাড়ি তৈরি করা "কোয়েরি ফলাফল" কী? সাহায্য খুলুন - প্রশ্নের ফলাফল হল একটি টেবিল যা উপযুক্ত বৈশিষ্ট্য আছে! ডুমুর দেখুন

এবং যদি আমরা এখন এক্সপ্রেশনের পরে লিখি Query Result = Query.Execute(); (কনস্ট্রাক্টর দ্বারা তৈরি), এখানে সংগ্রহের জন্য এমন একটি সহজ চক্র রয়েছে:

Query Result.Columns লুপ রিপোর্ট (ColumnName.Name) থেকে প্রতিটি কলাম নামের জন্য; এন্ডসাইকেল;

এই চক্রের পরে, কনস্ট্রাক্টর দ্বারা স্বয়ংক্রিয়ভাবে নির্মিত সমস্ত এক্সপ্রেশনগুলি আপাতত নোট করুন। এবং মোটা ক্লায়েন্টের অধীনে 1C:Enterprise8 চালান। যেকোনো সহজ প্রশ্ন তৈরি করুন (আপনি ক্যোয়ারী বিল্ডার ব্যবহার করতে পারেন - এটি ইতিমধ্যেই আমাদের জন্য কাজ করে) এবং "Run Query" বোতামে ক্লিক করুন:

আপনি মেসেজ উইন্ডোর নীচে দেখতে পাবেন যে ক্যোয়ারী রেজাল্ট টেবিলে সেই ক্ষেত্রগুলির নাম সঞ্চয় করা হয়েছে যা আমরা একটি সাধারণ ক্যোয়ারী তৈরি করে নির্বাচন করেছি।

এখন স্প্রেডশীট নথিতে আমাদের দুর্ভোগের ক্ষেত্রগুলির নামগুলি প্রদর্শন করা যাক:

Query Result.Columns Loop Cell=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1 থেকে প্রতিটি কলাম নামের জন্য); Cell.Text=ColumnName.Name; এন্ডসাইকেল;

ক্যোয়ারী ডেটার বিশদ বিবরণ প্রদর্শন করতে, আসুন ডিজাইনার দ্বারা স্বয়ংক্রিয়ভাবে তৈরি করা অভিব্যক্তিগুলিকে পার্স করি এবং ক্যোয়ারীটির "SelectionDetailedRecords" সাজানোর লুপে প্রবেশ করিয়ে দেই যা আমরা কলামের নামগুলি প্রদর্শন করতে ব্যবহার করতাম, শুধুমাত্র এখন আমাদের স্থানান্তর করতে হবে সেল টেক্সটে "কোয়েরি ফলাফল" টেবিলের ডেটা নয়। এবং নির্বাচনের ডেটা নিজেই, আসুন সাহায্যে দেখি কিভাবে আপনি অনুরোধের বিশদ নির্বাচন ক্ষেত্র অ্যাক্সেস করতে পারেন:

SelectionDetailRecords = QueryResult.Select(); SelectionDetailedRecords.Next() loop // প্রথম লাইনে আমরা ইতিমধ্যেই টেবিল কলামের নাম লিখে রেখেছি, তাই আমরা প্রথম লাইনের নিচের ডাটা লোড করিDocRowNumber=Object.QueryTable.TableHeight+1; ক্যোয়ারী ফলাফল থেকে প্রতিটি কলাম নামের জন্য। কলাম সাইকেল সেল=অবজেক্ট।কোয়েরিটেবল।এরিয়া(ডকরো নম্বর,কোয়েরি ফলাফল।কলাম।ইনডেক্স(কলামের নাম)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; এন্ডসাইকেল; এন্ডসাইকেল;

এতটুকুই, আমরা চেক করতে পারি, একটি পুরু ক্লায়েন্টের অধীনে এন্টারপ্রাইজটি লোড করতে পারি, প্যারামিটার ছাড়াই একটি সাধারণ অনুরোধ লিখতে পারি, "কুয়েরি চালান" বোতামে ক্লিক করুন, চিত্রটি দেখুন:

হুররে, সবকিছু কাজ করে!!!

এটা খুবই সুবিধাজনক যখন, আমাদের ক্যোয়ারী কনসোল খোলা/বন্ধ করার সময়, আমাদের ক্যোয়ারী টেক্সট, যা আমরা কনসোল বন্ধ করার আগে কাজ করেছি, আবার "কোয়েরি টেক্সট" ফিল্ডে লেখা হয়। এটি করার জন্য, আপনাকে কেবল ফর্ম বৈশিষ্ট্য সক্রিয় করতে হবে = অটোসেভ, চিত্র দেখুন:

এটা, আমাদের কনসোল কাজ করছে. যাতে আমরা নির্দিষ্ট পরামিতিগুলির সাথে আরও জটিল প্রশ্ন লিখতে পারি, আমাদের আরেকটি "পরামিটার খুঁজুন" বোতাম তৈরি করতে হবে, সেইসাথে "রান কোয়েরি" বোতামের কোড - "পরামিটার খুঁজুন" বোতামের কোডটি কার্যকর করা হবে। ক্লায়েন্ট এবং সার্ভারে। এর পরে, সার্ভার পদ্ধতিতে, আমরা "রিকোয়েস্ট টেক্সট" উইন্ডো থেকে পাঠানো পাঠ্যের সাথে একইভাবে অনুরোধটি চালু করি, "Request.FindParameters()" অভিব্যক্তিটি ব্যবহার করে আমরা পাস করা পরামিতিগুলি খুঁজে পাই এবং সেগুলিকে একটি এ প্রবেশ করান। "রিকোয়েস্ট প্যারামিটার" ফর্মের ট্যাবুলার অংশে লুপ করুন। তারপরে প্যারামিটারের সম্পূর্ণ সারণী থেকে "রান কোয়েরি" পদ্ধতিতে স্থানান্তর করতে ভুলবেন না।

আপনি আমাদের কনসোলে কয়েকটি বোতাম যোগ করতে পারেন যা ব্যবহারকারী মোডে প্যারামিটার উইন্ডো এবং অনুরোধ পাঠ্য উইন্ডোটি সাফ করবে।

আমাদের ক্যোয়ারী কনসোল ব্যবহারের জন্য প্রস্তুত, আমি আপনাকে কোয়েরি কনসোলের মতো একটি সহজ এবং শক্তিশালী টুল ব্যবহার করে সফল সৃজনশীল সমাধান কামনা করছি!

এই প্রক্রিয়াকরণ 1c8.3 প্ল্যাটফর্মে (পরিচালিত ফর্ম) লেখা হয় এবং একটি পুরু ক্লায়েন্টের অধীনে চলে। এটি 1c8.2 প্ল্যাটফর্মেও লেখা যেতে পারে, উভয় নিয়মিত ফর্মের অধীনে এবং পরিচালিতগুলির অধীনে।

ডাউনলোডটিতে আমরা এইমাত্র তৈরি করা ক্যোয়ারী কনসোলের একটি নমুনা রয়েছে৷

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

ক্যোয়ারী কনসোল আপগ্রেড:

1) এখন বিল্ট-ইন ক্যোয়ারী বিল্ডার সহ আমাদের ঘরে তৈরি ক্যোয়ারী কনসোল যেকোন ক্লায়েন্টের অধীনে চলবে: নিয়মিত এবং পরিচালিত ফর্মের ঘন ক্লায়েন্টের অধীনে এবং একটি পাতলা এবং ওয়েব ক্লায়েন্টের অধীনে।

P.s. বিল্ট-ইন ক্যোয়ারী বিল্ডারের ফর্ম এবং চেহারা আলাদা - আমরা কোন ক্লায়েন্টের অধীনে আমাদের কনসোল চালু করেছি তার উপর নির্ভর করে। (আমি ব্যক্তিগতভাবে একটি মোটা ক্লায়েন্টের অধীনে কোয়েরি বিল্ডারের ফর্মের সাথে আরও পরিচিত এবং সুবিধাজনক)

&ক্লায়েন্ট প্রসিডিউরে কোয়েরি কনস্ট্রাক্টর (কমান্ড) // স্ট্যান্ডার্ড কোয়েরি কনস্ট্রাক্টরকে কল করা শুধুমাত্র একটি মোটা ক্লায়েন্টের অধীনেই সম্ভব #If ThickClientManagedApplication বা ThickClientNormalApplication তারপর Constructor=New Query Constructor; যদি EmptyString(Object.QueryText) না হয় তাহলে Constructor.Text = Object.QueryText; যদি শেষ; যদি Constructor.OpenModal()=True তাহলে Object.RequestText=Constructor.Text; যদি শেষ; // #অন্যথা // রিপোর্ট("কোয়েরি বিল্ডারকে কল করা শুধুমাত্র একজন মোটা ক্লায়েন্টের অধীনেই সম্ভব"); // প্রত্যাবর্তন; //# EndIf #Else Report("আপনি একটি পাতলা ক্লায়েন্টের অধীনে কোয়েরি বিল্ডার চালাচ্ছেন - এটি তার ফর্ম এবং কর্মক্ষমতা গতিতে কিছুটা আলাদা!"); কনস্ট্রাক্টর = নতুন কোয়েরি কনস্ট্রাক্টর(); যদি EmptyString(Object.QueryText) না হয় তাহলে Constructor.Text = Object.QueryText; যদি শেষ; কনস্ট্রাক্টর অ্যালার্ট = নতুন সতর্কতা বর্ণনা("RunAfterClosingConstructor", ThisForm); Constructor.Show(কনস্ট্রাক্টর সতর্কতা); # EndIf পদ্ধতির সমাপ্তি &অন ক্লায়েন্ট পদ্ধতি এক্সেকিউট এর পরে ক্লোজিং কনস্ট্রাক্টর(ফলাফল, কনস্ট্রাক্টর প্যারামিটার) এক্সপোর্ট //ফলাফল=টেক্সট, যদি কনস্ট্রাক্টর ওকে বোতাম ব্যবহার করে বন্ধ করা হয় Object.RequestText = AbbreviatedLP(ফলাফল); //কাজ!!! প্রক্রিয়া শেষ

2) প্যারামিটারগুলিতে পাস করা একটি অস্থায়ী টেবিলের সাথে জটিল প্রশ্নগুলি প্রবেশ করার জন্য আমাদের সাধারণ ক্যোয়ারী কনসোলে ক্ষমতা যুক্ত করা হয়েছে!!! প্রক্রিয়াটি খুব সহজ এবং মার্জিত হয়ে উঠেছে - এক্সএমএল কোড ব্যবহার না করে, যেমনটি পেশাদার কনসোলে করা হয়।

আপনি দ্বিতীয় সংযুক্ত ফাইলে অস্থায়ী টেবিলের প্যারামিটারে স্থানান্তর প্রক্রিয়ার জন্য কোডটি এবং পদ্ধতিগুলি দেখতে পারেন। আমি কীভাবে প্যারামিটারে অস্থায়ী টেবিলের আমার নিজস্ব সংস্করণ তৈরি করা শুরু করেছি তা এই লিঙ্কে পাওয়া যাবে https://forum.infostart.ru/forum9/topic183700/

এখন কিভাবে একটি জটিল প্রশ্নের জন্য কনসোল ব্যবহার করবেন যখন একটি অস্থায়ী টেবিল তার প্যারামিটারে পাস করা হয়। উদাহরণস্বরূপ, আপনি এই অনুরোধের কোড নিতে পারেন;

ExternalData.Product, ExternalData.Quantity PLACE ExternalData থেকে &ExternalData হিসাবে ExternalData নির্বাচন করুন; /////////////////////////////////////// ////////////////////// ExternalData.Product, ExternalData.Quantity, ISNULL(বাকী পণ্য অবশিষ্ট। পরিমাণ অবশিষ্ট, 0) ক্ষেত্র 1, ISNULL(বাকি থাকা) নির্বাচন করুন পণ্য অবশিষ্ট। পরিমাণ অবশিষ্ট, 0) - বাহ্যিক ডেটা। বাহ্যিক ডেটা থেকে অবশিষ্ট হিসাবে বাহ্যিক ডেটা। বাহ্যিক ডেটা হিসাবে বাম যোগদান নিবন্ধন সংগ্রহ। অবশিষ্ট পণ্য। অবশিষ্টাংশ(&তারিখ, পণ্য IN (নির্বাচন করুন বহিরাগত ডেটা। পণ্যের অবশিষ্টাংশ) বহিরাগত ডেটাতে পণ্যের অবশিষ্টাংশ) ware ExternalData.Product = RemainingProductRemaining পণ্য

উপরের ক্যোয়ারী কোডের উদাহরণ এবং সাদৃশ্যের উপর ভিত্তি করে, আপনি আপনার ডেটা অবজেক্টগুলিকে বিবেচনায় নিয়ে আপনার নিজস্ব জটিল ক্যোয়ারী তৈরি করতে পারেন।

সুতরাং, ক্যোয়ারী ডিজাইনারে আমরা উপরের ক্যোয়ারীটি তৈরি করেছি, কনস্ট্রাক্টরটি বন্ধ করে - ক্যোয়ারী টেক্সটটি আমাদের কনসোল ফিল্ডে যাবে “কোয়েরি টেক্সট”, “ফাইন্ড প্যারামিটার” বোতামে ক্লিক করুন, আমরা দেখতে পাচ্ছি যে প্যারামিটার টেবিলে একটি লাইন উপস্থিত হয়েছে। = “বাহ্যিক তথ্য”, মান প্রকার = “মান সারণী”, ডুমুর দেখুন।

প্যারামিটারের এই সারণীতে - তারিখ প্যারামিটার লিখুন, উদাহরণস্বরূপ, আজকের তারিখ, তারপরে আমাদের অস্থায়ী টেবিল প্যারামিটার "বহিরাগত ডেটা" সম্পাদনা করার চেষ্টা করতে ক্লিক করুন, তিনটি বিন্দুতে "মান টেবিল" সহ ক্ষেত্রে ক্লিক করুন - প্রকারের একটি নির্বাচন হবে প্রদর্শিত, সারি ক্লিক করুন, আমাদের প্রক্রিয়া আমাদের ফর্মের পৃষ্ঠাটি ঘুরিয়ে দেয়, যেখানে আমাদের এই খুব অস্থায়ী টেবিলটি ম্যানুয়ালি প্রবেশ করতে হবে।

এখানে উল্লেখ্য যে এই ক্ষেত্রে, "সময় সারণী" পৃষ্ঠায় নীচে "পরামিটারে অস্থায়ী টেবিলের নাম" ক্ষেত্রে, আমাদের অস্থায়ী টেবিলের নাম প্রদর্শিত হবে (এটি প্যারামিটার টেবিল থেকে অনুলিপি করা হয়েছে)।

এখন পর্যন্ত, "টাইম টেবিল" পৃষ্ঠায় আমরা কেবল একটি খালি টেবিল দেখতে পাচ্ছি - এটি আমাদের ভবিষ্যতের অস্থায়ী টেবিলের প্রকারের টেবিল৷ "যোগ করুন" বোতামটি ব্যবহার করে, আমরা ভবিষ্যতের টেবিলের বিবরণ এবং প্রকারের নাম যুক্ত করব . সতর্কতা অবলম্বন করুন - নাম এবং টাইপ অবশ্যই &ExternalData-এর অনুরোধে আমরা যা উল্লেখ করেছি তার সাথে মিলতে হবে:

এখন আমরা "অস্থায়ী টেবিল আপডেট করুন" বোতাম টিপুন - এবং আমাদের এখানে একটি দ্বিতীয় টেবিল থাকবে - আমরা সরাসরি "অ্যাড" বোতামের মাধ্যমে অস্থায়ী টেবিল ডেটা দিয়ে এটি পূরণ করব।

এটিই, আমরা প্রক্রিয়াকরণের 1 ম পৃষ্ঠায় প্যারামিটার টেবিলে ক্যোয়ারী প্যারামিটারের আদিম ডেটা প্রবেশ করেছি কিনা তা আমরা আবার একবার নিজেদেরকে দুবার-চেক করতে পারি এবং "কোয়ারি চালান" বোতামে ক্লিক করুন - সবকিছু গণনা করা হয় এবং সেই অনুযায়ী নির্বাচন করা হয় আমাদের অস্থায়ী টেবিলের প্যারামিটারে পাস করা ডেটার সীমাবদ্ধতা

p.s. আপনি যদি বিশদ বিবরণের নাম এবং তাদের প্রকারগুলি (প্রথম টেবিলে) টাইপ করার সময় ভুল করে থাকেন - কেবল কনসোলটি বন্ধ করুন এবং এটি আবার খুলুন - অস্থায়ী ডেটা টেবিলটি মুছে যাবে - এবং প্রকার টেবিলটি আবার সম্পাদনা করা যেতে পারে এবং একটি নতুন ডেটা টেবিল আবার তৈরি করা যেতে পারে।

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

এই সব, আমরা আমাদের নিজের হাত দিয়ে একটি খুব শক্তিশালী কাজের টুল তৈরি করতে পারি, উপরন্তু, পেশাদারদের তুলনায় আমাদের কনসোল এখনও খুব দ্রুত - এবং এটি বিকাশকারীদের জন্য একটি খুব বড় প্লাস! এবং, অবশ্যই, এখন আমাদের কনসোল যে কোনও ক্লায়েন্টের অধীনে কাজ করে! আপনার সৃজনশীল উন্নয়নে শুভকামনা !!!

চলুন দেখা যাক কিভাবে আমরা ক্ষেত্র অনুসারে এই দুটি টেবিলে যোগ দিতে পারি পণ্য কোডব্যবহার
ক্যোয়ারী কনস্ট্রাক্টর (অস্থায়ী টেবিল তৈরির কোড একটি উদাহরণ হিসাবে দেওয়া হয়েছে
আমি করব না। আপনি উপরের লিঙ্ক থেকে এটি নিতে পারেন)।

ডিজাইনার উইন্ডো খুলুন, ট্যাবে যান "টেবিল এবং ক্ষেত্র", বিভাগে
"টেবিল"আমাদের টেবিল উভয় নির্বাচন করুন, এবং বিভাগে "ক্ষেত্র" -
উভয় টেবিলের সেই ক্ষেত্রগুলি যা আমরা প্রশ্নের ফলে দেখতে চাই।

বুকমার্কে যান "সংযোগ". একটি নতুন লাইন যোগ করুন। মাঠে 1 নং টেবিল
ড্রপ-ডাউন তালিকা থেকে পণ্য সহ টেবিল নির্বাচন করুন, এবং ক্ষেত্রে টেবিল ২টেবিল
দেশগুলির সাথে।

জন্য টেবিল 1বাক্সটি যাচাই কর সব. জন্য
টেবিল 2আমরা এই বাক্স চেক না. এর মানে হল যে থেকে টেবিল 1
সমস্ত রেকর্ড নির্বাচন করা হবে, এবং থেকে টেবিল 2শুধুমাত্র যাদের জন্য এটা সঞ্চালিত হয়
সংযোগ শর্ত, যে, পতাকা যেমন একটি সমন্বয় সঙ্গে আমরা পেতে
বাম সংযোগ. পরবর্তী আপনি পূরণ করতে হবে যোগাযোগের শর্ত.
এখানে আমরা ড্রপ-ডাউন তালিকা থেকে টেবিলের ক্ষেত্র এবং ড্রপ-ডাউন থেকে তুলনা চিহ্ন নির্বাচন করি
তালিকা

এই সংযোগের ফলস্বরূপ, আমরা নিম্নলিখিত অনুরোধ পাঠ্য পাই:

VT_Product.Product কোড, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product বামে যোগ দিন VT_Country AS VT_Country BY VT_Product.Product Code = VT_Country.Product Code

এখন কিছু পয়েন্ট ঘনিষ্ঠভাবে তাকান করা যাক.
চেকবক্স অদলবদল করার চেষ্টা করা যাক সব.


এটা শেষ পর্যন্ত কাজ করা উচিত বলে মনে হবে ডান যোগদান, কিন্তু যদি আমরা
আসুন কন্সট্রাক্টর দ্বারা উত্পন্ন ক্যোয়ারী টেক্সটটি দেখি, আমরা দেখতে পাব যে টেবিলগুলি
স্থান পরিবর্তন করা হয়েছে, কিন্তু সংযোগটি এখনও অবশিষ্ট রয়েছে:

VT_Product.Product কোড, VT_Product.Name, VT_Country.VT_Country থেকে VT_Country বামে যোগ দিন VT_Product হিসাবে VT_Product দ্বারা VT_Product.পণ্য কোড = VT_Country.পণ্য কোড

দেখা যাক কি হবে যদি আমরা উভয় বাক্সে টিক চিহ্ন তুলে দেই

ফলস্বরূপ, আমরা একটি অভ্যন্তরীণ সংযোগ পেতে.

VT_Product.Product কোড, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product অভ্যন্তরীণ VT_Country AS VT_Country দ্বারা VT_Product.প্রোডাক্ট কোড = VT_Country.প্রোডাক্ট কোড নির্বাচন করুন

অবশেষে, উভয় চেকবক্স চেক করা হলে


আমরা একটি সম্পূর্ণ সংযোগ পেতে

VT_Product.Product কোড, VT_Product.Name, VT_Country.Country FROM VT_Product AS VT_Product রূপে VT_Country AS VT_Country VT_Product.Product Code = VT_Country.Product কোড

আপনি একটি বুকমার্কে একাধিক লাইন নির্দিষ্ট করতে পারেন সংযোগ. এই ক্ষেত্রে, বেশ কয়েকটি
সারি শর্ত দ্বারা সংযুক্ত করা হয় এবং. তাছাড়া, লাইনের প্রয়োজন নেই
প্রতিবার আবার ড্রাইভ করুন। এগুলি কী ব্যবহার করে অনুলিপি করা যেতে পারে F9.
এবং নতুন লাইনে, শুধুমাত্র সংযোগ শর্ত পরিবর্তন করুন। এটি উল্লেখযোগ্যভাবে উন্নয়নের গতি বাড়ায়।
এছাড়াও, লিঙ্ক অবস্থায় শুধুমাত্র পূর্বনির্ধারিত ক্ষেত্রগুলি ব্যবহার করার প্রয়োজন নেই
ড্রপ-ডাউন তালিকা। আপনি একটি নির্বিচারে অভিব্যক্তি ব্যবহার করতে পারেন যা সন্তুষ্ট করে
1C ক্যোয়ারী ভাষা। এটি করার জন্য, আপনাকে বাক্সটি চেক করতে হবে বিনামূল্যে
এবং সরাসরি ক্ষেত্রের মধ্যে শর্তটি প্রবেশ করান, অথবা একটি সহায়ক উইন্ডো খুলুন
যেখানে আপনি ক্যোয়ারী ভাষা ফাংশন সহ টেমপ্লেট ব্যবহার করতে পারেন।


অবশ্যই, অনুশীলনে অনেক জটিল প্রশ্ন আছে যেখানে
একে অপরের মধ্যে বিভিন্ন সংযোগ সহ বেশ কয়েকটি টেবিল। কিন্তু ক্যোয়ারী নির্মাতা
যেকোনো জটিলতার সংযোগ পুনরুত্পাদন করা যেতে পারে।

ক্যোয়ারী ডিজাইনার নিম্নলিখিত ট্যাবগুলি নিয়ে গঠিত:

1. "টেবিল এবং ক্ষেত্র" - ট্যাবে তিনটি শ্রেণিবদ্ধ তালিকা রয়েছে:
ক "ডাটাবেস" - সমস্ত উপলব্ধ বস্তুর তালিকা করে যেখানে একটি প্রশ্ন করা যেতে পারে। এছাড়াও বোতাম "পরিবর্তন টেবিল প্রদর্শন করুন", যা দিয়ে আপনি তথ্য সুরক্ষা বস্তুর পরিবর্তনের টেবিল অ্যাক্সেস করতে পারেন যদি সেগুলি কোনো বিনিময় পরিকল্পনার জন্য নিবন্ধিত হয়।
খ. "টেবিল" - নির্বাচিত টেবিলের একটি তালিকা যেখানে ক্যোয়ারী চালানো হবে। এছাড়াও এই উইন্ডোতে আপনি একটি টেবিল মুছে ফেলতে পারেন, একটি টেবিলের নাম পরিবর্তন করতে বা প্রতিস্থাপন করতে পারেন এবং একটি অভ্যন্তরীণ ক্যোয়ারী যোগ করতে পারেন।

আপনি "ভার্চুয়াল টেবিল প্যারামিটার" বোতামে ক্লিক করে ভার্চুয়াল টেবিলের জন্য পরামিতি বরাদ্দ করতে পারেন:

নির্দিষ্ট মাত্রা দ্বারা নির্বাচনের জন্য ভার্চুয়াল টেবিলের প্যারামিটারগুলি সক্রিয়ভাবে ব্যবহার করার পরামর্শ দেওয়া হয়, কারণ এটি ক্যোয়ারী সম্পাদনের গতি বাড়ায়। আপনি প্যারামিটারে বাহ্যিক ভেরিয়েবল ব্যবহার করতে পারেন, যেগুলির নাম "&" চিহ্নের আগে থাকে।
গ. "ক্ষেত্র" - টেবিল থেকে নির্বাচিত ক্ষেত্রগুলির একটি তালিকা। আপনি গণনা করা ক্ষেত্রগুলিও যোগ করতে পারেন; এটি করার জন্য, "যোগ করুন" বোতামে ক্লিক করলে কাস্টম এক্সপ্রেশন কনস্ট্রাক্টর খোলে:

বাম দিকে এক্সপ্রেশনে উপলব্ধ ক্ষেত্রগুলির সাথে একটি উইন্ডো রয়েছে৷ ডানদিকে ব্যবহৃত ফাংশনগুলির একটি ইঙ্গিত রয়েছে। নীচে একটি নির্মাণযোগ্য নির্বিচারে অভিব্যক্তি। আপনি এক্সপ্রেশনে বাহ্যিক পরামিতি ব্যবহার করতে পারেন; সেগুলিকে “&” চিহ্ন দ্বারা চিহ্নিত করা হয়, উদাহরণস্বরূপ: &Period, &StartDate
আপনাকে সতর্কতা অবলম্বন করতে হবে, যদি উইন্ডোতে একটি দীর্ঘ এবং জটিল অভিব্যক্তি টাইপ করা হয়, যার মধ্যে একটি ছোট সিনট্যাক্স ত্রুটি রয়েছে, তবে "ঠিক আছে" বোতামটি ক্লিক করার পরে, সিস্টেমটি একটি সতর্কতা জারি করবে এবং উইন্ডোটি বন্ধ করবে। সমস্ত টাইপ করা কোড হারিয়ে যাবে, তাই আমি সুপারিশ করছি যে আপনি যদি অভিব্যক্তিটির সঠিকতা সম্পর্কে নিশ্চিত না হন তবে কনস্ট্রাক্টর বন্ধ করার আগে সর্বদা ক্লিপবোর্ডে (Ctrl-C) বিষয়বস্তু সংরক্ষণ করুন।

2. "সম্পর্ক" - ট্যাবে, টেবিলের মধ্যে সংযোগগুলি নির্দেশিত হয়৷

সারণিগুলিকে লিঙ্ক করতে হবে, টেবিলগুলির মধ্যে সম্পর্ক এবং সংযোগের অবস্থা নির্দেশ করে৷ যদি সংযোগের অবস্থা জটিল হয়, তাহলে আপনি একটি নির্দিষ্ট গণনা করা অভিব্যক্তি নির্দিষ্ট করতে পারেন এবং কাস্টম ফিল্ড কনস্ট্রাক্টর খুলবে।

3. "গ্রুপিং" - ট্যাবটি নির্দেশ করে যে কোন ক্ষেত্রগুলিকে গোষ্ঠীভুক্ত করা হয়েছে এবং কোনটি একত্রিত (সংক্ষিপ্ত)৷

4. ট্যাব "শর্তগুলি" - অনুরোধের উপর আরোপিত শর্তগুলির তালিকা করে৷
শর্তে, আপনি সাধারণ এক্সপ্রেশন কনস্ট্রাক্টর ব্যবহার করে এবং বাহ্যিক ভেরিয়েবল ব্যবহার করে জটিল এক্সপ্রেশন লিখতে পারেন:

5. "উন্নত"
অনুরোধের উপর আরোপিত অতিরিক্ত পরামিতি

6. "সংসর্গ এবং ছদ্মনাম"
এই ট্যাবে আপনি ক্ষেত্রগুলির জন্য উপনাম বরাদ্দ করতে পারেন, সেইসাথে "UNITE" বা "UNITE All" কনস্ট্রাক্টের মাধ্যমে সংযুক্ত প্রশ্নগুলি পরিচালনা করতে পারেন৷

7. "অর্ডার"
কোন ক্রমে প্রশ্ন ফলাফল প্রদর্শিত হবে?

মনোযোগ! বুকমার্কের নীচে আপনি একটি চেকমার্ক দেখতে পারেন "স্বয়ংক্রিয় আদেশ"- ACS-এ 1C 8.1 এর বর্তমান সংস্করণে, এটি অকেজো; অধিকন্তু, যখন চেকবক্সটি চেক করা হয়, রেকর্ড করার সময়, ACS একটি ত্রুটি দেয়, তাই আপনার এটি ব্যবহার করা উচিত নয়।

8. "ডেটা কম্পোজিশন"
যে ট্যাবে অ্যাক্সেস কন্ট্রোল সিস্টেমের পরিষেবা ক্ষেত্রগুলি সংজ্ঞায়িত করা হয়েছে৷ এটি একটি নিয়মিত রিপোর্ট ডিজাইনারে "রিপোর্ট বিল্ডার" ট্যাবের মতো প্রায় একই ভূমিকা পালন করে।

উ: "টেবিল" ট্যাবে - ক্যোয়ারীতে ব্যবহৃত টেবিলগুলি তালিকাভুক্ত করা হয়েছে; আপনি "প্রয়োজনীয়" চেকবক্সে চেক করে টেবিলটি অবশ্যই ক্যোয়ারীতে অন্তর্ভুক্ত করা উচিত কিনা তা নির্দেশ করতে পারেন৷ সেগুলো. যদি কোনো ক্ষেত্র নির্বাচনের মধ্যে অন্তর্ভুক্ত না করা হয়, তাহলে এই টেবিলটি ক্যোয়ারীতে মোটেও অংশগ্রহণ করে না। আপনি টেবিলের জন্য পরামিতিও নির্দিষ্ট করতে পারেন।

অ্যাক্সেস কন্ট্রোল সিস্টেম সেট আপ করার প্রক্রিয়াতে, আমরা যে কোনও নির্বাচন নির্দিষ্ট করি, তারপরে সমস্ত নির্বাচন মান ভার্চুয়াল টেবিলের পরামিতিতে প্রতিস্থাপিত হবে, যা আবার আমাদের ক্যোয়ারীটি অপ্টিমাইজ করতে এবং গতি বাড়াতে সহায়তা করবে।
খ. "ক্ষেত্র" ট্যাবে, ক্ষেত্রগুলি এবং তাদের উপনামগুলি তালিকাভুক্ত করা হয়েছে যা ACS ক্ষেত্রের তালিকায় যোগ করা হবে৷
গ. "শর্তগুলি" - যদি ACS সেটিংসে নির্বাচনগুলি নির্দিষ্ট করা থাকে, তবে সমস্ত নির্বাচন মানগুলি অতিরিক্ত শর্ত হিসাবে যোগ করা হবে; জটিল অভিব্যক্তিগুলি শর্তগুলিতেও যোগ করা যেতে পারে।

9. "বৈশিষ্ট্য"
একটি বুকমার্ক যার স্বাভাবিক আউটপুট ফর্ম কনস্ট্রাক্টরে কোনো অ্যানালগ নেই।

এই ট্যাবটি আপনাকে বৈশিষ্ট্য সহ প্রশ্নের কাজ প্রসারিত করতে দেয়। ট্যাবের টেবিলে বিভিন্ন ক্ষেত্র রয়েছে:
ক "মান প্রকার" - যে প্রকারের জন্য বৈশিষ্ট্যগুলি নির্বাচন করা হবে৷ উদাহরণ স্বরূপ, আপনি যদি “Directory Link.Nomenclature” উল্লেখ করেন, তাহলে ক্যোয়ারীতে নামকরণের জন্য সমস্ত বৈশিষ্ট্য নির্বাচন করা হবে।
খ. "উৎস" - বৈশিষ্ট্যযুক্ত ধরণের বৈশিষ্ট্যগুলির উত্স, একটি প্রশ্ন বা একটি টেবিল হতে পারে। এই ক্ষেত্রে আমরা শুধুমাত্র সেই বৈশিষ্ট্যগুলি নির্বাচন করার জন্য একটি অনুরোধ লিখতে পারি যা আমাদের প্রয়োজন।
গ. "বৈশিষ্ট্যের তালিকা" - একটি ক্ষেত্র যেখানে বৈশিষ্ট্যগুলির বৈশিষ্ট্যগুলির উত্স নির্দেশিত হয়। প্রায়শই এটি চরিত্রগত ধরণের একটি পরিকল্পনা বা একটি অনুরোধ। সম্পত্তির "আইডেন্টিফায়ার", "নাম" এবং "টাইপ" এর জন্য দায়ী ক্ষেত্রগুলিও আপনাকে নির্দিষ্ট করতে হবে।
d "উৎস" হল পরবর্তী ক্ষেত্র যেখানে আমরা চরিত্রগত মানগুলির উৎস নির্দেশ করি, যা একটি টেবিল বা একটি প্রশ্নও হতে পারে।
e "চরিত্রের মান" হল একটি টেবিল বা ক্যোয়ারী যা চারিত্রিক মানগুলি গ্রহণ করে। উদাহরণ স্বরূপ, তথ্য রেজিস্টার “ObjectPropertyValues” বৈশিষ্ট্যের মানগুলির একটি টেবিল হিসাবে পরিবেশন করতে পারে। আমাদের অবশ্যই টেবিল (বা ক্যোয়ারী) থেকে সেই ক্ষেত্রগুলিকে নির্দেশ করতে হবে যেগুলি বৈশিষ্ট্যের "অবজেক্ট", "সম্পত্তি" এবং "মান" এর জন্য দায়ী৷
অনুরোধটি সম্পাদনা করার পরে, অনুরোধের পাঠ্যটি ক্ষেত্রগুলির তালিকার নীচে উইন্ডোতে দেখা যাবে। নীচে, "অটোফিল" চেকবক্সের সাহায্যে, আমরা অনুরোধে নির্দিষ্ট করা ক্ষেত্রগুলির জন্য অতিরিক্ত পরামিতিগুলির সম্পূর্ণতা নিয়ন্ত্রণ করতে পারি৷ অনুগ্রহ করে মনে রাখবেন যে ক্ষেত্রগুলির রচনা শুধুমাত্র অনুরোধের মধ্যেই নির্ধারিত হয়।

সাইট থেকে নেওয়া তথ্য

আজ আমরা কিভাবে করতে হবে তা নিয়ে আলোচনা করব নেস্টেড প্রশ্নব্যবহার কোয়েরি নির্মাতা. আসুন সরাসরি একটি উদাহরণে চলে যাই।

ধরা যাক আমাদের কাছে তথ্যের এই সহজ রেজিস্টার রয়েছে, যেখানে পণ্য এবং সরবরাহকারীর দ্বারা মূল্য সংরক্ষণ করা হয়:

আমরা এমন সমস্ত পণ্য গ্রহণ করার জন্য অনুরোধ করতে চাই যার একাধিক সরবরাহকারী রয়েছে৷ এটি নিম্নলিখিত ক্যোয়ারী ব্যবহার করে প্রয়োগ করা যেতে পারে:

সরবরাহকারীর সংখ্যা নির্বাচন করুন৷ পণ্য হিসাবে পণ্য নির্বাচন করুন (মূল্য৷ পণ্য হিসাবে পণ্য হিসাবে নির্বাচন করুন, পরিমাণ (বিভিন্ন মূল্য৷ সরবরাহকারী) রেজিস্টার তথ্য থেকে সরবরাহকারী হিসাবে৷ মূল্য হিসাবে মূল্য গ্রুপ মূল্য৷ পণ্যের ভিত্তিতে) সরবরাহকারীর সংখ্যা হিসাবে যেখানে > সরবরাহকারীদের সংখ্যা৷

কনস্ট্রাক্টরে নেস্টেড ক্যোয়ারী তৈরি করা

কনস্ট্রাক্টর ব্যবহার করে উপরের অনুরোধটি তৈরি করা যাক।

এটি করার জন্য, ক্ষেত্রের উপরে কমান্ড প্যানেলে টেবিলবাটনটি চাপুন একটি সাবকোয়েরি তৈরি করুন:


এর পরে ক্যোয়ারী কনস্ট্রাক্টরের আরেকটি উদাহরণ সহ একটি উইন্ডো খুলবে:


এবং এই নতুন উইন্ডোতে আমরা একটি নেস্টেড প্রশ্ন তৈরি করি:




বোতামে ক্লিক করছে অনুরোধনীচের বাম কোণে আমরা সাবকোয়েরির পাঠ্য দেখতে পাচ্ছি:


অক্জিলিয়ারী কনস্ট্রাক্টরে ওকে বোতামে ক্লিক করার পরে, আমরা প্রধান উইন্ডোতে নিম্নলিখিত ছবিটি পাই:


শব্দগুচ্ছ থেকে NestedQueryউপলব্ধির জন্য খুব সুবিধাজনক নয়, আসুন টেবিলের নাম পরিবর্তন করতে ডান মাউস বোতাম ব্যবহার করি সরবরাহকারীর সংখ্যা, এটি থেকে একটি ক্ষেত্র নির্বাচন করুন পণ্যএবং বুকমার্কে শর্তাবলীআসুন প্রয়োজনীয় শর্ত লিখুন:




এবং এই সমস্ত ম্যানিপুলেশনের পরে, আমরা পছন্দসই অনুরোধটি পাই। প্রয়োজনে, আপনি নেস্টিংয়ের বিভিন্ন স্তরের সাথে প্রশ্ন তৈরি করতে পারেন।

কনস্ট্রাক্টরের নিয়মিত ক্যোয়ারী থেকে কীভাবে নেস্টেড ক্যোয়ারী করা যায়

খুব প্রায়ই একটি পরিস্থিতি দেখা দেয় যখন আপনি কনস্ট্রাক্টরে একটি অনুরোধ করা শুরু করেন এবং কিছু সময়ে আপনি বুঝতে পারেন যে এটি অবশ্যই নেস্ট করা উচিত। অবশ্যই, আমাদের উদাহরণে কোন সমস্যা নেই - আপনি কেবল সবকিছু মুছে ফেলতে পারেন এবং অনুরোধটি পুনরায় ইস্যু করতে পারেন। কিন্তু অনুশীলনে, আরও অনেক জটিল উদাহরণ রয়েছে, উদাহরণস্বরূপ, বাসা বাঁধার বিভিন্ন স্তর সহ, যখন অনুরোধ করতে কয়েক ঘন্টা ব্যয় করা হয়েছিল। এবং এই ক্ষেত্রে একটি মোটামুটি সহজ উপায় আছে. আপনি ডিজাইনারে তৈরি কোয়েরি টেক্সট এডিটর ব্যবহার করতে পারেন। একটি বোতাম ব্যবহার করতে হবে অনুরোধঅনুরোধের পাঠ্যটি পান (উপরের ছবিটি দেখুন) এবং এটি ক্লিপবোর্ডে অনুলিপি করুন। এরপরে, একটি নতুন নেস্টেড ক্যোয়ারী তৈরি করুন এবং আবার বোতাম টিপুন অনুরোধ, বাফার থেকে লেখা পেস্ট করুন, ঠিক আছে ক্লিক করুন। তদনুসারে, আমরা উপরের স্তরে পুরানো অনুরোধটি সাফ করি। এইভাবে, প্রয়োজনে, আমরা সহজেই মাল্টি-লেভেল নেস্টেড কোয়েরি তৈরি করতে পারি।

"ম্যানুয়ালি" ক্যোয়ারী টেক্সট লেখার ক্ষমতা কখনই "অতিরিক্ত" ছিল না, তবে একটি ক্যোয়ারী ডিজাইনার ব্যবহার করা আরও সুবিধাজনক।

মন্তব্য করুন।

দুর্ভাগ্যবশত, একটি পরিচালিত অ্যাপ্লিকেশানে, আপনি "গ্যাট টু নো উইথ কোয়েরি" প্রক্রিয়াকরণে ক্যোয়ারী ডিজাইনার ব্যবহার করতে পারবেন না। আপনি স্বাভাবিক মোডে স্যুইচ করে এই প্রক্রিয়াকরণে এটি ব্যবহার করতে পারেন, কিন্তু আমরা এটি করব না।

আসুন "রিকোয়েস্ট কনস্ট্রাক্টর" প্রসেসিং তৈরি করি এবং এটিকে "রিপোর্ট এবং প্রসেসিং" সাবসিস্টেমে সংজ্ঞায়িত করি।

আসুন একটি প্রসেসিং ফর্ম তৈরি করি এবং এতে "টেবুলার ডকুমেন্ট" টাইপের "TabDoc" ফর্মের অ্যাট্রিবিউট যোগ করি, সেইসাথে "Run Query" অ্যাকশন সহ "Run Query" কমান্ড। এর পরে, তাদের ফর্মটিতে টেনে আনুন।

ফর্ম মডিউলে, কমান্ডটি কাজ করার জন্য, আমরা একটি পদ্ধতি লিখি:

&অনক্লায়েন্ট

পদ্ধতি এক্সিকিউট কোয়েরি (কমান্ড)

ExecuteRequestServer();

প্রক্রিয়া শেষ

সার্ভারে

প্রক্রিয়া শেষ

আমরা সার্ভারে কল করা পদ্ধতির ভিতরে পরিণত হই এবং প্রসঙ্গ মেনু থেকে "কোয়েরি কনস্ট্রাক্টর উইথ রেজাল্ট প্রসেসিং" কল করি (চিত্র 2.65)।

চিত্র 2.65 ফলাফল প্রক্রিয়াকরণ সহ ক্যোয়ারী কনস্ট্রাক্টর

প্রক্রিয়াকরণের ধরনটি "একটি স্প্রেডশীট নথিতে আউটপুট" এ সেট করুন এবং হয় "পরবর্তী" বোতাম বা "টেবিল এবং ক্ষেত্র" ট্যাবে ক্লিক করুন।

ডিজাইনারের "টেবিল এবং ক্ষেত্র" ট্যাবে, আপনি সিস্টেমে বিদ্যমান টেবিলগুলি দেখতে পারেন (বাম অংশটি "ডেটাবেস" শিরোনামযুক্ত) (চিত্র 2.66)।

চিত্র 2.67 কোয়েরি কনস্ট্রাক্টর

যে টেবিলগুলি থেকে ক্যোয়ারী ডেটা পাবে সেগুলি "টেবিল" এলাকায় স্থানান্তরিত হয়; ক্যোয়ারীটির জন্য প্রয়োজনীয় ক্ষেত্রগুলি "ক্ষেত্র" এলাকায় স্থানান্তরিত হয়। চিত্র 2.68-এর মতই করা যাক।

চিত্র 2.68 কোয়েরি কনস্ট্রাক্টর

এখানে আমরা তৈরি করা ডিফল্ট ভিউ ক্ষেত্রটি সরিয়ে দিয়েছি - "প্রস্তুতি (প্রোডাক্ট রসিদ পণ্য। নামকরণ)"

ডিজাইনারের সাথে কাজ করার সময় যে কোনো সময়, আপনি ফলাফলের অনুরোধের পাঠ্য দেখতে পারেন। এই কাজটি সম্পাদন করতে, আপনাকে অবশ্যই ডিজাইনার ফর্মের নীচের বাম কোণে অবস্থিত "অনুরোধ" বোতামটি ক্লিক করতে হবে (চিত্র 2.69)।

আপনি "সম্পাদনা" বোতামে ক্লিক করে অনুরোধের পাঠ্য ম্যানুয়ালি সম্পাদনা করতে পারেন৷

অনুশীলন করা. "ঠিক আছে" বোতামে ক্লিক করুন এবং ব্যবহারকারী মোডে আমাদের প্রক্রিয়াকরণ পরীক্ষা করুন। আপনি যদি অনুরোধটি কার্যকর করার সময় প্রাপ্ত ডেটা বিশ্লেষণ করেন, আপনি আইটেম আইটেমগুলির "পুনরাবৃত্তি" দেখতে পাবেন (যদি এটি আপনার জন্য কাজ না করে, তাহলে আপনি যে কোনও "পণ্যের প্রাপ্তি" নথিটি অনুলিপি এবং পোস্ট করতে পারেন)।

আমরা "Query Constructor" প্রসেসিং-এ ExecuteRequestServer() পদ্ধতিতে ফিরে আসি এবং প্রসঙ্গ মেনু থেকে আবার "রেজাল্ট প্রসেসিং সহ Query Constructor" কল করুন।

আপনি যদি কোনও প্রশ্নের ফলাফলটি "পতন" করতে চান তবে এই উদ্দেশ্যে আপনি ক্যোয়ারী ডিজাইনারের "গ্রুপিং" ট্যাবটি ব্যবহার করতে পারেন।

গ্রুপিং সংজ্ঞায়িত করার সময়, আপনাকে অবশ্যই নিম্নলিখিত নিয়মগুলি মেনে চলতে হবে: সমস্ত ক্যোয়ারী নির্বাচন ক্ষেত্রগুলিকে এমন ক্ষেত্রগুলিতে বিভক্ত করা হয় যেগুলির দ্বারা গ্রুপিং (কনভোল্যুশন) সঞ্চালিত হয়, নেস্টেড টেবিলের ক্ষেত্রগুলি (যে ক্ষেত্রগুলি দ্বারা গ্রুপিং করা হয় তার সাথে সাপেক্ষে যোগ করা হয়) এবং সমষ্টি ফাংশন গ্রুপিং সংজ্ঞায়িত করা যাক (চিত্র 2.70)।

চিত্র 2.70 কোয়েরি নির্মাতা

যদি অনুরোধ দ্বারা প্রাপ্ত ডেটা কিছু শর্ত অনুযায়ী নির্বাচন করা আবশ্যক, তাহলে এই ক্ষেত্রে এটি "শর্তাবলী" ট্যাব ব্যবহার করার প্রয়োজন হতে পারে। আসুন গুডস রিসিপ্টগুডস সিলেক্ট করি। কোয়ান্টিটি=10 (চিত্র 2.71)।

চিত্র 2.71 ক্যোয়ারী কনস্ট্রাক্টর কন্ডিশন।

অনুগ্রহ করে মনে রাখবেন যে যদি শর্তটি চিত্রের মতো একইভাবে সংজ্ঞায়িত করা হয় তবে অনুরোধটি কার্যকর করা হবে না।

পরিস্থিতি সংশোধন করার দুটি উপায় রয়েছে:

    "P..." পতাকা চেক করে শর্ত পুনঃসংজ্ঞায়িত করে;

    অনুরোধের পাঠ্যটি নিজেই পরিবর্তন করার সুযোগের সদ্ব্যবহার করে (“অনুরোধ সম্পাদনা করুন” বোতামে ক্লিক করে প্রাপ্ত)।

ম্যানুয়াল পরিবর্তনটি নিজেই এই সত্যটি নিয়ে গঠিত যে "10" সংখ্যার আগে "&" চিহ্নটি সরানো প্রয়োজন। অনুরোধ পাঠ্যের এই চিহ্নটি অনুরোধের পরামিতিগুলিকে সংজ্ঞায়িত করে, যার মধ্যে কিছু মান অবশ্যই পরে লিখতে হবে (কিন্তু অনুরোধটি কার্যকর করার আগে)। "ক্যোয়ারী সম্পাদনা করুন" বোতামে ক্লিক করুন এবং সম্পাদনা করুন (চিত্র 2.72)।

চিত্র 2.73 একটি প্রশ্ন সম্পাদনা

"উন্নত" ট্যাবে, আপনি অনেকগুলি পতাকা পরীক্ষা করতে পারেন (কোয়েরি ভাষার "নির্বাচন" কীওয়ার্ডের সাথে সম্পর্কিত) এবং ক্যোয়ারী পরিবর্তন করার উদ্দেশ্যে টেবিলের গঠন নির্ধারণ করতে পারেন (চিত্র 2.74)।

চিত্র 2.74 অতিরিক্ত ক্যোয়ারী ফাংশন

"যোগদান/উপানাম" ট্যাবে, আপনি "উপানাম" সেট করে ক্ষেত্রের নাম পরিবর্তন করতে পারেন, কিন্তু আমরা এটি করব না।

"অর্ডার" ট্যাবে, আপনি অনুসন্ধানের ফলে রেকর্ডের সাজানোর ক্রম নির্ধারণ করতে পারেন (চিত্র 2.75)।

চিত্র 2.75 রেকর্ড সাজানোর ক্রম

"স্বয়ংক্রিয়-অর্ডার" পতাকার দিকে মনোযোগ দিন, এটি একটি রেফারেন্স ধরনের ক্ষেত্র দ্বারা অর্ডার করতে ব্যবহার করা যেতে পারে।

"মোট" বিভাগটি সংজ্ঞায়িত করার সময়, আপনাকে এই সত্যের জন্য প্রস্তুত থাকতে হবে যে অনুসন্ধানের ফলে "অতিরিক্ত" মোট রেকর্ডগুলি উপস্থিত হবে। এই রেকর্ডগুলির সাথে একসাথে, ক্যোয়ারী ফলাফল ক্রমানুসারে পরিণত হয় (চিত্র 2.76)।

চিত্র 2.76. ক্যোয়ারী কনস্ট্রাক্টরের ফলাফল।

বিভিন্ন ধরণের মোট নির্দিষ্ট করা সম্ভব:

    উপাদান (কোয়েরি ফলাফল নির্বাচন গ্রুপিং মোট এবং বিস্তারিত রেকর্ড রয়েছে);

    শ্রেণিবিন্যাস (কোয়েরি ফলাফল নির্বাচনে, সাধারণ ক্ষেত্রে, শ্রেণীবিন্যাস দ্বারা সারাংশ রেকর্ড, গ্রুপিং দ্বারা সারাংশ রেকর্ড, এবং বিস্তারিত রেকর্ড আছে);

    শুধুমাত্র শ্রেণিবিন্যাস (কোয়েরি ফলাফল নির্বাচনে, সাধারণভাবে, শ্রেণীবিন্যাস দ্বারা সারাংশ রেকর্ড আছে)।

কনস্ট্রাক্টরের "ওকে" বোতামে ক্লিক করার পরে, একটি "লেআউট" তৈরি হবে এবং ExecuteRequestServer() পদ্ধতির কোডটি ফর্ম মডিউলে লেখা হবে:

সার্ভারে

কার্যপ্রণালী ExecuteRequestServer()

//((QUERY_CONSTRUCTOR_WITH_RESULT_PROCESSING

// এই খণ্ডটি কনস্ট্রাক্টর দ্বারা নির্মিত।

// কনস্ট্রাক্টর পুনরায় ব্যবহার করার সময়, ম্যানুয়ালি করা পরিবর্তনগুলি হারিয়ে যাবে!!!

বিন্যাস = প্রক্রিয়াকরণ.QueryConstructor.GetLayout("লেআউট");

অনুরোধ = নতুন অনুরোধ;

Request.Text =

| পণ্য সামগ্রীর প্রাপ্তি। নামকরণ AS নামকরণ,

| SUM (পণ্য পণ্যের প্রাপ্তি। পরিমাণ) AS পরিমাণ,

| SUM(Goods Goods এর প্রাপ্তি। পরিমাণ) হিসাবে পরিমাণ

| ডকুমেন্ট।পণ্যের রসিদ।মাল

| কিভাবে পণ্য গ্রহণ

| পণ্য সামগ্রীর প্রাপ্তি। পরিমাণ > 1

|গ্রুপ দ্বারা

| দ্রব্যসামগ্রীর প্রাপ্তি। নামকরণ

|অর্ডার বাই

| পরিমাণ,

| পরিমাণ DECREASE

| SUM(পরিমাণ),

| SUM(সমষ্টি)

| নামকরণ শ্রেণিবিন্যাস";

ফলাফল = Query.Run();

HeaderArea = Layout.GetArea("Header");

AreaFooter = Layout.GetArea("Footer");

TableHeadArea = Layout.GetArea("TableHeader");

TableFooterArea = Layout.GetArea("TableFooter");

AreaNomenclatureHierarchy = Layout.GetArea("NomenclatureHierarchy");

এলাকা নামকরণ = লেআউট।গেটএরিয়া("নামকরণ");

TabDoc.Clear();

TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea);

TabDoc.StartAutoGroupingRows();

নির্বাচন নামকরণ = ফলাফল। নির্বাচন (বাইপাসকুয়েরির ফলাফল। বাইগ্রুপিং);

যখন SelectionNomenclature.Next() লুপ

যদি SelectionNomenclature.RecordType() = RequestRecordType.TotalByHierarchy তাহলে

এলাকা = AreaNomenclatureHierarchy;

অঞ্চল = RegionNomenclature;

যদি শেষ;

এলাকা.প্যারামিটার.ফিল(নির্বাচনের নামকরণ);

TabDoc.Output(Area, SelectionNomenclature.Level());

এন্ডসাইকেল;

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

//))CONSTRUCTOR_QUERY_WITH_RESULT_PROCESSING