缘起湖北-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_num;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<r_num+1;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<a;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; }; 脚本写得比较笨拙,有优化的地方烦请指教,谢谢。 |