• 1397/07/20

محاسبه مانده بدهکار و مانده بستانکار در تراز آزمایشی :

با سلام خدمت استاد عزیزم

من یک لیست دارم که ستون گردش بدهکار و گردش بستانکار رو داره (Bed=گردش بدهکار،Bes=گردش بستانکار)

دو تا ستون دیگه دارم به اسم مانده بدهکار و مانده بستانکار (MandehBed=مانده بدهکار،MandehBes=مانده بستانکار)

می خوام با یک حلقه foreach در هر ردیف مانده بدهکار و مانده بستانکار را حساب کنم و بریزم تو ستون های مانده بدهکار و مانده بستانکار

مشکلی که دارم اینه که داخل حلقه دو تا ستون رو به دست میارم ولی نمی دونم به جه صورت باید دو تا ستون لیستم رو آپدیت بکنم و مقادیر به دست آمده رو بریزم داخل این دو تا ستون ؟ 

خیلی سرچ کردم نتونستم به راه حل برسم . ممنون میشم راهنمایی بفرمائید .

        private void BindGridTaraz()
        {
            using (UnitOfWork db = new UnitOfWork())
            {
                var vdetail = db.recPayRipository.GetAllAccVoucherDetail();
                var Account = db.accountRipository.GetAllAccounts();
                var Vtype = db.accountRipository.GetAllAccountType();
                var VoucherBalance = (from v in vdetail
                                      join a in Account on v.AccountId equals a.AccountId
                                      join t in Vtype on a.AccountType equals t.AccountTypeId
                                      group v by a.AccountDesc into g
                                      select new
                                      {
                                          AccountDesc = g.Key,
                                          AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
                                          Bed = g.Select(v => v.Bed).Sum(),
                                          Bes = g.Select(v => v.Bes).Sum(),
                                          MandehBed=0,
                                          MandehBes= 0
                                      }).ToList();
 
                long mandehBed = 0;
                long mandehBes = 0;
                foreach(var a in VoucherBalance)
                {
                    if(a.Bed>a.Bes)
                    {
                        mandehBed = a.Bed - a.Bes;
                        mandehBes = 0;
                    }
                    else
                    {
                        mandehBes = a.Bes - a.Bed;
                        mandehBed = 0;
                    }
                  

                }

                dgvPersonReport.DataSource = VoucherBalance;



                //GridEXRow[] rows = dgvPersonReport.GetRows();
                //long Mandeh = 0;
                //foreach (GridEXRow row in rows)
                //{
                //    int ID = int.Parse(row.Cells[0].Value.ToString());
                //    var rowvoucherDetail = (from v in VoucherBalance
                //                            join a in Account on v.AccountId equals a.AccountId
                //                            where (v.AccountId == ID)
                //                            select new
                //                            {
                //                                AccountId = v.AccountId,
                //                                AccountType = a.AccountType
                //                            }).SingleOrDefault();
                //    if (rowvoucherDetail.AccountType == 1 || rowvoucherDetail.AccountType == 4)
                //    {
                //        Mandeh = (int.Parse(row.Cells[2].Value.ToString())) - (int.Parse(row.Cells[3].Value.ToString()));
                //        if (Mandeh > 0)
                //        {

                //            row.Cells[4].Text = Mandeh.ToString("#,##");

                //        }
                //        else
                //        {
                //            row.Cells[5].Text = Mandeh.ToString("#,##");
                //        }

                //    }
                //    else
                //    {
                //        int rr = row.RowIndex;
                //        Mandeh = (int.Parse(row.Cells[3].Value.ToString())) - (int.Parse(row.Cells[2].Value.ToString()));
                //        if (Mandeh > 0)
                //        {
                //            row.Cells[5].Text = Mandeh.ToString("#,##");
                //        }
                //        else
                //        {
                //            row.Cells[4].Text = Mandeh.ToString("#,##");
                //        }
                //  }

                //}
            }
        }

 

  • 1397/07/21
  • ساعت 07:40

سلام

منظورتون رو متوجه نمیشم

در دوره من مانده حساب رو بدست آوردم از همون مثال استفاده کنید


  • 1397/07/21
  • ساعت 11:53

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


  • 1397/07/22
  • ساعت 20:08

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


  • 1397/07/22
  • ساعت 21:49

متوجه شدم

