您的位置:首页 > 其它

钟表维修管理系统技术解析(五) 销售单录入中的再录一条、结账功能

2015-05-31 21:07 441 查看
再录一条功能实现
第一步:存储过程代码

<span style="font-size:18px;">IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu')
BEGIN
BEGIN TRAN
UPDATE		DangRiZuiDaDanShu
SET			XiaoShouDanHao+=1
--最大库存数加一

SELECT		XiaoShouDanHao
FROM		DangRiZuiDaDanShu
--查询最大库存数
COMMIT TRAN
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan')
BEGIN
BEGIN TRAN
INSERT		pw_XiaoShouDan(LuRuYuanID,KeHuID, XiaoShouLeiXingID, XiaoShouDanBianHao, XiaoShouRiQi,BeiZhu,PinPaiID,ZhongBiaoKuanShiID,DiKeHao,YingShouJinE)
VALUES		(@LuRuYuanID, @KeHuID, @XiaoShouLeiXingID,@XiaoShouDanBianHao, @XiaoShouRiQi, @BeiZhu,@PinPaiID,@ZhongBiaoKuanShiID,@DiKeHao,@YingShouJinE)

SELECT		@@IDENTITY --查询刚刚新增的行的主键(ID)
COMMIT TRAN
END

if @type='frmCaiGouGuanLi_Select_ChuKuDanJuHao'
begin
begin tran
update DangRiZuiDaDanShu
set DangRiZuiDaDanShu.ChuKuDanHao=ChuKuDanHao+1

select ChuKuDanHao
from DangRiZuiDaDanShu
commit tran
end

if @type='frmCaiGouGuanLi_Insert_RuKuDan'
begin
insert    pw_ChuRuKuDanJu( LuRuYuanID, GongZuoZhanID, DanJuBianHao, RuKuFou,BeiZhu)
values     (@LuRuYuanID, 4,@DanJuBianHao, 'true',@BeiZhu)
select @@IDENTITY
end

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi')
BEGIN
BEGIN TRAN
INSERT		pw_XiaoShouDanMingXi(XiaoShouDanID, ChanPinID, CangWeiID, DanJia, ShuLiang,BaoXiuQiID)
VALUES		(@XiaoShouDanID, @ChanPinID, @CangWeiID, @DanJia, @ShuLiang,@BaoXiuQiID)

UPDATE		sys_KuCun
SET			KuCunShuLiang-=@ShuLiang,GengXinShiJian=GETDATE()
WHERE		CangWeiID=@CangWeiID and ChanPinID=@ChanPinID
COMMIT TRAN
END

if @type='frmCaiGouTuiHuo_Insert_ChuKuMingXi'
begin
insert     pw_ChuRuKuDanJuMingXi(ChuRuKuDanJuID, ChanPinID, CangWeiID, ShuLiang, JinE)
values         (@ChuRuKuDanJuID, @ChanPinID, @CangWeiID, @ShuLiang, @JinE)
end
</span>


第二步:逻辑层代码
<span style="font-size:18px;">public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu()
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu";

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan(int intLuRuYuanID, int intKeHuID,
int intXiaoShouLeiXingID, string strXiaoShouDanBianHao, DateTime dtmXiaoShouRiQi, string strBeiZhu,
int intPinPaiID, int intZhongBiaoKuanShiID, string strDiKeHao, decimal decYingShouJinE)
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char),
new SqlParameter("@LuRuYuanID",SqlDbType.Int),
new SqlParameter("@KeHuID",SqlDbType.Int),
new SqlParameter("@XiaoShouLeiXingID",SqlDbType.Int),
new SqlParameter("@XiaoShouDanBianHao",SqlDbType.Char),
new SqlParameter("@XiaoShouRiQi",SqlDbType.Date),
new SqlParameter("@BeiZhu",SqlDbType.Char),
new SqlParameter("@PinPaiID",SqlDbType.Int),
new SqlParameter("@ZhongBiaoKuanShiID",SqlDbType.Int),
new SqlParameter("@DiKeHao",SqlDbType.Char),
new SqlParameter("@YingShouJinE",SqlDbType.Decimal),
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan";
mySqlParameters[1].Value = intLuRuYuanID;
mySqlParameters[2].Value = intKeHuID;
mySqlParameters[3].Value = intXiaoShouLeiXingID;
mySqlParameters[4].Value = strXiaoShouDanBianHao;
mySqlParameters[5].Value = dtmXiaoShouRiQi;
mySqlParameters[6].Value = strBeiZhu;
mySqlParameters[7].Value = intPinPaiID;
mySqlParameters[8].Value = intZhongBiaoKuanShiID;
mySqlParameters[9].Value = strDiKeHao;
mySqlParameters[10].Value = decYingShouJinE;

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmCaiGouGuanLi_Select_ChuKuDanJuHao()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@type",SqlDbType.Char),
};
mySqlParameters[0].Value = "frmCaiGouGuanLi_Select_ChuKuDanJuHao";
return myDALMethod.QueryDataTable("frmCaiGouGuanLi", mySqlParameters);
}

public DataTable frmCaiGouGuanLi_Insert_RuKuDan(int intLuRuYuanID, string strDanJuBianHao,string strBeiZhu)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@LuRuYuanID",SqlDbType.Int),
new SqlParameter("@DanJuBianHao",SqlDbType.Char),
new SqlParameter("@BeiZhu",SqlDbType.Char),
};
mySqlParameters[0].Value = "frmCaiGouGuanLi_Insert_RuKuDan";
mySqlParameters[1].Value = intLuRuYuanID;
mySqlParameters[2].Value = strDanJuBianHao;
mySqlParameters[3].Value = strBeiZhu;
return myDALMethod.QueryDataTable("frmCaiGouGuanLi", mySqlParameters);
}

public int frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(int intXiaoShouDanID, int intChanPinID, int intCangWeiID, decimal decDanJia, int intShuLiang,int intBaoXiuQiID)
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char),
new SqlParameter("@XiaoShouDanID",SqlDbType.Int),
new SqlParameter("@ChanPinID",SqlDbType.Int),
new SqlParameter("@CangWeiID",SqlDbType.Int),
new SqlParameter("@DanJia",SqlDbType.Decimal),
new SqlParameter("@ShuLiang",SqlDbType.Int),
new SqlParameter("@BaoXiuQiID",SqlDbType.Int),
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi";
mySqlParameters[1].Value = intXiaoShouDanID;
mySqlParameters[2].Value = intChanPinID;
mySqlParameters[3].Value = intCangWeiID;
mySqlParameters[4].Value = decDanJia;
mySqlParameters[5].Value = intShuLiang;
mySqlParameters[6].Value = intBaoXiuQiID;

return myDALMethod.UpdateData("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmCaiGouTuiHuo_Insert_ChuKuMingXi(int intChuRuKuDanJuID, int intChanPinID, int intCangWeiID, int intShuLiang)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@ChuRuKuDanJuID",SqlDbType.Int),
new SqlParameter("@ChanPinID",SqlDbType.Int),
new SqlParameter("@CangWeiID",SqlDbType.Int),
new SqlParameter("@ShuLiang",SqlDbType.Int),
};
mySqlParameters[0].Value = "frmCaiGouTuiHuo_Insert_ChuKuMingXi";
mySqlParameters[1].Value = intChuRuKuDanJuID;
mySqlParameters[2].Value = intChanPinID;
mySqlParameters[3].Value = intCangWeiID;
mySqlParameters[4].Value = intShuLiang;
return myDALMethod.QueryDataTable("frmCaiGouTuiHuo", mySqlParameters);
}
</span>

第三步:界面层代码
(1)再录一条按钮的单击事件



BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert myfrmXiaoShouKaiDan_Insert = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert();
BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi myfrmCaiGouGuanLi = new BLL.BLLCaiGouGuanLi.frmCaiGouGuanLi();
BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo myfrmCaiGouTuiHuo = new BLL.BLLCaiGouGuanLi.frmCaiGouTuiHuo();
int intKeHuID = 0;
int intPinPaiID = 0;
int intGeShu = 0;
int[] intXiaoShouDanIDs;
int intFanHui = 0;

