1c ভার্চুয়াল টেবিল ব্যালেন্স এবং টার্নওভার। ক্যোয়ারী ব্যাচ ট্যাব

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

1. "IZ" নকশা।

ডাটাবেস থেকে ডেটা প্রাপ্ত করার জন্য, "FROM" নির্মাণ ব্যবহার করা মোটেই প্রয়োজনীয় নয়।
উদাহরণ: আমাদের ব্যাঙ্ক ডিরেক্টরি থেকে ব্যাঙ্ক সম্পর্কে সমস্ত তথ্য নির্বাচন করতে হবে।
অনুরোধ:

ডিরেক্টরি নির্বাচন করুন।ব্যাঙ্ক।*

ব্যাঙ্কস ডিরেক্টরি থেকে সমস্ত ক্ষেত্র নির্বাচন করে। এবং অনুরোধের অনুরূপ:

ব্যাঙ্কগুলি নির্বাচন করুন।* ডিরেক্টরি থেকে ব্যাঙ্কগুলি ব্যাঙ্ক হিসাবে

2. রেফারেন্স ক্ষেত্র দ্বারা তথ্য ক্রম

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

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

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

3. একটি রেফারেন্স প্রকারের একটি পাঠ্য উপস্থাপনা প্রাপ্ত করা। "প্রেজেন্টেশন" ডিজাইন।

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

ডেটা কম্পোজিশন সিস্টেমে, এই প্রক্রিয়াটি ডিফল্টরূপে ব্যবহৃত হয়, তবে কক্ষগুলিতে লেআউট তৈরি করার সময়, আপনাকে রেফারেন্স ক্ষেত্রের উপস্থাপনা নির্দিষ্ট করতে হবে এবং উদাহরণস্বরূপ, লিঙ্কটি নিজেই প্রতিলিপিতে রাখুন।

4. একটি টেমপ্লেট অনুযায়ী তথ্য নমুনা জন্য শর্ত.

উদাহরণস্বরূপ, আপনাকে ফর্মের কর্মীদের মোবাইল ফোন পেতে হবে (8 -123- 456-78-912)। এটি করার জন্য, আপনাকে অনুরোধে নিম্নলিখিত শর্ত সেট করতে হবে:

কর্মচারী নির্বাচন করুন। নাম, কর্মচারী। ডিরেক্টরি থেকে ফোন হিসাবে ফোন করুন। কর্মচারী হিসাবে কর্মচারী যেখানে ফোন "_-___-___-__-__"

"_" অক্ষরটি একটি পরিষেবা অক্ষর এবং যেকোনো অক্ষর প্রতিস্থাপন করে।

5. টোটাল এবং গ্রুপিং এর যুগপত ব্যবহার।


টোটালগুলি প্রায়শই গ্রুপিংয়ের সাথে ব্যবহার করা হয়; এই ক্ষেত্রে, মোট ফাংশনগুলি মোটের মধ্যে নির্দিষ্ট করা নাও হতে পারে।

পরিষেবার বিধান নির্বাচন করুন৷ সংস্থা হিসাবে পরিষেবার বিধান৷ নামকরণ হিসাবে নামকরণ, SUM (পরিষেবার বিধান৷ নথির পরিমাণ) নথি থেকে নথির যোগফল৷ পরিষেবাগুলির বিধান হিসাবে পরিষেবাগুলির বিধান হিসাবে পরিষেবার সংস্থান৷ সংস্থার বিধান৷ সংস্থা, বিধান পরিষেবার। সাধারণ, সংস্থার নামকরণের ফলাফল, নাম ক্ল্যাটুরা

এই ক্ষেত্রে, ক্যোয়ারীটি নিম্নোক্ত ক্যোয়ারীটির মতই ফিরে আসবে:

SELECT Provision of Services.Organization as Organization, Provision of Services.Nomenclature as Nomenclature, Provision of Document. Amount as Document of Document from Document. Provision of Services as Provision of Services Results AMOUNT (দস্তাবেজের পরিমাণ) সংস্থা, GYEN BYEN নামকরণ

শুধুমাত্র প্রথম ক্যোয়ারী একই নামকরণের সাথে রেকর্ড ভেঙে ফেলবে।

6. রেফারেন্সিং ক্ষেত্র।

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

অনুরোধ:

হিসাবে প্রতিনিধিত্ব করা যেতে পারে:

Payment.Link, Payment.Organization, Payment.Organization, Organizations নির্বাচন করুন। ডকুমেন্ট থেকে অ্যাডমিনিস্ট্রেটিভ ইউনিট। পেমেন্ট হিসাবে পেমেন্ট বামে যোগ দিন ডিরেক্টরি। সংস্থা হিসাবে সফ্টওয়্যার সংস্থা পেমেন্ট। অর্গানাইজেশন = সংস্থা। লিঙ্ক

একটি যৌগিক প্রকারের রেফারেন্স ক্ষেত্রগুলিকে ডিরেফারেন্স করার সময়, ফ্রেমওয়ার্ক সেই ক্ষেত্রের প্রকারের অংশ এমন সমস্ত টেবিলে অন্তর্নিহিত যোগদান তৈরি করার চেষ্টা করে। এই ক্ষেত্রে, ক্যোয়ারীটি সর্বোত্তম হবে না৷ যদি এটি পরিষ্কারভাবে জানা যায় যে এটি কোন ধরণের ক্ষেত্র, তাহলে এই ধরনের ক্ষেত্রগুলিকে একটি নির্মাণের সাথে টাইপ করে সীমাবদ্ধ করা প্রয়োজন৷ প্রকাশ করা().

উদাহরণস্বরূপ, একটি জমা রেজিস্টার আছে "অবিতরিত অর্থপ্রদান", যেখানে বেশ কয়েকটি নথি একটি নিবন্ধক হিসাবে কাজ করতে পারে। এই ক্ষেত্রে, এইভাবে রেজিস্ট্রারের বিবরণের মানগুলি প্রাপ্ত করা ভুল:

UnallocatedPayments.Register.date, ..... FROM RegisterAccumulation.UnallocatedPayments হিসাবে Unallocated Payments নির্বাচন করুন

লগারে আপনার যৌগিক ক্ষেত্রের প্রকার সীমাবদ্ধ করা উচিত:

এক্সপ্রেস নির্বাচন করুন (অবরাদ্দকৃত অর্থপ্রদান। নথি হিসাবে নিবন্ধন করুন। অর্থপ্রদান করুন)। তারিখ, ..... নিবন্ধন সংগ্রহ থেকে। আনঅ্যালোকেটেড পেমেন্ট হিসাবে অনালোকেটেড পেমেন্টস

7. নির্মাণ "কোথায়"

দুটি টেবিলের বাম যোগে, আপনি যখন ডান টেবিলে একটি "WHERE" শর্ত আরোপ করবেন, আমরা টেবিলের অভ্যন্তরীণ যোগদানের সাথে ফলাফলের অনুরূপ ফলাফল পাব।

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

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

পেমেন্ট নির্বাচন করুন। পেমেন্ট হিসেবে লিঙ্ক করুন, পেমেন্ট। শেয়ারহোল্ডার হিসেবে ক্লায়েন্টের জায়গা হিসেবে পেমেন্ট করুন। /////////////////////////////////////// /////////////////////////////////// ক্লায়েন্ট হিসাবে লিঙ্ক করুন, ISNULL(tPayment.Payment, "") ডিরেক্টরি থেকে অর্থপ্রদান হিসাবে .Clients AS ক্লায়েন্টরা বাম কানেকশান টপপেমেন্ট হিসাবে টপপেমেন্ট সফটওয়্যার ক্লায়েন্ট। লিঙ্ক = টপপেমেন্ট। ক্লায়েন্ট

আপনি অন্য উপায়ে এই অবস্থার কাছাকাছি পেতে পারেন. দুটি টেবিলের মধ্যে সম্পর্কের উপর সরাসরি "WHERE" শর্ত আরোপ করা প্রয়োজন। উদাহরণ:

Clients.Link, Payment.Link from Directory.US_Subscribers AS US_Subscribers LEFT Connection Document.Payment as Payment Software (Clients.Link = Payment.Client AND Payment.Client.Name like "Sugar Packet", BkGROUP ক্লায়েন্ট পেমেন্ট)। লিঙ্ক

8. নেস্টেড এবং ভার্চুয়াল টেবিলের সাথে যোগ দেয়

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

