سایت خبری سید محمد امیری

سایت خبری سید محمد امیری

پایگاه اطلاع رسانی و خبری Seyed Mohammad Amiri

درست کردن فاکتور فروش سفارشی به وسیله C#.NET

انتشار : 1398/03/12

با استفاده از این روش می توان فاکتور فروش سفارشی برای برنامه های تحت ویندوز طراحی نمود و بهترین عملکرد را در ثبت و پیدا کردن کالا ها جهت فروش داشت.

فاکتور فروش سفارشی

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

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

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

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

Sale_Code SaleRow_Tedad SaleRow_Price kala_Name SaleRow_Code
جدول انبار شامل فیلد های زیر می باشد.
 
kala_SalePrice Kala_BuyPrice Kala_Tedad kala_Name Warehouse_Code

پس از ساخت جداول آنها را به برنامه کانکت می کنیم و در فرم فاکتور فروش ، گرید ویو مورد نظر را به فرم اضافه می کنیم و ستون های خود را نیز می سازیم( ردیف-شرح کالا-تعداد-قیمت فروش-قابل پرداخت-حذف )

یک فرم دیگر به نام انبار می سازیم و در گرید ویو این ستون ها را اضافه می کنیم(کد کالا-نام کالا-موجودی-قیمت خرید- قیمت فروش ).

گرید ویو فروش را به dgvsale و گرید ویو انبار را به dgvwarehouse تغییر نام میدهیم.حالا کدهای زیر را در هر رویداد می نویسیم.

 

private void dgvsale_CellClick(object sender, DataGridViewCellEventArgs e)

   {

            if (e.ColumnIndex == 1)

            {

                WareHouseFrm frmware = new WareHouseFrm();

                if (frmware.ShowDialog() == DialogResult.OK)

                {

                    dgvsale.CurrentRow.Cells[1].Value = frmware.kalaName;

                    dgvsale.CurrentRow.Cells[5].Value = frmware.tedad;

                    dgvsale.CurrentRow.Cells[3].Value = frmware.fi;

                }

            }

    }

شماره اندیس ستون ها از صفر شروع میشود و زمانی که در ستون نام کالا ( دوم ) کلیک کردیم فرم انبار باز میشود و بعد از تایید( دبل کلیک در فرم انبار) اطلاعات در یکسری متغیر ها ذخیره میشوند و سپس به سلول های گرید ویو انتقال می دهیم.

در فرم انبار نیز کد های زیر را می نویسیم:

در ابتدا باید در WareHouseFrm_Load گرید ویو را از با استفاده از DataSource پر کنیم و در ادامه کد زیر را می نویسیم.

نمونه کد پر کردن گرید ویو:

 

private void WareHouseFrm_Load(object sender, EventArgs e)

}

using (UnitOfWork db = new UnitOfWork())

            {

                dgvwarehouse.AutoGenerateColumns = false;

                dgvwarehouse.DataSource = db.WareHouseRepository.Get();

 

            }