private void btnZaiLuYiTiao_Click(object sender, EventArgs e)
{
#region 保存前判断
if (intKeHuID == 0 || txtKeHuXingMing.Text == "")
{
MessageBox.Show("请按绿色加号按钮选择客户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
intFanHui = 0;
return;
}
if (intPinPaiID == 0 || txtPinPai.Text == "")
{
MessageBox.Show("请按绿色加号按钮选择品牌!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
intFanHui = 0;
return;
}
if (txtDiKeHao.Text == "")
{
MessageBox.Show("请填写底壳号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
intFanHui = 0;
return;
}
if (dgvChanPinMingXi.Rows.Count < 1)
{
MessageBox.Show("请录入产品!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
intFanHui = 0;
return;
}
for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
{
try
{
intFanHui = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value);
if (intFanHui == 0)
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
}
catch
{
MessageBox.Show("第【"+(i+1).ToString()+"】行的【保修期】还没选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
intFanHui = 0;
return;
}
}
#endregion

#region 获取界面填入的值
int intLuRuYuanID = Convert.ToInt32(index2.strYuanGongXinXi[0]);//登录人
int intXiaoShouLeiXingID = Convert.ToInt32(cboXiaoShouLeiXing.SelectedValue);
string strXiaoShouDanBianHao = DangRiXiaoShouZuiDaDanJuShu("XD");//获取销售单编号
DateTime dtmXiaoShouRiQi = dtpXiaoShouRiQi.Value;
string strBeiZhu = txtBeiZhu.Text;
int intZhongBiaoKuanShiID = Convert.ToInt32(cboKuanShi.SelectedValue);
string strDiKeHao = txtDiKeHao.Text;
decimal decYingShouJinE = 0;
#endregion

for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
{
decYingShouJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);//应收金额
}
int intXiaoShouDanID = Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDan(intLuRuYuanID, intKeHuID, intXiaoShouLeiXingID, strXiaoShouDanBianHao, dtmXiaoShouRiQi, strBeiZhu, intPinPaiID, intZhongBiaoKuanShiID, strDiKeHao, decYingShouJinE).Rows[0][0]);//新增销售单

if (intXiaoShouDanID > 0)
{
#region 新增出库记录
string strY = DateTime.Now.Year.ToString();//获取当前年份
string strM = (DateTime.Now.Month.ToString().Length < 2 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString());//获取当前月份,如果是一位数,则前面加0
string strD = (DateTime.Now.Day.ToString().Length < 2 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString());//获取当前日,如果是一位数,则前面加0
string strDanHao = myfrmCaiGouGuanLi.frmCaiGouGuanLi_Select_ChuKuDanJuHao().Rows[0][0].ToString();//获取今日最大单号
if (strDanHao.Length == 1)
{
strDanHao = "000" + strDanHao;//如果是一位数,则在前面加000
}
else if (strDanHao.Length == 2)
{
strDanHao = "00" + strDanHao;
}
else if (strDanHao.Length == 3)
{
strDanHao = "0" + strDanHao;
}
string strPab = "CK" + strY + strM + strD + strDanHao;//拼接出入库单号
DataTable dtRuKuDan = myfrmCaiGouGuanLi.frmCaiGouGuanLi_Insert_RuKuDan(Convert.ToInt32(index2.strYuanGongXinXi[0]), strPab, "销售出库(" + strXiaoShouDanBianHao + ")");//新增出入库单据
#endregion

intGeShu++;//已经录入的销售单条数加一
int[] intZhuanHuans = new int[intGeShu-1];//创建一个int型数组,用来存放之前录入的销售单ID
intZhuanHuans = intXiaoShouDanIDs;
intXiaoShouDanIDs = new int[intGeShu];//重新实例化销售单ID集合
for (int i = 0; i < intGeShu - 1; i++)//循环把暂时存放销售单ID的数组,赋值给销售单ID集合
{
intXiaoShouDanIDs[i] = intZhuanHuans[i];
}
intXiaoShouDanIDs[intGeShu - 1] = intXiaoShouDanID;//最后一个位置存放刚保存的一个销售单的ID
int intMingXiChengGongCiShu = 0;
for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
{
int intChanPinID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["产品ID"].Value);
int intCangWeiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["所在仓位ID"].Value);
decimal decDanJia = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value);
int intShuLiang = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);
int intBaoXiuQiID = Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value);
//添加销售单明细,同时修改库存数
if (myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_InsertXiaoShouDanMingXi(intXiaoShouDanID, intChanPinID, intCangWeiID, decDanJia, intShuLiang,intBaoXiuQiID) > 0)//新增销售单明细,和改变库存
{
myfrmCaiGouTuiHuo.frmCaiGouTuiHuo_Insert_ChuKuMingXi(Convert.ToInt32(dtRuKuDan.Rows[0][0]), intChanPinID, intCangWeiID, intShuLiang);//新增出入库单明细
intMingXiChengGongCiShu++;
}

}
if (intMingXiChengGongCiShu != dgvChanPinMingXi.Rows.Count)//判断是否全部操作都执行成功
{
MessageBox.Show("新增销售单成功,销售单编号【" + strXiaoShouDanBianHao + "】\n【" + (dgvChanPinMingXi.Rows.Count - intMingXiChengGongCiShu).ToString() + "】条明细添加失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
dtpXiaoShouRiQi.Value = DateTime.Now;//保留客户信息,并且清空其他信息
txtBeiZhu.Text = "";
txtDiKeHao.Text = "";
txtPinPai.Text = "";
cboXiaoShouLeiXing.SelectedIndex = 0;
cboKuanShi.SelectedItem = 0;
intPinPaiID = 0;
dgvChanPinMingXi.Rows.Clear();
intFanHui = 1;
return;
}
else
{
MessageBox.Show("新增失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
intFanHui = 0;
return;
}
}

private string DangRiXiaoShouZuiDaDanJuShu(string strQianZhui)
{
string strDanJuShu = (Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunZuiDaDanJuShu().Rows[0][0])).ToString();
if (strDanJuShu.Length == 1)
{
strDanJuShu = "000" + strDanJuShu;
}
if (strDanJuShu.Length == 2)
{
strDanJuShu = "00" + strDanJuShu;
}
if (strDanJuShu.Length == 3)
{
strDanJuShu = "0" + strDanJuShu;
}
string Nian = DateTime.Now.Year.ToString();
string Yue = DateTime.Now.Month.ToString();
Yue = (Yue.Length < 2) ? ("0" + Yue) : Yue;
string Ri = DateTime.Now.Day.ToString();
Ri = (Ri.Length < 2) ? ("0" + Ri) : Ri;

return strQianZhui + Nian + Yue + Ri + strDanJuShu;
}
结账功能实现,如(图9)所示







(图9)