উদাহরণস্বরূপ, আমাদের কিছু ক্লায়েন্টের জন্য বর্তমান তারিখ হিসাবে ব্যালেন্সের পরিমাণ পেতে হবে।

UnallocatedPaymentsRemains.Customer, UnallocatedPaymentsRemains.Remaining FROM (ক্লায়েন্ট নির্বাচন করুন.নির্দেশিকা থেকে লিঙ্ক হিসাবে লিঙ্ক করুন।ক্লায়েন্ট যেখানে ক্লায়েন্ট হিসাবে লিঙ্ক করুন) NestedQuery হিসাবে বামে যোগদান করুন। ments BY Nested Request.Link = UnallocatedPayments Balances। ক্রেতা

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

ক্লায়েন্ট নির্বাচন করুন। ডিরেক্টরি থেকে লিংক প্লেস tক্লায়েন্ট হিসাবে লিঙ্ক করুন। যেখানে ক্লায়েন্ট হিসাবে ক্লায়েন্ট
ক্লায়েন্ট। লিঙ্ক বি (&ক্লায়েন্ট); /////////////////////////////////////// /////////////////////////////////// tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients বাম যোগদান রেজিস্টার অ্যাকম্যুলেশন। আনঅ্যালোকেটেড পেমেন্টস, ক্লায়েন্ট (ব্যালেন্স) IN (tClients.Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

এই ক্ষেত্রে, অপ্টিমাইজার অস্থায়ী টেবিল tClients কতগুলি রেকর্ড ব্যবহার করে তা নির্ধারণ করতে সক্ষম হবে এবং টেবিলে যোগদানের জন্য সর্বোত্তম অ্যালগরিদম নির্বাচন করতে সক্ষম হবে৷

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

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

ক্লায়েন্ট নির্বাচন করুন। ডিরেক্টরি থেকে লিংক প্লেস হিসাবে লিঙ্ক করুন।
ক্লায়েন্ট। লিঙ্ক বি (&ক্লায়েন্ট); /////////////////////////////////////// /////////////////////// UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS ক্লায়েন্ট PLACE ব্যালেন্স FROM RegisterAccumulations.UnallocatedPayments.Balances(, ক্লায়েন্ট B ( tClients নির্বাচন করুন। tClients থেকে লিঙ্ক করুন)) AS Unallocated Payments Balances /////////////////////////////////////// ////////////////////////////////// tClients.Link, toRemainders SELECT করুন। tClients থেকে বাকি হিসাবে বাকি হিসাবে tClients হিসাবে বামে যোগ দিন টিক্লায়েন্টদের দ্বারা অবশিষ্ট হিসাবে অবশিষ্ট হিসাবে যোগ দিন। = tRemainings.Client

9. অনুরোধের ফলাফল পরীক্ষা করা হচ্ছে।

প্রশ্নের ফলাফল খালি হতে পারে; খালি মান পরীক্ষা করতে, নিম্নলিখিত গঠন ব্যবহার করুন:

ResRequest = Request.Execute(); যদি resQuery.Empty() হয় তাহলে রিটার্ন করুন; যদি শেষ;

পদ্ধতি খালি()পদ্ধতির আগে ব্যবহার করা উচিত পছন্দ করা()বা আনলোড(), যেহেতু সংগ্রহটি পুনরুদ্ধার করতে সময় লাগে।

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

অনুরোধ = নতুন অনুরোধ; Query.Text = "SELECT | Clients.Link, | Clients.Birthdate |FROM | Directory.Clients AS ক্লায়েন্ট |WHERE | Clients.Link = &Client"; TableClients লুপ কোয়েরি থেকে প্রতিটি সারির জন্য। সেট প্যারামিটার("ক্লায়েন্ট", ক্লায়েন্ট); QueryResult = Query.Execute().Select(); এন্ডসাইকেল;

এটি একটি লুপে অনুরোধটি সিনট্যাক্স পরীক্ষা করা থেকে সিস্টেমটিকে সংরক্ষণ করবে।

11. নির্মাণ "থাক"।

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

Payment.Customer, AMOUNT(Payment.Amount) ডকুমেন্ট থেকে পরিমাণ হিসাবে নির্বাচন করুন। পেমেন্ট হিসাবে পেমেন্ট যেখানে মাস(পেমেন্ট. তারিখ) = পেমেন্ট অনুসারে 9 গোষ্ঠী। গ্রাহকের আছে AMOUNT(পেমেন্ট।অ্যামাউন্ট) > 13000

কনস্ট্রাক্টরে, এটি করতে, শুধু "শর্তাবলী" ট্যাবে যান, একটি নতুন শর্ত যোগ করুন এবং "কাস্টম" চেকবক্সটি চেক করুন। তারপর শুধু লিখুন পরিমাণ (অর্থপ্রদান।অ্যামাউন্ট) > 13000


12. NULL মান

আমি এখানে ডাটাবেসের তিন-মূল্যবান যুক্তির নীতিগুলি বর্ণনা করব না; এই বিষয়ে অনেক নিবন্ধ রয়েছে। শুধু সংক্ষেপে কিভাবে সম্পর্কে খালিপ্রশ্নের ফলাফল প্রভাবিত করতে পারে. মান NULL আসলে একটি মান নয়, এবং সত্য যে মানটি অনির্ধারিত তা অজানা। অতএব, NULL সহ যেকোন অপারেশন NULL প্রদান করে, তা যোগ, বিয়োগ, ভাগ বা তুলনা হোক। একটি NULL মান একটি NULL মানের সাথে তুলনা করা যায় না কারণ আমরা জানি না কী তুলনা করতে হবে। সেগুলো. এই দুটি তুলনা হল: NULL = NULL, NULL<>NULL সত্য না মিথ্যা, এটি অজানা।

এর একটি উদাহরণ তাকান.

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

অ্যাট্রিবিউট হিসেবে "কোন পেমেন্ট নেই" নির্বাচন করুন, ডকুমেন্ট প্লেস টপপেমেন্ট হিসেবে শূন্য করুন; /////////////////////////////////////// ////////////////////////////////// ক্লায়েন্ট হিসেবে লিংক করুন, পেমেন্ট করুন। লিংক কিভাবে পেমেন্ট ডাইরেক্টরি থেকে tClientPayment রাখে। ক্লায়েন্ট হিসেবে ক্লায়েন্ট বাম সংযোগ নথি। পেমেন্ট AS পেমেন্ট সফটওয়্যার ক্লায়েন্ট।লিঙ্ক = পেমেন্ট।শেয়ারহোল্ডার; /////////////////////////////////////// ////////////////////////////////// tClientPayment নির্বাচন করুন। tClientPayment থেকে ক্লায়েন্টকে tClientPayment হিসাবে অভ্যন্তরীণ যোগদান করুন tTopay হিসাবে tClientPayment দ্বারা। অর্থপ্রদান = tPayment করুন।

দ্বিতীয় অস্থায়ী টেবিল tClientPayment মনোযোগ দিন। বাম যোগদানের মাধ্যমে আমি এই ক্লায়েন্টদের জন্য সমস্ত ক্লায়েন্ট এবং সমস্ত অর্থপ্রদান নির্বাচন করি। যে সমস্ত ক্লায়েন্টদের পেমেন্ট নেই, তাদের জন্য "পেমেন্ট" ক্ষেত্রটি শূন্য হবে। যুক্তি অনুসরণ করে, প্রথম অস্থায়ী সারণী "tPayments"-এ আমি 2টি ক্ষেত্র নির্ধারণ করেছি, তার মধ্যে একটি NULL, দ্বিতীয় লাইন "পেমেন্ট নেই"। তৃতীয় সারণীতে, আমি একটি অভ্যন্তরীণ যোগদানের সাথে "পেমেন্ট" এবং "ডকুমেন্ট" ক্ষেত্রগুলি ব্যবহার করে টেবিল "tClientPayment" এবং "tPayment" সংযুক্ত করি। আমরা জানি যে প্রথম টেবিলে "ডকুমেন্ট" ক্ষেত্রটি NULL, এবং দ্বিতীয় টেবিলে, "পেমেন্ট" ক্ষেত্রে যাদের পেমেন্ট নেই তারাও NULL। এই ধরনের সংযোগ আমাদের কি ফিরে আসবে? কিন্তু এটা কিছুই ফেরত দেবে না। কারণ তুলনা NULL = NULL সত্যকে মূল্যায়ন করে না।