{

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

جهت استفاده از آموزش رایگان C#.NET و الگوی  Repository می توانید از سایت تاپ لرن استفاده کنید.

 

 

  Private void dgvwarehouse_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

        {

            kalaName = dgvwarehouse.CurrentRow.Cells[1].Value.ToString();

            tedad= dgvwarehouse.CurrentRow.Cells[2].Value.ToString();

            fi= dgvwarehouse.CurrentRow.Cells[4].Value.ToString();

            DialogResult = DialogResult.OK;

            this.Close();

        }

در رویداد  dgvwarehouse_CellDoubleClick دبل کلیک گرید ویو انبار کد های فوق را می نویسیم. در ابتدا نام کالا و سپس موجودی انبار و قیمت فروش را در متغیر پابلیک که از قبل تعریف شده انتقال می دهیم و متغیر DialogResult را با ok مقدار دهی می کنیم و در انتها فرم جاری ( انبار ) را میبندیم و با توجه به کدهای نوشته شده در dgvsale_CellClick این کالا به همراه مشخصات در فاکتور فروش درج می گردد.

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

 

private void dgvsale_CellEndEdit(object sender, DataGridViewCellEventArgs e)

        {

            if (e.ColumnIndex == 2)

            {

 dgvsale.CurrentRow.Cells[4].Value = int.Parse(dgvsale.CurrentRow.Cells[3].Value.ToString()) * int.Parse(dgvsale.CurrentRow.Cells[2].Value.ToString());

 

            }

        }

در اینجا به محض خروج از ستون سوم تعداد را در قیمت فروش ضرب می کند و مبلغ  قابل پرداخت را در ستون مربوطه وارد می نماید و با زدن دکمه tab و رسیدن به آخرین ستون به سطر بعدی می رود و ادامه میتوانید با نوشتن کد های مربوط به ثبت این قیمت را به پایان ببریم.

برای زیبایی کار شماره ردیف خودکار برای این قسمت در نظر گرفته ایم.

 

private void dgvsale_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

        {

            // وارد کردن شماره فاکتور

            dgvsale.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;

        }

 

همچنین برای اینکه وقتی با کیبورد وارد سلول نام کالا شدیم عملکردی مشابه با کلیک کردن داشته باشیم کد های dgvsale_CellClick را در رویداد dgvsale_CellEnter وارد می کنیم همانند شکل زیر:

  private void dgvsale_CellEnter(object sender, DataGridViewCellEventArgs e)

  {

            if (e.ColumnIndex == 1)

            {

                WareHouseFrm frmware = new WareHouseFrm();

                if (frmware.ShowDialog() == DialogResult.OK)

                {

                    dgvsale.CurrentRow.Cells[1].Value = frmware.kalaName;

                    dgvsale.CurrentRow.Cells[3].Value = frmware.fi;

                    dgvsale.CurrentRow.Cells[5].Value = frmware.tedad;

                }

            }

    }

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

private void dgvsale_DataError(object sender, DataGridViewDataErrorEventArgs e(

{

            e.Cancel = true;

}

 

و در پایان همه کد های دو فرم به شکل زیر می باشد:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using TestGridViewAnbar.Context;

 

namespace TestGridViewAnbar

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void dgvsale_CellClick(object sender, DataGridViewCellEventArgs e)

        {

            if (e.ColumnIndex == 1)

            {

                WareHouseFrm frmware = new WareHouseFrm();

                if (frmware.ShowDialog() == DialogResult.OK)

                {

                    dgvsale.CurrentRow.Cells[1].Value = frmware.kalaName;

                    dgvsale.CurrentRow.Cells[2].Value = frmware.tedad;

                    dgvsale.CurrentRow.Cells[3].Value = frmware.fi;

                }

            }

            //Delete Button

            if (e.ColumnIndex == 6)

            {

                dgvsale.Rows.Remove(dgvsale.CurrentRow);

 

            }

        }

 

        private void dgvsale_DataError(object sender, DataGridViewDataErrorEventArgs e)

        {

            e.Cancel = true;

        }

 

        private void dgvsale_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

        {

            // وارد کردن شماره ردیف در فاکتور

            dgvsale.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;

        }

 

        private void dgvsale_CellEnter(object sender, DataGridViewCellEventArgs e)

        {

            if (e.ColumnIndex == 1)

            {

                WareHouseFrm frmware = new WareHouseFrm();

                if (frmware.ShowDialog() == DialogResult.OK)

                {

                    dgvsale.CurrentRow.Cells[1].Value = frmware.kalaName;

                    dgvsale.CurrentRow.Cells[3].Value = frmware.fi;

                    dgvsale.CurrentRow.Cells[5].Value = frmware.tedad;

                }

            }

        }

 

        private void dgvsale_CellEndEdit(object sender, DataGridViewCellEventArgs e)

        {

            if (e.ColumnIndex == 2)

            {

                dgvsale.CurrentRow.Cells[4].Value = int.Parse(dgvsale.CurrentRow.Cells[3].Value.ToString()) * int.Parse(dgvsale.CurrentRow.Cells[2].Value.ToString());

 

            }

        }

    }

}

کد های فرم انبار نیز به صورت زیر می باشد:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using TestGridViewAnbar.Context;

 

namespace TestGridViewAnbar

{

    public partial class WareHouseFrm : Form

    {

        public string kalaName, tedad, fi;

        public WareHouseFrm()

        {

            InitializeComponent();

        }

        void BindGrid()

        {

            using (UnitOfWork db = new UnitOfWork())

            {

                dgvwarehouse.AutoGenerateColumns = false;

                dgvwarehouse.DataSource = db.WareHouseRepository.Get();

 

            }

        }

        private void WareHouseFrm_Load(object sender, EventArgs e)

        {

            BindGrid();

           

        }

 

        private void dgvwarehouse_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

        {

            kalaName = dgvwarehouse.CurrentRow.Cells[1].Value.ToString();

            tedad= dgvwarehouse.CurrentRow.Cells[2].Value.ToString();

            fi= dgvwarehouse.CurrentRow.Cells[3].Value.ToString();

            DialogResult = DialogResult.OK;

            this.Close();

        }

    }

}

فایل های ضمیمه


دیدگاه کاربران
1 دیدگاه











  • پاسخ
    ارسال شده از : حسین
    در تاریخ : 1398/03/12

    با سلام ممنون از آموزش خوبتون