为提高工程人员维护更新BOM的效率,找十二老师定制了实现该功能的dll文件,后又请阿彪老师帮忙完善了实现该功能的脚本。 此脚本是建立在启用BOM的8个扩展属性的基础上(主物资料号保存在第一个扩展属性) 详情参考:BOM扩展属性使用分享 http://myoit.cn/topic_list_detail?subject_id=3&topic_id=102340&topic_page_id=2 在此感谢阿彪老师,十二老师的帮助! 1. 在BOM记录编辑脚本定义添加【同步产品组成】控件 int func_show_win() { if(have_role("0005")==1)//拥有角色权限编号0005(产品资料编辑和BOM编辑权限)的操作员才生成控件 { gui_create_speedbutton("Panel_Func","on9",0,387,80,22,"同步产品组成","call_prog.fzdcp_csp"); } 2. 新建脚本文件 fzdcp_csp int test() { return 1; }; int main() { int i; string sql,vql,m_resid,m_ver,bm_id,sqlattr,v_bombh,v_bomgxr,v_bomgxrq,v_bomgxsk,count_res; m_resid = gui_get_val("edit_Ext1");//获取BOM扩展属性1(主产品料号) bm_id = gui_get_val("Edit_Bom_Id");//获取BOM编号 sql = "select ext_2 from res_composing where res_id = '" + m_resid + "'";//获取产品资料已有产品组成的BOM编号(产品组成明细的自定义2) db_run(sql); m_ver = db_res(0); string tt; tt = "是否同步到:" + m_resid + " 的产品组成明细,版本号为:" + bm_id + " ?"; if (m_ver != "") {tt = "当前产品:" + m_resid + " 存在产品组成明细,版本号为:" + m_ver + " 是否继续同步?";} if (confirm(tt) == 1) { vql = "sub_res_id,num,waste_factor,note_info,order_id,base_num,emf_process_id,sub_attr_val_1,sub_attr_val_2,sub_attr_val_3,ext_1,ext_2,ext_3,ext_4,pcode"; sql = "delete from res_composing where res_id='" + m_resid + "'";//删除BOM对应的产品资料已有的产品组成明细 db_run(sql); sql = " insert into res_composing(res_id," + vql + ")"; sql = sql + " select '" + m_resid + "'," + vql + " from res_bom_item where bom_id='" + bm_id + "'";//更新当前BOM明细到对应的产品资料的产品组成明细 db_run_process(sql); sql = " select count(1) from res_composing where res_id='" + m_resid + "'"; db_run_query(sql); sqlattr = "select * from res_attrwhere res_id='" + m_resid + "' and attr_id in('bombh','bomgxr','bomgxrq','bomgxsk')";//获取产品资料的4个附加扩展属性 db_run_query(sqlattr); count_res = db_row_count();//获取产品资料的附加扩展属性记录数 if (count_res<4) { for (i = 0; i < 4 - count_res;i++) { db_add_row();//添加一行记录 } } for (i = 0; i < 4;i++) { db_go_row(i);//指向对应的记录 db_set_value_ext("res_id",m_resid);//附加扩展属性表名赋值 switch (i) { case 0: db_set_value_ext("attr_id","bombh");//附加属性ID赋值 db_set_value_ext("attr_val", bm_id);//附加属性bombh赋值 break; case 1: db_set_value_ext("attr_id", "bomgxr");//附加属性ID赋值 sql = gui_get_val("ext_Ext5");//获取BOM扩展属性5(BOM更新人) db_set_value_ext("attr_val", sql);//附加属性bomgxr赋值 break; case 2: db_set_value_ext("attr_id", "bomgxrq");//附加属性ID赋值 sql = gui_get_val("date_Ext6");//获取BOM扩展属性5(BOM更新日期) db_set_value_ext("attr_val", sql);//附加属性bomgxrq赋值 break; case 3: db_set_value_ext("attr_id", "bomgxsk");//附加属性ID赋值 sql = gui_get_val("edit_Ext7");//获取BOM扩展属性5(BOM更新时刻) db_set_value_ext("attr_val", sql);//附加属性bomgxsk赋值 break; } } db_select_area(2);//选择工作区2 sql = "delete from res_attr where res_id='" + m_resid + "' and attr_id in('bombh','bomgxr','bomgxrq','bomgxsk') ";//删除对应产品资料已有的4个附加扩展属性值 db_run(sql); db_select_area(1);//选择工作区1 db_set_table_name("res_attr");//设置表的名称 db_batch_insert();//更新产品资料的附加扩展属性值 if (db_row_count() > 0) { dbg('同步到 '+m_resid+' 的产品组成明细成功!') //view_app_obj("res", m_resid);//打开成品资料 } } return 1; }; |