প্রত্যাশিত ফলাফল ফেরত দেওয়ার অনুরোধের জন্য, আসুন এটি আবার লিখি:

অ্যাট্রিবিউট হিসেবে "কোন পেমেন্ট নেই" নির্বাচন করুন, VALUE(ডকুমেন্ট. পেমেন্ট. খালি লিঙ্ক) পেমেন্টে নথির জায়গা হিসেবে; /////////////////////////////////////// /////////////////////////////////// ক্লায়েন্ট হিসাবে লিঙ্ক করুন, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink)) কিভাবে পেমেন্ট PUT ডাইরেক্টরি থেকে ক্লায়েন্ট পেমেন্ট। ক্লায়েন্ট হিসাবে ক্লায়েন্ট বাম কানেকশন ডকুমেন্ট। পেমেন্ট হিসাবে পেমেন্ট ক্লায়েন্টদের দ্বারা। লিঙ্ক = পেমেন্ট। শেয়ারহোল্ডার; /////////////////////////////////////// ////////////////////////////////// tClientPayment নির্বাচন করুন। tClientPayment থেকে ক্লায়েন্টকে tClientPayment হিসাবে অভ্যন্তরীণ যোগদান করুন tTopay হিসাবে tClientPayment দ্বারা। অর্থপ্রদান = tPayment করুন।

এখন, দ্বিতীয় অস্থায়ী টেবিলে, আমরা নির্দেশ করেছি যে যদি "পেমেন্ট" ক্ষেত্রটি NULL হয়, তাহলে এই ক্ষেত্রটি = অর্থপ্রদানের নথিতে একটি খালি লিঙ্ক। প্রথম টেবিলে আমরা একটি খালি রেফারেন্স দিয়ে NULL প্রতিস্থাপন করেছি। এখন সংযোগে নন-নাল ক্ষেত্রগুলি জড়িত এবং অনুরোধটি প্রত্যাশিত ফলাফল ফিরিয়ে দেবে।

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

13. "চয়েস কখন... তারপর... শেষ" ডিজাইনের একটি অনথিভুক্ত বৈশিষ্ট্য।

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

সিলেক্ট সিলেক্ট করুন যখন Users.Name = "Vasya Pupkin" তারপর "আমাদের প্রিয় কর্মচারী" অন্যথায় "আমরা এটা জানি না" ডাইরেক্টরি থেকে ফিল্ড 1 হিসাবে শেষ করুন। ব্যবহারকারী হিসাবে ব্যবহারকারী

কিন্তু যদি, উদাহরণস্বরূপ, আমাদের একটি অনুরোধে মাসের নাম পেতে হবে? একটি অনুরোধে একটি বিশাল নির্মাণ লেখা কুৎসিত এবং সময়সাপেক্ষ, তাই উপরের লেখার এই ফর্মটি আমাদের সাহায্য করতে পারে:

নির্বাচন করুন মাস ly" কে কখন 8 তারপর "আগস্ট" কখন 9 তারপর "সেপ্টেম্বর" কখন 10 তারপর "অক্টোবর" কখন 11 তারপর "নভেম্বর" কখন 12 তারপর "ডিসেম্বর" মাস হিসাবে শেষ

এখন নকশা কম কষ্টকর দেখায় এবং বোঝা সহজ।

14. ব্যাচ ক্যোয়ারী নির্বাহ.


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

ব্যবহারকারীদের নির্বাচন করুন।সম্পূর্ণ নাম হিসাবে লিঙ্ক করুন, ব্যবহারকারীদের।জন্ম তারিখ, ব্যবহারকারীদের।নির্দেশিকা থেকে vtUsers ভূমিকা রাখুন।ব্যবহারকারী হিসাবে ব্যবহারকারী; /////////////////////////////////////// ////////////////////// tueUsers.পূর্ণ নাম, tueUsers. জন্ম তারিখ থেকে tueUsers AS tueUsers GROUP BY tueUsers.পূর্ণ নাম, tueUsers . জন্ম তারিখ; /////////////////////////////////////// ///////////////////// wUsers নির্বাচন করুন। সম্পূর্ণ নাম, wUsers। wUsers থেকে wUsers রূপে wUsers গোষ্ঠীর ভূমিকা। সম্পূর্ণ নাম, wUsers। তারিখ জন্ম

tPackage = Request.ExecutePackage();

TP_জন্ম তারিখ = tPackage.Upload();
TP_Roles = tPackage.Unload();

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

15. একটি ব্যাচ অনুরোধ শর্তাবলী

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

SELECT Users.Individual.Name AS Name, Users.Individual.জন্ম তারিখ হিসাবে জন্ম তারিখ, Users.Individual.Code AS Code PLACE vtUsers FROM Directory.Users AS Users; /////////////////////////////////////// ////////////////////// ব্যক্তি নির্বাচন করুন। ডিরেক্টরি থেকে পৃথক হিসাবে লিঙ্ক করুন। ব্যক্তি হিসাবে ব্যক্তি

আপনি এই মত শর্ত আরোপ করতে পারেন:

WHERE Individuals.Code IN (vtUsers থেকে vtUsers.Code SELECT) এবং Individuals.Name IN (SELECT vtUsers.Code from vtUsers) এবং Individuals.Birth date IN (SELECT vtUsers.DateBirth from tvUsers)

এবং আপনি এটি এই মত করতে পারেন:

WHERE (Individuals.Code, Individuals.Name, Individuals.date of Birth) IN (SELECT tueUsers.Code, tueUsers.Name, tueUsers.জন্ম তারিখ থেকে tueUsers)

তাছাড়া শৃঙ্খলা বজায় রাখা প্রয়োজন।

16. একটি ব্যাচ অনুরোধে "অবস্থা" জন্য ক্যোয়ারী নির্মাতাকে কল করা

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

কনস্ট্রাকশন "B" এর পরে বন্ধনী স্থাপন করা এবং বন্ধনীগুলির মধ্যে একটি খালি স্থান (স্পেস) ছেড়ে দেওয়া প্রয়োজন, এই স্থানটি নির্বাচন করুন এবং ক্যোয়ারী কনস্ট্রাক্টরকে কল করুন। ডিজাইনার ব্যাচ কোয়েরির সমস্ত টেবিলে অ্যাক্সেস পাবেন। কৌশলটি ভার্চুয়াল রেজিস্টার টেবিল এবং "শর্তাবলী" ট্যাবে উভয়ই কাজ করে। পরবর্তী ক্ষেত্রে, আপনাকে "P (স্বেচ্ছাচারী শর্ত)" বাক্সটি চেক করতে হবে এবং সম্পাদনা মোড "F4" প্রবেশ করতে হবে।

প্রশ্নগুলি প্রায়শই ফ্লাইতে তৈরি করা হয় এবং তারা কেবল "কৌশলগুলি" যা আমি বিবেচনা করছিলাম তা ব্যাখ্যা করার জন্য পরিবেশন করে।

আমি প্রশ্নগুলিতে সূচীগুলির ব্যবহার দেখতে চেয়েছিলাম, কিন্তু এটি একটি খুব বিস্তৃত বিষয়। আমি এটি একটি পৃথক নিবন্ধে রাখব, অথবা পরে এটি এখানে যোগ করব।

upd1. পয়েন্ট 11,12
upd2. পয়েন্ট 13,14,15,16

ব্যবহৃত বই:
প্রশ্নের ভাষা "1C:Enterprise 8" - E.Yu. খ্রুস্তালেভা
1C: এন্টারপ্রাইজ 8 সিস্টেমে পেশাদার বিকাশ।"

বাস্তব সমস্যাগুলিতে নমুনাগুলি সংগঠিত করার সময়, বেশিরভাগ ক্ষেত্রে, ডেটা নির্বাচন নির্দিষ্ট মানদণ্ড অনুসারে সংগঠিত হয়।

ক্ষেত্রে যখন নির্বাচন একটি বাস্তব টেবিল থেকে তৈরি করা হয়, কোন অসুবিধা দেখা দেয় না। ডেটা একেবারে তুচ্ছভাবে প্রক্রিয়া করা হয়:

যখন কোয়েরির উৎস একটি ভার্চুয়াল টেবিল হয়, পরিস্থিতি কিছুটা জটিল হয়ে ওঠে।


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

