進入系統的詢價單,到其單據明細版面,查一下MIS設定窗-->功能表頁--> [將資料轉採購單] 的按鈕,內容為
dw_this.call(quo_to_predrvin()) //轉採購單
show_top(0) //重新整理整張單據內容
quo_to_predrvin()為自訂function,放在steelpipe_liangfeng1.pbl ,此函數由操作者按下 [詢價單明細] [將資料轉採購單]功能紐後所執行.主要進行
1.將詢價單表頭資料填入 採購單表頭,且幫此採購單自動編一個新的採購單號
2.將詢價單明細版面上面的資料抄錄給 採購單明細
3.將詢價單表頭回填 [轉採購單的單號]
4.存檔
不想轉採購的明細,操作者可以自行點選要轉的項目,選 [限點選],讓明細只出現被點選資料,之後再操作 [將資料轉採購單]的動作即可.
也可執行刪除,但不要存檔,再轉 採購單,之後關窗或原地選 [自主機重讀明細資料]即可.
程式碼內容如下,問題發生在下方紅色字的部分,此function呼叫new_no()系統函數執行編取單號的動作,修改其中參數即可達成客戶的要求.
編號部分如果不能順應客戶意思,就必須另外寫自訂function以完成客戶所指定的編號規則.
datastore dw_papertop,dw_paper
long li_this,li_totrow,li_insert,li_dealgd,li_startrow
string ls_papcode,mfty_no,mmonthno,mquono,mdealout,mprintprice,mdrv_no2,mfaxno
li_totrow=dw_focus.rowcount()
if li_totrow=0 then
return 0
end if
mquono=dw_focus.getitemstring(1,"pap_code") //取此張詢價單號
//透過報價單號到報價表頭取客戶編號
select fty_no,dealin,faxno into :mfty_no,:mdealout,:mfaxno from quointop where pap_code=:mquono;
if mdealout<>"" then
if messagebox("注意", "此詢價單已有轉過採購單~n~n確定要再轉採購單一次嗎?", Exclamation!, YesNo!, 2)=2 then
return 0
end if
end if
li_startrow=1
//宣告資料容器datastore物件並指向採購單的介面名稱,利用資料容器操作存檔動作
dw_paper=create datastore
dw_paper.dataobject="d_prein" //採購單表頭資料視窗
dw_paper.settransobject(sqlca)
dw_papertop=create datastore
dw_papertop.dataobject="d_predrvintop" //採購單明細資料視窗
dw_papertop.settransobject(sqlca)
ls_papcode=new_no("predrvin","pap_code","auto_year_month","pap_code")//(修改後的)改取得新的採購單單號
//ls_papcode=new_no("predrvin","pap_code","short_year_month_day","pap_code")//(修改前的)取得新的採購單單號
//先處理採購單表頭
dw_papertop.insertrow(0)
dw_papertop.setitem(1,"pap_code",ls_papcode) //採購單單號
dw_papertop.setitem(1,"fty_no",mfty_no) //廠商名稱
dw_papertop.setitem(1,"quopap",mquono) //此詢價單號(這樣採購單就可看到原來的詢價單)
dw_papertop.setitem(1,"faxno",mfaxno) //對方單號
dw_papertop.setitem(1,"out_date",today()) //採購單日期
dw_papertop.setitem(1,"printnum",0) //印單數
dw_papertop.setitem(1,"todbet","0") //結案碼
if dw_papertop.update()=1 then //採購單表頭存檔成功
for li_this=1 to li_totrow //將報價明細逐一填入採購單datastore物件
li_insert=dw_paper.insertrow(0)
dw_paper.setitem(li_insert,"pap_code",ls_papcode) //採購單單號
dw_paper.setitem(li_insert,"gd_no",dw_focus.getitemstring(li_this,"gd_no")) //品號
dw_paper.setitem(li_insert,"summary",dw_focus.getitemstring(li_this,"summary")) //備註
dw_paper.setitem(li_insert,"seq",mid(string(li_this+1000),2)) //明細資料的序號
dw_paper.setitem(li_insert,"sortuse",li_this) //明細資料的排列碼
dw_paper.setitem(li_insert,"style",dw_focus.getitemstring(li_this,"style")) //規格
dw_paper.setitem(li_insert,"num",dw_focus.getitemnumber(li_this,"num")) //數量
dw_paper.setitem(li_insert,"price",dw_focus.getitemnumber(li_this,"price")) //單價
dw_paper.setitem(li_insert,"width",dw_focus.getitemnumber(li_this,"width")) //鋼管支數
dw_paper.setitem(li_insert,"length",dw_focus.getitemnumber(li_this,"length")) //鋼管長度
dw_paper.setitem(li_insert,"dealnum",0) //採購已轉進貨單數,預設=0
dw_paper.setitem(li_insert,"moddate",today()) //修改日
dw_paper.setitem(li_insert,"opman",gs_username) //操作者名稱
dw_paper.setitem(li_insert,"out_time",String(Now(), "hhmm")) //資料建立時間
next
dw_paper.update() //採購單明細存檔
update quointop set dealin='1' where pap_code=:mquono; //通知詢價單該單已轉採購(dealin="1")
else
messagebox("單號:"+ls_papcode,"採購表頭存檔失敗~n~n"+sqlca.sqlerrtext)
end if
destroy dw_paper; //刪除datastore物件
destroy dw_papertop;
return 1