第一步:结账按钮的单击事件
<span style="font-size:18px;">private void btnBaoCun_Click(object sender, EventArgs e)
{
bool bolBaoXiu = false;
for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)
{
try
{
Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value);
}
catch
{
bolBaoXiu = true;
break;
}
}
if ((bolBaoXiu == true || intPinPaiID == 0 || txtPinPai.Text == "" || txtDiKeHao.Text == "" || dgvChanPinMingXi.Rows.Count < 1) && intGeShu > 0)//判断是否填写完成
{
if (MessageBox.Show("当前单据还未填写完整,是否跳过此单进行结账?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)//如果没填写完,则提示是否跳过此单据,结账前面录入的单据
{
frmXiaoShouKaiDan_JieZhang myfrmXiaoShouKaiDan_JieZhang = new frmXiaoShouKaiDan_JieZhang(intXiaoShouDanIDs, intGeShu);//实例化结账窗体,把销售单ID集合,个数传过去
myfrmXiaoShouKaiDan_JieZhang.ShowDialog();//弹出窗体
intGeShu = 0;
intKeHuID = 0;
dtpXiaoShouRiQi.Value = DateTime.Now;
txtKeHuXingMing.Text = "";
txtLianXiDianHua.Text = "";
txtLianXiDiZhi.Text = "";
txtBeiZhu.Text = "";
txtDiKeHao.Text = "";
txtPinPai.Text = "";
cboXiaoShouLeiXing.SelectedIndex = 0;
cboKuanShi.SelectedItem = 0;
intPinPaiID = 0;
dgvChanPinMingXi.Rows.Clear();
return;
}
}
btnZaiLuYiTiao_Click(null, null);//如果填写的资料完整,则调用再录一条按钮的单击事件
if (intFanHui== 1)//如果录入成功,intFanHui的值为1
{
frmXiaoShouKaiDan_JieZhang myfrmXiaoShouKaiDan_JieZhang = new frmXiaoShouKaiDan_JieZhang(intXiaoShouDanIDs, intGeShu);//实例化结账窗体,把销售单ID集合,个数传过去
myfrmXiaoShouKaiDan_JieZhang.ShowDialog();//弹出窗体
intGeShu = 0;
intKeHuID = 0;
dtpXiaoShouRiQi.Value = DateTime.Now;
txtKeHuXingMing.Text = "";
txtLianXiDianHua.Text = "";
txtLianXiDiZhi.Text = "";
txtBeiZhu.Text = "";
txtDiKeHao.Text = "";
txtPinPai.Text = "";
cboXiaoShouLeiXing.SelectedIndex = 0;
cboKuanShi.SelectedItem = 0;
intPinPaiID = 0;
dgvChanPinMingXi.Rows.Clear();
}
}
</span>

第二步:结账窗体代码
(1)存储过程代码
<span style="font-size:18px;">IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi')
BEGIN
SELECT     BaoXiuQiID, RTRIM(BaoXiuQiMingCheng) AS BaoXiuQiMingCheng,YouXiaoFou
--查询的列
FROM         sys_BaoXiuQi
--从哪个表查询
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing')
BEGIN
SELECT		ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng
FROM		sys_ShuXingMingXi
WHERE		ShuXingJiHeID=20 AND YouXiaoFou=1
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi')
BEGIN
SELECT		ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng
FROM		sys_ShuXingMingXi
WHERE		ShuXingJiHeID=21 AND YouXiaoFou=1
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi')
BEGIN
SELECT		ShuXingMingXiID AS ShuXingMingXiID,LTRIM(RTRIM(ShuXingMingXiMingCheng))AS ShuXingMingXiMingCheng
FROM		sys_ShuXingMingXi
WHERE		ShuXingJiHeID=7 AND YouXiaoFou=1
END

IF (@TYPE = 'frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi')
BEGIN
SELECT     pw_XiaoShouDanMingXi.ChanPinID, pw_XiaoShouDanMingXi.CangWeiID, RTRIM(sys_CangWei.CangWeiMingCheng) AS CangWeiMingCheng, sys_KuCun.KuCunShuLiang, pw_XiaoShouDanMingXi.DanJia,
pw_XiaoShouDanMingXi.ShuLiang, sys_ChanPinZiLiao.ChanPinZhongLeiID, sys_ChanPinZiLiao.ChanPinPinPaiID, RTRIM(sys_ChanPinZiLiao.ChanPinMingCheng) AS ChanPinMingCheng, RTRIM(sys_ChanPinZiLiao.ChanPinBianHao) AS ChanPinBianHao,
pw_XiaoShouDanMingXi.XiaoShouDanMingXiID, RTRIM(sys_PinPai.PinPaiMingCheng) AS PinPaiMingCheng, RTRIM(sys_PinZhong.PinZhongMingCheng) AS PinZhongMingCheng, pw_XiaoShouDanMingXi.BaoXiuQiID, RTRIM(pw_XiaoShouDan.XiaoShouDanBianHao) AS XiaoShouDanBianHao,
pw_XiaoShouDanMingXi.XiaoShouDanID
FROM         pw_XiaoShouDanMingXi INNER JOIN
sys_ChanPinZiLiao ON pw_XiaoShouDanMingXi.ChanPinID = sys_ChanPinZiLiao.ChanPinID INNER JOIN
sys_CangWei ON pw_XiaoShouDanMingXi.CangWeiID = sys_CangWei.CangWeiID INNER JOIN
sys_KuCun ON sys_CangWei.CangWeiID = sys_KuCun.CangWeiID AND sys_ChanPinZiLiao.ChanPinID = sys_KuCun.ChanPinID INNER JOIN
sys_PinPai ON sys_ChanPinZiLiao.ChanPinPinPaiID = sys_PinPai.PinPaiID INNER JOIN
sys_PinZhong ON sys_ChanPinZiLiao.ChanPinZhongLeiID = sys_PinZhong.PinZhongID INNER JOIN
pw_XiaoShouDan ON pw_XiaoShouDanMingXi.XiaoShouDanID = pw_XiaoShouDan.XiaoShouDanID
WHERE		pw_XiaoShouDanMingXi.XiaoShouDanID=@XiaoShouDanID
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu')
BEGIN
BEGIN TRAN
UPDATE		DangRiZuiDaDanShu
SET			JieZhangDanHao+=1

SELECT		JieZhangDanHao
FROM		DangRiZuiDaDanShu
COMMIT TRAN
END

IF (@TYPE = 'frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan')
BEGIN
UPDATE		pw_XiaoShouDan
SET
FuKuanZhuangTaiID =@FuKuanZhuangTaiID,
XiaoShouFangShiID =@XiaoShouFangShiID,
FuKuanFangShiID =@FuKuanFangShiID,
FuKuanLeiXingID =@FuKuanLeiXingID,
YingShouJinE =@YingShouJinE,
ShiShouJinE =@ShiShouJinE,
JieZhangBianHao =@JieZhangBianHao
WHERE		XiaoShouDanID=@XiaoShouDanID
END
</span>

(2)逻辑层代码
<span style="font-size:18px;">public DataTable frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi()//方法名称
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)//声明变量数组
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi";//给变量数组的第一个赋值

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);//第一个参数是数据库名称,第二个参数是数组
}

