有客户的外箱流水码要求从条形码改为二维码,每个成品一个流水码(12位),前4位为固定的的供方代码,第5位为年份简码,6-7位为生产周,后5位为流水号,每张二维码标签最多包含100个流水码,不同PO同一时间出货的,流水码不能相同,目前只有每箱100PCS以下的订单,所以根据这些条件,启用了一个自定义单据来做外箱标签,用脚本来自动生成所有流水码 目前的脚本只限于每箱<=100PCS的包装数量,超过这个包装数量的脚本需要修改根据指定行复制行内容的条件 脚本思路: 1.启用一个单据类型【HF】的自定义单据,不影响库存,引用【BA】销售订单,表头只显示客户,启用5个表头扩展属性,用来记录【每箱数量,合计箱数,订单数量,前7位流水码,流水码开始】等数值 2.根据表头的客户来判断是否需要生成流水码(有其他客户只打印箱号,不需要流水码) 3.引用销售订单明细数据,销售订单明细有包含【产品编号,订单数量,每箱数量,总箱数,尾数箱数量】等数值 4.根据每箱一个外箱二维码标签的条件(每箱数量超过100就需要多张,暂不支持),每箱一行明细,依据总箱数复制第一行的数据到N行 5.引用过来数据复制行数据完成后保存单据,在保存单据的时候来生成所有流水码 6.添加3个明细扩展列:【lsm,lshks,lshjs】分别为:【流水码前缀(窗口输入,限定7位数),流水号开始(首行窗口输入,脚本行循环赋值),流水号结束(脚本行循环赋值)】 7.根据每张二维码标签最多包含100个流水码的条件,添加101个明细扩展列,命名:lsh+3位序号,从lsh001-lsh101【测试ok后,这些明细扩展列可以不用显示出来】 8.根据每箱数量结合第一个流水码先生成【流水码开始】,【流水码结束】,第一列【流水码】的数据 9.根据列循环开始的列号结合每箱数量来循环生成剩下的流水码数据 10.在打印模板用脚本生成二维码数据,每个流水码之间加上回车字符 单据脚本节选(部分): int func_show() { gui_hide("SpeedButton_Print") int xx,yy,ww,hh,; xx=gui_get_x("SpeedButton_Print") //【打印】横向坐标 yy=gui_get_y("SpeedButton_Print") //【打印】控件纵向坐标 ww=gui_get_w("SpeedButton_Print") //【打印】控件宽度 hh=gui_get_h("SpeedButton_Print") //【打印】控件高度 gui_create_speedbutton("ScrollBox_Func_Left","HF_print",xx,yy,ww,hh,"打印","call_csp.voucher.HF.HF_print"); gui_set_hint ("HF_print", '提示:按照客户匹配打印模板'); gui_set_font_color('HF_print',16711680); gui_set_font_color("HF_print",16711680); gui_disable("edit_Ext1") gui_disable("edit_Ext2") gui_disable("edit_Ext3") gui_disable("edit_Ext4") gui_disable("edit_Ext5") gui_set_font_color('edit_Ext1',16711680); gui_set_font_color("lab_Ext1",16711680); gui_set_font_color('edit_Ext2',16711680); gui_set_font_color("lab_Ext2",16711680); gui_set_font_color('edit_Ext3',16711680); gui_set_font_color("lab_Ext3",16711680); gui_set_font_color('edit_Ext4',0x0000ff); gui_set_font_color("lab_Ext4",0x0000ff); gui_set_font_color('edit_Ext5',0x0000ff); gui_set_font_color("lab_Ext5",0x0000ff); string m_kh; m_kh = gui_get_val("ComboBox_Ext_Eba_Id"); if(m_kh != 'A0004') { gui_hide("edit_Ext1") gui_hide("lab_Ext1") gui_hide("edit_Ext2") gui_hide("lab_Ext2") gui_hide("edit_Ext3") gui_hide("lab_Ext3") gui_hide("edit_Ext4") gui_hide("lab_Ext4") gui_hide("edit_Ext5") gui_hide("lab_Ext5") }; if(m_kh == 'A0004') { gui_show("edit_Ext1") gui_show("lab_Ext1") gui_show("edit_Ext2") gui_show("lab_Ext2") gui_show("edit_Ext3") gui_show("lab_Ext3") gui_show("edit_Ext4") gui_show("lab_Ext4") gui_show("edit_Ext5") gui_show("lab_Ext5") }; return 1; }; int 按箱数复制行() { int i,rc; string v_ddsl,v_lsm,v_item,v_id; rc = grid_get_v("MG_Item","vr_item_ext_4",1,);//获取首行【明细自定义4】列数据(总箱数) v_item = grid_get_v("MG_Item","vr_item_ext_4",2,);//获取第二行【明细自定义4】列数据(总箱数) v_ddsl = grid_get_v("MG_Item","inp_num",1);//获取首行【数量】列数据 v_lsm = grid_get_v("MG_Item","lsm",1); //获取首行【流水码前7位】列数据(弹窗输入) if(v_item == '') //当第二行为空时,根据【总箱数】补齐明细行数据(每箱一行数据打印一张二维码流水号标签) { for(i=1;i<rc;i++); { if(v_lsm != '') //当【流水码前7位】列数据不为空时根据第一行新增明细行数据,避免漏输入【流水码前7位】后还执行复制行操作 { grid_insert_before('MG_Item',i+1) //在指定行前插入一行记录 grid_copy_row("MG_Item",i,i+1);//复制行内容 grid_set_v('MG_Item','inp_num',i,v_ddsl); //最后一行有时其他列数据没有被复制成功,这里从第一行再赋值一次补齐数据避免尾数箱流水号生成失败 grid_set_v('MG_Item','vr_item_ext_4',i,rc);//最后一行有时其他列数据没有被复制成功,这里从第一行再赋值一次补齐数据避免尾数箱流水号生成失败 grid_set_v('MG_Item','lsm',i,v_lsm);//最后一行有时其他列数据没有被复制成功,这里从第一行再赋值一次补齐数据避免尾数箱流水号生成失败 }; }; }; //can_print=1; return 1; }; int 流水号生成() { //按流水号开始数值生成流水码 int i,rc,j,k,count; string v_mxsl,v_lsm,gwlsh,gwlshs,swlsh,swlshs,bwlsh,bwlshs,m_lshks,m_lshjs,v_zxs,v_ddsl,mmxsl,v_lshcsz,v_lshcszss; num v_mxsl,v_lshks,v_lshjs,v_lshkss,v_lshjss,v_mxsls,v_lshcsz,v_lshcszs,v_lshcszss,v_ddsl,v_lshjssh; //输入流水号开始数值 string m_kh; m_kh = gui_get_val("ComboBox_Ext_Eba_Id"); //获取客户编号 if(m_kh == 'A0004') //只有这个编号的客户需要外箱二维码流水贴纸 { inp_clear(); inp_para_set_title('请输入【流水号开始序号】') inp_def_string('mnum','流水号开始序号:'); inp_para() num inp_num; inp_num=inp_get_val('mnum') user_para_set("lsh",inp_num) if(inp_num == '') { msg('【流水号开始序号】不能为空,请重新输入!') inp_clear(); inp_para_set_title('请输入【流水号开始序号】') inp_def_string('mnum','【流水号开始序号】:'); inp_para() num inp_num; inp_num=inp_get_val('mnum') user_para_set("lsh",inp_num) if(inp_num == '') { msg('【流水号开始序号】再次为空,操作终止,请重新制单!') return 0; }; } if(inp_num != '') { gui_set_val("edit_Ext5",inp_num) }; }; rc = grid_find('MG_Item','res_id',''); v_mxsl = grid_get_v("MG_Item","bzsl",1,); //获取首行【每箱数量】列数值,每个产品都有一个流水码,根据这个数值循环赋值指定列之间流水码数据 v_ddsl = grid_get_v("MG_Item","inp_num",1,);//获取【订单数量】列数值,根据这个数值来赋值最后一行的【流水码结束号】 v_ddsl = v_ddsl + inp_num - 1 //计算【流水号结束序号】,给最后一行流水号结束码赋值,替换掉批量循环赋值的数值(有尾数的情况下不准确) v_lshjssh = inp_num + v_mxsl - 1 //计算第一行【流水号开始】列流水码,用来给第一行赋值 v_zxs = grid_get_v("MG_Item","vr_item_ext_4",1,); //获取【总箱数】,用来定位最后一行 v_lsm = grid_get_v("MG_Item","lsm",1,);//获取【流水码前7位】 v_lshcsz = inp_num //获取【流水号开始流水码】 for(i=2;i<rc;i++); //行循环从第二行开始 { //根据窗口输入的【流水号开始流水码】补齐【5位数】之后赋值到首行【流水码开始,流水码结束,首列产品流水码】这3列 if(strlen(v_lshcsz) == 4){ grid_set_v('MG_Item','lshks',1,'0'+v_lshcsz); grid_set_v('MG_Item','lsh001',1,v_lsm+'0'+v_lshcsz); }if(strlen(v_lshcsz) == 3){ grid_set_v('MG_Item','lshks',1,'00'+v_lshcsz); grid_set_v('MG_Item','lsh001',1,v_lsm+'00'+v_lshcsz); }if(strlen(v_lshcsz) == 2){ grid_set_v('MG_Item','lshks',1,'000'+v_lshcsz); grid_set_v('MG_Item','lsh001',1,v_lsm+'000'+v_lshcsz); }if(strlen(v_lshcsz) == 1){ grid_set_v('MG_Item','lshks',1,'0000'+v_lshcsz); grid_set_v('MG_Item','lsh001',1,v_lsm+'0000'+v_lshcsz); }if(strlen(v_lshjssh) == 4){ grid_set_v('MG_Item','lshjs',1,'0'+v_lshjssh); }if(strlen(v_lshjssh) == 3){ grid_set_v('MG_Item','lshjs',1,'00'+v_lshjssh); }if(strlen(v_lshjssh) == 2){ grid_set_v('MG_Item','lshjs',1,'000'+v_lshjssh); }if(strlen(v_lshjssh) == 1){ grid_set_v('MG_Item','lshjs',1,'0000'+v_lshjssh); } //设置从第二行开始【流水码开始,流水码结束,首列产品流水码】这3列的循环条件 v_lshcszs = grid_get_v("MG_Item","lshks",i,); //获取【流水码开始】列数值 v_lshcszs = v_lshcsz + v_mxsl v_lshcszss = v_lshcszss + v_lshcszs - v_lshcsz v_lshjs = grid_get_v("MG_Item","lshjs",i,);v_lshjss = v_lshcszss + v_lshcszs - v_mxsl v_lshkss = v_lshjss + v_mxsl -1 if(v_lshjs == '') { //首列【产品流水码】行循环赋值(补齐12位数) for(j=1;j<=v_mxsl;j++); { if(strlen(v_lshjss)== 1){ grid_set_v('MG_Item','lsh001',i,v_lsm+'0000'+v_lshjss); }if(strlen(v_lshjss) == 2){ grid_set_v('MG_Item','lsh001',i,v_lsm+'000'+v_lshjss); }if(strlen(v_lshjss) == 3){ grid_set_v('MG_Item','lsh001',i,v_lsm+'00'+v_lshjss); }if(strlen(v_lshjss) == 4){ grid_set_v('MG_Item','lsh001',i,v_lsm+'0'+v_lshjss); }; }; //【流水号开始】列行循环赋值(补齐5位数) if(strlen(v_lshjss) == 1){ grid_set_v('MG_Item','lshks',i,'0000'+v_lshjss); }if(strlen(v_lshjss) == 2){ grid_set_v('MG_Item','lshks',i,'000'+v_lshjss); }if(strlen(v_lshjss) == 3){ grid_set_v('MG_Item','lshks',i,'00'+v_lshjss); }if(strlen(v_lshjss) == 4){ grid_set_v('MG_Item','lshks',i,'0'+v_lshjss); }; //【流水号结束】列赋值(补齐5位数) if(strlen(v_lshkss) == 1){ grid_set_v('MG_Item','lshjs',i,'0000'+v_lshkss); }if(strlen(v_lshkss) == 2){ grid_set_v('MG_Item','lshjs',i,'000'+v_lshkss); }if(strlen(v_lshkss) == 3){ grid_set_v('MG_Item','lshjs',i,'00'+v_lshkss); }if(strlen(v_lshkss) == 4){ grid_set_v('MG_Item','lshjs',i,'0'+v_lshkss); }; }; }; //尾行【流水号结束】列赋值(补齐5位数)(解决在有【尾数箱】的情况下,行循环赋值过来的最后一行流水码有多余的问题) if(strlen(v_ddsl) == 1){ grid_set_v('MG_Item','lshjs',v_zxs,'0000'+v_ddsl); }if(strlen(v_ddsl) == 2){ grid_set_v('MG_Item','lshjs',v_zxs,'000'+v_ddsl); }if(strlen(v_ddsl) == 3){ grid_set_v('MG_Item','lshjs',v_zxs,'00'+v_ddsl); }if(strlen(v_ddsl) == 4){ grid_set_v('MG_Item','lshjs',v_zxs,'0'+v_ddsl); } //根据【每箱数量】和首列【产品流水码】列循环+1赋值余下的【产品流水码】列, //#【以下脚本感谢【浪总】的支持】# int row,col,i,j,col,num1,num2,x; string test,name1,name2,mmxsl,lshjslm,mddsl,dsclsh,mwsxlh,name3; num test,mmxsl,mddsl,name1,mwsxlh; mmxsl = gui_get_val("edit_Ext1"); //获取【每箱数量】数值 mddsl = gui_get_val("edit_Ext3"); //获取【订单数量】数值 mwsxlh = grid_get_v("MG_Item",'vr_item_ext_3',1); //获取【尾数箱】数值,用来清除多余的产品流水码 mddsl = mddsl + 1 //设置多余流水码的动态列名 if(mmxsl > 0 && mmxsl <10) { lshjslm = 'lsh00'+mmxsl }if(mmxsl > 9 && mmxsl <100){ lshjslm = 'lsh0'+mmxsl }if(mmxsl > 99 && mmxsl <1000){ lshjslm = 'lsh'+mmxsl } row=grid_find("MG_Item","res_id","");//总行数 col=grid_col_num("MG_Item")//总列数 name1='lsh002';//起始列标识 name2=lshjslm;//结束列标识 for(i=1;i<col;i++)//这个循环是记录下面循环的始末列 { if(grid_get_col_name("MG_Item",i)=='lsh002')//尾数起始列号 mwsxlh=i+mwsxlh-1; if(grid_get_col_name("MG_Item",i)=='lsh002')//起始列号 num1=i; if(grid_get_col_name("MG_Item",i)== lshjslm)//结束列号 num2=i } for(x=1;x<row;x++)//行循环 { for(i=num1;i<=num2;i++)//列循环 { test=grid_get_v("MG_Item",'lsh001',x); name1=grid_get_col_name("MG_Item",i); j=i+1-num1//从1开始增加 test=test+j; grid_set_v("MG_Item",name1,x,test); } } for(i=mwsxlh;i<=num2;i++)//列循环 { name1=grid_get_col_name("MG_Item",i); grid_set_v("MG_Item",name1,row-1,'');//清除多余的流水码列数值 } return 1; }; int obj_change() { if(change_obj == "ComboBox_Ext_Eba_Id") { string m_kh; m_kh = gui_get_val("ComboBox_Ext_Eba_Id"); if(m_kh != 'A0004') { gui_hide("edit_Ext1") gui_hide("lab_Ext1") gui_hide("edit_Ext2") gui_hide("lab_Ext2") gui_hide("edit_Ext3") gui_hide("lab_Ext3") gui_hide("edit_Ext4") gui_hide("lab_Ext4") gui_hide("edit_Ext5") gui_hide("lab_Ext5") gui_trigger_click("Popu_Select_Ass_Voucher"); }; if(m_kh == 'A0004') { gui_show("edit_Ext1") gui_show("lab_Ext1") gui_show("edit_Ext2") gui_show("lab_Ext2") gui_show("edit_Ext3") gui_show("lab_Ext3") gui_show("edit_Ext4") gui_show("lab_Ext4") gui_show("edit_Ext5") gui_show("lab_Ext5") gui_set_val("edit_Ext1",'') gui_set_val("edit_Ext2",'') gui_set_val("edit_Ext3",'') gui_set_val("edit_Ext4",'') gui_set_val("edit_Ext5",'') inp_clear(); inp_para_set_title('请输入【流水号前7位】') inp_def_string('mnum','流水号前7位:'); inp_para() num inp_num; inp_num=inp_get_val('mnum') user_para_set("lsh",inp_num) if(inp_num == '') { msg('流水号前7位不能为空,请重新输入流水号前7位!') inp_clear(); inp_para_set_title('请输入【流水号前7位】') inp_def_string('mnum','流水号前7位:'); inp_para() num inp_num; inp_num=inp_get_val('mnum') user_para_set("lsh",inp_num) if(inp_num == '') { msg('流水号前7位再次为空,操作终止,请重新制单!') return 0; }; } if(inp_num != '' && strlen(inp_num) != 7) { msg('输入的流水号只有【'+strlen(inp_num)+'】位数,请重新输入流水号前7位!') inp_clear(); inp_para_set_title('请输入【流水号前7位】') inp_def_string('mnum','流水号前7位:'); inp_para() num inp_num; inp_num=inp_get_val('mnum') user_para_set("lsh",inp_num) if(strlen(inp_num) != 7) { msg('再次输入的流水号只有【'+strlen(inp_num)+'】位数,操作终止,请重新制单!') return 0; }; if(inp_num == '') { msg('流水号前7位再次为空,操作终止,请重新制单!') return 0; }; }; if(inp_num != '' && strlen(inp_num) == 7) { gui_set_val("edit_Ext4",inp_num) gui_trigger_click("Popu_Select_Ass_Voucher"); 按箱数复制行() }; }; }; //change_obj return 1; }; int init_row() { int i,grid_rows; string v_lsh; grid_rows = grid_find('MG_Item','res_name',''); v_lsh = gui_get_val("edit_Ext4") for(i=1;i<grid_rows;i++) { grid_set_v('MG_Item','lsm',i,v_lsh); }; return 1; }; int func_before_save() { string mmxsl,mhjxs,mddsl,mwsxsl; int i,rc,vid; grid_color_clear("MG_Item") mmxsl = grid_get_v('MG_Item','bzsl',1) mhjxs = grid_get_v('MG_Item','vr_item_ext_4',1) mddsl = grid_get_v('MG_Item','inp_num',1) mwsxsl = grid_get_v('MG_Item','vr_item_ext_3',1) rc = grid_find("MG_Item","res_name",""); for(i=1;i<rc;i++); { grid_set_v('MG_Item','bzsl',i,mmxsl); grid_set_v('MG_Item','vr_item_ext_4',i,mhjxs); grid_set_v('MG_Item','inp_num',i,mddsl); grid_set_v('MG_Item','vr_item_ext_3',i,mwsxsl); }; gui_set_val("edit_Ext1",mmxsl) gui_set_val("edit_Ext2",mhjxs) gui_set_val("edit_Ext3",mddsl) string m_kh,m_lshks; m_kh = gui_get_val("ComboBox_Ext_Eba_Id") m_lshks = gui_get_val("edit_Ext5"); if(m_kh == 'A0004' && m_lshks == '') { 流水号生成() }; //can_save=1; return 1; }; int HF_print() { string mkhid; mkhid = gui_get_val("ComboBox_Ext_Eba_Id") if(mkhid == 'A0001' && mkhid != 'A0004' ) { v_set_print_format_id('v_hf-1')//根据箱号模板打印 gui_trigger_click("SpeedButton_Print");//打开打印预览 }; if(mkhid != 'A0001' && mkhid == 'A0004' ) { v_set_print_format_id('v_hf-5') //根据二维码模板打印 gui_trigger_click("SpeedButton_Print");//打开打印预览 }; //can_print=1; return 1; }; |