您的位置:首页 > 其它

用友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
列名

数据类型

主键/外键

说明

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)

备注

表2
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

表3 dbo.BankTable

列名

数据类型

主键/外键

说明

BankID

Int

主键

银行ID

BankName

Nchar(20)

银行名称

表4dbo.TermsOfPaymentTable

列名

数据类型

主键/外键

说明

TermsOfPaymentID

Int

主键

付款条件ID

TermsOfPaymentName

Nchar(20)

付款条件名称

表5dbo.SalerPaperTable

列名

数据类型

主键/外键

说明

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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: