winform怎么实现财务上凭证录入和打印

现如今存在的财务软件层出不穷,怎么样让自己的业务系统与财务系统相结合,往往是很多公司头痛的问题。大多数公司也没有这个能力都去开发一套属于自己的财务软件,所以只有对接像金蝶用友这类的财务软件,花费大量的人力物力在两套系统中切换,从而开发属于自己的一套业务和财务一体化的系统迫在眉睫,去解决这些痛点。

 如何去实现winform凭证

 用C#语言开发,CS框架,DevExpress控件,实现出来的效果如下:

winform怎么实现财务上凭证录入和打印

 会计科目支持代码、科目和助记码的模糊搜索,可以进行快速找到相应的科目。同金蝶和用友专业的财务软件媲美了,功能齐全,操作方便简单。

winform怎么实现财务上凭证录入和打印

录入凭证之前先对科目进行定义,科目都是财政部相对应的科目:

winform怎么实现财务上凭证录入和打印

 

winform怎么实现财务上凭证录入和打印

录入简单的凭证,进行测试,相对简单方便。

winform怎么实现财务上凭证录入和打印

 保存完进行打印打印出来就是专业的会计凭证了,凭证的打印是用时锐浪进行实现的。同时支持A4纸张和套打都可以。

winform怎么实现财务上凭证录入和打印

 锐浪设计文件如下,把相应的字段对应基本上就大功告成了。

winform怎么实现财务上凭证录入和打印

 如何用代码去实现凭证界面的开发

其实说到用代码去实现凭证这个界面的开发还是挺有难度的,CS不必BS那么容易去布局,这个界面实现起来没得几千行代码也是搞不定,难点还是在借方和贷方金额这里,整个界面下面是一张背景图。

借方和贷方金额实现代码:

public void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e, GridControl showgrid, GridView gridView1) { try { int width = Math.Max(e.Bounds.Width, e.Column.Width); int spacewidth = width / 10; //空格宽度 int intlen = 8;//整数位数 int fe = 2; //小数位数 string format = string.Empty; GridControl gridControl = showgrid; //获取小数位 if (e.Column.ColumnEdit != null) { //format = (e.Column.ColumnEdit.DisplayFormat as FormatInfo).GetDisplayText(e.CellValue); format = e.CellValue == null || e.CellValue == DBNull.Value ? "" : e.CellValue.ToString(); } else { //format = (e.Column.DisplayFormat as FormatInfo).GetDisplayText(e.CellValue); format = e.CellValue == null || e.CellValue == DBNull.Value ? "" : e.CellValue.ToString(); } //10个整数位,2个小数位 format = Convert.ToDecimal(format == "" ? "0" : format).ToString("N2"); format = format.Replace(",", ""); fe = format.Substring(format.IndexOf('.') + 1).Length; for (int i = 0; i < intlen + fe; i++) { if (i == 1 || i == 4) { e.Graphics.DrawLine(Pens.Blue, e.Bounds.Left + (i + 1) * spacewidth - 1, 0, e.Bounds.Left + (i + 1) * spacewidth - 1, gridControl.Height); } else if (i == 7) { e.Graphics.DrawLine(Pens.Red, e.Bounds.Left + (i + 1) * spacewidth - 1, 0, e.Bounds.Left + (i + 1) * spacewidth - 1, gridControl.Height); } else if (i == intlen + fe - 1) { e.Graphics.DrawLine(new Pen(Color.Black, 1), e.Bounds.Left + (i + 1) * spacewidth - 1, 0, e.Bounds.Left + (i + 1) * spacewidth - 1, gridControl.Height); } else { e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + (i + 1) * spacewidth - 1, 0, e.Bounds.Left + (i + 1) * spacewidth - 1, gridControl.Height); } } var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; //decimal v = e.CellValue == null || e.CellValue == DBNull.Value || e.CellValue.ToString() == "" ? 0 : Convert.ToDecimal(e.CellValue); string s_int = format.Substring(0, format.IndexOf('.')); //((int)v).ToString(); //两位小数 string s_dec = format.ToString().Substring(format.ToString().IndexOf('.') + 1, fe); string s_value = s_int + s_dec; int a = 1; for (int i = s_value.Length - 1; i >= 0; i--) { //string ch = s_value[s_value.Length -i- 1].ToString(); string ch = s_value[i].ToString(); if (s_int == "0" && s_dec == "00") ch = ""; int x = e.Bounds.Left + (intlen + fe - a) * spacewidth; int y = e.Bounds.Top; var rect = new RectangleF(x, y, spacewidth, e.Bounds.Height); e.Graphics.DrawString(ch, e.Column.AppearanceCell.Font, Brushes.Black, rect, sf); a++; } e.Handled = true; } catch (Exception ex) { MsgBox.ShowError("输入金额过大!" + ex.Message); gridView1.SetRowCellValue(e.RowHandle, e.Column.FieldName, DBNull.Value); gridView1.FocusedColumn = e.Column; gridView1.ShowEditor(); } } public void gridView1_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e, GridControl showgrid, GridView gridView1, string type) { try { Pen penred = new Pen(Color.Red); Pen penblue = new Pen(Color.Blue); Pen pengray = new Pen(Color.LightGray); Pen fontpen = new Pen(Color.Black); int width = e.Bounds.Width; int spacewidth = width / 10; //计算格子宽度;一起10位数:8位整数 2位小数 e.Painter.DrawObject(e.Info); e.Graphics.DrawLine(fontpen, e.Bounds.X, e.Bounds.Y + e.Bounds.Height / 2, e.Bounds.X + width, e.Bounds.Y + e.Bounds.Height / 2); e.Graphics.DrawString(type, e.Appearance.Font, fontpen.Brush, (type == "金额" ? e.Bounds.X + width / 4 + 18 : e.Bounds.X + width / 4 + 5), e.Bounds.Y); string u = "千百十万千百十元角分"; string ch = ""; Pen temppen = pengray; Font font = new Font(e.Appearance.Font.FontFamily, (float)7.5); for (int i = 0; i < u.Length; i++) { ch = u[i].ToString(); if (i == 1 || i == 4) { temppen = penblue; } else if (i == 7) { temppen = penred; } else if (i == 9) { temppen = new Pen(Color.Black); } else { temppen = pengray; } e.Graphics.DrawString(ch, font, fontpen.Brush, e.Bounds.X + i * spacewidth, e.Bounds.Y + e.Bounds.Height / 2 + 1); e.Graphics.DrawLine(temppen, e.Bounds.X + (i + 1) * spacewidth, e.Bounds.Y + e.Bounds.Height / 2, e.Bounds.X + (i + 1) * spacewidth, e.Bounds.Y + e.Bounds.Height); } e.Handled = true; } catch (Exception) { return; ; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppspx.html