نمیفهمم مشکل شما کجاست

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


  • 1397/07/22
  • ساعت 23:01
                var VoucherBalance = (from v in vdetail
                                      join a in Account on v.AccountId equals a.AccountId
                                      join t in Vtype on a.AccountType equals t.AccountTypeId
                                      group v by a.AccountDesc into g
                                      select new
                                      {
                                          AccountDesc = g.Key,
                                          AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
                                          Bed = g.Select(v => v.Bed).Sum(),
                                          Bes = g.Select(v => v.Bes).Sum(),
                                          MandehBed=0,
                                          MandehBes= 0
                                      }).ToList();
 
                long remainbed = 0;
                long remainbes = 0;
                foreach(var a in VoucherBalance)
                {
                    if(a.Bed>a.Bes)
                    {
                        remainbed = a.Bed - a.Bes;
                        remainbes = 0;
                    }
                    else
                    {
                        remainbes = a.Bes - a.Bed;
                        remainbed = 0;
                    }

                    a.MandehBed = remainbed;
                    a.MandehBes = remainbes;
                }

دو خط آخر خطا داره تصویر خطا شو میزارم براتون این زیر


  • 1397/07/23
  • ساعت 07:36

باید convert کنید تو long


  • 1397/07/24
  • ساعت 06:20

سلام استاد با تشکر از پاسخ گویی شما 

من دو تا پروپرتی mandehBedو mandeBes رو cast کردم به long ولی بازم درست نشد . 

شاید منظور شما رو خوب متوجه نشدم ؟

تو سایت استک فلو خوندم نوشته بود تو حلقه فورایچ نمیشه لیست ها رو آپدیت کرد . اگر بخواهین آپدیت کنین باید از حلقه فور استفاده کنین . اگه بخوام از حلقه فور استفاده کنم به چه صورتی باید استفاده بکنم .

var VoucherBalance = (from v in vdetail
                                      join a in Account on v.AccountId equals a.AccountId
                                      join t in Vtype on a.AccountType equals t.AccountTypeId
                                      group v by a.AccountDesc into g
                                      select new
                                      {
                                          AccountDesc = g.Key,
                                          AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
                                          Bed = g.Select(v => v.Bed).Sum(),
                                          Bes = g.Select(v => v.Bes).Sum(),
                                          MandehBed=(long)0,
                                          MandehBes= (long)0
                                      }).ToList();
 
                long remainbed = 0;
                long remainbes = 0;
                foreach(var a in VoucherBalance)
                {
                    if(a.Bed>a.Bes)
                    {
                        remainbed = a.Bed - a.Bes;
                        remainbes = 0;
                    }
                    else
                    {
                        remainbes = a.Bes - a.Bed;
                        remainbed = 0;
                    }

                    a.MandehBed = remainbed;
                    a.MandehBes = remainbes;
                }

 


  • 1397/07/24
  • ساعت 08:28

باید index عنصر مورد نظر را بدست بیارید و اون رو بروز کنید 

با متد FindIndex میتونید بدست بیارید 


  • 1397/07/24
  • ساعت 23:42

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

 var VoucherBalance = (from v in vdetail
                                      join a in Account on v.AccountId equals a.AccountId
                                      join t in Vtype on a.AccountType equals t.AccountTypeId
                                      group v by a.AccountDesc into g                                      
                                      select new
                                      {
                                          AccountDesc = g.Key,
                                          AccountId = g.Select(v => v.AccountId).FirstOrDefault(),
                                          Bed = g.Select(v => v.Bed).Sum(),
                                          Bes = g.Select(v => v.Bes).Sum(),
                                          MandehBed=(long)0,
                                          MandehBes= (long)0
                                      }).AsEnumerable().ToList();
 
                long remainbed = 0;
                long remainbes = 0;

                for (int i = 0; i < VoucherBalance.Count; i++)
                {
                    var mybalance = VoucherBalance.ElementAt(i);
                  
                    if (mybalance.Bed > mybalance.Bes)
                    {
                        remainbed = mybalance.Bed - mybalance.Bes;
                        remainbes = 0;
                    }
                    else
                    {
                        remainbes = mybalance.Bes - mybalance.Bed;
                        remainbed = 0;
                    }

                    List<BalanceReportViewModel> balance = new List<BalanceReportViewModel>();
                    balance.Add(new BalanceReportViewModel()
                    {
                        AccountDesc = mybalance.AccountDesc,
                        AccountId = mybalance.AccountId,
                        Bed = mybalance.Bed,
                        Bes = mybalance.Bes,
                        MandehBed =remainbed,
                        MandehBes =remainbes

                    });

                    dgvPersonReport.DataSource = balance;

                }

 


logo-samandehi