-
1 ضمیمه
صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکوردهای قبل محاسبه شود)
سلام دوستان عزیز.
بنده یک دیتا گرید دارم که مقداربدهی و طلبکاری و نام مشتری را از بانک دریافت میکنه. که من میخوام 2 فیلد مانده حساب و وضعیت که در جدول مربوطه نیست و به این دیتا گرید اضافه کنم. و میخوام محاسبات زیر روی آن انجام بشه:
اگر در سطر 1 مبلغ بدهی بزرگتر از صفر باشه و بستانکاری مساوی صفر باشه مانده حساب مبلغ بدهکاری رو نشان دهد یا به نحوی منها بشن. و وضعیت بدهکار را نشان بدهد.
و یا اگر در سطر 1 مبلغ بدهکاری صفر و بستانکاری بیشتر از صفر باشد مانده حساب مبلغ بستانکاری را نشان بدهد و وضعیت بستانکار را نشان بدهد.
و برای سطر های بعدی محاسبات به صورت زیر باشد.
اگر در سطر 2 بدهکاری بزرگتر از صفر باشد و بستانکاری صفر باشد.مانده حساب سطر 1 با بدهکاری سطر 2 جمع میشود. و مبلغ در مانده حساب سطر 2نمایش میدهد و وضعیت اگرمنفی شد بستانکار و اگر مثبت شد بدهکار را نشان میدهد.
یا اگر در سطر 2 بستانکاری بزرگتر از صفر باشد و بدهکاری صفر باشد.مانده حساب سطر 1 از بستانکاری سطر2 کم میشود. و مبلغ در مانده حساب سطر 2نمایش میدهد و وضعیت اگرمنفی شد بستانکار و اگر مثبت شد بدهکار را نشان میدهد.
و در سطر 3مانده حساب سطر 2 از اینها کم میشود یا جمع میشود.
وبه همین ترتیب در سطرهای بعد تا بی نهایت ادامه میدهیم.
مثال:
ردیف نام مشتری مبلغ بدهی مبلغ بستانکاری مانده حساب وضعیت
1 علی 10 0 10 بدهکار
2 علی 10 0 20 بدهکار
3 علی 10 0 30 بدهکار
4 علی 0 10 20 بدهکار
5 علی 0 10 10 بدهکار
6 علی 0 20 10- بستانکار
7 علی 0 5 15- بستانکار
8 علی 5 0 10- بدهکار
...
....
....
ضمیمه 141472
و به همین ترتیب ادامه میدهیم.
نکته :من نمیخوام که دو فیلد مانده حساب و وضعیت رو به جدولم اضافه کنم.میخوام سمت سی شارپ به دیتاگرید اضافه کنم.
پیشاپیش ازهمه سپاسگذارم.
لطفا نمونه کد بزارین فقط.چون پس فردا باید تحویل بدم.ممنونم
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
سلام دوست عزیز.
میتونی با حلقه سطر به سطر بخونی و تفریق بدهکار و بستانکار رو توی یه متغیر ذخیره کنی و توی همون حلقه اخر دیتاگرید اضافش کنی و همون متغییر رو تا اخر حلقه داشته باشی.
یه چیز تقریبا اینجوری:
decimal bed=0,bes=0,mande=0;
for(int i=0;i<dgv.rowcount;i++)
{
bed=convert.todecimal(dgv.rows[i].cell["bedehi"].value.tostring());
bes=...
mande=mande+(bes-bed);
string vaz="بدهکار";
if(mande>0) vaz="بستانکار";
if(mande==0) vaz="بی حساب";
dgv.rows[i].cell["vaziat"].value=vaz;
dgv.rows[i].cell["man"].value=mande.tostring();
}
}
-
1 ضمیمه
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
reza_ali202000
سلام دوست عزیز.
میتونی با حلقه سطر به سطر بخونی و تفریق بدهکار و بستانکار رو توی یه متغیر ذخیره کنی و توی همون حلقه اخر دیتاگرید اضافش کنی و همون متغییر رو تا اخر حلقه داشته باشی.
یه چیز تقریبا اینجوری:
decimal bed=0,bes=0,mande=0;
for(int i=0;i<dgv.rowcount;i++)
{
bed=convert.todecimal(dgv.rows[i].cell["bedehi"].value.tostring());
bes=...
mande=mande+(bes-bed);
string vaz="بدهکار";
if(mande>0) vaz="بستانکار";
if(mande==0) vaz="بی حساب";
dgv.rows[i].cell["vaziat"].value=vaz;
dgv.rows[i].cell["man"].value=mande.tostring();
}
}
ممنونم دوست عزیز.
اما این خطا رو میده.
ضمیمه 141480
لطفا راهنمایی بفرمایید.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
kamiloted
ممنونم دوست عزیز.
اما این خطا رو میده.
ضمیمه 141480
لطفا راهنمایی بفرمایید.
دوست عزیز اسم کالومن وضعیتتون هرچی هست همونو بزارید.
من این کد رو به عنوان نمونه نوشتم.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
دوست عزیز میدونم.اما من کالمن وضعیت ندارم.
من قراره مانده حساب و وضعیت رو میخوام سمت سی شارپ انجام بدم.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
اگه میخوای اضافه کنی اینطوری میشه
dataGridViw1.rows.add(هرچی که میخوای اضافه کنی را بزار)
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
aryadev
اگه میخوای اضافه کنی اینطوری میشه
dataGridViw1.rows.add(هرچی که میخوای اضافه کنی را بزار)
ممنونم.دوست عزیز .
من هرچی اضافه میکنم.بازم همینو میگه.
لطفا یه کد منظم بهم بدین ممنون میشم
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
به دیتاگرید دو تا ستون بنام های vaziat و man اضافه کن بعد کد زیر رو استفاده کن..
decimal bed=0,bes=0,mande=0;
for(int i=0;i<dgv.rowcount;i++)
{
bed=convert.todecimal(dgv.rows[i].cell["bedehi"].value.tostring());
bes=...
mande=mande+(bes-bed);
string vaz="بدهکار";
if(mande>0) vaz="بستانکار";
if(mande==0) vaz="بی حساب";
dgv.rows[i].cell["vaziat"].value=vaz;
dgv.rows[i].cell["man"].value=mande.tostring();
}
}
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
hosseines
به دیتاگرید دو تا ستون بنام های vaziat و man اضافه کن بعد کد زیر رو استفاده کن..
decimal bed=0,bes=0,mande=0;
for(int i=0;i<dgv.rowcount;i++)
{
bed=convert.todecimal(dgv.rows[i].cell["bedehi"].value.tostring());
bes=...
mande=mande+(bes-bed);
string vaz="بدهکار";
if(mande>0) vaz="بستانکار";
if(mande==0) vaz="بی حساب";
dgv.rows[i].cell["vaziat"].value=vaz;
dgv.rows[i].cell["man"].value=mande.tostring();
}
}
ممنونم دوست عزیز.
اما 2تا ستونی که ایجاد کردم میاد اول دیتا گرید.
به این صورت:
وضعیت - مانده حساب - کد مشتری - نام مشتری - بدهکار - بستانکار
باید چطور جابه جا کنم.؟
که به صورت زیر بشه.
کد مشتری - نام مشتری - بدهکار - بستانکار -وضعیت- مانده حساب
ممنونم که وقت میزارید
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
ستون ها را بصورت دستی ایجاد میکنی یا با کد ...؟
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
hosseines
ستون ها را بصورت دستی ایجاد میکنی یا با کد ...؟
بقیه ستونها رو با کد و این 2 مورد رو که شما فرمودین به صورت دستی.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
و یه سوال دیگه.چکار کنم که در دیتا گرید و یا ریپورت مقدار منفی مثلا -200 نوشته نشه اما همچنان سیستم وضعیت رو تشخیص بده که بدهکاره یا بستانکار؟
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
میتونی بررسی کنی که اگه مانده منفی بود در -1 ضرب کنی..
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
اطلاعات را دستی وارد میکنم
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
mojtaba0912433
11
ضمیمه 141506
آقا ما هم يه سوء استفاده از اين تايپيك ببريم اين كد را من ضميمه پروژه كردم ميشه راهنمايي كنيد خطايي كه ميگره مربوط به چي هست
سلام
حلقه ای که گذاشتین به دلیل اینکه دیتاگرید میتونید فیلد اضافه کنید حتما باید یه ردیف ازش کم کنید که جواب بده:
for (int i = 0; i < dgv.RowCount-1; i++)
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
اما 2تا ستونی که ایجاد کردم میاد اول دیتا گرید.
به این صورت:
وضعیت - مانده حساب - کد مشتری - نام مشتری - بدهکار - بستانکار
باید چطور جابه جا کنم.؟
که به صورت زیر بشه.
کد مشتری - نام مشتری - بدهکار - بستانکار -وضعیت- مانده حساب
ممنونم که وقت میزارید
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
kamiloted
اما 2تا ستونی که ایجاد کردم میاد اول دیتا گرید.
به این صورت:
وضعیت - مانده حساب - کد مشتری - نام مشتری - بدهکار - بستانکار
باید چطور جابه جا کنم.؟
که به صورت زیر بشه.
کد مشتری - نام مشتری - بدهکار - بستانکار -وضعیت- مانده حساب
ممنونم که وقت میزارید
سلام دوست عزیز ، شما اگه به دیتاگرید دقت کنید میبینید در بالا سمت راست اون یه فلش ریز مشکی رنگ وجود داره روی اون کلیک کن و در کادری که باز میشه روی Edit Column کلیک کن پنجره ای باز میشه که ستون های جدول شما توی اون قرار داره حالا روی هر ستونی که میخوای کلیک کن کنار همون کادری که نام ستون هات قرار داره دوتا فلش مشکی رنگ هست با اون ها ترتیب ستون هات رو به صورتی که میخوای تغییر بده و Ok کن .
پیرو و موفق باشی .
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
سلام
با DisplayIndex میتونید محل قرارگیری ستونها را تنظیم کنید
برای نمونه لینک زیر را ببینید :
https://msdn.microsoft.com/en-us/lib...v=vs.100).aspx
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
mrprestige
سلام دوست عزیز ، شما اگه به دیتاگرید دقت کنید میبینید در بالا سمت راست اون یه فلش ریز مشکی رنگ وجود داره روی اون کلیک کن و در کادری که باز میشه روی Edit Column کلیک کن پنجره ای باز میشه که ستون های جدول شما توی اون قرار داره حالا روی هر ستونی که میخوای کلیک کن کنار همون کادری که نام ستون هات قرار داره دوتا فلش مشکی رنگ هست با اون ها ترتیب ستون هات رو به صورتی که میخوای تغییر بده و Ok کن .
پیرو و موفق باشی .
ممنونم دوست عزیز.
من اون 6 مورد رو با کد آوردم.و اون 2 مورد رو به این طریقی که شما میفرمایین آوردم.
اینقدر مبتدی دیگه نیستم.ممنونم
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
دوست عزیز اگه سلکت رو به صورت دستی نوشتین پس ایجاد دوتا کالومن هم دستز بعد از سلکتتون بنویسید.شما میگی نمونه، شما خودت نمونتو بزار تا بتونیم برات ویرایش کنیم.واقعا خیلی ساده هست.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
kamiloted
ممنونم دوست عزیز.
من اون 6 مورد رو با کد آوردم.و اون 2 مورد رو به این طریقی که شما میفرمایین آوردم.
اینقدر مبتدی دیگه نیستم.ممنونم
قصد جسارت نداشتم دوست عزیز میدونم شما حرفه ای هستید :لبخندساده:، من وقتی جوابی به یک سوال میدم سعی میکنم طوری جواب بدم که اگه کسی هم مبتدی بود و همین مشکل رو داشت به پست بنده نگاه کرد براش نا مفهموم نباشه .
پیروز موفق باشی.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
سلام .ممنونم از دوستانی که برای این تاپیک وقت گذاشتن.
اما متاسفانه اون چیزی که میخواستم کسی اشاره نکرد.خودم بالاخره موفق شدم با یه خط کد بنویسم بخش آخر سوالم رو منظورمه(نکته :من نمیخوام که دو فیلد مانده حساب و وضعیت رو به جدولم اضافه کنم.میخوام سمت سی شارپ به دیتاگرید اضافه کنم.).اگر کسی خواست تا براش توضیح بدم.
الان من میخوام مانده حساب را به این صورت به دست بیارم.
مثلا سطر اول نوشته نام مشتری علی و سطر دوم نوشته نام مشتری مهدی و سطر سوم نوشته محسن
و سطر چهارم نوشته علی وبه همین ترتیب میره تا بی نهایت.در ضمن نام علی تصادفی تکرار میشه.احتمال داره 3بار یا بیشتر پشت سر هم تکرار بشه.
حال من میخوام مانده حساب علی رو به شیوه ی بالا به دست بیارم در صورتی که بدهکاری و بستانکاری بقیه مشتری ها رو نادیده بگیره و فقط برای علی محاسبه بشه.
ممنونم اگه راهنمایی کنید.
-
1 ضمیمه
نقل قول: جمع و تفریق در datagridview بین سلول های آن
ببین این خوبه
dgv.Rows.Cast<DataGridViewRow>()
.All(c =>
{
c.Cells["مانده حساب"].Value =
dgv.Rows.Cast<DataGridViewRow>()
.Where(c1 => c1.Index < c.Index)
.Where(c1 => c1.Cells["نام مشتری"].Value.ToString().Equals(c.Cells["نام مشتری"].Value.ToString()))
.Select(c1 => int.Parse(c1.Cells["بستانکار"].Value.ToString()) -
int.Parse(c1.Cells["بدهکار"].Value.ToString())).Sum() +
int.Parse(c.Cells["بستانکار"].Value.ToString()) - int.Parse(c.Cells["بدهکار"].Value.ToString());
return true;
});
ضمیمه 141665
اینم یک نمونه
-
1 ضمیمه
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
hamid_hr
ممنونم دوست عزیز کدهاتون عالی بودن.
اگر ما بخواهیم طبق ستون شرح تصویر زیر محاسبات رو به روال قبل انجام بدیم باید چکار کنیم؟
ضمیمه 141670
مثلا در ستون شرح متن ستون ها به صورت تصادفی تا بی نهایت اتفاق می افته.
من الان میخوام اون فیلدهایی که نوشته
فروش کالا طی فاکتور شماره 5
و خرید کالا طی فاکتور شماره 10
و تسویه فاکتور خرید شماره 10 با اسناد پرداختنی
محاسبه بشن.
و اون فیلد هایی که نوشته کالای مثلا شانی مبلغ بدهکاری وبستانکاریشون نادیده گرفته بشه.
و وضعیت مشتری هم ذکر بشه که آیا بدهکاره یا بستانکار
ممنونم که وقت میزارید
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
خب من یه شرط گذاشتم به این صورت
.Where(c1 => c1.Cells["نام مشتری"].Value.ToString().Equals(c.Cells["نام مشتری"].Value.ToString()))
حالا شما باید اینو بر اساس کاری که میخواین تغییر بدین
-
1 ضمیمه
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
hamid_hr
خب من یه شرط گذاشتم به این صورت
.Where(c1 => c1.Cells["نام مشتری"].Value.ToString().Equals(c.Cells["نام مشتری"].Value.ToString()))
حالا شما باید اینو بر اساس کاری که میخواین تغییر بدین
دوست عزیز اگه من اینطور بنویسم
.Where(c1 => c1.Cells["شرح"].Value.ToString().Equals(c.Cells["شرح"].Value.ToString()))
هیچ کدوم از سلول های شرح مشابه نیست.که این عمل رو انجام بده.
در ضمن من میخوام سلول هایی که نوشته شده کالای :
نادیده گرفته بشه.
و ستون مانده حساب برای اینا خالی باشن.
مانند تصویر زیر:
ضمیمه 141674
dataGridView1.Rows.Cast<DataGridViewRow>().Where(c 2 => !c2.Cells[3].Value.ToString().StartsWith("کالای")) .Where(c3 => !c3.Cells[3].Value.ToString().StartsWith("تخفیف"))
ممنونم که وقت میزارید
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
خب باید شرطو عوض کنی
مثلا میشه
.Where(c1 => !c1.Cells["شرح"].Value.ToString().StartsWith("کالای")
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
نقل قول:
نوشته شده توسط
hamid_hr
خب باید شرطو عوض کنی
مثلا میشه
.Where(c1 => !c1.Cells["شرح"].Value.ToString().StartsWith("کالای")
ممنونم.اما شرط رو هر طوری مینویسم اصلا اون چیزی که میخوام نمیشه.باید چکار کنم دقیق
بعد میخوام هر مانده حساب دقیق روبروی خودش باشه طبق تصویر.کد شما همه رو تو 5 سطر اول مینویسه.
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
خب اینطوری باید بشه
یه شرط اضافه میشه
dgv.Rows.Cast<DataGridViewRow>() .Where(c2 => !c2.Cells[0].Value.ToString().StartsWith("کالای"))
.All(c =>
{
c.Cells[3].Value =
dgv.Rows.Cast<DataGridViewRow>()
.Where(c1 => c1.Index < c.Index)
.Where(c1 => !c1.Cells[0].Value.ToString().StartsWith("کالای"))
.Select(c1 => int.Parse(c1.Cells[1].Value.ToString()) -
int.Parse(c1.Cells[2].Value.ToString())).Sum() +
int.Parse(c.Cells[1].Value.ToString()) - int.Parse(c.Cells[2].Value.ToString());
return true;
});
خط دوم اضافه میشه
-
1 ضمیمه
صورت حساب بدهی یا طلب مشتری.
سلام دوستان.
من برای صورتحساب یه مشتری مبلغ بدهکاری رو منهای مبلغ بستانکاری میکنم و مانده حساب رو به دست میارم.مانند تصویر زیر.
ضمیمه 143064
حال من یه کد نوشتم تا اگه مانده حساب کمتر از صفر بود بستانکار بنویسه.
و اگه بیشتر بود بدهکار و اگه مساوی صفر بود تسویه.
اما همونطور که توی شکل میبینید.همه رو تسویه نشون میده.
مشکل از چیه دوستان..؟؟
اینم کدی که برای این نوشتم:
try
{
DataTable dt = new DataTable();
Database db = new Database();
string Vaziat = "";
int MandeHesab = 0;
dt = db.MySelect("SELECT Id_Kalaei, Kod_Moshtari, Name_Moshtari, Sharh, Tedad, Takhfif, PriceVahed, PasAzTakhfif, Bedehkar, Bostankar, '" + Vaziat + "', '" + MandeHesab + "', Tarikh FROM tbl_Kalaei");
dataGridView1.DataSource = dt;
dataGridView1.Rows.Cast<DataGridViewRow>().Where(c 2 => !c2.Cells[3].Value.ToString().StartsWith("کالای"))
.Where(c3 => !c3.Cells[3].Value.ToString().StartsWith("تخفیف"))
.All(c =>
{
MandeHesab = Convert.ToInt32(c.Cells[11].Value.ToString());
if (MandeHesab > 0) Vaziat = "بدهکار";
if (MandeHesab < 0) Vaziat = "بستانکار";
if (MandeHesab == 0) Vaziat = "تسویه";
c.Cells[10].Value = Vaziat;
c.Cells[11].Value = dataGridView1.Rows.Cast<DataGridViewRow>()
.Where(c1 => c1.Index < c.Index)
.Where(c1 => !c1.Cells[3].Value.ToString().StartsWith("کالای"))
.Select(c1 => int.Parse(c1.Cells[8].Value.ToString()) -
int.Parse(c1.Cells[9].Value.ToString())).Sum() +
int.Parse(c.Cells[8].Value.ToString()) - int.Parse(c.Cells[9].Value.ToString());
return true;
} );
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
ممنونم از همگی
-
نقل قول: صورت حساب بدهی یا طلب مشتری.
.Select(c1 => int.Parse(c1.Cells[8].Value.ToString()) - int.Parse(c1.Cells[9].Value.ToString())).Sum() +
int.Parse(c.Cells[8].Value.ToString()) - int.Parse(c.Cells[9].Value.ToString());
مبلغ مانده چجور بدست میارید؟
ستون بد منهای جمع ستون بس و ستون بد
به نظر من نیاز نیست به اون sum
معمولا ستون مانده اینجوری بدست میاد
total = total + Bes - Bed;
-
نقل قول: جمع و تفریق در datagridview بین سلول های آن
کل این عمل رو میتونید با کوئری SQL پیاده کنید. دنبال مطلبی با عنوان Running Total باشید.
-
نقل قول: صورت حساب بدهی یا طلب مشتری.
دوستمون Mahmoud.Afrad فرموده بودن که :
کل این عمل رو میتونید با کوئری SQL پیاده کنید. دنبال مطلبی با عنوان Running Total باشید.
ومن با جستجو این و پیدا کردم.
http://www.codeproject.com/Articles/...-in-SQL-Server
http://www.1keydata.com/sql/sql-running-totals.html
خلاصه من نمیدونم چکار کنم دوستان میشه منو راهنمایی کنید.ممنونم
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکورد قبلی محاسبه شود)
لینک زیر روشهای مختلف همراه با پرفورمنس بررسی شده اند
https://sqlperformance.com/2014/01/t...running-totals
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکورد قبلی محاسبه شود)
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
سلام ممنونم .
این لینک رو دیده بودم.
من الان این کار ها رو انجام دادم.
الان فقط همون تکه کد
if (MandeHesab > 0) Vaziat = "بدهکار"; if (MandeHesab < 0) Vaziat = "بستانکار";
if (MandeHesab == 0) Vaziat = "تسویه";
مشکل دارم.
چرا درست نمینویسه باید به چه شیوه ای بنویسم.
چون وقت ندارم.ممنونم
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکورد قبلی محاسبه شود)
وقتی سوال میپرسید در همان پست اول جتما کد و در صورت لزوم اسکریپت جدول رو بزارید تا بشه تست کرد.
اگر جدول زیر رو داشته باشیم
CREATE TABLE [dbo].[TestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[Bestankari] [decimal](18, 0) NOT NULL,
[Bedehkari] [decimal](18, 0) NOT NULL,
[Tarikh] [datetime2](7) NOT NULL
)
کوئری زیر پاسخ شماست. توجه کنید که زمان ثبت برای هر رکورد بایست وجود داشته باشه که میتونه از نوع datetime2 باشه تا بتوان بر حسب اون مجموع بدست بیاد
select
C.* ,
(CASE WHEN Mande>0 THEN N'بدهکار'
WHEN Mande<0 THEN N'طلبکار'
ELSE N'تسویه'
END) as Vaziat
from
(
select
B.Id ,
B.PersonId ,
B.Bedehkari ,
B.Bestankari ,
B.Tarikh ,
(B.RunningTotalBedehkari - B.RunningTotalBestankari) as Mande
From
(
SELECT
A.*,
RunningTotalBedehkari = (SELECT SUM(Bedehkari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh),
RunningTotalBestankari = (SELECT SUM(Bestankari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh)
FROM TestTable AS A
) AS B
) C
ORDER BY C.PersonId , C.Tarikh
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکورد قبلی محاسبه شود)
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
وقتی سوال میپرسید در همان پست اول جتما کد و در صورت لزوم اسکریپت جدول رو بزارید تا بشه تست کرد.
اگر جدول زیر رو داشته باشیم
CREATE TABLE [dbo].[TestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[Bestankari] [decimal](18, 0) NOT NULL,
[Bedehkari] [decimal](18, 0) NOT NULL,
[Tarikh] [datetime2](7) NOT NULL
)
کوئری زیر پاسخ شماست. توجه کنید که زمان ثبت برای هر رکورد بایست وجود داشته باشه که میتونه از نوع datetime2 باشه تا بتوان بر حسب اون مجموع بدست بیاد
select
C.* ,
(CASE WHEN Mande>0 THEN N'بدهکار'
WHEN Mande<0 THEN N'طلبکار'
ELSE N'تسویه'
END) as Vaziat
from
(
select
B.Id ,
B.PersonId ,
B.Bedehkari ,
B.Bestankari ,
B.Tarikh ,
(B.RunningTotalBedehkari - B.RunningTotalBestankari) as Mande
From
(
SELECT
A.*,
RunningTotalBedehkari = (SELECT SUM(Bedehkari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh),
RunningTotalBestankari = (SELECT SUM(Bestankari)
FROM dbo.TestTable
WHERE TestTable.PersonId = A.PersonId
AND TestTable.Tarikh <= A.Tarikh)
FROM TestTable AS A
) AS B
) C
ORDER BY C.PersonId , C.Tarikh
ممنونم آقای Mahmoud.Afrad.
اگه توجه کنید من در تصویر بالا فیلتر گذاشتم ونمیخوام بعضی از بدهکاری ها و بستانکاری ها تو محاسبه بیاد.
و همینطور من 2 ستون وضعیت و مانده حساب را در جدول ندارم.
اسکریپت جدول من:
CREATE TABLE [dbo].[tbl_Kalaei](
[Id_Kalaei] [int] IDENTITY(1,1) NOT NULL,
[NumSanad] [char](10) NULL,
[Kod_Moshtari] [char](10) NULL,
[Name_Moshtari] [nvarchar](50) NULL,
[Sharh] [nvarchar](400) NULL,
[Tedad] [nvarchar](50) NULL,
[Takhfif] [nvarchar](50) NULL,
[PriceVahed] [nvarchar](50) NULL,
[PasAzTakhfif] [nvarchar](50) NULL,
[Bedehkar] [decimal](18, 0) NULL,
[Bostankar] [decimal](18, 0) NULL,
[Tarikh] [date] NULL,
CONSTRAINT [PK_tbl_Kalaei] PRIMARY KEY CLUSTERED
(
[Id_Kalaei] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
بعد آیا من کد شما رو توی استور پروسیجر بریزم؟
من اونا رو سمت سی شارپ نوشتم.
ممنونم بیشتر منو راهنمایی کنید.
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکوردهای قبل محاسبه شود)
شرطها(فیلتر) چی هست؟
در ضمن
اگر جدولی برای مشخصات مشتری دارید، نیازی به نام مشتری در tbl_Kalaei ندارید و میتونید با کدمشتری رابطه برقرار کنید.
اگر در یک روز چند رکورد برای یک شخص بخواهید ثبت کنید نیاز دارید ستون تاریخ رو از نوع Datetime2 بگیرید.(تاریخ به تنهایی کافی نیست)
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکوردهای قبل محاسبه شود)
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
شرطها(فیلتر) چی هست؟
در ضمن
اگر جدولی برای مشخصات مشتری دارید، نیازی به نام مشتری در tbl_Kalaei ندارید و میتونید با کدمشتری رابطه برقرار کنید.
اگر در یک روز چند رکورد برای یک شخص بخواهید ثبت کنید نیاز دارید ستون تاریخ رو از نوع Datetime2 بگیرید.(تاریخ به تنهایی کافی نیست)
خب من یه شرط گذاشتم به این صورت
.Where(c1 => c1.Cells["نام مشتری"].Value.ToString().Equals(c.Cells["نام مشتری"].Value.ToString()))
حالا شما باید اینو بر اساس کاری که میخواین تغییر بدین[/QUOTE]
دوست عزیز اگه من اینطور بنویسم
.Where(c1 => c1.Cells["شرح"].Value.ToString().Equals(c.Cells["شرح"].Value.ToString()))
هیچ کدوم از سلول های شرح مشابه نیست.که این عمل رو انجام بده.
در ضمن من میخوام سلول هایی که نوشته شده کالای :
نادیده گرفته بشه.
و ستون مانده حساب برای اینا خالی باشن.
مانند تصویر زیر:
ضمیمه 141674
dataGridView1.Rows.Cast<DataGridViewRow>().Where(c 2 => !c2.Cells[3].Value.ToString().StartsWith("کالای")) .Where(c3 => !c3.Cells[3].Value.ToString().StartsWith("تخفیف"))
اگر در یک روز چند رکورد برای یک شخص بخواهید ثبت کنید نیاز دارید ستون تاریخ رو از نوع Datetime2 بگیرید.(تاریخ به تنهایی کافی نیست) دلیل این رو میفرمایید؟؟
ممنونم که وقت میزارید
-
نقل قول: صورت حساب بدهی یا طلب مشتری (هر رکورد نسبت به رکوردهای قبل محاسبه شود)
کد زیر رو در تست کنید
select
C.* ,
(CASE WHEN Mande>0 THEN N'بدهکار'
WHEN Mande<0 THEN N'طلبکار'
ELSE N'تسویه'
END) as Vaziat
from
(
select
B.* ,
(B.RunningTotalBedehkari - B.RunningTotalBestankari) as Mande
From
(
SELECT
A.*,
RunningTotalBedehkari = (SELECT SUM(Bedehkar)
FROM dbo.tbl_Kalaei
WHERE tbl_Kalaei.Kod_Moshtari = A.Kod_Moshtari
AND tbl_Kalaei.Tarikh <= A.Tarikh),
RunningTotalBestankari = (SELECT SUM(Bostankar)
FROM dbo.tbl_Kalaei
WHERE tbl_Kalaei.Kod_Moshtari = A.Kod_Moshtari
AND tbl_Kalaei.Tarikh <= A.Tarikh)
FROM tbl_Kalaei AS A
WHERE A.Sharh not like N'کالای :%'
) AS B
) C
ORDER BY C.Kod_Moshtari , C.Tarikh
اینکه گفتم زمان رو هم ذخیره کنید برای اینکه در سلکت داخلی برحسب تاریخ و زمان میاد جمع رو برای رکوردهای قبل انجام میده. حالا اگر فقط تاریخ باشه، جمع ممکن هست اشتباه بشه. البته این به منطقی که پیاده کردید برمیگرده که آیا در یک روز برای یک شخص چند رکورد ذخیره میشه یا نه؟