分享_交货计划单据脚本分享【根据开始日期自动生成跨月的连续一个月日期】_使用经验
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 2  1/1   1  
作者
内容
fwj3861  [个人空间]
QQ名  越南-叶子(121305301)


注册  2010-09-09
发贴数  550
精华贴  10
原创贴  20
来自  越南
状态  正常

级别  贵宾
#1»发布于2024-05-14 19:39

有客户需要把手工做的交货计划转移到系统里面录入,录入销售订单完成后,就开始根据实际生产计划做一个月的分批交货计划回传给客户,要求锁定星期天不可安排交货 
提供给客户的解决方案思路: 
1. 启用销售单据的自定义单据BJ改名:B7.交货记录(销售模块第7个启用的单据) 
2. 增加5个表头附加扩展属性定义【khjc:客户简称】,【pcksrq:开始日期】,【pcjsrq:结束日期】,【yfts1:开始月天数】,【yfts2:结束月天数】 
3. 增加31个单据明细附加扩展属性定义的交付日期列【jfrq01~jfrq31】 
4. 新增一个不进行库存管理的产品资料【料号:原材料号,品名:品名】用来替代单据标题行 
5. 显示方案把料号,品名,明细自定义列1-5,31个明细附加扩展列和备注列的标题名改为空 ,脚本定义录入开始日期回车后,自动添加这个产品到第一行 
6. 默认开始日期为今年第一天20240101,脚本限定没有修改这个开始日期之前不能引用上级单据 
 
BJ单据脚本 
int init_test() 

  return 1; 
}; 
 
int create_voucher() 

 grid_mark_readonly('MG_Item','vr_item_ext_2') 
 grid_mark_readonly('MG_Item','vr_item_ext_3') 
 grid_mark_readonly('MG_Item','vr_item_ext_4') 
 grid_mark_readonly('MG_Item','vr_item_ext_5') 
 gui_set_val("date_pcksrq",'20240101'); //设置初始交付日期,以便限定此日期不能引用订单 
  return 1; 
}; 
 
int 锁定星期天的交付日期() 

  int i; 
  string v_pcrq; 
   for(i=1;i<=31;i++); //循环获取排产日期列 
   { 
    v_pcrq = str_get_sub(grid_get_v("MG_Item",'jfrq'+fmt_int(i,"%02d"),1),0,8); //获取所有交付日期 
    grid_unmark_readonly('MG_Item','jfrq'+fmt_int(i,"%02d"),1) //解锁所有交付日期 
    if(get_week_id(v_pcrq) == '7')  //当交付日期为星期天时,锁定该日期列 
    { 
     grid_mark_readonly('MG_Item','jfrq'+fmt_int(i,"%02d"),1) 
     } 
    }; 
  return 1; 
}; 
 
int func_show() 

 锁定星期天的交付日期() 
 gui_disable("edit_khjc"); 
 gui_disable("date_pcjsrq"); 
 gui_disable("edit_yfts1"); 
 gui_disable("edit_yfts2"); 
 gui_create_button("ScrollBox_Base","Switch_on13",925,7,75,22,"1.引用订单","call_csp.voucher.BJ.switchon13"); 
 
  return 1; 
}; 
 
