Firebird 核心系統採用「主控 → 交易 → 組件」三層架構。本文詳細解析 RPGLE 交易程式與組件程式的標準模板、公共複製文件、參數傳遞規範、錯誤處理機制及記賬傳票流水重組邏輯。
#EXIT:返回/結束#ERR:調用 SCNCMMG 格式化錯誤信息並退出#CHKMSG:檢查 PMG.BKMSID 非空則退出*PSSR:程序異常捕獲,記錄異常信息退出#FLEX:文件異常處理,1218 鎖記錄專門處理
T000000I1 (單值)、T000000I2 (數組)T000000O1 (單值)、T000000O2 (數組)PMG (錯誤信息)、PIN (輸入復合結構)、POT (輸出復合結構)| 結構 | 包含子結構 |
|---|---|
| PIN | INHD (應用頭) + INFE (費用數組) + INCS (券面數組) + I1 + I2... |
| POT | OTHD (應用頭) + OTVC (記賬傳票數組) + O1 + O2... |
/FREE EXSR @INIT; // 初始化:CLEAR PMG, A_MSDS, POT.O1, POT.O2, D_VARS EXSR @CHEK; // 校驗:機構號必輸,否則 EIOND 錯誤 EXSR @MAIN; // 主邏輯:調用組件 SCETPSV,檢查返回 EXSR @RETN; // 返回:調用 SCNCMTA 登記輸出數組實際條數 (O2RECD) EXSR #EXIT; /END-FREE
D_VARS 結構,CLEAR D_VARS 一次性初始化PMG,配合 #CHKMSG 實現錯誤信息層層透傳POT.OTVC,實現跨交易多組件記賬流水按套順序重組,保證每套借貸平衡、順序正確(業界罕見能力)@RETN 中通過 SCNCMTA 登記實際條數,主控據此精簡返回報文SCETPSVF1:輸入單值結構 (機構號)SCETPSVF2:輸出數組結構 (櫃員號),含 RECD 實際條數 + ARR 數組SCETPSVP:原型聲明 + 參數結構定義 (EXTNAME/LIKEDS)FACNBRMF UF E K DISK INFSR(#FLEX) INFDS(S_CNBRMF) QUALIFIED FACNTLMF UF A E K DISK INFSR(#FLEX) INFDS(S_CNTLMF) QUALIFIED COMMIT
QUALIFIED 限定名訪問,INFSR(#FLEX) 統一異常處理COMMIT 關鍵字啟用提交控制/FREE EXSR @INIT; // CLEAR PMG, A_MSDS, K_CNBRMF, R_CNBRMF, R_CNTLMF, D_VARS EXSR @CHEK; // 機構號非空校驗 EXSR @MAIN; // CHAIN 讀取機構表 → 更新 → 輸出到 TPSVF2.ARR(1) EXSR #EXIT; /END-FREE
FILEDSP = %ADDR(S_CNBRMF) 動態綁定 INFDS,實現文件異常捕獲EVAL-CORR 對應字段賦值,簡化數據移動RECD 計數器,解決定長數組實際長度傳遞問題#ERR/#CHKMSG/*PSSR/#FLEX 覆蓋程序/文件異常,業務代碼零干擾OTVC 穿透傳遞,實現會計級套式順序與借貸平衡