缘起湖北-ck同学的特殊需求,作为三群的城管,多少得为群众谋点福利。 目标要求是审核后不用反审核也能再次选择需要打印的行,经过几番努力,终于做到了。 但是有个bug,单据如果有多个模板的话不能在打印预览里面多次切换模板,否则打印的明细数据会随切换的次数减少,最终会导致没有明细数据可打印。 要实现这个目标,需要用到单据脚本和打印模板脚本相配合用全局函数传递数据,利用事后备注来选择行是否需要打印。 单据脚本: int init_test() { return 1; }; int func_user_menu_1() { return 1; }; int func_user_menu_2() { return 1; }; int func_user_menu_3() { return 1; }; int func_user_menu_4() { return 1; }; int create_voucher() { grid_set_col_picklist_dict('mg_item','checked_item_note','bool'); return 1; }; int func_show() { return 1; }; int cell_change() { //change_col,change_col_id,change_row_id return 1; }; int obj_change() { //change_obj return 1; }; int init_row() { checked_item_note="是"; grid_trigger_change('mg_item','checked_item_note',-1); return 1; }; int adjust_row() { return 1; }; int func_before_print() { //---------------检查:如果所有的行都设为不打印则弹出消息提示并拒绝打印-------------- int c,id,r_num; string r_note_info,v,global_v; grid_seek("mg_item","res_id",""); // 将光标定位到空记录的行号 r_num=grid_cur_row("mg_item"); //获取有数据的记录行数后的第一个空行的行号 grid_seek_from("mg_item",0,"vr_item_ext_6","");//将光标定位到第一行 c=0;//初始化可打印的行的数字 for(id=0;id { r_note_info=grid_get_v('mg_item','checked_item_note',id); if(r_note_info=='是') { c=c 1; }; if(r_note_info=='否') { v=id "," v; }; }; user_para_set('global_v',v); if(c==0)//如果没有可打印的行则弹出消息提示并拒绝打印 { msg('没有可打印的行,请检查!'); can_print=0; }; return 1; }; int func_before_save() { //can_save=1; return 1; }; int func_before_check() { //can_check=1; return 1; }; int func_after_save() { return 1; }; int func_after_check() { int c,id,r_num; string r_note_info,v,global_v; grid_seek("mg_item","res_id",""); // 将光标定位到空记录的行号 r_num=grid_cur_row("mg_item"); //获取有数据的记录行数后的第一个空行的行号 grid_seek_from("mg_item",0,"vr_item_ext_6","");//将光标定位到第一行 c=0;//初始化可打印的行的数字 for(id=2;id { grid_set_v('mg_item','checked_item_note',id-1,'是'); grid_trigger_change('mg_item','checked_item_note',id-1); }; return 1; }; int func_after_print() { return 1; }; int func_before_oper() { //oper_type=save,check,check_r,finish,finish_r,delete,giveup,ask_check,ask_check_r; //can_oper=1; return 1; }; int func_after_oper() { //oper_type=save,check,check_r,finish,finish_r,delete,giveup,ask_check,ask_check_r; return 1; }; int main() { return 1; }; 打印模板脚本: int main() { int a,i,wahaha; string v; str_lst_to_db(user_para_get('global_v'));//获取要删除的行数 a=db_row_count();//获得记录数 for(i=0;i { str_lst_to_db(user_para_get('global_v')); db_go_row(i); wahaha=db_res(0);//获得需要删除的行号 db_select_dbio("data"); db_go_row(wahaha-1); db_del_row();//删除不需要打印的行 db_temp();//这步非常重要 }; return 1; }; 脚本写得比较笨拙,有优化的地方烦请指教,谢谢。 于 2015-02-03 12:12 被 afoo 修改

官方认证第三方服务团队 蒋逸凡(常德-zen) qq:50636277
服务介绍: http://www.onlyit.cn/user_home?user_id=13498 |