int cell_change() 

 int i,j; 
 string v_jfrq; 
 j = change_row_id; 
 num ext1,ext2,ext3,ext5,v_pcsl,v_pcrq,inpnum,rq01,rq02,rq03,rq04,rq05,rq06,rq07,rq08,rq09,rq10,rq11,rq12,rq13,rq14,rq15; 
 num rq16,rq17,rq18,rq19,rq20,rq21,rq22,rq23,rq24,rq25,rq26,rq27,rq28,rq29,rq30,rq31 
 for(i=1;i<=31;i++);  
 { 
  v_jfrq = 'jfrq'+fmt_int(i,"%02d") 
  if(change_col == v_jfrq) 
  { 
   ext1 = vr_item_ext_1 
   ext2 = vr_item_ext_2 
   ext3 = vr_item_ext_3 
   ext5 = vr_item_ext_5 
   inpnum = inp_num 
   rq01 = jfrq01; 
   rq02 = jfrq02; 
   rq03 = jfrq03; 
   rq04 = jfrq04; 
   rq05 = jfrq05; 
   rq06 = jfrq06; 
   rq07 = jfrq07; 
   rq08 = jfrq08; 
   rq09 = jfrq09; 
   rq10 = jfrq10; 
   rq11 = jfrq11; 
   rq12 = jfrq12; 
   rq13 = jfrq13; 
   rq14 = jfrq14; 
   rq15 = jfrq15; 
   rq16 = jfrq16; 
   rq17 = jfrq17; 
   rq18 = jfrq18; 
   rq19 = jfrq19; 
   rq20 = jfrq20; 
   rq21 = jfrq21; 
   rq22 = jfrq22; 
   rq23 = jfrq23; 
   rq24 = jfrq24; 
   rq25 = jfrq25; 
   rq26 = jfrq26; 
   rq27 = jfrq27; 
   rq28 = jfrq28; 
   rq29 = jfrq29; 
   rq30 = jfrq30; 
   rq31 = jfrq31; 
   inp_num = rq01+rq02+rq03+rq04+rq05+rq06+rq07+rq08+rq09+rq10+rq11+rq12+rq13+rq14+rq15+rq16+rq17+rq18+rq19+rq20+rq21+rq22+rq23+rq24+rq25+rq26+rq27+rq28+rq29+rq30+rq31 
   vr_item_ext_4 = rq01+rq02+rq03+rq04+rq05+rq06+rq07+rq08+rq09+rq10+rq11+rq12+rq13+rq14+rq15+rq16+rq17+rq18+rq19+rq20+rq21+rq22+rq23+rq24+rq25+rq26+rq27+rq28+rq29+rq30+rq31 
   vr_item_ext_5 = ext2 - ext3 - inp_num 
   if(ext2 - ext3 - inp_num < '0') 
   { 
    v_pcrq = grid_get_v('MG_Item',v_jfrq,1) 
    v_pcsl = grid_get_v('MG_Item',v_jfrq,j) 
    msg('第【'+j+'】行,交付日期【'+v_pcrq+'】输入的交付数量【'+v_pcsl+'】超过待交付数:【'+ext5+'】,请重新输入交付数量!') 
    return 0; 
    } 
  } 
 }; 
  //change_col,change_col_id,change_row_id 
  return 1; 
}; 
 
