PDA

View Full Version : روشی برای ایجاد یک گزارش حسابدرای



mohammad-gh
چهارشنبه 08 آبان 1387, 14:36 عصر
با سلام
من می خواهم گزارشی پر استفاده که در برنامه های حسابداری مانند هلو دیده ام را پیاده سازی کنم، روش کار بدین صورت است :
کسانی که با اسناد حسابداری آشنایی دارند می دانند که یک سند حسابداری دارای چند سطر است(2 سطری، 4 سطری و ..) که بر اساس بدهکاری و بستانکاری حساب می شود ،
یک شخص که به عنوان طرف حساب در حسابداری شناخته می شود می تواند دارای بیشمار سند حسابداری باشد که به دلایل مختلف مانند (فروش، خرید ، دریافت ، پرداخت و ..) برای او ثبت شده است.
حال می خواهیم گزارشی را از کل مبالغ بدهکاری و بستانکاری او بدست آوریم که جمع کل بدهکاریها و بستانکاریهای افراد را در یک سطر مشخص کند.
باید توجه داشت که مبالغ بدهکاری و بستانکاری تمام اسنادی که به نام یک شخص ثبت شده در یک سطر آورده شود برای راحتی درک موضوع تصویر سند را ضمیمه می کنم.

mmdee2007
چهارشنبه 08 آبان 1387, 18:50 عصر
:متفکر::متفکر:
دوستان کسی نیست به این سوال جواب بده !!!

ali_md110
چهارشنبه 08 آبان 1387, 23:41 عصر
سوالتون خیلی تخصصی شده
این عکس یک مثل یک ترازنامه هستش که شما باید مانده حسابهای گلیه اشخاص رو بدست بیارین و بریزین
درون یک دیتاتیبل دیگه و به کاربر نمایش بدید

من تعدادجداول شما رو نمیدونم چندتا و ساختارشون چگونه هست
نوع طراحی بانک توی برنامه های حسابداری متفاوته بعضیها درون بانک یه سری حساب و کتاب ریاضی رو انجام میدن که به نظر من روش درستی نیست بعضیها از طزیق پرسو جو ممکنه تعداد جداولشون هم متفاوت باشه

قبلا هم یک سوال شبیه به این سوال کرده بودید که میتونید طبق اون برنامه مشکلتون رو حل کنید
بانک برنامتون رو بزارید ببینیم بهتره شاید جوابی براش پیداشد

mohammad-gh
پنج شنبه 09 آبان 1387, 10:17 صبح
با سلام

من تعدادجداول شما رو نمیدونم چندتا و ساختارشون چگونه هست
من از یک تیبل برای ذخیره اسناد استفاده می کنم که در اون فیلدهای :شماره سند، نام طرف حساب، کد طرف حساب، مبلغ بدهکاری ، مبلغ بستانکاری وجوددارد . در حقیقت هیچ عملی رو در خود بانک محاسبه نمی کنم چون با شما موافقم که این کار بار اضافی رو به بانک تحمیل می کنه.

قبلا هم یک سوال شبیه به این سوال کرده بودید که میتونید طبق اون برنامه مشکلتون رو حل کنید
بله و من با اون مشکل باقیمانده هر سطر رو حل کردم ، اما اینجا مشکل کمی فرق می کنه.

بانک برنامتون رو بزارید ببینیم بهتره شاید جوابی براش پیداشد
نمی دونم چطور بانک برنامم رو بزارم آخه سنگین هم شده.
اما راه حلی که خودم به نظرم میاد ولی احتمالا خیلی زمانبر است:
1- ابتدا داخل حلقه ای جستجوی طرف حسابها رو انجام بدم و محاسبه کنم کدام حساب بدهکاری و بستانکاری یک طرف حساب با هم یکسان است یا نه.
2- اگر شرط بند یک برقرار بود (یعنی مبالغ با هم تفاوت داشت)جزء لیست ما است پس باید آن را به صورت یک row به یک دیتا ست اضافه کنم
3- در آخر دیتا ست رو به گزارشم معرفی کنم
آیا روشی که گفتم خیلی زمانبر نیست ، مخصوصا اگر بیشتر چند هزار نفر طرف حساب داشته باشی؟
راه بهتری حتما وجود دارد!

mostafaaa
پنج شنبه 09 آبان 1387, 10:51 صبح
سلام فکر میکنم همه اینها رو میتونی با SQL انجام بدی . برای مثال

SELECT شماره سند,نام طرف حساب,کد طرف حساب,SUM(مبلغ بدهکاری) AS جمع کل بدهکاری ها,SUM(مبلغ بستانکاری) AS جمع کل بستانکاری ها
FROM جدول اسناد GROUP BY کد طرف حساب

mohammad-gh
پنج شنبه 09 آبان 1387, 12:16 عصر
ممنون

AS جمع کل بدهکاری ها
یعنی چی ؟

naskam
پنج شنبه 09 آبان 1387, 12:51 عصر
برای این کار بایستی یه فیلد با نام ماهیت که نوع آن بولی است به بانک اطلاعات اضافه بشه سپس تشخیص ماهیت حسابها خیلی آسون میشه

