打印出错
金蝶云社区-Zw814
Zw814
0人赞赏了该文章 596次浏览 未经作者许可,禁止转载编辑于2016年12月09日 10:12:10

在单据上点击打印按钮,报错。套打模板是绑定在另外一张动态表单上的

#region 准备打印数据
public override void OnPrepareNotePrintData(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePrintDataEventArgs e)
{
#region 变量定义
string strSQL = string.Empty,strFID=string.Empty,strBillNo=string.Empty,strBarCode=string.Empty;
object objValue = null;
DynamicObjectCollection docResult = null;
List lstEntryData = null;
#endregion

try
{
base.OnPrepareNotePrintData(e);
#region 获取单据FID
objValue = this.Model.GetValue("FBILLNO");
strBillNo = (objValue == null ? string.Empty : objValue.ToString()); //单据编号
strSQL = "/*dialect*/" +
"SELECT \r\n" +
" FID \r\n" +
"FROM T_BC_PACKINGPACK \r\n" +
"WHERE FBILLNO='" + strBillNo + "'";
docResult = DBUtils.ExecuteDynamicObject(this.Context, strSQL);
strFID = docResult[0]["FID"].ToString();
#endregion

#region 获取打印数据
strSQL = "/*dialect*/ \r\n" +
"SELECT \r\n" +
" a.FPROJECTNUMBER, --合同号 \r\n" +
" a.FPROJECTNAME, --项目名称 \r\n" +
" a.FBOXNAME, --箱名 \r\n" +
" a.FBOXBATCHNO, --箱批次 \r\n" +
" a.FMODEL, --规格型号 \r\n" +
" b.FITEMNUMBER, --物料编码 \r\n" +
" b.FITEMNAME, --物料名称 \r\n" +
" b.FITEMMODEL, --规格型号 \r\n" +
" b.FSQTY, --应发 \r\n" +
" b.FRQTY --实发 \r\n" +
"FROM VW_BC_PACKED a \r\n" +
"INNER JOIN VW_BC_PACKEDENTRY b ON a.FID=b.FID \r\n" +
"WHERE a.FID=" + strFID + "";
docResult = DBUtils.ExecuteDynamicObject(this.Context, strSQL);
#endregion

#region 表头数据
if (e.DataSourceId.ToUpper().Equals("FBillHead".ToUpper()))
{
var doNewHead = new DynamicObject(e.DynamicObjectType);
if (docResult != null && docResult.Count > 0)
{
doNewHead["FPROJECTNUMBER"] = docResult[0]["FPROJECTNUMBER"]; //合同号
doNewHead["FPROJECTNUMBER"] = docResult[0]["FPROJECTNAME"]; //项目名称
doNewHead["FBOXNAME"] = docResult[0]["FBOXNAME"]; //箱号
doNewHead["FBATCHNO"] = docResult[0]["FBOXBATCHNO"]; //箱批号
doNewHead["FMODEL"] = docResult[0]["FMODEL"]; //规格型号
doNewHead["FBAOCODE"] = ""; //条码号
e.DataObjects = new DynamicObject[] { doNewHead };
}
else
{
e.DataObjects = null;
}
}
#endregion

#region 表体数据
if (e.DataSourceId.ToUpper().Equals("FENTITY".ToUpper()))
{
lstEntryData = new List();
if (docResult != null && docResult.Count > 0)
{
foreach (DynamicObject curValue in docResult)
{
var doNewEntryRow = new DynamicObject(e.DynamicObjectType);
doNewEntryRow["FITEMNUMBER"] = curValue["FITEMNUMBER"]; //物料编码
doNewEntryRow["FITEMNAME"] = curValue["FITEMNAME"]; //物料名称
doNewEntryRow["FITEMMODEL"] = curValue["FITEMMODEL"]; //规格型号
doNewEntryRow["FSQTY"] = curValue["FSQTY"]; //应发数量
doNewEntryRow["FRQTY"] = curValue["FRQTY"]; //实发数量
lstEntryData.Add(doNewEntryRow);
}
e.DataObjects = lstEntryData.ToArray();
}
else
{
e.DataObjects = null;
}
}
#endregion

}
catch (Exception ex)
{
throw ex;
}
}
#endregion

#region 打印标签
public override void AfterBarItemClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AfterBarItemClickEventArgs e)
{
string strCallPrintResult = string.Empty;
DynamicObjectCollection docEntry = null;
try
{
base.AfterBarItemClick(e);

if (e.BarItemKey.ToUpper().Equals("tbPrintLevel".ToUpper()))
{
strCallPrintResult = BarCodeUtils.BarCodePrint(this.View, "preview", "COZ_BOXTAGMODEL", "COZ_BOXTAGMODELPRT", string.Empty, string.Empty, 1);
if (!string.IsNullOrEmpty(strCallPrintResult))
{
this.View.ShowMessage(strCallPrintResult);
}
}
}
catch (Exception ex)
{
this.View.ShowErrMessage(string.Empty, "打印失败. \r\n" + ex.Message, MessageBoxType.Notice);
}
}
#endregion

public static string BarCodePrint(IBillView view, string PrintType, string PrintDynamicBillID,
string PrintTemplateID, string PrinterName, string SortField, int iPrintDataNumber)
{
List lstPrintJobItem = new List();
PrintJobItem printJobItem = new PrintJobItem();
string gudPrintJobID = string.Empty, PrintActionName = string.Empty, PrintTypeChsName = string.Empty;
JSONObject jobjPrintParams = null;

try
{
#region 数据校验
if (view == null)
{
return "调用表单视图不能为空.";
}
if (string.IsNullOrEmpty(PrintTemplateID))
{
return "打印模板名称不能为空.";
}
if (string.IsNullOrEmpty(PrintType) || ((!PrintType.ToUpper().Equals("preview".ToUpper())) && (!PrintType.ToUpper().Equals("print".ToUpper()))))
{
return "打印类型必须为[preview]或者[print]";
}
#endregion

#region 设置打印数据属性
for (int iLoop = 1; iLoop <= iPrintDataNumber; iLoop++)
{
printJobItem = new PrintJobItem();
printJobItem.BillId = "100001";////动态打印表单数据ID
printJobItem.FormId = PrintDynamicBillID;//动态打印表单
printJobItem.TemplateId = PrintTemplateID;//动态打印模板
printJobItem.SortString = SortField;//缺省为空值
lstPrintJobItem.Add(printJobItem);
}
#endregion

#region 设置打印参数
//唯一ID
gudPrintJobID = Guid.NewGuid().ToString();

jobjPrintParams = new JSONObject();
jobjPrintParams.Put("pageID", view.PageId);
jobjPrintParams.Put("printJobId", gudPrintJobID);
jobjPrintParams.Put("action", PrintType);//预览--"preview";打印--"print"
if (PrintType.ToUpper().Equals("preview".ToUpper()))
{
PrintActionName = "printPreview";
PrintTypeChsName = "打印预览";
jobjPrintParams.Put("printBarName", null);
}
else if (PrintType.ToUpper().Equals("print".ToUpper()))
{
PrintActionName = "print";
PrintTypeChsName = "打印";
if (!string.IsNullOrEmpty(PrinterName))
{
jobjPrintParams.Put("printerAddress", PrinterName);
}
}
#endregion

#region 打印
view.Session[gudPrintJobID] = lstPrintJobItem;//设置调用表单打印信息
view.AddAction(PrintActionName, jobjPrintParams);//提交打印任务
#endregion

#region 正常返回空字符串
return string.Empty;
#endregion
}
catch (Exception ex)
{
throw new Exception(PrintTypeChsName + "失败.\r\n" + ex.Message);
}
}
#endregion