int 生成交付日期() //按照开始日期生成最近1个月的所有日期到明细第一行 

 string m_ksrq,m_jsrq,m_ny1,m_ny2,m_ny,m_yf1,m_yf2,m_rq1,m_rq2,m_yfts1,m_yfts2,m_jsrq,m_jhts1,m_jhts2,m_jsrq1,m_jsrq2,v_jfrq,v_jfrq1,v_jfrq2,v_jfrq3; 
   num m_ny1,m_yf1,m_rq1,m_yfts1,m_yfts2,m_ksrq,m_ksrq1,m_jhts1,m_jhts2,m_yfts1,m_yfts2; 
    m_ksrq = gui_get_val("date_pcksrq") //获取开始日期 
    m_ny1  = str_get_sub(m_ksrq,0,6); //获取开始年月 
    m_ny2 = month_add(m_ny1,'1'); //获取结束年月(开始年月的下月) 
    m_yf1  = str_get_sub(m_ksrq,4,2); //获取开始月份 
    m_yf2  = str_get_sub(m_ny2,4,2); //获取结束月份 
    m_rq1  = str_get_sub(m_ksrq,6,2); //获取开始日期 
    m_jsrq = fmt_int(m_rq1-1,"%02d") //获取结束日期 
    m_yfts1 = get_month_days(m_yf1) //获取开始月份天数 
    m_jhts1 = m_yfts1 - m_rq1 + 1 //获取开始月份实际天数 
    gui_set_val("edit_yfts1",m_jhts1); //赋值开始月天数 
    if(m_rq1 == '01') //当开始月日期为1号的时候,结束日期为当月最后一天 
    { 
     m_jsrq1 = str_get_sub(m_ksrq,0,6)+get_month_days(m_yf1) //获取结束日期(开始年月+当月天数 
     gui_set_val("date_pcjsrq",m_jsrq1); //赋值结束日期 
     gui_set_val("edit_yfts2",'0'); //赋值结束月天数 
     }if(m_rq1 != '01'){  //当开始日期不是1号的时候,结束日期为开始月的次月(开始月日期-1天) 
     m_jsrq2 = str_get_sub(m_ny2,0,6)+m_jsrq  //获取结束日期(结束年月+结束日期) 
     gui_set_val("date_pcjsrq",m_jsrq2);  //赋值结束日期 
     m_yfts2 = get_day_between(m_ny2+'01',m_jsrq2)+1 //获取结束月份天数(结束月份1号到结束日期的天数差+1) 
     gui_set_val("edit_yfts2",m_yfts2); //赋值结束月的实际天数 
     } 
   int i,k,j,m_jhts1,m_jhts2; 
    for(j=1;j<=31;j++); //排产日期赋值前先清空已赋值的内容,以便修改开始日期的时候实时更新最新的排产日期 
    { 
     grid_set_v("MG_Item",'jfrq'+fmt_int(j,"%02d"),1,'') //清空第一行的31列排产日期 
     }; 
    m_yfts1 = gui_get_val("edit_yfts1") //获取开始月的实际天数 
    m_yfts2 = gui_get_val("edit_yfts2") //获取结束月的实际天数 
    for(k=1;k<=m_yfts1;k++); //开始月的排产日期列循环赋值 
    { 
     k = fmt_int(k,"%02d") //开始月的实际天数补足2位数 
     v_jfrq = m_ksrq - 1 + k  //获取动态交付日期(开始日期-1+开始月实际天数) 
     grid_set_v("MG_Item",'jfrq'+fmt_int(k,"%02d"),1,v_jfrq+'('+get_week_id(v_jfrq)+')') //填充开始月的实际日期到交付日期 
     grid_unmark_readonly('MG_Item','jfrq'+fmt_int(k,"%02d")) //解除所有交付日期列的锁定 
     if(get_week_id(v_jfrq) == '7')  //当交付日期为星期天时(锁定排产日期为星期天的列) 
          { 
      grid_mark_readonly('MG_Item','jfrq'+fmt_int(k,"%02d"))  //锁定交付日期为星期天的列 
           }; 
    } 
    for(i=1;i<=m_yfts2;i++); //结束月的交付日期列循环赋值 
    { 
     v_jfrq1 = fmt_int(i,"%02d") //获取2位数的动态日期 
     v_jfrq2 = m_yfts1 + i //获取动态交付日期(结束年月+结束月实际天数) 
     v_jfrq2 = fmt_int(v_jfrq2,"%02d") //获取动态交付日期(结束年月+结束月实际天数) 
     v_jfrq3 = m_ny2+v_jfrq1 //获取完整的动态年月日 
     if(m_rq1 != '01') //当开始月日期不是1号的时候,对结束月的交付日期赋值 
     { 
      grid_set_v("MG_Item",'jfrq'+v_jfrq2,1,v_jfrq3+'('+get_week_id(v_jfrq3)+')') //结束月的交付日期赋值 
      grid_unmark_readonly('MG_Item','jfrq'+v_jfrq2) //解除所有交付日期列的锁定 
     if(get_week_id(v_jfrq3) == '7') //当交付日期为星期天时(锁定交付日期为星期天的列) 
          { 
      grid_mark_readonly('MG_Item','jfrq'+v_jfrq2) //锁定交付日期为星期天的列 
           }; 
     } 
   }; 
  return 1; 
}; 
 
int obj_change() 

 if(change_obj == "ComboBox_Ext_Eba_Id") 
  { 
   string m_kh; 
    m_kh = gui_get_val("ComboBox_Ext_Eba_Id") 
    db_run("select easy_code from eba where eba_id = '" + m_kh + "'"); 
    gui_set_val("edit_khjc",db_res(0)); 
   }; 
 if(change_obj == "date_pcksrq") //当修改开始日期的时候自动计算结束日期(按照一个月的天数) 
  { 
   if(grid_find("MG_Item","res_id","") == '1') //当第一行为空的时候自动生成日期标题行,单据默认标题行在显示方案改为空 
  { 
   vr_add_res_ext('原材料号','1',"vr_item_ext_1:"+'筐数'+';'+"vr_item_ext_2:"+'订单数量'+';'+"vr_item_ext_3:"+'已排产数'+';'+"vr_item_ext_4:"+'排产合计'+';'+"vr_item_ext_5:"+'待排产数'+';'+"note_info:"+'备注'); 
   } 
   生成交付日期()  //修改开始日期的时候,实时更新所有交付日期 
  }; 
  //change_obj 
  return 1; 
}; 
 
