用友T6-ERP系统技术解析(三)销售发货单(一)
2015-06-25 21:59
399 查看
用友T6-ERP系统技术解析(三)销售发货单(一)
销售发货单这块是根据已通过审核的销售订单来新增一张发货单,当发货单信息错误时可以修改,或者对发货单进行删除;当经过详细的检验后,可以对发货单进行审核,一旦审核后便不能再对发货单进行修改,删除操作;还可以根据条件查询来查询出你想要的发货单信息如图(2.4-8)和图(2.4-9);
图(2.4-8)
图(2.4-9)
图(2.5-1)
表1dbo.SalesDeliveryTable
表2
dbo.SalesDeliveryTable
表3 dbo.BankTable
表4dbo.TermsOfPaymentTable
表5dbo.SalerPaperTable
新增功能的实现:
首先,在界面上看的所有控件的启用都是由一个逻辑来控制,表格是禁止编辑的,当我们点
击新增按钮时,就会弹出一个可根据条件查询的销售订单的界面,销售订单是已通过审核的销售订单 如图(2.5-2),选择你需要的销售订单,然后双击你选择的销售订单信息,这样就会自动将你选择的销售订单信息和该销售订单的明细信息赋值到销售发货单的界面上 如图(2.5-3)和图(2.5-4),根据选中的销售订单赋值的信息在销售发货单的界面上是不能修改的,然后输入正确的销售发货单信息 如图(2.5-5),点击保存,就会自动生成一张销售发货单,界面上的控件的启用就会进入一个逻辑的控制状态
如图(2.5-6)。
图(2.5-2)
第一步:界面层代码
图(2.5-3)
图(2.5-4)
第一步:数据库存储过程代码:
第二步:服务端代码:
第三步:界面层代码:
图(2.5-5)
图(2.5-6)
第一步:数据库存储过程
第二步:服务端代码
第三步:界面层代码
销售发货单这块是根据已通过审核的销售订单来新增一张发货单,当发货单信息错误时可以修改,或者对发货单进行删除;当经过详细的检验后,可以对发货单进行审核,一旦审核后便不能再对发货单进行修改,删除操作;还可以根据条件查询来查询出你想要的发货单信息如图(2.4-8)和图(2.4-9);
图(2.4-8)
图(2.4-9)
图(2.5-1)
表1dbo.SalesDeliveryTable
列名 | 数据类型 | 主键/外键 | 说明 |
SalesDeliveryID | int | 主键 | 销售发货ID |
TheSalesOrderID | int | 外键 | 销售订单ID |
DocumentID | int | 外键 | 单据ID |
TheDeliveryWay | nchar (10) | 发货方式 | |
TheDeliveryAddress | nchar (10) | 发货地址 | |
SalesInvoiceID | int | 外键 | 销售发票ID |
TheOperatorID_Salesman | int | 外键 | 操作员ID_业务员 |
Note | nchar (10) | 备注 |
dbo.SalesDeliveryTable
列名 | 数据类型 | 主键/外键 | 说明 |
SalesDeliveryID | int | 主键 | 销售发货ID |
TheSalesOrderID | int | 外键 | 销售订单ID |
DocumentID | int | 外键 | 单据ID |
TheDeliveryWay | nchar (10) | 发货方式 | |
TheDeliveryAddress | nchar (10) | 发货地址 | |
SalesInvoiceID | int | 外键 | 销售发票ID |
TheOperatorID_Salesman | int | 外键 | 操作员ID_业务员 |
Note | nchar (10) | 备注 | |
InAndOutOfInventoryRecordID | int | 外键 | 出入库存记录ID |
列名 | 数据类型 | 主键/外键 | 说明 |
BankID | Int | 主键 | 银行ID |
BankName | Nchar(20) | 银行名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
TermsOfPaymentID | Int | 主键 | 付款条件ID |
TermsOfPaymentName | Nchar(20) | 付款条件名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
SalesInvoice ID | Int | 主键 | 销售发票ID |
Document ID | Int | 外键 | 单据ID |
TheSalesOrder ID | Int | 外键 | 销售订单ID |
ReviewWhether | Bit | 审核否 | |
note | Nchar(10) | 备注 | |
SalesDelivery ID | Int | 外键 | 销售发货ID |
BankID | Int | 外键 | 银行ID |
EFFECTIVENO | Bit | 有效否 |
首先,在界面上看的所有控件的启用都是由一个逻辑来控制,表格是禁止编辑的,当我们点
击新增按钮时,就会弹出一个可根据条件查询的销售订单的界面,销售订单是已通过审核的销售订单 如图(2.5-2),选择你需要的销售订单,然后双击你选择的销售订单信息,这样就会自动将你选择的销售订单信息和该销售订单的明细信息赋值到销售发货单的界面上 如图(2.5-3)和图(2.5-4),根据选中的销售订单赋值的信息在销售发货单的界面上是不能修改的,然后输入正确的销售发货单信息 如图(2.5-5),点击保存,就会自动生成一张销售发货单,界面上的控件的启用就会进入一个逻辑的控制状态
如图(2.5-6)。
图(2.5-2)
第一步:界面层代码
private void tlsbIncrease_Click_1(object sender, EventArgs e) { pnlSalesOrderSelect.Visible = true;//显示装有销售订单的DGV容器 ltxtSentToTheAddress.Enabled = true;//启用发往地址 cboDeliveryWay.Enabled = true;//启用发运方式 ltxtNote.Enabled = true;//启用备注 for (int intCount = 0; intCount < dgvSalesInvoices.Rows.Count - 1; intCount++)//遍历dgv { dgvSalesInvoices.Rows.RemoveAt(intCount);//移除DGV的行 intCount--; } tlsbPreview.Enabled = false;//不启用预览 tlsbPrint.Enabled = false;//不启用打印 picExamineAndVerify.Visible = false;//不启用审核图片 tlsbDelete.Enabled = false;//不启用删除按钮 tlsbExamineAndVerify.Enabled = false;//不启用审核 tlsbFirst.Enabled = false;//不启用首张 tlsbLast.Enabled = false;//不启用上张 tlsbNextPage.Enabled = false;//不启用下张 tlsbFinal.Enabled = false;//不启用末张 tlsbRefresh.Enabled = false;//不启用查询 bolNewlyIncreased = true; //标识新增 tlsbIncrease.Enabled = false;//新增按钮不启用 tlsbSave.Enabled = true; //保存按钮启用 tlsbAbandon.Enabled = true;// 放弃按钮启用 tlsbModification.Enabled = false;//修改按钮不启用 foreach (Control Control in pnlMain.Controls)//遍历pnlMain里面的控件,是名称为Control { if (Control is LineTextBox.LineTextBox) { LineTextBox.LineTextBox LineTextBox = Control as LineTextBox.LineTextBox; LineTextBox.Text = "";//清空ltxt // LineTextBox.Enabled = true; //不能编辑 } else { if (Control is ComboBox) { ComboBox comboBox = Control as ComboBox; // comboBox.Enabled = true; //不能编辑 } } } }
图(2.5-3)
图(2.5-4)
第一步:数据库存储过程代码:
if(@Type='frm_SalesInvoices_BingDingdgvSalesOrderList')--绑定选择订单明细DGV begin SELECT SalesOrderSheet.SalesOrderDetailID AS 销售订单明细ID, SalesOrderSheet.TheInventoryID AS 存货ID, TheInventoryTable.ProductID AS 产品ID, TheProductTable.ProductCode AS 产品编码, TheProductTable.ProductName AS 产品名称, TheProductTable.ProductSpecificationsID AS 产品规格型号ID, ProductSpecificationTable.ProductSpecificationModelName AS 产品规格型号名称, TheProductTable.TheMeasuringUnitID AS 产品计量单位ID, ProductUnitsTable.ProductMeasuringUnitName AS 产品计量单位名称, TheProductTable.TheUnitPrice AS 单价, SalesOrderSheet.TheSalesOrderID AS 销售订单ID, SalesOrderSheet.Amount AS 金额, SalesOrderSheet.Quantity AS 数量, TheProductTable.TaxPrice AS 含税单价 FROM SalesOrderSheet INNER JOIN TheInventoryTable ON SalesOrderSheet.TheInventoryID = TheInventoryTable.TheInventoryID INNER JOIN TheProductTable ON TheInventoryTable.ProductID = TheProductTable.ProductID INNER JOIN ProductSpecificationTable ON TheProductTable.ProductSpecificationsID = ProductSpecificationTable.ProductSpecificationsID INNER JOIN ProductUnitsTable ON TheProductTable.TheMeasuringUnitID = ProductUnitsTable.TheMeasuringUnitID where SalesOrderSheet.TheSalesOrderID=@TheSalesOrderID--根据销售订单ID查询 end
第二步:服务端代码:
[OperationContract] public DataSet frm_SalesInvoices_BingDingdgvSalesOrderList(int TheSalesOrderID)//绑定选择订单明细DGV { SqlParameter[] SQlCMDpas = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@TheSalesOrderID", SqlDbType.Int), //销售订单ID }; SQlCMDpas[0].Value = "frm_SalesInvoices_BingDingdgvSalesOrderList"; SQlCMDpas[1].Value = TheSalesOrderID; DataTable dt = myDALMethod.QueryDataTable("销售管理_frm_SalesInvoices", SQlCMDpas); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; }
第三步:界面层代码:
private void dgvSelectOrder_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { //双击dgv传值 if(bolNewlyIncreased==true)//标识为新增状态时 { foreach (DataGridViewRow dvgr in dgvSalesInvoices.Rows) { if (dvgr.Cells["销售订单明细ID"].Value != null)//dgv销售订单明细ID不为空 { for (int intCount = 0; intCount < dgvSalesInvoices.Rows.Count - 1; intCount++)//遍历dgv { dgvSalesInvoices.Rows.RemoveAt(intCount);//移除DGV的行 intCount--;//减去行数 } } } dtSalesOrderList = myfrm_SalesInvoicesClient.frm_SalesInvoices_BingDingdgvSalesOrderList( Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["销售订单ID1"].Value)).Tables[0];//获取数据源 for (int intRowsCount = 0; intRowsCount < dtSalesOrderList.Rows.Count; intRowsCount++)//遍历表 { dgvSalesInvoices.Rows.Add();//dgv添加一行 //赋值 dgvSalesInvoices.Rows[intRowsCount].Cells["存货编码"].Value = dtSalesOrderList.Rows[intRowsCount]["产品编码"].ToString().Trim();//将表dtSalesOrderList中产品编码赋值给dgvSalesInvoices中的存货编码 dgvSalesInvoices.Rows[intRowsCount].Cells["存货名称"].Value = dtSalesOrderList.Rows[intRowsCount]["产品名称"].ToString().Trim();//将表dtSalesOrderList中产品名称赋值给dgvSalesInvoices中的存货名称 dgvSalesInvoices.Rows[intRowsCount].Cells["规格型号"].Value = dtSalesOrderList.Rows[intRowsCount]["产品规格型号名称"].ToString().Trim();//将表dtSalesOrderList中产品规格型号名称赋值给dgvSalesInvoices中的规格型号 dgvSalesInvoices.Rows[intRowsCount].Cells["计量单位"].Value = dtSalesOrderList.Rows[intRowsCount]["产品计量单位名称"].ToString().Trim();//将表dtSalesOrderList中产品计量单位名称赋值给dgvSalesInvoices中的计量单位 dgvSalesInvoices.Rows[intRowsCount].Cells["单价"].Value = dtSalesOrderList.Rows[intRowsCount]["单价"].ToString().Trim();//将表dtSalesOrderList中单价赋值给dgvSalesInvoices中的单价 dgvSalesInvoices.Rows[intRowsCount].Cells["数量"].Value = dtSalesOrderList.Rows[intRowsCount]["数量"].ToString().Trim();//将表dtSalesOrderList中数量赋值给dgvSalesInvoices中的数量 dgvSalesInvoices.Rows[intRowsCount].Cells["含税单价"].Value = dtSalesOrderList.Rows[intRowsCount]["含税单价"].ToString().Trim();//将表dtSalesOrderList中含税单价赋值给dgvSalesInvoices中的含税单价 dgvSalesInvoices.Rows[intRowsCount].Cells["金额"].Value = dtSalesOrderList.Rows[intRowsCount]["金额"].ToString().Trim();//将表dtSalesOrderList中金额赋值给dgvSalesInvoices中的金额 dgvSalesInvoices.Rows[intRowsCount].Cells["销售订单明细ID"].Value = dtSalesOrderList.Rows[intRowsCount]["销售订单明细ID"].ToString().Trim();//将表dtSalesOrderList中销售订单明细ID赋值给dgvSalesInvoices中的销售订单明细ID dgvSalesInvoices.Rows[intRowsCount].Cells["存货ID"].Value = dtSalesOrderList.Rows[intRowsCount]["存货ID"].ToString().Trim();//将表dtSalesOrderList中存货ID赋值给dgvSalesInvoices中的存货ID dgvSalesInvoices.Rows[intRowsCount].Cells["产品ID"].Value = dtSalesOrderList.Rows[intRowsCount]["产品ID"].ToString().Trim();//将表dtSalesOrderList中产品ID赋值给dgvSalesInvoices中的产品ID dgvSalesInvoices.Rows[intRowsCount].Cells["产品规格型号ID"].Value = dtSalesOrderList.Rows[intRowsCount]["产品规格型号ID"].ToString().Trim();//将表dtSalesOrderList中产品规格型号ID赋值给dgvSalesInvoices中的产品规格型号ID dgvSalesInvoices.Rows[intRowsCount].Cells["产品计量单位ID"].Value = dtSalesOrderList.Rows[intRowsCount]["产品计量单位ID"].ToString().Trim();//将表dtSalesOrderList中产品计量单位ID赋值给dgvSalesInvoices中的产品计量单位ID dgvSalesInvoices.Rows[intRowsCount].Cells["销售订单ID"].Value = dtSalesOrderList.Rows[intRowsCount]["销售订单ID"].ToString().Trim();//将表dtSalesOrderList中销售订单ID赋值给dgvSalesInvoices中的销售订单ID } TheSalesOrderID = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["销售订单ID1"].Value);//获取销售订单ID ltxtStockRemovalReceipts.Text = dgvSelectOrder.CurrentRow.Cells["订单号"].Value.ToString().Trim();//订单号赋值 cboSellDepartment.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["部门ID"].Value);//部门ID赋值 cboTheCustomerName.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["客户ID"].Value.ToString().Trim());//客户ID赋值 cboTermsOfPayment.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["付款条件ID"].Value.ToString().Trim());//付款条件ID赋值 cboOperationType.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["业务类型ID"].Value.ToString().Trim());//业务类型ID赋值 cboSalesType.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["销售类型ID"].Value.ToString().Trim());//销售类型ID赋值 cboMoneyType.SelectedValue = Convert.ToInt32(dgvSelectOrder.CurrentRow.Cells["币别ID"].Value.ToString().Trim());//币别ID赋值 ltxtCurrency.Text = dgvSelectOrder.CurrentRow.Cells["汇率"].Value.ToString().Trim();//汇率赋值 ltxtRate.Text = dgvSelectOrder.CurrentRow.Cells["税率"].Value.ToString().Trim();//税率赋值 pnlSalesOrderSelect.Visible = false;//隐藏容器 } }
图(2.5-5)
图(2.5-6)
第一步:数据库存储过程
if(@Type='frm_SalesInvoices_InsertMaximumBusiness')--生产最大单号数 begin update MaximumBusiness--表名 set MaxImumBusiness=MaxImumBusiness+1--最大单数+1 where MaximumOddNumber=1 SELECT MaxImumBusiness --最大单数 FROM MaximumBusiness--最大单据数表 end if(@Type='frm_SalesInvoices_InsertTheDocumentsTable')--新增单据 begin begin tran Insert TheDocumentsTable(DocumentNumber,--单据编号 DateOfDocuments)--单据日期 Values (@DocumentNumber, @DateOfDocuments) select @@IDENTITY commit tran End if(@Type='frm_SalesInvoices_InsertSalesDeliveryTable')--新增发票单 begin begin tran Insert SalesDeliveryTable(TheSalesOrderID, --销售订单ID DocumentID,--单据ID DeliveryWayID,--发运方式ID Note,--备注 TheDeliveryAddress,--发往地址 TheOperatorID_Salesman,--业务员ID ReviewWhether)--审核否 values (@TheSalesOrderID, @DocumentID,@DeliveryWayID,@Note,@TheDeliveryAddress,@TheOperatorID_Salesman,0) select @@IDENTITY commit tran End
第二步:服务端代码
[OperationContract] public int frm_SalesInvoices_InsertMaximumBusiness()//生产最大单数 { SqlParameter[] SQLCMDpas = { new SqlParameter("@Type", SqlDbType.Char) }; SQLCMDpas[0].Value = "frm_SalesInvoices_InsertMaximumBusiness"; DataTable myDataTable = myDALMethod.QueryDataTable("销售管理_frm_SalesInvoices", SQLCMDpas); return Convert.ToInt32(myDataTable.Rows[0][0]); } [OperationContract] public DataSet frm_SalesInvoices_InsertTheDocumentsTable(string DocumentNumber, DateTime DateOfDocuments)//新增单据 { SqlParameter[] SQlCMDpas = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@DocumentNumber", SqlDbType.NChar), //单据编号 new SqlParameter("@DateOfDocuments", SqlDbType.DateTime), //单据日期 }; SQlCMDpas[0].Value = "frm_SalesInvoices_InsertTheDocumentsTable"; SQlCMDpas[1].Value = DocumentNumber; SQlCMDpas[2].Value = DateOfDocuments; DataTable dt = myDALMethod.QueryDataTable("销售管理_frm_SalesInvoices", SQlCMDpas); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; } [OperationContract] public DataSet frm_SalesInvoices_InsertSalesDeliveryTable(int TheSalesOrderID, int DocumentID, int DeliveryWayID, string Note, string TheDeliveryAddress, int TheOperatorID_Salesman)//新增发票单 { SqlParameter[] SQlCMDpas = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@TheSalesOrderID", SqlDbType.Int), //销售订单ID new SqlParameter("@DocumentID", SqlDbType.Int), //单据ID new SqlParameter("@DeliveryWayID", SqlDbType.Int), //发运方式ID new SqlParameter("@Note", SqlDbType.NChar), //备注 new SqlParameter("@TheDeliveryAddress", SqlDbType.NChar), //发往地址 new SqlParameter("@TheOperatorID_Salesman", SqlDbType.Int), //业务员ID }; SQlCMDpas[0].Value = "frm_SalesInvoices_InsertSalesDeliveryTable"; SQlCMDpas[1].Value = TheSalesOrderID; SQlCMDpas[2].Value = DocumentID; SQlCMDpas[3].Value = DeliveryWayID; SQlCMDpas[4].Value =Note; SQlCMDpas[5].Value = TheDeliveryAddress; SQlCMDpas[6].Value = TheOperatorID_Salesman; DataTable dt = myDALMethod.QueryDataTable("销售管理_frm_SalesInvoices", SQlCMDpas); DataSet ds = new DataSet(); ds.Tables.Add(dt); return ds; }
第三步:界面层代码
private void tlsbSave_Click(object sender, EventArgs e) { if(bolNewlyIncreased==true)//标识新增 { int MaxImumBusiness = myfrm_SalesInvoicesClient.frm_SalesInvoices_InsertMaximumBusiness(); string strMaxImumBusiness = MaxImumBusiness.ToString(); string MaxNumber = ""; MaxNumber = DateTime.Now.Year + (DateTime.Now.Month > 9 ? DateTime.Now.Month.ToString() : "0" + DateTime.Now.Month) + (DateTime.Now.Day > 9 ? DateTime.Now.Day.ToString() : "0" + DateTime.Now.Day);//根据时间生产最大单数 for (int Max = strMaxImumBusiness.Length; Max < 5; Max++) { strMaxImumBusiness = "0" + strMaxImumBusiness; } MaxNumber = string.Format("FPDH{0}{1}", MaxNumber, strMaxImumBusiness); ltxtInvoiceNo.Text = MaxNumber;//发票单号 int TheDocumentsTable =Convert.ToInt32( myfrm_SalesInvoicesClient.frm_SalesInvoices_InsertTheDocumentsTable( ltxtInvoiceNo.Text.ToString().Trim(),Convert.ToDateTime(DateTime.Now.ToString().Trim())).Tables[0].Rows[0][0]);//新增单据 int SalesDeliveryTable = Convert.ToInt32(myfrm_SalesInvoicesClient.frm_SalesInvoices_InsertSalesDeliveryTable(TheSalesOrderID, TheDocumentsTable, Convert.ToInt32(cboDeliveryWay.SelectedValue.ToString().Trim()), ltxtNote.Text.ToString().Trim(), ltxtSentToTheAddress.Text.ToString().Trim(), Convert.ToInt32(cboOperationPerson.SelectedValue.ToString().Trim() )).Tables[0].Rows[0][0]);//新增发货单表 if (SalesDeliveryTable>0) { MessageBox.Show("新增成功"); tlsbExamineAndVerify.Enabled = true;//启用审核按钮 tlsbPreview.Enabled = true;//启用预览按钮 tlsbPrint.Enabled = true;//启用打印按钮 tlsbDelete.Enabled = true;//启用删除按钮 tlsbFirst.Enabled = true;//启用首张按钮 tlsbLast.Enabled = true;//启用上张按钮 tlsbNextPage.Enabled = true;//启用下张按钮 tlsbFinal.Enabled = true;//启用末张按钮 tlsbRefresh.Enabled = true;//启用查询按钮 bolNewlyIncreased = false; //标识不新增 tlsbIncrease.Enabled = true;//新增按钮启用 tlsbSave.Enabled = false; //保存按钮不启用 tlsbAbandon.Enabled = false;// 放弃按钮不启用 tlsbModification.Enabled = true;//修改按钮启用 ltxtSentToTheAddress.Enabled = false;//禁用发往地址控件 cboDeliveryWay.Enabled = false;//禁用发运方式控件 ltxtNote.Enabled = false;//禁用备注控件 dtSalesDeliveryTable = myfrm_SalesInvoicesClient.frm_SalesInvoices_SelectSalesDeliveryTable().Tables[0];//绑定发票 intTpage = dtSalesDeliveryTable.Rows.Count - 1;//获取最后一页,使新增后完界面为最后一页 int Count = intTpage; BingDingSalesDeliveryTable(intTpage); BingDingList(intTpage); ButtonUsing(intTpage); } }
相关文章推荐
- 回答自己的问题
- sass 学习
- OpenGLES2.0着色器语言教程
- 手斧Linux – 从LFS到Funtoo (47)
- Android存储数据的5种方式
- MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
- 问题:eclipse xml文件中按alt+/没有提示信息?
- 体验CSDN-Markdown
- 正则表达式
- Android greenDAO入门
- 分布式设计与开发 memcached分布式
- 手斧Linux – 从LFS到Funtoo (46)
- 关于undo log格式中事务ID和undo_no
- Alt+/ 提示不管用?
- Oracle备份基本名词
- 黑马程序员——Java基础:集合类、泛型
- 自学笔记-C语言复习2015年6月25日
- 复数运算符重载
- Encoding
- java线程基础复习