আমরা ইতিমধ্যেই জানি যে ভার্চুয়াল টেবিলগুলিকে ভার্চুয়াল বলা হয় কারণ তারা আসলে ডাটাবেসে নেই। যখন তাদের কাছে অনুরোধ করা হয় তখনই তারা গঠিত হয়। এই সত্ত্বেও, ভার্চুয়াল টেবিলগুলিকে বাস্তব হিসাবে বিবেচনা করা আমাদের জন্য (অর্থাৎ, যারা ক্যোয়ারী লেখেন) সুবিধাজনক। 1C এন্টারপ্রাইজ 8 সিস্টেমে কী ঘটবে যখন আমরা কম্পাইল করা প্রশ্নটি ভার্চুয়াল টেবিলে অ্যাক্সেস করে?

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

সুতরাং, সিস্টেমটি কেবল অকেজো কাজ করবে না, তবে দ্বিগুণ অকেজো কাজ করবে! প্রথমে, সম্পদগুলি অপ্রয়োজনীয় ডেটার উপর ভিত্তি করে একটি ভার্চুয়াল টেবিল তৈরিতে ব্যয় করা হবে (চিত্রে সেগুলিকে "ডেটা এলাকা A এবং B" হিসাবে চিহ্নিত করা হয়েছে), এবং তারপরে চূড়ান্ত ফলাফল থেকে এই ডেটা ফিল্টার করার জন্য কাজ করা হবে।

ভার্চুয়াল টেবিল তৈরির পর্যায়ে অবিলম্বে অপ্রয়োজনীয় ডেটা ব্যবহার বন্ধ করা কি সম্ভব? দেখা যাচ্ছে এটা সম্ভব। ভার্চুয়াল টেবিলের পরামিতিগুলির জন্য এটি ঠিক কী ডিজাইন করা হয়েছে:

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

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

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

বাস্তব সমস্যাগুলিতে নমুনাগুলি সংগঠিত করার সময়, বেশিরভাগ ক্ষেত্রে, ডেটা নির্বাচন নির্দিষ্ট মানদণ্ড অনুসারে সংগঠিত হয়।

ক্ষেত্রে যখন নির্বাচন একটি বাস্তব টেবিল থেকে তৈরি করা হয়, কোন অসুবিধা দেখা দেয় না। ডেটা একেবারে তুচ্ছভাবে প্রক্রিয়া করা হয়:

যখন কোয়েরির উৎস একটি ভার্চুয়াল টেবিল হয়, পরিস্থিতি কিছুটা জটিল হয়ে ওঠে।

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

আমরা ইতিমধ্যেই জানি যে ভার্চুয়াল টেবিলগুলিকে ভার্চুয়াল বলা হয় কারণ তারা আসলে ডাটাবেসে নেই। যখন তাদের কাছে অনুরোধ করা হয় তখনই তারা গঠিত হয়। এই সত্ত্বেও, ভার্চুয়াল টেবিলগুলিকে বাস্তব হিসাবে বিবেচনা করা আমাদের জন্য (অর্থাৎ, যারা ক্যোয়ারী লেখেন) সুবিধাজনক। 1C এন্টারপ্রাইজ 8 সিস্টেমে কী ঘটবে যখন আমরা কম্পাইল করা প্রশ্নটি ভার্চুয়াল টেবিলে অ্যাক্সেস করে?

প্রথম ধাপে, সিস্টেমটি একটি ভার্চুয়াল টেবিল তৈরি করবে। দ্বিতীয় ধাপে, ফলাফল টেবিল থেকে রেকর্ডগুলি নির্বাচন করা হবে যা WHERE ক্লজে উল্লেখিত শর্ত পূরণ করে:


এটা স্পষ্টভাবে দেখা যায় যে চূড়ান্ত নমুনায় ভার্চুয়াল টেবিলের (এবং, তাই, ডাটাবেস থেকে) সমস্ত রেকর্ড অন্তর্ভুক্ত করা হবে না, তবে শুধুমাত্র সেইগুলি যা প্রদত্ত শর্ত পূরণ করে। এবং অবশিষ্ট রেকর্ডগুলি কেবল ফলাফল থেকে বাদ দেওয়া হবে।

সুতরাং, সিস্টেমটি কেবল অকেজো কাজ করবে না, তবে দ্বিগুণ অকেজো কাজ করবে! প্রথমে, সম্পদগুলি অপ্রয়োজনীয় ডেটার উপর ভিত্তি করে একটি ভার্চুয়াল টেবিল তৈরিতে ব্যয় করা হবে (চিত্রে সেগুলিকে "ডেটা এলাকা A এবং B" হিসাবে চিহ্নিত করা হয়েছে), এবং তারপরে চূড়ান্ত ফলাফল থেকে এই ডেটা ফিল্টার করার জন্য কাজ করা হবে।

ভার্চুয়াল টেবিল তৈরির পর্যায়ে অবিলম্বে অপ্রয়োজনীয় ডেটা ব্যবহার বন্ধ করা কি সম্ভব? দেখা যাচ্ছে এটা সম্ভব। ভার্চুয়াল টেবিলের পরামিতিগুলির জন্য এটি ঠিক কী ডিজাইন করা হয়েছে:


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

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

PriceSliceLast ভার্চুয়াল টেবিলের প্যারামিটার প্রবেশের জন্য ডায়ালগটি কল করা যাক এবং নির্দেশ করুন যে সময়কাল ReportDate প্যারামিটারে পাস করা হবে। এটি করার জন্য, টেবিল তালিকায় এই টেবিলটি নির্বাচন করুন এবং ভার্চুয়াল টেবিল বিকল্প বোতামে ক্লিক করুন। তারপর টেবিল থেকে নিম্নলিখিত ক্ষেত্র নির্বাচন করুন:

    SprNomenclature. পিতামাতা,

    সর্বশেষ মূল্যের স্লাইস। মূল্য।

বাম টেবিল যোগদান

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

ভাত। 13.15। একটি প্রশ্নে টেবিলের মধ্যে সম্পর্ক

- বুকমার্কে শর্তাবলীনামকরণ ডিরেক্টরি থেকে উপাদান নির্বাচন করার জন্য শর্ত সেট করা যাক - নির্বাচিত উপাদানগুলি অবশ্যই নামকরণের প্রকারের অনুরোধের প্যারামিটারে পাস করা নামকরণের ধরণের সাথে সামঞ্জস্যপূর্ণ হতে হবে:

ভাত। 13.16। উপাদান নির্বাচনের জন্য শর্তাবলী

- বুকমার্কে ইউনিয়ন/উপানাম:ক্ষেত্রের নাম প্যারেন্ট = সার্ভিস গ্রুপ এবং ফিল্ড লিঙ্ক = পরিষেবা নির্দিষ্ট করুন। - ঠিক আছে ক্লিক করুন-

এর পরে, ট্যাবে এটি করতে আপনাকে ডেটা লেআউট স্কিমটি সম্পাদনা করতে হবে সম্পদ, বোতামে ক্লিক করুন যোগ করুনএবং একটি সম্পদ নির্বাচন করুন - দাম

- বুকমার্কে অপশননামকরণ টাইপ প্যারামিটারের মান সেট করুন - গণনা.নামকরণের প্রকারগুলি. পরিষেবা৷ উপরন্তু, আমরা ReportDate প্যারামিটারের জন্য উপলব্ধতার সীমাবদ্ধতা সরিয়ে দেব। এই প্যারামিটার ক্ষেত্রের প্রকারে, তারিখের রচনা সেট করুন - তারিখ। পিরিয়ড প্যারামিটারের জন্য, বিপরীতে, আমরা একটি প্রাপ্যতা সীমাবদ্ধতা সেট করি:

ভাত। 13.17। লেআউট স্কিম বিকল্প

সেটিংস

- আসুন বুকমার্কে যাই সেটিংস:গ্রুপিং টাইপ হায়ারার্কি উল্লেখ করে সার্ভিস গ্রুপ ফিল্ডের উপর ভিত্তি করে একটি গ্রুপিং তৈরি করা যাক।

