c#之tcbs 打印凭证示例

 //**************************************************************************//
        //****************          资金类型处理         ***************************//
        //**************************************************************************//
        private bool ProcessFundGrid(long clearingAcctNumber, long deductSchedNbr, long? submNbrToCopy, string deductSubOrgNbr)//
        {
            if (base.ExceptionList.Count <= 0)
            {
                string rtxnTranTypeCode = string.Empty;
                decimal availaibleSubAcctBalance = decimal.MinValue;
                decimal glavailaibleSubAcctBalance = 0M;
                string rtxnTypeCode = string.Empty;
                string intlRtxnDesc = string.Empty;
                bool isCopy = this._formMode == FormMode.Copy;
                if ((((base.ActiveTask != null) && (base.ActiveTask.ActiveAccount != null)) && (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"] != null)) && (this.txtAmount.Value != null))
                {
                    decimal totCash = 0M;
                    //是否超过最大限额的判断--start
                    if (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.HasValue)
                    {
                        availaibleSubAcctBalance = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.Value;
                    }
                    else
                    {
                        availaibleSubAcctBalance = 0M;
                    }
                    if ((this.txtAmount.Value + availaibleSubAcctBalance) > 999999999999999.99M)
                    {
                        CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账户余额{0} 与交易金额{1} 之和已超过最大限额【999,999,999,999,999.99】", new object[] { FI.FormatCurrency(availaibleSubAcctBalance), FI.FormatCurrency((decimal)this.txtAmount.Value) });
                        return false;
                    }
                    //是否超过最大限额的判断--end
                    //if (base.ActiveTask.ActiveAccount.CurrAcctStatCd == "APPR")
                    //{
                    //    rtxnTypeCode = "NA";
                    //}

                    //交易类型
                    rtxnTypeCode = "PAYD";//
                    Rtxn rtxn = Rtxn.NewRtxn(new long?(base.ActiveTask.ActiveAccount.AcctNbr.Value), rtxnTypeCode);
                    //现金箱
                    if (CoreUser.CashboxNbr != long.MinValue)
                    {
                        rtxn.CashboxNbr = CoreUser.CashboxNbr;
                    }
                    //生效日期
                    if (this.calDepositEffectiveDate.SelectedDate.HasValue)
                    {
                        rtxn.EffectiveDate = this.calDepositEffectiveDate.SelectedDate.Value;
                    }
                    //交易发生额
                    if (this.txtAmount.Text != null)
                    {
                        rtxn.TranAmt = decimal.Parse(this.txtAmount.Text);
                    }
                    //交易子账号
                    rtxn.HoldSubAcctNbr = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr;
                    //资金列表的判断
                    for (int iCount = 0; iCount < this.grdFundGrid.Funds.Count; iCount++)
                    {
                        if (!((this.grdFundGrid.Funds[iCount].Amt != 0M) && this.grdFundGrid.Funds[iCount].Amt.HasValue))
                        {
                            CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "金额无效", new object[0]);
                            return false;
                        }
                        if (this.grdFundGrid.Funds[iCount].FundTypCd == null)
                        {
                            CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "资金类型不可为空", new object[0]);
                            return false;
                        }
                        if (this.grdFundGrid.Funds[iCount].FundTypCd == "CASH")
                        {
                            totCash += this.grdFundGrid.Funds[iCount].Amt.Value;
                        }
                        if (!this.grdFundGrid.Funds[iCount].ParentRtxnIsNull)
                        {
                            rtxnTranTypeCode = this.grdFundGrid.Funds[iCount].ParentRtxn.RtxnTypCd;
                        }
                        if ((!this.grdFundGrid.Funds[iCount].AcctNbr.HasValue && (rtxnTranTypeCode != string.Empty)) && (rtxnTranTypeCode != null))
                        {
                            CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账号不可为空.", new object[0]);
                            return false;
                        }
                        string wthacctnbr = string.Empty;
                        string wthacctorgnbr = string.Empty;
                        this.approvepersnbr = long.MinValue;
                        wthacctnbr = this.grdFundGrid.WthAccount;
                        if (wthacctnbr != string.Empty)
                        {
                            if (this._contractAcctNbr.ToString() != wthacctnbr)
                            {
                                CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "划款账户不是签约账户!");

                                return false;
                            }
                            Acct acctOrgNbr = Acct.GetAcct(long.Parse(wthacctnbr), new object[] { AcctFetch.Basic });
                            //20110417--款项有内部账划出时加授权页面
                            if (acctOrgNbr.MjAcctType.ToString() == "GL")
                            {

                                判断取款账户内是否有足够的资金
                                //if (acctOrgNbr.SubAccounts["NOTE", "BAL"].BalanceHistoryIsNull==false)
                                //{
                                //    glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
                                //}
                                //else
                                //{
                                //    glavailaibleSubAcctBalance = 0M;
                                //}
                                //判断取款账户内是否有足够的资金
                                try
                                {
                                    glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
                                }
                                catch (Exception ex)
                                {
                                    glavailaibleSubAcctBalance = 0M;
                                }
                                if (glavailaibleSubAcctBalance > (decimal?)(this.txtAmount.Value * -1M))
                                {
                                    CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "此内部户内余额不足!");

                                    return false;
                                }
                                if (!this.InvokeOverrideScreen(0x185L))
                                {
                                    return false;
                                }

                            }


                        }
                        //交易描述
                        if (CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate] != null)
                        {
                            CalcTypVarValue calcTypVarValue = CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate];
                            if ((calcTypVarValue.CalcVarValue == "Y") && (((rtxnTypeCode == "PAYD") && ((rtxnTranTypeCode == "WTH") || (rtxnTranTypeCode == "GLD"))) && (Math.Abs(this.grdFundGrid.Funds[iCount].Amt.Value) == Math.Abs(this.grdFundGrid.TotalAmount))))
                            {
                                intlRtxnDesc = "Transfer from " + this.grdFundGrid.Funds[iCount].AcctNbr.ToString();
                            }
                        }
                        //子交易的添加
                        rtxn.AddFund(this.grdFundGrid.Funds[iCount].FundTypCd, this.grdFundGrid.Funds[iCount].FundTypDtlCd, this.grdFundGrid.Funds[iCount].ClearCatCd, this.grdFundGrid.Funds[iCount].Amt, this.grdFundGrid.Funds[iCount].NbrOfItems);
                    }


                    rtxn.AddBalance(base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr, "NOTE", "BAL", (decimal?)(this.txtAmount.Value * -1M));//20110321将【RTXNBAL】表中变为负数
                    rtxn.InternalDescription = intlRtxnDesc;
                    
                    long? numberOfItems = long.MinValue;
                    RtxnCollection rtxnCollection = this.grdFundGrid.ChildTrxns;
                    //string strCheckNbr = string.Empty;
                    //string[] strArrayCheckNbr;
                    bool flag = false;
                    foreach (Rtxn rtxnChild in rtxnCollection)
                    {
                        //if (rtxnChild.CheckNbr != null)
                        //{
                        //    strCheckNbr = strCheckNbr + rtxnChild.CheckNbr.ToString() + ";";
                        //}

                        if (rtxnChild.RtxnFundTyps.Count > 0)
                        {
                            //strCheckNbr = rtxnChild.CheckNbr.ToString();
                            long? nbrOfItemsTemp = rtxnChild.RtxnFundTyps[0].NbrOfItems;
                            if (!nbrOfItemsTemp.HasValue || nbrOfItemsTemp.GetValueOrDefault() <= 0L)
                            {
                                numberOfItems = 1L;
                            }
                            else
                            {
                                numberOfItems = rtxnChild.RtxnFundTyps[0].NbrOfItems;
                            }
                            rtxn.ChildRtxns.Add(rtxnChild);
                        }

                    }
                   
                    重复支票号的判断
                    //if (strCheckNbr.Length > 0)
                    //{
                    //    strArrayCheckNbr = strCheckNbr.Split(';');
                    //    if (strArrayCheckNbr.Length > 1)
                    //    {
                    //        CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "转账失败!批次入账一次只能使用一张转账支票!");

                    //        return false;
                    //    }
                    //    for (int i = 0; i < strArrayCheckNbr.Length - 1; i++)
                    //    {
                    //        for (int j = i + 1; j < strArrayCheckNbr.Length; j++)
                    //        {
                    //            if (strArrayCheckNbr[i] == strArrayCheckNbr[j])
                    //            {
                    //                flag = true;
                    //                break;
                    //            }
                    //        }
                    //    }
                    //    if (flag)
                    //    {
                    //        CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "发现重复的支票号,转账失败!");

                    //        return false;
                    //    }
                    //}


                  
                    rtxn.SetupDeposit(RtxnValidator.Deposit);

                    DeductSchedSubmProcessor deductSchedSubmProcessor = new DeductSchedSubmProcessor();
                    try
                    {
                        if (rtxn != null)
                        {
                            deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, false, submNbrToCopy);
                            deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
                            rtxn = deductSchedSubmProcessor.RtxnObj;
                        }
                    }
                    catch (CoreTransactionException tExcp)
                    {
                        if (rtxn != null)
                        {
                            frmOverride verrideFrm = new frmOverride(tExcp.Transaction);
                            if (overrideFrm.ShowDialog(this) == DialogResult.Cancel)
                            {
                                return false;
                            }
                            rtxn.ApproverPersNbr = overrideFrm.PersNbr;
                            deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, true, submNbrToCopy);
                            deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
                            rtxn = deductSchedSubmProcessor.RtxnObj;
                        }
                    }
                    if (totCash > 0M)
                    {
                        TxnCashCount.ClearCashCounts();
                        TxnCashCount.IsRtxn = true;
                        TxnCashCount.TxnTypCd = rtxn.RtxnTypCd;
                        TxnCashCount.AcctNbr = rtxn.Account.AcctNbr.Value;
                        TxnCashCount.CashboxNbr = CoreUser.CashboxNbr;
                        TxnCashCount.TxnNbr = rtxn.RtxnNbr.Value;
                        TxnCashCount.RequestAmount = totCash;
                        TxnCashCount.DispenseOrCashCount();
                        TxnCashCount.CallCashCount();
                    }
                    if (deductSchedSubmProcessor.ErrorNbr <= 0)
                    {
                        this.PopulateGrid();
                        //打印凭证的方法
            PrePrint(rtxn, rtxnCollection, deductSchedNbr.ToString().PadLeft(8, '0'), deductSchedSubmProcessor.SubmdNbr.ToString(), approvepersnbr);
                    }

                    return true;
                }
            }
            return false;
        }










//**************************************************************************//
        //****************      转账支票取款时打印凭条   ***************************//
        //**************************************************************************//
        private void PrePrint(Rtxn rtxn, RtxnCollection childRtxn, string deductSchedNbr, string submdNbr, long approvepersnbr)
        {
            string rgAcctnbr = null;//付款人账号
            string rgName = null;//付款人名称
            string rgChecknbr = null;//转账支票号
            Acct rgAcct = null;
            string resultString = string.Empty;
            if ((childRtxn != null) && (childRtxn[0].CheckNbr.ToString() != null) && (childRtxn[0].CheckNbr.ToString() != ""))
            {
                resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入支票背面,按确定按钮开始打印", new object[0]);
            }
            else
            {
                resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入通用业务凭证,按确定按钮开始打印", new object[0]);
            }
            if (resultString == "确定")
            {
                try
                {
                    //子交易(通过转账支票从单位账户取款)
                    if (childRtxn != null)
                    {
                        Rtxn rtxnChild = childRtxn[0];

                        rgAcct = Acct.GetAcct(rtxnChild.AcctNbr, new object[] { 0L });
                        if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
                        {
                            rgAcctnbr = rtxnChild.AcctNbr.ToString();
                            //orgName = orgAcct.BranchOrg.OrgName;//通过内部户转到清算账户
                            rgName = GlAcctTitle.GetDecodeGLAccttitl(rtxnChild.AcctNbr, new object[] { }).GlAcctTitleName.ToString();//
                        }
                        else
                        {
                            rgAcctnbr = rtxnChild.MediumId;  //单位帐号
                            if (orgAcct != null && orgAcct.TaxRptForOrgNbr.HasValue && (orgAcct.TaxRptForOrgNbr.Value > 0L))
                            {
                                rgName = orgAcct.TaxRptForOrganization.OrgName;  //单位名称                    
                            }
                            else
                            {
                                rgName = "";  //单位名称                
                            }
                        }

                        rgChecknbr = rtxnChild.CheckNbr.ToString();  //转账支票号
                    }
                    else
                    {
                        CoreMessageBox.Show("没有需要打印的交易!");
                        return;
                    }

                    System.Collections.Hashtable ht = new System.Collections.Hashtable();
                    ht.Add("serialNumber", string.Concat(rtxn.AcctNbr, rtxn.RtxnNbr)); //交易流水号
                    ht.Add("tranType", "(代发工资)批次入账");  //交易类型
                    RtxnStatHist _rtxnStatHist = RtxnStatHist.GetRtxnStatHist(rtxn.AcctNbr, rtxn.RtxnNbr, new object[] { RtxnStatHistFetch.TransDetail });
                    if (_rtxnStatHist != null)
                    {
                        ht.Add("tranDate", _rtxnStatHist.PostDate.Value.ToString("yyyy-MM-dd"));  //交易记账日期
                        ht.Add("tranTime", ((DateTime)_rtxnStatHist.ActDateTime).ToString("HH:mm:ss"));  //交易时间
                    }
                    else
                    {
                        ht.Add("tranDate", CoreUser.PostingDate.ToString("yyyy-MM-dd"));  //交易记账日期
                        ht.Add("tranTime", base.CurrTime.ToString("HH:mm:ss"));  //交易时间
                    }

                    ht.Add("checkno", orgChecknbr);  //支票号
                    ht.Add("deductschednbr", deductSchedNbr);  //协议号
                    ht.Add("submdnbr", submdNbr);  //批次号
                    ht.Add("payeeName", orgName);  //付款人名称(单位账户)
                    ht.Add("payeeAcctnbr", orgAcctnbr);  //付款人账号
                    if (rtxn.Account != null && rtxn.Account.BranchOrgNbr.HasValue && (rtxn.Account.BranchOrgNbr.Value > 0L))
                    {
                        ht.Add("receiverName", rtxn.Account.BranchOrg.OrgName);  //收款人名称(银行内部户)   
                        ht.Add("receiverBankName", rtxn.Account.BranchOrg.OrgName);  //收款人开户行(银行内部户)
                    }
                    else
                    {
                        ht.Add("receiverName", "");  //收款人名称(银行内部户)
                        ht.Add("receiverBankName", "");  //收款人开户行(银行内部户)
                    }
                    ht.Add("receiverAcctnbr", rtxn.AcctNbr);  //收款人账号(银行内部户)
                    ht.Add("Currency", Acct.GetAcct(rtxn.AcctNbr).AccountCurrency.CurrencyDesc); //币种
                    ht.Add("traamtxiaoxie", Math.Abs(rtxn.TranAmt.Value).ToString("C"));//金额 (小写)
                    ht.Add("traamtdaxie", Math.Abs(rtxn.TranAmt.Value).ToString());//金额 (大写)
                    //ht.Add("des", "代发单位通过转账支票进行代发工资批次入账");//备       注
                    if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
                    {
                        ht.Add("des", "代发单位通过【内部账户】进行代发工资批次入账");//备      注
                    }
                    else
                    {
                        if (orgChecknbr != null && orgChecknbr != "")
                        {
                            ht.Add("des", "代发单位通过【转账支票】进行代发工资批次入账");//备      注
                        }
                        else
                        {
                            ht.Add("des", "代发单位通过【提款】进行代发工资批次入账");//备      注
                        }
                    }

                    ht.Add("transactor", CoreUser.SAFUserName);//经       办
                    Pers pers;
                    string approverPersName = "";
                    if (approvepersnbr != long.MinValue)
                    {
                        pers = Pers.GetPers(approvepersnbr, new object[] { });
                        if (pers != null)
                        {
                            approverPersName = pers.LastName;
                        }
                    }

                    if (rtxn != null && rtxn.ApproverPersNbr != long.MinValue)
                    {
                        pers = Pers.GetPers(rtxn.ApproverPersNbr, new object[] { });
                        if (pers != null)
                        {
                            approverPersName = pers.LastName;
                        }
                    }

                    ht.Add("authorization", approverPersName);//授       权

                    //数据准备完成开始打印
                    #region 转账支票取款凭证
                    //OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
                    //OSI.Core.Windows.Query.DynamicQueryManager dqm = new OSI.Core.Windows.Query.DynamicQueryManager();
                    //CoreMessageBox.Show("请插入支票背面,开始打印");
                    //20110916 zxy 修改 {16} 自2623换行到2628   新加 {18},用于在通用凭证右上角打印  年   月    日 
                    string str = string.Format(
                    @"
                                                                  {18}
      {0}{1}
      {2}{3}
      {4}{5}
      {6}
      {7}
      {8}
      {9}
      {10}
      {11}
      {12}
      {13}{14}
      {15}
     




      {16}{17}
     
",
                              OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("流 水 号:", ht["serialNumber"]), 39),
                                                                          string.Concat("交易类型:", ht["tranType"]),
                              OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("交易日期:", ht["tranDate"]), 39),
                                                                          string.Concat("交易时间:", ht["tranTime"]),
                              OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("协 议 号:", ht["deductschednbr"]), 39),
                                                                          string.Concat("批 次 号:", ht["submdnbr"]),
                                                                          string.Concat("支 票 号:", ht["checkno"]),
                                                                          string.Concat("付 款 人:", ht["payeeName"]),
                                                                          string.Concat("付款账号:", ht["payeeAcctnbr"]),
                                                                          string.Concat("收 款 人:", ht["receiverName"]),
                                                                          string.Concat("收款账号:", ht["receiverAcctnbr"]),
                                                                          string.Concat("收款人开户行:", ht["receiverBankName"]),
                                                                          string.Concat("币    种:", ht["Currency"]),

                              OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("金    额(小写):", ht["traamtxiaoxie"]), 39),
                              string.Concat("金    额(大写):", OSI.Core.Windows.Printing.PrintUtil.MoneyToChinese(ht["traamtdaxie"].ToString())),
                                                                          string.Concat("备    注:", ht["des"]),
                              OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("经    办:", ht["transactor"].ToString().Trim()), 39),//20110916 zxy 添加OSI.Core.Windows.Printing.PrintUtil.PadLeft(
                                                                          string.Concat("授    权:", ht["authorization"]),//20110916 zxy 新加右括号及逗号
                              OSI.Core.Windows.Printing.PrintUtil.PadLeft("年" + OSI.Core.Security.CoreUser.PostingDate.Year.ToString() + "月" + OSI.Core.Security.CoreUser.PostingDate.Month.ToString() + "日" + OSI.Core.Security.CoreUser.PostingDate.Day.ToString(), 100));//20110916 zxy 新添

                     

                    OSI.Framework.Trace.TraceWriter.WriteFile(str);

                    //dqm.ClearPrtVarArray();
                    //dqm.SetPrtVarArrayText(0, str);
                    //pm.Print(6000020, dqm);
                   
                    RtxnStatHistPrt rxhp = RtxnStatHistPrt.NewRtxnStatHistPrt();
                    rxhp.AcctNbr = Convert.ToInt64(rtxn.AcctNbr);
                    rxhp.RtxnNbr = Convert.ToInt32(rtxn.RtxnNbr);
                    rxhp.ActDateTime = _rtxnStatHist.ActDateTime.GetValueOrDefault();
                    rxhp.TimeUniquExtn = _rtxnStatHist.TimeUniqueExtn.GetValueOrDefault();
                    rxhp.PrtItemTypCd = "PAYD";
                    rxhp.PrtItemStr = str;
                    rxhp.Save();
                    OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
                    pm.Print(6000223, str, "代发工资批次入账凭条打印");


                    #endregion
                }
                catch (Exception ex)
                {
                    CoreMessageBox.Show("打印失败");
                }

            }

        }









//打印凭证的结果

                                                              年2012月5日15                                                                                      
      流 水 号:183903053010ss290            交易类型:(xss)abc
      交易日期:2023-05-15                   交易时间:19:40:23
      协 议 号:00000192                     批 次 号:6
      支 票 号:
      付 款 人:ab
      付款账号:2334
      收 款 人:sx银行结算管理部(清算中心)
      收款账号:22333
      收款人开户行:sx银行结算管理部(清算中心)
      币    种:人民币
      金    额(小写):¥20.00              金    额(大写):貳拾元整
      备    注:代发单位通过【提款】进行代发工资批次入账
     




      经    办:axs                          授    权:
      

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-707749/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-707749/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值