naskam
پنج شنبه 09 آبان 1387, 12:55 عصر
یااینکه اگه با دستورات sql آشنایی کامل دارید میتونید با استفاده از کریستال ریپورت و دستورات sql نمونه این گزارش رو براحتی تهیه نمائید

mohammad-gh
پنج شنبه 09 آبان 1387, 13:22 عصر
خوب یا علی چطوری ؟
من هم مشکلم همینه

mostafaaa
پنج شنبه 09 آبان 1387, 21:08 عصر
اون AZ در واقع نام مستعار فیلد خروجی هستش.
به این مثال توجه کن و کوئری داخلش رو اجرا کن.
25028

mohammad-gh
سه شنبه 14 آبان 1387, 14:06 عصر
با سلام آقا مصطفی من از فایل ضمیمتون سر در نیاوردم
اما امیدوارم با دستورات sql بشه این کار رو کرد ، البته از دستور sql بالا نتونستم استفاده کنم.
ممنون می شم یک کم بیشتر توضیح بدید.
راستی نمی شه تو خود کریستال چنین فیلتری رو بر پا کرد.

mostafaaa
سه شنبه 14 آبان 1387, 17:28 عصر
فرض کنید یه جدول داریم به این شکل
که شامل لیست بدهکاری و بستانکاری افراد مختلف هستش.

ID CustomerName Liability Creditor
--------------------------------------------------
1 Anna $100,000.00 $11,000.00
2 Christina $23,000.00 $120,000.00
3 Anna $890,000.00 $990,000.00
4 Christina $890,000.00 $21,300.00
5 Martin $220,000.00 $111,200.00
6 Martin $220,000.00 $64,900.00
حالا ما میخواهیم با استفاده از یک کوئری مبالغ بستانکاری و بدهکاری هر فرد رو حساب کنیم واز جدول مربوطه هر جا که لازمه استفاده کنیم مثلا خروجی رو توی یه DataGridView نشون بدیم.
با این کوئری میتونیم این کار رو انجام بدیم.

SELECT CustomerName, SUM(Liability) AS Liab, SUM(Creditor) AS Cred
FROM Table1
GROUP BY CustomerName;

که خروجی زیر رو خواهیم داشت

CustomerName Liab Cred
----------------------------------------------
Anna $990,000.00 $1,001,000.00
Christina $913,000.00 $141,300.00
Martin $440,000.00 $176,100.00

mohammad-gh
سه شنبه 14 آبان 1387, 22:22 عصر
آقا خیلی ممنون
فقط میشه کاری کرد که تون همون select هم فیلدهای sum رو با هم مقایسه کرد
مثلا گفت وقتی sum بدهکار . بستانکار با هم برابر نبودند جز نتایج باشه.

mostafaaa
چهارشنبه 15 آبان 1387, 10:30 صبح
سلام

SELECT Table1.CustomerName, Sum(Table1.Liability) AS Liab, Sum(Table1.Creditor) AS Cred
FROM Table1
GROUP BY Table1.CustomerName
HAVING NOT Sum(Table1.Liability)=Sum(Table1.Creditor);

منصور بزرگمهر
پنج شنبه 16 آبان 1387, 12:02 عصر
برای مانده هر حساب در هر سطر بهتر است موقع ذخیره سند خود مانده ها را حساب و ذخیره کنی.

mohammad-gh
پنج شنبه 16 آبان 1387, 12:32 عصر
ابتدا میخواهم از آقا مصطفی یک تشکر حسابی کنم.
آقا ممنون از راهنماییت
اما یک مورد که جزء گیرهای group by است منو معطل کرده ، اون هم اینه که من وقتی می خواهم به نتایج فیلد نام طرف حساب رو اضافه کنم خطا میده که باید یه جایی در گروهبندی استفاده بشه.
آیا راه حلی برای این مشکل است یا نه ؟
نمیشه یه جوری یه تابع محاسباتی رو به این فیلد رشته ای نسبت داد (بهش کلک زد)تا جزء نتایج بیاره.

mostafaaa
پنج شنبه 16 آبان 1387, 21:01 عصر
سلام
فکر کنم این مشکلتون رو برطرف کنه.

SELECT Table1.ID, Table1.CustomerName, Sum(Table1.Liability) AS Liab, Sum(Table1.Creditor) AS Cred
FROM Table1
GROUP BY Table1.ID, Table1.CustomerName
HAVING NOT Sum(Table1.Liability)=Sum(Table1.Creditor);

mohammad-gh
جمعه 17 آبان 1387, 10:45 صبح
نه آقا مصطفی منظورم بدون استفاده در group by است چون وقتی این کار رو می کنم مثلا نام طرف حساب رو هم در گروه بندی دخالت می دهم نتایج به هم می ریزه

mohammad-gh
شنبه 18 آبان 1387, 12:21 عصر
آقا یعنی راهی برای نمایش فیلدی که در دستور group by استفاده شده نباشه ، نیست!