原创_脚本分享:单据中可选择性打印某几行数据,审核后的单据不用反审核也能选择性打印_使用经验
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 11  1/1   1  
作者
内容
afoo  [个人空间]
QQ名  常德-ZEN


注册  2010-04-08
发贴数  204
精华贴  6
原创贴  6
来自  常德-ZEN
状态  正常

级别  会员
#1»发布于2015-02-03 12:12

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




        于 2015-02-03 12:12 被 afoo 修改




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

xwb514  [个人空间]
QQ名  福建流浪(340298101)


注册  2010-03-19
发贴数  560
精华贴  7
原创贴  7
来自  
状态  正常

级别  会员
#2»发布于2014-12-27 11:44

好。电子表单跟纸质表单的脚本配合。学习。






官方认证第三方服务团队  徐文标(福建-流浪) QQ:340298101 V&P :177-5046-4787
服务介绍:http://www.onlyit.cn/onlyit_service.html

vshine  [个人空间]


注册  2014-09-02
发贴数  101
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#3»发布于2015-01-14 11:38

楼主,后面的全计行打印出来后是不是错了




afoo  [个人空间]
QQ名  常德-ZEN


注册  2010-04-08
发贴数  204
精华贴  6
原创贴  6
来自  常德-ZEN
状态  正常

级别  会员
#4»发布于2015-01-14 19:57

全计行?






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

vshine  [个人空间]


注册  2014-09-02
发贴数  101
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#5»发布于2015-01-15 09:17

合计行。。。。。。。。。。。。。




vshine  [个人空间]


注册  2014-09-02
发贴数  101
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#6»发布于2015-01-15 09:19

看图。。。。。。。。。。。





afoo  [个人空间]
QQ名  常德-ZEN


注册  2010-04-08
发贴数  204
精华贴  6
原创贴  6
来自  常德-ZEN
状态  正常

级别  会员
#7»发布于2015-01-16 10:39

这个不是大问题,统计的话在模板里面重新设置一下就行了。






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

T-Living  [个人空间]


注册  2014-11-19
发贴数  2
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#8»发布于2015-02-02 13:18

非常实用的功能,楼主帮我解决了大问题了,太感谢了!功能强大




AGF  [个人空间]


注册  2010-05-16
发贴数  208
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#9»发布于2020-12-20 15:31

这个不错,可以




summer  [个人空间]
QQ名  summer


注册  2009-09-08
发贴数  637
精华贴  9
原创贴  6
来自  
状态  正常

级别  会员
#10»发布于2020-12-21 15:06

但是有个BUG,单据如果有多个模板的话不能在打印预览里面多次切换模板,否则打印的明细数据会随切换的次数减少,最终会导致没有明细数据可打印。  
  
这个是不是可以考虑在单据脚本 打印前 或打印后 设置一个变量Y。等打印模块脚本执行后 再设置N .打印模块脚本判断变量 为Y时执行。






官方认证第三方服务团队  夏延明 QQ:15932787 13776070373
服务介绍: http://www.onlyit.cn/user_home?user_id=10304

afoo  [个人空间]
QQ名  常德-ZEN


注册  2010-04-08
发贴数  204
精华贴  6
原创贴  6
来自  常德-ZEN
状态  正常

级别  会员
#11»发布于2021-03-05 21:07

这个已经脚本大幅度简化了,用不着这么复杂。






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


 11  1/1   1  

登录后方可发贴


[ 电话: 0571-85462761 王先生 QQ: 124520435 加入软件QQ群 - 杭州 - 浙ICP备19051128号-1 网安 33010402003225 ]