public DataTable frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing()
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing";

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi()
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi";

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi()
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi";

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public DataTable frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(int intXiaoShouDanID)
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char),
new SqlParameter("@XiaoShouDanID",SqlDbType.Int)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi";
mySqlParameters[1].Value = intXiaoShouDanID;

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Update", mySqlParameters);
}

public DataTable frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu()
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char)
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu";

return myDALMethod.QueryDataTable("frmXiaoShouKaiDan_Insert", mySqlParameters);
}

public int frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan(int intFuKuanZhuangTaiID, int intXiaoShouFangShiID, int intFuKuanFangShiID, int intFuKuanLeiXingID, decimal decYingShouJinE, decimal decShiShouJinE, string strJieZhangBianHao, int intXiaoShouDanID)
{
SqlParameter[] mySqlParameters ={
new SqlParameter("@TYPE",SqlDbType.Char),
new SqlParameter("@FuKuanZhuangTaiID",SqlDbType.Int),
new SqlParameter("@XiaoShouFangShiID",SqlDbType.Int),
new SqlParameter("@FuKuanFangShiID",SqlDbType.Int),
new SqlParameter("@FuKuanLeiXingID",SqlDbType.Int),
new SqlParameter("@YingShouJinE",SqlDbType.Decimal),
new SqlParameter("@ShiShouJinE",SqlDbType.Decimal),
new SqlParameter("@JieZhangBianHao",SqlDbType.Char),
new SqlParameter("@XiaoShouDanID",SqlDbType.Int),
};
mySqlParameters[0].Value = "frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan";
mySqlParameters[1].Value = intFuKuanZhuangTaiID;
mySqlParameters[2].Value = intXiaoShouFangShiID;
mySqlParameters[3].Value = intFuKuanFangShiID;
mySqlParameters[4].Value = intFuKuanLeiXingID;
mySqlParameters[5].Value = decYingShouJinE;
mySqlParameters[6].Value = decShiShouJinE;
mySqlParameters[7].Value = strJieZhangBianHao;
mySqlParameters[8].Value = intXiaoShouDanID;

return myDALMethod.UpdateData("frmXiaoShouKaiDan_Insert", mySqlParameters);
}
</span>

(3)结账窗体的构造方法
<span style="font-size:18px;">BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert myfrmXiaoShouKaiDan_Insert = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Insert();
BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update myfrmXiaoShouKaiDan_Update = new BLL.BLL_XiaoShouGuanLi.frmXiaoShouKaiDan_Update();
int[] intXiaoShouDanIDs;//销售单ID集合
int intGeShu = 0;//销售单ID个数
int intFuKuanPanDuan = 0;//用于判断是不是销售记录的付款按钮单击事件,弹出来的窗体
DataTable dtBaoXiuQi = new DataTable();//全部保修期
DataTable dtBaoXiuQiWeiShanChu = new DataTable();//未删除保修期
public frmXiaoShouKaiDan_JieZhang(int[] XiaoShouDanIDs, int GeShu)
{
intGeShu = GeShu;
intXiaoShouDanIDs = new int[intGeShu];
intXiaoShouDanIDs = XiaoShouDanIDs;
InitializeComponent();
btnBaoCun.BackColor = Color.FromArgb(80, 225, 225, 225);//重写Button控件的外观
}
</span>

(4)结账窗体的Load事件

<span style="font-size:18px;">private void frmXiaoShouKaiDan_JieZhang_Load(object sender, EventArgs e)
{
txtJieZhangDanBianHao.Text = "自动生成";

dgvChanPinMingXi.AllowUserToAddRows = false;
dgvChanPinMingXi.AutoGenerateColumns = false;
dgvChanPinMingXi.ReadOnly = true;

dtBaoXiuQi = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectBaoXiuQi();//查询保修期表,查询出保修期ID和保修期名称和有效否

dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiMingCheng", typeof(string));//给dtBaoXiuQiWeiShanChu添加列,第一个参数是列名,第二个参数是数据类型
dtBaoXiuQiWeiShanChu.Columns.Add("BaoXiuQiID", typeof(int));
dtBaoXiuQiWeiShanChu.Columns.Add("YouXiaoFou", typeof(bool));
for (int i = 0; i < dtBaoXiuQi.Rows.Count; i++)
{
if (Convert.ToBoolean(dtBaoXiuQi.Rows[i]["YouXiaoFou"]))//循环判断dtBaoXiuQi,把有效否(YouXiaoFou)为True的添加到dtBaoXiuQiWeiShanChu中
{
dtBaoXiuQiWeiShanChu.Rows.Add();//添加一行空行
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[i]["BaoXiuQiMingCheng"].ToString().Trim();//赋值
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[i]["BaoXiuQiID"]);
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = true;
}
}
//保修期为什么不只是,把有效否为True的查出来?因为这里是修改,而旧单据中选择的保修期可能已经被删除,赋值环节没有被删除的保修期,会出错
保修期.DataSource = dtBaoXiuQiWeiShanChu;//绑定数据源
保修期.DisplayMember = "BaoXiuQiMingCheng";//绑定显示文本
保修期.ValueMember = "BaoXiuQiID";//绑定ID