রিপোর্ট গ্রুপিং এর জন্য নিম্নলিখিত শ্রেণীবিন্যাস প্রকার বিদ্যমান:শ্রেণীবিন্যাস ব্যতীত - শুধুমাত্র অ-শ্রেণীবিন্যাস রেকর্ডগুলি গ্রুপিংয়ে প্রদর্শিত হয়৷ শ্রেণিবিন্যাস - নন-হায়ারার্কিক্যাল এবং হায়ারার্কিক্যাল উভয় রেকর্ডই গ্রুপিংয়ে প্রদর্শিত হয়। শুধুমাত্র শ্রেণিবিন্যাস - শুধুমাত্র শ্রেণিবদ্ধ (অভিভাবক) রেকর্ডগুলি গ্রুপিংয়ে প্রদর্শিত হয়। এই গ্রুপের ভিতরে আমরা গ্রুপ ক্ষেত্র নির্দিষ্ট না করেই আরেকটি তৈরি করব। সাব-ট্যাবে নির্বাচিত ক্ষেত্র:আউটপুট ক্ষেত্র নির্দিষ্ট করুন পরিষেবা এবং মূল্য:

ভাত। 13.18। রিপোর্ট গঠন এবং ক্ষেত্র

সাব-ট্যাবে অন্যান্যসেটিংস আমরা নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করব:

ভাত। 13.19। "পরিষেবা গ্রুপ" গ্রুপিংয়ের জন্য সাধারণ মোট প্রদর্শনের জন্য সেটিংস

ভাত। 13.20। একটি বিশ্বব্যাপী প্রতিবেদনের জন্য ফলাফল সেট আপ এবং প্রদর্শন করা

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

    1C এ: এন্টারপ্রাইজ মোড

চলুন শুরু করি 1C:Enterprise ডিবাগ মোডে এবং সর্বপ্রথম পর্যায়ক্রমিক রেজিস্টার মূল্য খুলুন। তারপর আমরা রিপোর্ট পরীক্ষা করব।

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

যদি আমার প্রকাশনা আপনার জন্য দরকারী হয়, এটি একটি প্লাস দিতে ভুলবেন না :-)

সংগ্রহের সমস্ত কাজের জন্য এখানে একটি রুব্রিকেটর রয়েছে(প্রতিটি কাজের জন্য ফোরাম থ্রেডের লিঙ্ক ধারণকারী একটি পৃষ্ঠা)
http://chistov.spb.ru/forum/16-969-1

ওয়েল, এখন আমার উন্নয়ন এবং নোট যে আমি প্রস্তুতি প্রক্রিয়ার সময় তৈরি.
আমি উপরে উল্লিখিত দুটির সাথে যতটা সম্ভব কম পুনরাবৃত্তি করার চেষ্টা করব শেষপ্রকাশনা

চল শুরু করা যাক:


আপনি যদি এটি দূরবর্তীভাবে গ্রহণ করেন তবে পরীক্ষার শেষে আপনার ডেস্কটপে দুটি বস্তু থাকা উচিত:

1. তথ্য ভিত্তির চূড়ান্ত আপলোড (dt ফাইল)
2. ব্যাখ্যামূলক নোট

অন্য কিছু থাকা উচিত নয়, কোন মধ্যবর্তী কপি, ইত্যাদি।

একটি ব্যাখ্যামূলক নোট লিখতে ভুলবেন না!
একটি অস্পষ্টভাবে প্রণয়ন করা কাজের ক্ষেত্রে, সেখানে লিখতে ভুলবেন না যে আপনি ঠিক এইরকম এবং এইরকম একটি সমাধান বিকল্প বেছে নিয়েছেন।
এছাড়াও, কোডের মূল জায়গাগুলিতে, ধর্মান্ধতা ছাড়াই সংক্ষিপ্ত মন্তব্য করা ভাল, তবে যেখানে পরীক্ষকের প্রশ্ন থাকতে পারে সেখানে লেখাই ভাল।

তবে পরীক্ষার আগে আপনাকে যে নির্দেশাবলী পড়তে দেওয়া হবে তাতে আপনাকে এই বিষয়ে বলা হবে।
এটা আগে থেকে জেনে রাখা ভালো)


প্রশ্নে অ্যাম্পারস্যান্ড অক্ষর ব্যবহার করা হচ্ছে।

কখনও কখনও লেআউটটি সামনে পিছনে পরিবর্তন করার চেয়ে অতিরিক্ত কীবোর্ড থেকে টাইপ করা দ্রুততর হয়, সময় বাঁচায়
& = Alt+38

*************************************************************************************************
ক্যোয়ারীতে TimePoint() ব্যবহার করা

সঞ্চয় এবং অ্যাকাউন্টিং রেজিস্টারের প্রশ্নে, নথির তারিখটিকে ভার্চুয়াল টেবিল (পিরিয়ড) প্যারামিটার হিসাবে ব্যবহার করতে হবে না, কিন্তু মোমেন্ট প্যারামিটার, যা কোডে নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:

মোমেন্ট = ?(পাসিং মোড = ডকুমেন্ট পোস্টিং মোড। অপারেশনাল, অনির্ধারিত, সময়ের মুহূর্ত());

*************************************************************************************************
নিবন্ধনের মাধ্যমে নথির গতিবিধি তৈরি করার সময়, পোস্টিং প্রক্রিয়াকরণ পদ্ধতির একেবারে শুরুতে, রেজিস্টারের মাধ্যমে বর্তমান নথির গতিবিধি পরিষ্কার করা প্রয়োজন।

কোড হল:

Movement.RegisterName.Write = True; মুভমেন্টস।রেজিস্টার নাম।ক্লিয়ার();

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

মুভমেন্ট।রেজিস্টার নাম।লিখুন();

অথবা, রেকর্ড বিশ্লেষণ করার সময়, স্পষ্টভাবে একটি সীমানা নির্দেশ করুন যা বর্তমান নথির সময় বিন্দু অন্তর্ভুক্ত করে না।

কিন্তু সর্বত্র আমি সহজভাবে এই তিনটি লাইন নির্মাণের ইঙ্গিত দিয়েছি:

Movement.RegisterName.Write = True; মুভমেন্টস।রেজিস্টার নাম।ক্লিয়ার(); মুভমেন্ট।রেজিস্টার নাম।লিখুন();

*************************************************************************************************
ডেটা ব্লক করার দুটি উপায় রয়েছে, তাদের মধ্যে পছন্দটি ব্যবহৃত পদ্ধতির উপর নির্ভর করে - পুরানো বা নতুন:

1) নিয়মিত নিয়ন্ত্রিত ব্লকিং, নথি প্রক্রিয়াকরণের পুরানো পদ্ধতি (ডেটা ব্লকিং অবজেক্ট)

ব্যালেন্সগুলি প্রথমে চেক করা হয় এবং তারপর লিখিত হয় কিনা তা সেট করুন।
সেক্ষেত্রে রেজিস্টার থেকে কিছু তথ্য নিয়ে আন্দোলন গড়ে তুলতে হবে।


উদাহরণ:

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


1. ডেটা লক অবজেক্ট ব্যবহার করে একটি লক সেট করুন
2. বাকিটা পড়ুন
3. আমরা রাইট-অফের সম্ভাবনা পরীক্ষা করি
4. আমরা আন্দোলন তৈরি করি, উদাহরণস্বরূপ, পণ্যগুলি বন্ধ করে দিন
5. নথি পোস্ট করার পরে, ব্লকিং স্বয়ংক্রিয়ভাবে সরানো হয় (ব্লকিং পোস্টিং লেনদেনের অংশ হিসাবে বৈধ এবং সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে সরানো হয়)। অর্থাৎ বস্তুটিকে বিশেষভাবে আনলক করার প্রয়োজন নেই।

2) নথি প্রক্রিয়াকরণের জন্য নতুন পদ্ধতি (LockForChange সম্পত্তি ব্যবহার করে = সত্য)

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

উদাহরণ:
আসুন একটি পণ্য বিক্রয় অপারেশন বিবেচনা করা যাক.
নথিতে - পরিমাণ, রেজিস্টারে - কেবল পরিমাণ
সুতরাং, আমরা নথি থেকে পণ্যের পরিমাণ জানি।
আমরা নথিতে উল্লেখিত পরিমাণের সাথে আন্দোলন গঠন করি এবং সেগুলি রেকর্ড করি। এর পরে, আমরা রেজিস্টারটি পড়ি, ব্যালেন্সগুলি দেখি এবং কোন নেতিবাচক আছে কিনা তা বিশ্লেষণ করি। যদি থাকে, একটি ত্রুটি প্রদর্শন করুন এবং Refusal = True সেট করুন।

অর্থাৎ, ক্রমটি এরকম:
1. রেজিস্টারের মধ্য দিয়ে যেতে, BlockForChange প্রপার্টি = True সেট করুন
2. আমরা আন্দোলন তৈরি - পণ্য বন্ধ লিখুন
3. নড়াচড়া রেকর্ড করুন
4. রেজিস্টার পড়ুন এবং নিশ্চিত করুন যে কোন ঋণাত্মক ব্যালেন্স নেই। যদি থাকে, তবে তারা অতিরিক্ত লিখেছে, যদি না থাকে, তবে সবকিছু ঠিক আছে।

সুতরাং, এই ক্ষেত্রে, কোন মাত্রার দ্বারা আমাদের নিবন্ধনটি ব্লক করতে হবে তা নির্দেশ করার দরকার নেই।
আমরা আমাদের নড়াচড়া রেকর্ড করার আগে BlockForChange প্রপার্টিটিকে True-এ সেট করি, আন্দোলন তৈরি করি এবং রেকর্ড করি।
আমরা যা রেকর্ড করেছি তা বিশ্লেষণ করে প্রয়োজনীয় পরিমাপ অনুযায়ী রেকর্ডিংয়ের সময় সিস্টেম নিজেই রেজিস্টার ব্লক করবে।
একবার সম্পূর্ণ হলে, ব্লকিং সরানো হবে।

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

আমি আরও লক্ষ্য করি যে নির্বাচিত পদ্ধতি নির্বিশেষে, তাদের সাথে কাজ করার আগে আন্দোলনগুলি অবশ্যই পরিষ্কার করা উচিত (আগের পরামর্শ দেখুন)

*************************************************************************************************
ডেটা ব্লকিং (উপরের বর্ণনা থেকে ব্লক করার পদ্ধতি নং 1)

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

এটা এই মত কিছু দেখায়:

লক = NewDataLock; লকিং এলিমেন্ট = Locking.Add("Accumulation Register.GoodsInWarehouses"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; লকিং Element.UseFromDataSource("নামকরণ", "নামকরণ"); লক.লক();

*************************************************************************************************
নথির সারণী অংশটিকে কেবল "TC" বলা ভাল

99% নথিতে শুধুমাত্র একটি সারণী অংশ রয়েছে। ট্যাবুলার অংশগুলির জন্য এই জাতীয় একীভূত নাম সময় বাঁচাতে ব্যাপকভাবে সাহায্য করবে, যেহেতু:
1) খুব সংক্ষিপ্ত - দ্রুত লিখুন
2) সমস্ত নথির জন্য একই, কোড লেখার সময় এটিকে কী বলা হয় তা আপনাকে মনে রাখতে হবে না

*************************************************************************************************
প্রযুক্তিগত স্পেসিফিকেশনে আনা বা আপলোড করার আগে প্রশ্নের ফলাফলটি শূন্যতার জন্য পরীক্ষা করা উচিত।

সাধারণভাবে, আমি সব কাজে নমুনা ব্যবহার করতাম।

কর্মক্ষমতার দিক থেকে সিস্টেমের জন্য স্যাম্পলিং আরও অনুকূল, যেহেতু এটি শুধুমাত্র ডেটা পড়ার জন্য "তীক্ষ্ণ" করা হয় (TK এর বিপরীতে)।

কিন্তু যাই হোক না কেন, Select() পদ্ধতির আগে, শূন্যতার জন্য ক্যোয়ারী ফলাফল পরীক্ষা করা ভাল, এটি সিস্টেমের লোডকে আরও কমিয়ে দেবে।

ফলাফল = Query.Run(); যদি ফলাফল না হয়। খালি() তারপর সিলেক্ট = রেজাল্ট। সিলেক্ট (TravelQueryResult.ByGrouping); ... যদি শেষ;

এবং যদি আমাদের অনুরোধ থেকে শুধুমাত্র একটি মান পেতে হয়
(উদাহরণস্বরূপ, এই বছরের জন্য প্রতিষ্ঠিত অ্যাকাউন্টিং নীতি অনুসারে শুধুমাত্র রাইট-অফ পদ্ধতি):

ফলাফল = Query.Run(); যদি ফলাফল না হয়। খালি() তারপর সিলেক্ট = রেজাল্ট। সিলেক্ট(); নির্বাচন। পরবর্তী(); কস্ট রাইট-অফ পদ্ধতি = নমুনা। খরচ লেখা বন্ধ পদ্ধতি; যদি শেষ;

*************************************************************************************************
একটি অ্যাকাউন্টিং কাজের জন্য নথি "অপারেশন"

অ্যাকাউন্টিং কাজের জন্য একটি অপারেশন ডকুমেন্ট তৈরি করা প্রয়োজন।

আমরা এটির জন্য পোস্টিং সম্পূর্ণরূপে অক্ষম করি (প্রপার্টি "পোস্টিং = অস্বীকার"), নির্দেশ করে যে এটি অ্যাকাউন্টিং রেজিস্টারে আন্দোলন করে, এবং আন্দোলনগুলি ফর্মের উপর টেনে আনে৷

*************************************************************************************************
নথিগুলির দ্রুত প্রক্রিয়াকরণ:

অবশ্যই অন্তর্ভুক্ত:
অপারেশনাল এবং অ্যাকাউন্টিং মধ্যে. নথিগুলির জন্য অ্যাকাউন্টিং সক্রিয় করা আবশ্যক ("অপারেশন" নথি ব্যতীত, নীচে দেখুন)৷

অবশ্যই বন্ধ করা:
গণনার কাজে এটি একটি বেতন নথির জন্য অর্থপূর্ণ নয়।

"অপারেশন" নথির জন্য, পোস্টিং সম্পূর্ণরূপে অক্ষম করা উচিত (নথির বৈশিষ্ট্যে "পোস্টিং = নিষেধ"),
যেহেতু তিনি লেখেন তখন লেখার সময় সরাসরি রেজিস্টারে ডেটা লেখেন।

*************************************************************************************************
ফর্মের একটি অনুরোধে শর্ত "হয় নির্দিষ্ট নামকরণ বা যে কোনো, যদি নির্দিষ্ট না করা হয়"

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

নামকরণ = &নামকরণ বা &নামকরণ = মান (ডিরেক্টরি।নামকরণ। খালি লিঙ্ক)

তবে এই শর্তটি রূপান্তর করা আরও সর্বোত্তম এবং সঠিক হবে (ধন্যবাদ ইউকন):


Request.Text = Request.Text + "WHERE Nomenclature = &Nomenclature";

যদি শেষ;

8.3.5 এ ক্যোয়ারী অবজেক্ট মডেলের আবির্ভাবের সাথে, আরও নিরাপদে একটি শর্ত যোগ করা সম্ভব হবে:

যদি ValueFilled(নামকরণ) তাহলে
Query1.Selection.Add("Item = &Nomenclature");
Request.SetParameter("নামকরণ", নামকরণ);
যদি শেষ;

*************************************************************************************************
প্রশ্নের টেবিলে যোগদান:

যোগ করা টেবিলের ক্ষেত্রটি প্রদর্শিত হবে কিনা তার উপর মোট রেকর্ডের সংখ্যা নির্ভর করে না, এটি শুধুমাত্র কনফিগার করা সম্পর্কের উপর নির্ভর করে।
অর্থাৎ, সংযুক্ত টেবিলের ক্ষেত্রটি প্রদর্শিত নাও হতে পারে।

আপনি যদি কোনও শর্ত ছাড়াই একটি টেবিল সংযুক্ত করতে চান তবে শর্ত ট্যাবে কেবল শর্তটি লিখুন "TRUE"।
এই ক্ষেত্রে, টেবিল ঠিক যোগদান করা হবে।

*************************************************************************************************
বৈশিষ্ট্যের প্রকারের পরিকল্পনা (PVC) ব্যবহার করে:

1. বস্তুর বৈশিষ্ট্য বর্ণনা করার জন্য একটি প্রক্রিয়া হিসাবে ব্যবহার করুন।

1.1। আমরা পিভিসি তৈরি করি। এগুলো হবে বৈশিষ্ট্যের প্রকারভেদ (উদাহরণস্বরূপ, রঙ, আকার, সর্বোচ্চ গতি, ইত্যাদি)। সেটিংসে, সমস্ত সম্ভাব্য ধরণের বৈশিষ্ট্যগত মান নির্বাচন করুন এবং প্রয়োজনে, পয়েন্ট 1.2 থেকে অবজেক্ট তৈরি করুন এবং সেটিংসে এটি নির্দেশ করুন।

1.2। PVC-এর অতিরিক্ত মানগুলির জন্য, আমরা একটি অধস্তন ডিরেক্টরি তৈরি করি অতিরিক্ত বৈশিষ্ট্যের মান (বা কেবল বৈশিষ্ট্যের মান)।
বিদ্যমান ডিরেক্টরিতে না থাকলে এটি বৈশিষ্ট্যগুলি সংরক্ষণ করবে। আমাদের প্রয়োজনীয় সমস্ত বৈশিষ্ট্য বিদ্যমান ডিরেক্টরিতে থাকলে আমরা এটি তৈরি করতে পারি না, বা এই মানগুলি প্রাথমিক ডেটা প্রকার দ্বারা উপস্থাপন করা যেতে পারে। PVC সেটিংসে আমরা নির্দেশ করি যে এই ডিরেক্টরিটি অতিরিক্ত উদ্দেশ্যে ব্যবহার করা হবে। বৈশিষ্ট্য মান।

1.3। আমরা একটি তথ্য রেজিস্টার তৈরি করি, যা আসলে তিনটি বস্তুকে সংযুক্ত করে:
- যে বস্তুর সাথে আমরা বৈশিষ্ট্য প্রক্রিয়াটি সংযুক্ত করি
- প্রকার বৈশিষ্ট্য (PVC প্রকার)
- বৈশিষ্ট্যের মান (প্রকার - বৈশিষ্ট্য, এটি একটি নতুন প্রকার যা পিভিসি তৈরির পরে সিস্টেমে উপস্থিত হয়েছিল
এবং একটি চরিত্রগত মান গ্রহণ করতে পারে এমন সমস্ত সম্ভাব্য ডেটা প্রকারের বর্ণনা করে)।
ইনফরমেশন রেজিস্টারে, আমরা ইঙ্গিত করি যে চরিত্রগত মান চরিত্রগত মান (নির্বাচনের প্যারামিটারের লিঙ্ক) এর মালিক, সেইসাথে চরিত্রগত মানটির জন্য টাইপ সংযোগ, আবার চরিত্রগত প্রকার থেকে।

আরেকটি বৈশিষ্ট্য হ'ল প্রতিটি তৈরি করা বৈশিষ্ট্যের জন্য, আপনি বৈশিষ্ট্যগত মানটির ধরণ নির্দিষ্ট করতে পারেন, যদি এই বৈশিষ্ট্যের মান বর্ণনা করার জন্য আপনার সমস্ত সম্ভাব্য প্রকারের প্রয়োজন না হয়।

2. অ্যাকাউন্টিং রেজিস্টারের জন্য একটি সাব-কন্টো মেকানিজম তৈরি করতে পিভিসি ব্যবহার করা .

2.1। আমরা PVC TypesSubconto তৈরি করি।

2.2। আমরা একটি অধস্তন ডিরেক্টরি ValuesSubConto তৈরি করি (বৈশিষ্ট্যের মতো, এটিতে সাবকন্টো মান থাকবে যদি অন্য ডিরেক্টরিতে এমন কিছু না থাকে)।

2.3। অ্যাকাউন্টের একটি চার্ট ব্যবহার করে যোগাযোগ করা হয়।

*************************************************************************************************
অ্যাকাউন্টিং নিবন্ধন সম্পদ:

পরিমাণ - ব্যালেন্স শীট,
পরিমাণ - অফ-ব্যালেন্স শীট এবং অ্যাকাউন্টিং বৈশিষ্ট্যের সাথে যুক্ত পরিমাণগত

*************************************************************************************************
ভার্চুয়াল অ্যাকাউন্টিং রেজিস্টার টেবিল:

টার্নওভার: একটি একক অ্যাকাউন্টের টার্নওভার
TurnoverDtKt: যে কোনো দুটি অ্যাকাউন্টের মধ্যে টার্নওভার, অর্থাৎ সময়ের জন্য একই লেনদেন।

*************************************************************************************************
অ্যাকাউন্টিং রেজিস্টারে কারেন্সি অ্যাকাউন্টিং - কীভাবে বাস্তবায়ন করবেন:

আমরা অ্যাকাউন্টের চার্টে একটি অ্যাকাউন্টিং বৈশিষ্ট্য "মুদ্রা" তৈরি করি।
অ্যাকাউন্টিং রেজিস্টারে, আমরা অতিরিক্ত তৈরি করি:
- মুদ্রার মাত্রা (খালি মান নিষিদ্ধ, ব্যালেন্স শীট, অ্যাকাউন্টিং বৈশিষ্ট্য - মুদ্রা)
- সম্পদ মুদ্রার পরিমাণ (অফ-ব্যালেন্স শীট, অ্যাকাউন্টিং অ্যাট্রিবিউট - কারেন্সি, এটি মুদ্রায় পরিমাণ সংরক্ষণ করবে, উদাহরণস্বরূপ, $100)
সব

সুতরাং রেজিস্টার কাঠামো হল:

পরিমাপ:
- মুদ্রা
সম্পদ
- পরিমাণ
- পরিমাণ (রুবেলে পরিমাণ)
- মুদ্রার পরিমাণ (মুদ্রার পরিমাণ)

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

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

অন্যথায়, আমরা সাম্প্রতিকগুলির একটি স্লাইস পাব না, তবে নির্দিষ্ট সংস্থান মান সহ শেষ রেকর্ড - এটি মাত্রার সেটে শেষ নাও হতে পারে

*************************************************************************************************
হিসাব রেজিস্টারে সম্পদের অর্থ এবং বিবরণ

গণনা রেজিস্টারে, এই রেজিস্টার ব্যবহার করে বেস গণনা করার সময় একটি সংস্থান তৈরি করা সম্ভব করে তোলে।
এমনকি প্রদত্ত সময়ের অনুপাতেও, সম্পদের মূল্য পুনরায় গণনা করা হবে (যদি বেস পিরিয়ড রেজিস্টারের পর্যায়কালের সাথে মিলে না যায়)।

এবং অ্যাট্রিবিউটের মান শুধুমাত্র গণনা রেজিস্টারের বাস্তব সারণীতে পাওয়া যায়; এটি ভার্চুয়াল টেবিলে পাওয়া যায় না।

*************************************************************************************************
চেকবক্স "বেসিক" গণনা রেজিস্টার মাত্রা বৈশিষ্ট্য বৈশিষ্ট্য
এর মানে হল যে ভবিষ্যতে এই মাত্রা থেকে একটি বেস প্রাপ্ত হবে এবং এই ক্ষেত্রের জন্য মানগুলির অতিরিক্ত সূচীকরণের জন্য কাজ করবে।

*************************************************************************************************
রেজিস্টার এন্ট্রির সেট রেকর্ড করার সময় মাস অনুসারে ছুটির মেয়াদের বিরতি,
যদি দস্তাবেজে এক লাইনে কয়েক মাসের জন্য একবারে এক লাইনে ছুটি উল্লেখ করা হয়:

বর্তমান মাসের শুরুর তারিখ = মাসের শুরু (TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); CurrentMonth = তারিখ; যদিও তারিখ স্টার্ট কারেন্টমাস<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
একটি গ্যান্ট চার্ট তৈরি করা:

আমরা ফর্মটিতে "গ্যান্ট চার্ট" টাইপের একটি উপাদান রাখি, এটিকে ডিজি বলি, তারপর "জেনারেট" কমান্ড তৈরি করুন এবং ফর্ম মডিউলে নিম্নলিখিতটি লিখুন:

&OnClient পদ্ধতি জেনারেট(কমান্ড) GenerateOnServer(); কার্যপ্রণালীর সমাপ্তি &অন সার্ভার পদ্ধতিতে জেনারেটঅন সার্ভার() DG.Clear(); DG.Update = False; অনুরোধ = নতুন অনুরোধ("নির্বাচন করুন |BasicAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |BasicAccrualsActualActionPeriod.ActionPeriodStart AS ActionPeriodStart, |BasicAccrualsActualActionPeriod.Employee, |BusicAccrualsActualActionPeriod.CalculationType nd |ফ্রম এবং &শেষ তারিখ "); Query.SetParameter("StartDate", Period.StartDate); Request.SetParameter("EndDate", Period.EndDate); নির্বাচন = Query.Run().Select(); যখন Selection.Next() লুপ পয়েন্ট = DG.SetPoint(Selection.Employee); সিরিজ = DG.SetSeries(Selection.CalculationType); মান = DG.GetValue(পয়েন্ট, সিরিজ); ব্যবধান = Value.Add(); Interval.Start = Sample.PeriodActionStart; Interval.End = Sample.ActionPeriodEnd; এন্ডসাইকেল; DG.Update = True; প্রক্রিয়া শেষ

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