int init_row() 

    string sql,v_inp_num,v_res_id,v_yydjbh,v_refid; 
    int i,rc;rc = grid_find("MG_Item","res_id",""); 
    if(grid_get_v("MG_Item","res_id",1) != '原材料号') 
    { 
     msg('没有修改开始日期,请修改开始日期后再引用上级单据!') 
     grid_del_row("MG_Item",1) //删除引用的明细 
     return 0; 
     }else{ 
    for(i=1;i<rc;i++); 
    { 
      v_res_id = grid_get_v("MG_Item","res_id",i); //获取产品编号 
      v_yydjbh = grid_get_v("MG_Item","ref_voucher_no",i); //获取产品编号 
      v_refid = grid_get_v("MG_Item","ref_item_id",i); //获取产品编号 
      v_inp_num = grid_get_v("MG_Item","inp_num",i); //获取订单数量 
      grid_set_v("MG_Item","vr_item_ext_2",i,v_inp_num) //赋值订单数量到明细自定义列1 
      grid_set_v("MG_Item","vr_item_ext_2",1,'订单数量') //赋值第一行的明细自定义列1为【订单数量】 
      //获取订单数量 
      sql = "select inp_num from ebs_vr_item a left join " 
      sql = sql + "ebs_v c on a.voucher_id = c.voucher_id where voucher_no= '"+v_yydjbh+"' and  res_id = '" + v_res_id + "' and item_id = '" + v_refid+ "'" 
      db_run(sql); 
      grid_set_v("MG_Item","vr_item_ext_2",i,db_res(0)) 
      grid_set_v("MG_Item","vr_item_ext_2",1,'订单数量') 
      //已排产数量合计 
      sql = "select res_id,ref_voucher_no,ref_item_id,sum(inp_num) inp_num  from ebs_vr_item a left join " 
      sql = sql + "ebs_v c on a.voucher_id = c.voucher_id " 
      sql = sql + " left join ebs_vr p on a.voucher_id = p.voucher_id where voucher_type = 'BJ'  and  res_id = '" + v_res_id + "' and  " 
      sql = sql + " ref_voucher_no = '" + v_yydjbh + "'and  ref_item_id = '" + v_refid+ "'" 
      sql = sql + " and a.voucher_id < " + v_voucher_id + " group by res_id,ref_voucher_no,ref_item_id" 
      db_run(sql); 
      grid_set_v("MG_Item","vr_item_ext_3",i,db_res(3)); 
      grid_set_v("MG_Item","vr_item_ext_3",1,'已排产数'); 
     } 
   生成交付日期() 
   }; 
  return 1; 
}; 
 
int init_row_cal_sub() 

  return 1; 
}; 
 
int adjust_row() 

  return 1; 
}; 
 
int func_before_print() 

  //can_print=1; 
  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() 

  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,checked_update; 
  //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,checked_update,duplicate; 
  return 1; 
}; 
int switchon13() 

 if(gui_get_val("date_pcksrq") != '20240101') 
 { 
  gui_trigger_click("Popu_Select_Ass_Voucher");//打开单据引用 
  }else{ 
  msg('请先选择或修改【开始日期】后再引用【订单明细】') 
  return 0; 
  }; 
  return 1; 
}; 
int main() 

  return 1; 
};




        于 2024-05-14 19:39 被 fwj3861 修改




官方认证第三方服务团队  樊文俊(越南-叶子) QQ:121305301 TEL:+84869350626
承接越南北部-河内周边省份-OIT部署和维护服务(24小时上门或远程服务)
服务介绍:http://www.onlyit.cn/onlyit_service.html

fwj3861  [个人空间]
QQ名  越南-叶子(121305301)


注册  2010-09-09
发贴数  550
精华贴  10
原创贴  20
来自  越南
状态  正常

级别  贵宾
#2»发布于2024-05-14 19:45

附上单据编辑界面,超量交付计划会弹出提示,详细定位到输入点




        于 2024-05-14 19:45 被 fwj3861 修改




官方认证第三方服务团队  樊文俊(越南-叶子) QQ:121305301 TEL:+84869350626
承接越南北部-河内周边省份-OIT部署和维护服务(24小时上门或远程服务)
服务介绍:http://www.onlyit.cn/onlyit_service.html


 2  1/1   1  

登录后方可发贴


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