cboFuKuanZhuangTai.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanZhuangTai();
cboFuKuanZhuangTai.DisplayMember = "ShuXingMingXiMingCheng";
cboFuKuanZhuangTai.ValueMember = "ShuXingMingXiID";

cboFuKuanLeiXing.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanLeiXing();
cboFuKuanLeiXing.DisplayMember = "ShuXingMingXiMingCheng";
cboFuKuanLeiXing.ValueMember = "ShuXingMingXiID";

cboXiaoShouFangShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectXiaoShouFangShi();
cboXiaoShouFangShi.DisplayMember = "ShuXingMingXiMingCheng";
cboXiaoShouFangShi.ValueMember = "ShuXingMingXiID";

cboFuKuanFangShi.DataSource = myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_Load_SelectFuKuanFangShi();
cboFuKuanFangShi.DisplayMember = "ShuXingMingXiMingCheng";
cboFuKuanFangShi.ValueMember = "ShuXingMingXiID";

for (int i = 0; i < intGeShu; i++)
{
DataTable dtXiaoShouDanMingXi = myfrmXiaoShouKaiDan_Update.frmXiaoShouKaiDan_Update_Load_SelectXiaoShouDanMingXi(intXiaoShouDanIDs[i]);
for (int j = 0; j < dtXiaoShouDanMingXi.Rows.Count; j++)
{
dgvChanPinMingXi.Rows.Add(1);
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["产品ID"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinID"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["所在仓位ID"].Value = dtXiaoShouDanMingXi.Rows[j]["CangWeiID"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售单ID"].Value = dtXiaoShouDanMingXi.Rows[j]["XiaoShouDanID"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售单编号"].Value = dtXiaoShouDanMingXi.Rows[j]["XiaoShouDanBianHao"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["编号"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinBianHao"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["名称"].Value = dtXiaoShouDanMingXi.Rows[j]["ChanPinMingCheng"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["品牌"].Value = dtXiaoShouDanMingXi.Rows[j]["PinPaiMingCheng"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["品种"].Value = dtXiaoShouDanMingXi.Rows[j]["PinZhongMingCheng"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["所在仓位"].Value = dtXiaoShouDanMingXi.Rows[j]["CangWeiMingCheng"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["库存数"].Value = dtXiaoShouDanMingXi.Rows[j]["KuCunShuLiang"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售价格"].Value = dtXiaoShouDanMingXi.Rows[j]["DanJia"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["销售数量"].Value = dtXiaoShouDanMingXi.Rows[j]["ShuLiang"];
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["小计"].Value = Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[j]["DanJia"]) * Convert.ToDecimal(dtXiaoShouDanMingXi.Rows[j]["ShuLiang"]);
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]);
try//try{}catch{}代码,try中如果有出错,直接跳到catch{}中,防止系统崩溃
{
for (int k = 0; k < dtBaoXiuQi.Rows.Count; k++)
{
if (Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]) == Convert.ToInt32(dtBaoXiuQi.Rows[k]["BaoXiuQiID"]))//循环判断dtBaoXiuQi中,与销售单明细中保修期ID相等的行
{
if (Convert.ToBoolean(dtBaoXiuQi.Rows[k]["YouXiaoFou"]))//如果此行有效否为True
{
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]);//直接绑定到销售单的产品明细
}
else//如果不是为True
{
dtBaoXiuQiWeiShanChu.Rows.Add();//dtBaoXiuQiWeiShanChu中增加一行空行
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiMingCheng"] = dtBaoXiuQi.Rows[k]["BaoXiuQiMingCheng"].ToString().Trim() + "(已删除)";//保修期名称中加上"(已删除)"赋值给新添加的行
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["BaoXiuQiID"] = Convert.ToInt32(dtBaoXiuQi.Rows[k]["BaoXiuQiID"]);//赋值保修期ID
dtBaoXiuQiWeiShanChu.Rows[dtBaoXiuQiWeiShanChu.Rows.Count - 1]["YouXiaoFou"] = false;//赋值有效否
dtBaoXiuQi.Rows[k]["YouXiaoFou"] = true;//这一行添加到[dtBaoXiuQiWeiShanChu]后,把有效否改为真,避免重复添加
dgvChanPinMingXi.Rows[dgvChanPinMingXi.Rows.Count - 1].Cells["保修期"].Value = Convert.ToInt32(dtXiaoShouDanMingXi.Rows[j]["BaoXiuQiID"]);//最后绑定到销售单的产品明细
}
break;
}
}
}
catch
{
}
}
}
txtZheKou.Text = "10";
txtYouHuiJinE.Text = "0";
JiSuanZongJinE();//调用计算总金额方法
}

private void JiSuanZongJinE()
{
decimal decZongJinE = 0;//总金额
for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)//循环产品明细表
{
decimal decJiaGe = 0;//价格
try
{
decJiaGe = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value);//获取价格,如果转化形态出错,则跳到catch{}
if (decJiaGe < 0)
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】不能小于零!");//价格不能小于0
dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0;
decJiaGe = 0;
}
}
catch
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】填写不正确!");
dgvChanPinMingXi.Rows[i].Cells["销售价格"].Value = 0;
decJiaGe = 0;
}