*************************************************************************************************
গণনার কাজগুলিতে "বিপরীত" এন্ট্রিগুলি প্রক্রিয়া করা হচ্ছে:

লেনদেন প্রক্রিয়াকরণ পদ্ধতিতে (অবজেক্ট মডিউল), আমরা সমস্ত নড়াচড়া তৈরি করি এবং তারপরে যদি অন্যান্য সময়কালে রেকর্ড থাকে তবে আমরা সেগুলিকে এভাবে পাই
(সিস্টেম তাদের স্বয়ংক্রিয়ভাবে তৈরি করে - আমাদের সাহায্য করে):

সংযোজন রেকর্ড = Movements.MainAccruals.GetAddition(); // সংযোজন পেতে আন্দোলন রেকর্ড করার প্রয়োজন নেই

রেকর্ড সংযোজন চক্র থেকে প্রতিটি টেক লাইনের জন্য
রেকর্ড = Movements.MainAccruals.Add();
ফিল প্রপার্টি ভ্যালুস (রেকর্ড, টেকস্ট্রিং);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
চক্র শেষ

এবং রেকর্ড গণনা করার সময়, চেক সন্নিবেশ করান:

যদি TechMotion.Reversal তারপর
Current Movement.Sum=- Current Movement.Amount;
যদি শেষ;

*************************************************************************************************
গণনার কাজগুলিতে মূল সঞ্চয়গুলিতে কী অন্তর্ভুক্ত রয়েছে এবং অতিরিক্ত সঞ্চয়গুলিতে কী অন্তর্ভুক্ত রয়েছে তা কীভাবে নির্ধারণ করবেন।

তবে এটি সর্বদা 100% পরিষ্কার নয়; আরও জটিল মামলা রয়েছে, যদিও তাদের মধ্যে বেশ কয়েকটি রয়েছে
(উদাহরণস্বরূপ, একটি বোনাস যা এক মাসে কাজের দিনের সংখ্যার উপর নির্ভর করে - এটি HE)।

মৌলিক চার্জ:
যদি গণনার ধরনটি সময়সূচীর উপর নির্ভর করে (অর্থাৎ ক্যালেন্ডারের তারিখ সহ তথ্যের একটি রেজিস্টার), তাহলে এটি প্রধান চার্জকে বোঝায়।

উদাহরণ OH:
- বেতন
- এমন কিছু যা কার্যদিবসের সংখ্যা থেকে গণনা করা হয় (এবং এর জন্য আপনাকে একটি সময়সূচী ব্যবহার করতে হবে): হয় বৈধতার সময়কাল (যেমন বেতন) বা বেস পিরিয়ডে

অতিরিক্ত চার্জ:
হয় অর্জিত পরিমাণ, বা কাজ করার সময় (এবং আদর্শ নয়!) থেকে যা বিবেচনা করা হয় বা একেবারেই নির্ভর করে না - এটি অতিরিক্ত। সঞ্চয়

অর্থাৎ: যে গণনার জন্য টাইম স্ট্যান্ডার্ড ব্যবহার করা হয় (সম্ভবত একটি সত্যও) তা হল OH, এবং যার জন্য প্রকৃত ডেটা বা কিছুই প্রয়োজন নেই তা হল DN।

বা অন্য কথায়:

যদি VR একটি টাইম স্ট্যান্ডার্ড ব্যবহার করে, তাহলে VR-এর জন্য বৈধতার মেয়াদ অবশ্যই অন্তর্ভুক্ত করতে হবে।

*************************************************************************************************
"নামকরণ" ডিরেক্টরির তালিকা আকারে অন্তর্নির্মিত সহায়তা বিভাগ "রেফারেন্স বইয়ের সাথে কাজ করা" খোলার ক্ষমতা যুক্ত করুন।

ফর্মটিতে কমান্ডটি চালান:

&অনক্লায়েন্ট
পদ্ধতি সাহায্য (কমান্ড)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
প্রক্রিয়া শেষ

আমরা নিম্নরূপ বিভাগ লাইন সংজ্ঞায়িত:
কনফিগারেশন অবজেক্টের সহায়তা তথ্যে যান (কনফিগারেটে), একটি শব্দ লিখুন, এটি নির্বাচন করুন, উপাদান/লিঙ্ক মেনুতে যান এবং 1C সহায়তার পছন্দসই বিভাগটি নির্বাচন করুন, যার পরে লিঙ্কটি স্বয়ংক্রিয়ভাবে ঢোকানো হয়। এটি দেখতে জটিল, কিন্তু বাস্তবে এটি সহজ।

*************************************************************************************************
ফর্মগুলির মধ্যে মিথস্ক্রিয়া বাস্তবায়ন, উদাহরণস্বরূপ, নির্বাচন:

1. বর্তমান ফর্ম থেকে, "OpenForm()" পদ্ধতি ব্যবহার করে পছন্দসইটি খুলুন, দ্বিতীয় প্যারামিটার হিসাবে প্যারামিটার সহ কাঠামো পাস করুন (যদি প্রয়োজন হয়)। তৃতীয় প্যারামিটারটি এই ফর্মের একটি লিঙ্ক পাস করতে পারে - ThisForm.

2. খোলা ফর্মে, "When CreatedOnServer()" হ্যান্ডলারে, আমরা "প্যারামিটার [প্যারামিটারের নাম]" এর মাধ্যমে ধাপ 1-এ পাস করা প্যারামিটারগুলি ধরতে পারি। যে ফর্মটি এই ফর্মটি খোলার সূচনা করেছে সেটি "মালিক" শনাক্তকারীর মাধ্যমে অ্যাক্সেসযোগ্য হবে (যদি এটি অবশ্যই, ধাপ 1 এ উল্লেখ করা হয়)।

এবং সবচেয়ে গুরুত্বপূর্ণ, মালিক ফর্মের রপ্তানি ফাংশন উপলব্ধ হবে। অর্থাৎ, আমরা সোর্স ফর্মের এক্সপোর্ট ফাংশনকে কল করতে পারি এবং নির্বাচন প্রক্রিয়া করার জন্য প্যারামিটার হিসাবে সেখানে কিছু পাস করতে পারি। এবং এই ফাংশনটি ইতিমধ্যেই মূল ফর্মে যা প্রয়োজন তা পূরণ করবে। শুধুমাত্র একটি সতর্কতা আছে - আপনি ক্লায়েন্ট পদ্ধতির মধ্যে মানগুলির একটি সারণী পাস করতে পারবেন না, তবে আমরা এটিকে অস্থায়ী সঞ্চয়স্থানে রাখতে পারি এবং কেবলমাত্র VX ঠিকানাটি পাস করতে পারি এবং তারপর VX থেকে এটি বের করতে পারি।

*************************************************************************************************
ফর্ম প্যারামিটারের জীবনচক্র

ফর্মটি খোলার সময় স্থানান্তরিত সমস্ত প্যারামিটার শুধুমাত্র "When CreateOnServer" পদ্ধতিতে দৃশ্যমান।
একবার তৈরি হয়ে গেলে, সমস্ত পরামিতি ধ্বংস হয়ে যায় এবং ফর্মে আর উপলব্ধ থাকে না।
ব্যতিক্রম হল প্যারামিটারগুলির জন্য যেগুলি "কী প্যারামিটার" বৈশিষ্ট্য সহ ফর্ম সম্পাদকে ঘোষণা করা হয়৷
তারা ফর্মের স্বতন্ত্রতা নির্ধারণ করে।
এই প্যারামিটারটি ততক্ষণ বিদ্যমান থাকবে যতক্ষণ পর্যন্ত ফর্মটি নিজেই বিদ্যমান থাকবে।

*************************************************************************************************
ট্যাক্সি ইন্টারফেস ব্যবহার করে

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

*************************************************************************************************

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

পিএসএস: সহকর্মীরা, পরীক্ষার প্রস্তুতি এবং পাস করার বিষয়ে কারো কাছে অন্য কোন দরকারী তথ্য থাকলে, অনুগ্রহ করে মন্তব্যে লিখুন এবং আমরা নিবন্ধে যোগ করব।