MES智慧车间-新柔性产线(包装扫描汇报)-包装箱SN号打印(目前支持云星空8.2版本)
MES智慧车间-新柔性产线(包装扫描汇报)-SN号条码打印插件
我这里没有环境,我暂且借着BOS设计器里面的单据为大家讲述一下关于这个打印插件的开发,其实这个过程还蛮曲折的,因为没有做过,甚至是第一次接触打印机,所以耗费了很长时间,废话不多说,直接进入正题!!
如果对柔性产线有一定的了解的小伙伴应该知道这张单据
一般我可以选择打印箱号,关于箱号的打印方式,有官方的文档可以看一下
金蝶云星空V8.0企业版产品培训文档 (kingdee.com)
我们的需求是这样的我想打出来这样的一个格式
但是在看完官方文档之后,我发现一个事情SN号无法绑定
此时我遇到了第一个难题
SN号怎么获取(SN号的数据存储在缓存中)
这个问题求助了总部老师出了一个补丁,解开发现里面更新了一个dll,我已经放附件里面了,在写插件之前记得要替换掉根目录下的dll,当然,别忘记把自己原来的做好备份哦(目前只支持云星空8.2版本)
获取完SN号,我就在社区里找到了好几个关于更改套打数据的插件,但是都不是移动端的,然后我就仿照着写了一个,不出意外的没效果
然后我就想到一个最原始的方法,既然都是用打印机打印的,那么一定有发送指令的地方,我直接构建指令不就好了
于是我就带着我的反编译工具,对这张表单的表单插件下手了
功夫不负有心人,终于被我找到了放打印机指令的地方
具体细节(需要懂一点ZPL打印指令)
我的做法是找到打印箱号按钮所调用的方法,一层一层的拨开迷雾,然后我新加了一个按钮,把原来的打印箱号的方法拿过来,在调用打印方法之前把指令插入到指令集合里面,下面是源码
[System.ComponentModel.Description("包装扫描替换表单插件")] [HotUpdate] public class Class5 : FlexiblePackageEdit { public override void ButtonClickWithAuth(ButtonClickEventArgs e) { base.ButtonClickWithAuth(e); switch (e.Key.ToUpper()) { case "F_BLN_BUTTON": this.PrintBoxByRpt(uiParamTransInfo.BoxNumber, "02"); break; } } //下面的方法都是原方法基础上做了改动,大家可以自行反编译查看 protected void PrintBoxByRpt(string boxNumber, string tempType) { if (ObjectUtils.IsNullOrEmptyOrWhiteSpace(boxNumber)) { base.View.ShowStatusBarInfo(ResManager.LoadKDString("箱号为空,不能进行箱号打印!", "015747000040086", SubSystemType.MFG)); return; } SFSPrintBoxByRptParam sFSPrintBoxByRptParam = new SFSPrintBoxByRptParam(); sFSPrintBoxByRptParam.BoxNumber = boxNumber; sFSPrintBoxByRptParam.TempType = tempType; SFSPrintBoxByRptParam paramValue = sFSPrintBoxByRptParam; InitParamValue(paramValue); SFSParamInfo<SFSPrintBoxByRptParam> sFSParamInfo = new SFSParamInfo<SFSPrintBoxByRptParam>(); sFSParamInfo.RequestId = SequentialGuid.NewGuid().ToString(); sFSParamInfo.UserToken = base.Context.UserToken; sFSParamInfo.ApiName = "PrintBoxByRpt"; sFSParamInfo.ApiDescription = ResManager.LoadKDString("根据汇报单打印箱号", "015747000015534", SubSystemType.MFG); sFSParamInfo.ParamValue = paramValue; SFSParamInfo<SFSPrintBoxByRptParam> paramInfo = sFSParamInfo; SFSReturnInfo<SFSPrintBoxResult> sFSReturnInfo = SFSWebServiceHelper.ExecuteService<SFSPrintBoxByRptParam, SFSPrintBoxResult>(base.Context, paramInfo); // List<string> snString = SFSPrintUtils.GetRptTaskCachePrdSerialNoByBoxNumber(this.Context, boxNumber);//此处为总部老师提供的插件内的方法,获取缓存中的SN序列号, 下面从开始标记,到结束标记之间的代码是自行构建的基础,需要有一定的ZPL打印指令基础 下面这段实现的功能为(一行两列,一张三行,溢出换纸张) //List<string> list = new List<string>(); if (snString.Count > 6)//开始 { List<string> demo1 = new List<string>(); for (int i = 0; i < 6; i++) { demo1.Add(snString[i]); } string zpl1 = Demoo.ZPLDemo(demo1); //list.Add(zpl1); sFSReturnInfo.ReturnValue.PrintInfo.Add(zpl1); List<string> demo2 = new List<string>(); for (int i = 6; i < snString.Count; i++) { demo2.Add(snString[i]); } string zpl2 = Demoo.ZPLDemo(demo2); //list.Add(zpl2); sFSReturnInfo.ReturnValue.PrintInfo.Add(zpl2); } else { string zpl = Demoo.ZPLDemo(snString); //list.Add(zpl); sFSReturnInfo.ReturnValue.PrintInfo.Add(zpl); }//结束 //Demoo.Print(base.View, list, list.Count); // this.Print(sFSReturnInfo); base.View.ShowStatusBarInfo(sFSReturnInfo.Message); } protected void Print(SFSReturnInfo<SFSPrintBoxResult> resultInfo) { if (resultInfo.ReturnValue != null) { Class5.Print(base.Context, base.View, resultInfo); } } public static void Print(Context ctx, IMobileView view, SFSReturnInfo<SFSPrintBoxResult> resultInfo) { if (resultInfo.ReturnValue != null) { Class5.Print(view, resultInfo.ReturnValue.PrintInfo, resultInfo.ReturnValue.PrintCount); } } public static void Print(IMobileView view, List<string> printInfo, int printCount) { view.MobileNotePrint(printInfo); return; } }
至此,我就实现了我的打印需求!!
中间还踩了很多坑,说多了都是泪,有需要的小伙伴可以参考一下,拒绝踩坑!!
少了一个方法,补一下
/// <summary> /// 构建自定义ZPL打印指令 /// </summary> /// <param name="list"></param> /// <returns></returns> public static string ZPLDemo(List<string> list = null) { StringBuilder builder = new StringBuilder(); builder.AppendLine("^XA"); int x = 150;//横坐标 int y = 70;//纵坐标 bool staus = true; for (int i = 0; i < list.Count; i += 2) { if (staus == true) { builder.AppendLine($"^FO{x},{y}^BY2^BCN,100,Y,N,N"); builder.AppendLine($"^FD{list[i]}^FS"); if (i + 1 < list.Count) { builder.AppendLine($"^FO{x += 400},{y}^BY2^BCN,100,Y,N,N"); builder.AppendLine($"^FD{list[i + 1]}^FS"); } staus = false; } else { builder.AppendLine($"^FO{x -= 400},{y += 170}^BY2^BCN,100,Y,N,N"); builder.AppendLine($"^FD{list[i]}^FS"); if (i + 1 < list.Count) { builder.AppendLine($"^FO{x += 400},{y}^BY2^BCN,100,Y,N,N"); builder.AppendLine($"^FD{list[i + 1]}^FS"); } x -= 400; y += 170; staus = true; } } builder.AppendLine("^XZ"); return builder.ToString(); }
MES智慧车间-新柔性产线(包装扫描汇报)-包装箱SN号打印(目前支持云星空8.2版本)
MES智慧车间-新柔性产线(包装扫描汇报)-SN号条码打印插件 我这里没有环境,我暂且借着BOS设计器里面的单据为大家讲述一下关于这个打...
点击下载文档
上一篇:填充单据体的几各种方式下一篇:ERP状态机插件使用场景案例
本文2024-09-16 17:13:13发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14306.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf
热门文章