decimal decShuLiang = 0;//数量
try
{
decShuLiang = Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value);//获取数量,如果转化形态出错,则跳到catch{}
if (decShuLiang < 1)
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售数量】不能小于一!");//数量不能小于1
dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;
decShuLiang = 1;
}
Convert.ToInt32(decShuLiang);
}
catch
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行,的【销售价格】填写不正确!");
dgvChanPinMingXi.Rows[i].Cells["销售数量"].Value = 1;
decShuLiang = 1;
}

dgvChanPinMingXi.Rows[i].Cells["小计"].Value = decJiaGe * decShuLiang;//每行的小计
decZongJinE += Convert.ToDecimal(dgvChanPinMingXi.Rows[i].Cells["小计"].Value);//累加总金额
}
txtYingShouJinE.Text = decZongJinE.ToString();//把计算出的总金额赋值到应收金额文本框
if (cboFuKuanLeiXing.SelectedIndex == 1)//如果当前付款类型是"免费"
{
txtShiShouJinE.Text = "0";//实收金额为0
txtZheKou.Text = "0";//折扣为0
txtYouHuiJinE.Text = txtYingShouJinE.Text;//优惠金额等于应收金额
}
JiSuanZhaoLing();//调用计算找零方法
}

private void JiSuanZhaoLing()
{
try
{
if (Convert.ToDecimal(txtShiShouJinE.Text) < 0)//判断实收金额是否为负数
{
MessageBox.Show("实收金额不能为负数!");
txtShiShouJinE.Text = "0";
}
decimal decZhaoLing = (Convert.ToDecimal(txtShiShouJinE.Text) + Convert.ToDecimal(txtYouHuiJinE.Text) - Convert.ToDecimal(txtYingShouJinE.Text));//实收金额+优惠金额-应收金额=找零金额
txtZhaoLing.Text = decZhaoLing >= 0 ? decZhaoLing.ToString() : "0";//如果找零计算后为负数,改为0

}
catch
{
if (txtShiShouJinE.Text != "")
{
MessageBox.Show("实收金额输入错误!");
}
txtShiShouJinE.Text = "0";
}
}
</span>

(5)折扣文本框的,在控件有焦点时,按下并释放某个键时触发的事件
<span style="font-size:18px;">private void txtZheKou_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) || e.KeyChar == '.' || (Keys)e.KeyChar == Keys.Back)//限制只能输入数字和小数点,和点击Backspace按钮
{ }
else
{
e.Handled = true;
}
}
</span>

(6)折扣文本框的,当控件不再是窗体的活动控件时发生的事件
<span style="font-size:18px;">private void txtZheKou_Leave(object sender, EventArgs e)
{
if (txtZheKou.Text == "")
{
MessageBox.Show("折扣不能为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
txtZheKou.Focus();
txtZheKou.Text = "0";
return;
}
}
</span>

(7)折扣文本框的,Text值改变时发生的事件
<span style="font-size:18px;">private void txtZheKou_TextChanged(object sender, EventArgs e)
{
try
{
if (Convert.ToDecimal(txtZheKou.Text) > 10)
{
MessageBox.Show("折扣不能超过10!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
txtZheKou.Text = "10";
JiSuanYouHuiJinE();//调用计算优惠金额方法
return;
}
else if (Convert.ToDecimal(txtZheKou.Text) < 0)
{
MessageBox.Show("折扣不能小于0!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
txtZheKou.Text = "10";
JiSuanYouHuiJinE();//调用计算优惠金额方法
return;
}
else if (txtZheKou.Text == "0")//如果折扣是0,则把付款类型改为免费,以及设置实收金额文本框不能输入
{
cboFuKuanLeiXing.SelectedIndex = 1;
txtShiShouJinE.ReadOnly = true;
txtShiShouJinE.Text = "0";
}
else
{
cboFuKuanLeiXing.SelectedIndex = 0;
txtShiShouJinE.ReadOnly = false;
}
JiSuanYouHuiJinE();//调用计算优惠金额方法
}
catch
{
if (txtZheKou.Text != "")
{
MessageBox.Show("请正确输入折扣!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
txtZheKou.Text = "10";
JiSuanYouHuiJinE();
return;
}
}
}

private void JiSuanYouHuiJinE()
{
try
{
decimal decYingShouJinE = Convert.ToDecimal(txtYingShouJinE.Text);//获取应收金额
decimal decZheKou = 1 - (Convert.ToDecimal(txtZheKou.Text) / 10);//获取折扣
txtYouHuiJinE.Text = (decYingShouJinE * decZheKou).ToString("0.0000");//计算优惠金额
JiSuanZhaoLing();//调用计算找零方法
}
catch { }
}
</span>

(8) 实收金额文本框的,Text值改变时发生的事件
<span style="font-size:18px;">private void txtShiShouJinE_TextChanged(object sender, EventArgs e)
{
JiSuanZhaoLing();//调用计算找零方法
}
</span>

(9)确认结账按钮的单击事件
<span style="font-size:18px;">private void btnBaoCun_Click(object sender, EventArgs e)
{
for (int i = 0; i < dgvChanPinMingXi.Rows.Count; i++)//循环产品明细DGV
{
for (int j = 0; j < dtBaoXiuQiWeiShanChu.Rows.Count; j++)//循环未删除保修期表
{
if (Convert.ToInt32(dgvChanPinMingXi.Rows[i].Cells["保修期"].Value) == Convert.ToInt32(dtBaoXiuQiWeiShanChu.Rows[j]["BaoXiuQiID"]) && Convert.ToBoolean(dtBaoXiuQiWeiShanChu.Rows[j]["YouXiaoFou"]) == false)//找出保修期相等的,判断有效否是否为真
{
MessageBox.Show("第【" + (i + 1).ToString() + "】行的【保修期】已删除,请修改销售单再结账!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);//如果保修期已删除,则提示修改
return;
}
}
}
try
{
if ((Convert.ToDecimal(txtYingShouJinE.Text) - Convert.ToDecimal(txtYouHuiJinE.Text) - Convert.ToDecimal(txtShiShouJinE.Text)) > 0)//判断实收金额是否真确
{
if (MessageBox.Show("收入实收金额不符,确定要完成付款吗?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)
{
return;
}
}
}
catch
{
MessageBox.Show("金额输入不正确!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int intFuKuanZhuangTaiID = 44;//默认为已付款

int intXiaoShouFangShiID = Convert.ToInt32(cboXiaoShouFangShi.SelectedValue);//获取销售方式ID
int intFuKuanFangShiID = Convert.ToInt32(cboFuKuanFangShi.SelectedValue);//获取付款方式ID
int intFuKuanLeiXingID = Convert.ToInt32(cboFuKuanLeiXing.SelectedValue);//获取付款类型ID
decimal decYingShouJinE = Convert.ToDecimal(txtYingShouJinE.Text);//获取应收金额
decimal decShiShouJinE = Convert.ToDecimal(txtShiShouJinE.Text)-Convert.ToDecimal(txtZhaoLing.Text);//获取实收金额
string strJieZhangBianHao = DangRiJieZhangZuiDaDanJuShu("JZ");//获取结账单编号

int intChengGongCiShu = 0;//保存成功次数
for(int i=0;i<intGeShu;i++)
{
int intXiaoShouDanID = intXiaoShouDanIDs[i];//获取销售单ID
decimal decYingShou = 0;
for (int j = 0; j < dgvChanPinMingXi.Rows.Count; j++)//循环产品明细DGV
{
if (intXiaoShouDanID == Convert.ToInt32(dgvChanPinMingXi.Rows[j].Cells["销售单ID"].Value))
{
decYingShou += Convert.ToDecimal(dgvChanPinMingXi.Rows[j].Cells["小计"].Value);//把销售单ID一样的小计累加起来,作为应收金额
}
}
if (Convert.ToInt32(cboFuKuanLeiXing.SelectedValue) == 52)//如果付款类型为免费,则应收金额为0
{
decYingShou = 0;
}
decimal decShiShou = decYingShou * Convert.ToDecimal(txtZheKou.Text) / 10;//计算实收金额
if ((decShiShou > decShiShouJinE) || (i == (intGeShu - 1)))//如果少收了钱的情况下,会出现实收金额过少,则剩下的单据的实收金额,就等于等下的钱了
{
decShiShou = decShiShouJinE;
}
if (myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_XiaoShouDanFuKuan(intFuKuanZhuangTaiID, intXiaoShouFangShiID, intFuKuanFangShiID, intFuKuanLeiXingID, decYingShou, decShiShou, strJieZhangBianHao, intXiaoShouDanID) > 0)//修改销售单为付款,和付款的各项属性,金额
{
intChengGongCiShu++;//成功次数累加
decShiShouJinE -= decShiShou;
}
}
if (intChengGongCiShu == intGeShu)
{
if (intFuKuanPanDuan == 0)//判断是不是销售记录打开的付款窗体
{
if (MessageBox.Show("付款成功,结账单编号【" + strJieZhangBianHao + "】是否继续录入?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
{
this.Dispose();
this.Close();
}
else
{
this.Dispose();
this.Close();
myTabControlp.Controls.RemoveAt(myTabControlp.SelectedIndex);
}
}
else
{
MessageBox.Show("付款成功!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
this.Dispose();
this.Close();
}
}
else
{
MessageBox.Show("付款失败!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

}

private string DangRiJieZhangZuiDaDanJuShu(string strQianZhui)
{
string strDanJuShu = (Convert.ToInt32(myfrmXiaoShouKaiDan_Insert.frmXiaoShouKaiDan_Insert_btnBaoCun_ChaXunJieZhangZuiDaDanJuShu().Rows[0][0]) + 1).ToString();//获取当日最大单据数
if (strDanJuShu.Length == 1)//判断长度
{
strDanJuShu = "000" + strDanJuShu;//如果长度为1,则在前面加000
}
if (strDanJuShu.Length == 2)
{
strDanJuShu = "00" + strDanJuShu;//如果长度为2,则在前面加00
}
if (strDanJuShu.Length == 3)
{
strDanJuShu = "0" + strDanJuShu;//如果长度为3,则在前面加0
}
string Nian = DateTime.Now.Year.ToString();//获取年份
string Yue = DateTime.Now.Month.ToString();//获取月份
Yue = (Yue.Length < 2) ? ("0" + Yue) : Yue;//如果月份位数为1,则前面加0
string Ri = DateTime.Now.Day.ToString();//获取天数
Ri = (Ri.Length < 2) ? ("0" + Ri) : Ri;//如果天数位数为1,则前面加0

return strQianZhui + Nian + Yue + Ri + strDanJuShu;//返回一个拼接完成的结账单号
}
</span>


注:此文章只供学习参考,禁止用于商业用途。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: