PDA

View Full Version : سوال: محاسبه مجموع چند فيلد موجود در فرم و زير فرم باهم



abdoreza57
جمعه 28 بهمن 1390, 15:01 عصر
با سلام خدمت تمام دوستان عزيزم

تو فرمي كه وجود داره اگر به يك زير فرم در ارتباط باشد چطور ميشه مجموع اعداد موجود در ساب فرم را به فرم اصلي انتقال داد و در ضمن براي يافتن مجموع منفي حاصل از اين دو فرم چه راهي پيشنهاد ميكنيد (محاسبه بدهي مشتريان )

Abbas Amiri
جمعه 28 بهمن 1390, 17:50 عصر
در Record Source مبوط به Text19 عبارت زیر رادرج کنید:


=[Forms]![asli]![Pardakht]![jam]

abdoreza57
جمعه 28 بهمن 1390, 19:54 عصر
سلام

قسمت دوم سوالم را هم اگر جواب ميداديد خوب ميشد و اون اينكه ليست مشتريان بدهكار ...

همانطور كه ميبيند قسمتي از پرداختها در جدول ديگريست و حال آنكه براي برخي مشتريان فيلد خالي وجود داره لذا نميدونم كوئري كه ايجاد ميشه بايد به چه صورت تعريف كنم تا ليست بدهكاران را بده

بازم ممنون

Abbas Amiri
جمعه 28 بهمن 1390, 20:01 عصر
اگر درست متوجه شده باشم کافیست بجای نام کنترل ها در ، Text23 عبارت Nz(ControlName) ودر آخر عبارت Val(text19) را کم کنید

abdoreza57
شنبه 29 بهمن 1390, 00:56 صبح
سلام

نه مشكلم تو فرم به كمك شما حل شد ميخواهم يك كوئري بسازم و تو اون با توجه به پرداخت هاي مشتري در دو جدول Asli و Pardakht بتوان ميزان بدهي او را محاسبه كرد
[mozd]+[parche]-[takhfif]-[pish] و همه منهاي [Forms]![asli]![Pardakht]![jam] كه مساوي با ميزان بدهي مشتري است با اعمال Nz

همانطور كه ميبينيد مسئله تو فرم قابل حل است ولي براي ساخت كوئري چه راهي پيشنهاد ميكنيد

Abbas Amiri
دوشنبه 01 اسفند 1390, 01:06 صبح
از کد زیر کمک بگیرید:


nz(Dsum("mablagh","pardakht","Num=" & N))+Nz(Dlookup("pish + takhfif - mozd - parche","asli","num=" & N))

abdoreza57
دوشنبه 01 اسفند 1390, 09:12 صبح
سلام

لطف كنيد بگيد اين كد را تو كجاي كوئري قرار بدم كه ليست بدهكاران مشخص بشه ؟

Abbas Amiri
دوشنبه 01 اسفند 1390, 20:06 عصر
عبارت سیکیوال زیر را در یک کوئری کپی کنید درنمای دیزاین به شکل تصویر زیر خواهدبود. در فیلد sName می توانید در قسمت Criteria نام فرم و کمبو ویا تکست باکسی که نام وفامیل مشتریان راداراست قراردهید واز آن در منبع داده فرم ویا ریپورت استفاده کنید


SELECT asli.num, [nam] & " " & [famil] AS sName, Sum([parche]+[mozd]) AS Bed, Sum([mablagh]+[pish]+[takhfif]) AS Payment, Sum([mablagh]+[pish]+[takhfif]-[parche]-[mozd]) AS Mandeh
FROM asli INNER JOIN Pardakht ON asli.num = Pardakht.num
GROUP BY asli.num, [nam] & " " & [famil];


82993http://barnamenevis.org/images/misc/pencil.png

abdoreza57
دوشنبه 01 اسفند 1390, 23:07 عصر
سلام
متوجه شدم

در اين حالت اگر ركورد متناظر با فرم در زير فرم نباشه انگار محاسبه نميكنه !!درسته ؟

بنابر اين درصورتي كه براي هر ركورد از جدول اصلي كه در جدول پرداخت اعدادي ثبت نشده باشه محاسبه انجام نخواهد شد اين مورد چطور قابل حله ؟

Abbas Amiri
دوشنبه 01 اسفند 1390, 23:13 عصر
بشکل زیر


SELECT asli.num, [nam] & " " & [famil] AS sName, Sum(Nz([parche])+Nz([mozd])) AS Bed, Sum(Nz([mablagh])+Nz([pish])+Nz([takhfif])) AS Payment, Sum(Nz([mablagh])+Nz([pish])+Nz([takhfif])-Nz([parche])-Nz([mozd])) AS Mandeh
FROM asli LEFT JOIN Pardakht ON asli.num = Pardakht.num
GROUP BY asli.num, [nam] & " " & [famil];

abdoreza57
سه شنبه 02 اسفند 1390, 00:22 صبح
سلام

يه دنيا ممنون

abdoreza57
سه شنبه 02 اسفند 1390, 17:27 عصر
سلام

متاسفانه با آنكه فرمول تو كوئري درست همان چيزي است كه مد نظر بود ولي حاصل محاسبات غلط انجام شده

من داخل فرم اصلي محاسبات را به صورت دستي انجام ميدم نتيجه با آنچه تو كوئري آمده يكسان نيست
لطفا راهنمايي فرماييد

Abbas Amiri
سه شنبه 02 اسفند 1390, 18:45 عصر
درسته چک نکرده بودم تصحیح شد:


SELECT asli.num, [nam] & " " & [famil] AS sName, Nz([parche])+Nz([mozd]) AS Bed, Sum(Nz([mablagh])) AS Pay1, Nz([pish])+Nz([takhfif]) AS Pay2, [pay1]+[pay2]-[Bed] AS Mandeh
FROM asli LEFT JOIN Pardakht ON asli.num = Pardakht.num
GROUP BY asli.num, [nam] & " " & [famil], Nz([parche])+Nz([mozd]), Nz([pish])+Nz([takhfif]);

abdoreza57
جمعه 05 اسفند 1390, 01:20 صبح
سلام

در صورتي كه بخواهيم شرطي تو كوئري اسكيوال قرار دهيم در كدام قسمت بايد باشد ؟

براي فيلتر كردن مشتريان بدهكار تو نمونه فوق من شرط وجود اعداد مني را برابر مشتريان بدهكار قرار دادم متاسفانه اين شرط را در كريترياي هر فيلد قرار دهيم ايجاد خطا ميكنه

Abbas Amiri
جمعه 05 اسفند 1390, 12:02 عصر
همانطور که در پاسخ پیامتان عرض کردم از طریق ایجاد یک کوئری براساس کوئری فوق براحتی میتوان اینکاررا انجام داد


SELECT * FROM Query2
WHERE Mandeh<>0;