#start FUN-640063 add
FUNCTION i901_bp_refresh()
  DISPLAY ARRAY g_voteb TO s_voteb.* ATTRIBUTE(COUNT=g_rec_b,UNBUFFERED)
     BEFORE DISPLAY
        EXIT DISPLAY
     ON IDLE g_idle_seconds
        CALL cl_on_idle()
        CONTINUE DISPLAY
  END DISPLAY
END FUNCTION
#end FUN-640063 add
FUNCTION i901_a()
   DEFINE li_result   LIKE type_file.num5    #No.FUN-680136 SMALLINT
   DEFINE ls_doc      STRING
   DEFINE li_inx      LIKE type_file.num10   #No.FUN-680136 INTEGER
   DEFINE l_newno     LIKE tc_votea_file.tc_votea01
   DEFINE l_sql      STRING
   MESSAGE ""
   CLEAR FORM
   CALL g_voteb.clear()
   LET g_wc = NULL #MOD-530329
   LET g_wc2= NULL #MOD-530329
   IF s_shut(0) THEN
      RETURN
   END IF
   INITIALIZE g_votea.* LIKE tc_votea_file.*             #DEFAULT 設定
   LET g_votea01_t = NULL
   IF g_ydate IS NULL THEN
      LET g_votea.tc_votea01 = NULL
      LET g_votea.tc_voteadate = g_today
   ELSE                                          #使用上筆資料值
      LET g_votea.tc_votea01   = g_sheet            #採購詢價單別
      LET g_votea.tc_voteadate = g_ydate            #收貨日期
   END IF
   #預設值及將數值類變數清成零
   LET g_votea_t.* = g_votea.*
   LET g_votea_o.* = g_votea.*
   
   CALL cl_opmsg('a')
   WHILE TRUE
      LET g_votea.tc_voteauser = g_user
      LET g_votea.tc_voteamodu = g_user
      LET g_votea.tc_voteadate = g_today
      LET g_votea.tc_voteaacti = 'Y'              #資料有效
      LET g_votea.tc_voteaconf = 'N'              #資料有效
      CALL i901_i("a")                   #輸入單頭
      IF INT_FLAG THEN                   #使用者不玩了
         INITIALIZE g_votea.* TO NULL
         LET INT_FLAG = 0
         CALL cl_err('',9001,0)
         EXIT WHILE
      END IF
      IF cl_null(g_votea.tc_votea01) THEN       # KEY 不可空白
         CONTINUE WHILE
      END IF
      #輸入後, 若該單據需自動編號, 並且其單號為空白, 則自動賦予單號
      BEGIN WORK
       #No:MOD-540182 --start--
       CALL s_auto_assign_no("cxx",g_votea.tc_votea01,g_votea.tc_voteadate,"","tc_votea_file","tc_votea01","","","") RETURNING li_result,g_votea.tc_votea01
      
      IF (NOT li_result) THEN
         CONTINUE WHILE
      END IF
      MESSAGE g_votea.tc_votea01
      LET l_sql =" SELECT CASE WHEN sno < 10                 THEN substr('",g_votea.tc_votea01 CLIPPED,"',1,12)||'00'||to_char(sno) ",
           "                   WHEN sno > 10  AND sno < 100  THEN substr('",g_votea.tc_votea01 CLIPPED,"',1,12)|| '0'||to_char(sno) ",
           "               ELSE substr('",g_votea.tc_votea01 CLIPPED,"',1,12)||to_char(sno) ",
           "               END sno ",
           " FROM ( ",
           " SELECT TO_NUMBER(SUBSTR(NVL(MAX(tc_votea01),'XPUBX-'||to_char(sysdate,'yymmdd')||'000'),-3,3))+1 sno ",
   " FROM ds.tc_votea_file WHERE tc_votea01 LIKE substr('",g_votea.tc_votea01 CLIPPED,"',1,12)||'%' )"
     
    #MESSAGE l_sql
    PREPARE i901_sno FROM l_sql                # RUNTIME 編譯
    IF STATUS THEN CALL cl_err('i901_sno',STATUS,0) END IF
    #end No:FUN-550019
    DECLARE i901_cs_sno                        # CURSOR
        CURSOR FOR i901_sno
    FOREACH i901_cs_sno INTO l_newno
        IF SQLCA.sqlcode THEN
            CALL cl_err('foreach:',SQLCA.sqlcode,1)
            EXIT FOREACH
            END IF
    END FOREACH
    MESSAGE l_newno
    LET g_votea.tc_votea01 = l_newno
      DISPLAY BY NAME g_votea.tc_votea01
      INSERT INTO tc_votea_file VALUES (g_votea.*)
      LET g_ydate = g_votea.tc_voteadate                #備份上一筆日期
      #No:MOD-540182 --start--
      #備份上一筆單別
      CALL s_get_doc_no(g_votea.tc_votea01) RETURNING g_sheet
      #No:MOD-540182 ---end---
      IF SQLCA.SQLCODE THEN                     #置入資料庫不成功
         ROLLBACK WORK      #No:7857
         CALL cl_err3("ins","tc_votea_file",g_votea.tc_votea01,"",SQLCA.SQLCODE,"","",1)  #No.FUN-660129
         CONTINUE WHILE
      ELSE
         COMMIT WORK        #No:7857
      END IF
      SELECT ROWID INTO g_votea_rowid FROM tc_votea_file
       WHERE tc_votea01 = g_votea.tc_votea01
      
      LET g_votea01_t = g_votea.tc_votea01        #保留舊值
      LET g_votea_t.* = g_votea.*
      LET g_votea_o.* = g_votea.*
      
       CALL g_voteb.clear()
      LET g_rec_b = 0  #No:MOD-490280
      CALL i901_b()                   #輸入單身
      EXIT WHILE
   END WHILE
END FUNCTION
FUNCTION i901_u()
   IF s_shut(0) THEN
      RETURN
   END IF
   IF g_votea.tc_votea01 IS NULL THEN # KEY 不可為空白
      CALL cl_err('',-400,0)
      RETURN
   END IF
   SELECT * INTO g_votea.* FROM tc_votea_file
    WHERE tc_votea01=g_votea.tc_votea01
   IF g_votea.tc_voteaacti ='N' THEN    #檢查資料是否為無效
      CALL cl_err(g_votea.tc_votea01,'mfg1000',0)
      RETURN
   END IF
   MESSAGE ""
   CALL cl_opmsg('u')
   
   LET g_votea01_t = g_votea.tc_votea01
   
   BEGIN WORK
   OPEN i901_cl USING g_votea_rowid
   IF STATUS THEN
      CALL cl_err("OPEN i901_cl:", STATUS, 1)
      CLOSE i901_cl
      ROLLBACK WORK
      RETURN
   END IF
   FETCH i901_cl INTO g_votea.*                      # 鎖住將被更改或取消的資料
   IF SQLCA.SQLCODE THEN
       CALL cl_err(g_votea.tc_votea01,SQLCA.SQLCODE,0)    # 資料被他人LOCK
       CLOSE i901_cl
       ROLLBACK WORK
       RETURN
   END IF
   CALL i901_show()
   WHILE TRUE
      LET g_votea01_t = g_votea.tc_votea01
      LET g_votea_o.* = g_votea.*
      LET g_votea.tc_voteamodu = g_user
      LET g_votea.tc_voteadate = g_today
      CALL i901_i("u")                      #欄位更改
      IF INT_FLAG THEN
         LET INT_FLAG = 0
         LET g_votea.*=g_votea_t.*
         CALL i901_show()
         CALL cl_err('','9001',0)
         EXIT WHILE
      END IF
      IF g_votea.tc_votea01 != g_votea01_t THEN            # 更改單號
         UPDATE tc_voteb_file SET voteb01 = g_votea.tc_votea01 WHERE tc_voteb01 = g_votea01_t
         IF SQLCA.SQLCODE OR SQLCA.sqlerrd[3] = 0 THEN
            CALL cl_err3("upd","tc_voteb_file",g_votea01_t,"",SQLCA.SQLCODE,"","voteb",1)  #No.FUN-660129
            CONTINUE WHILE
         END IF
      END IF
      UPDATE tc_votea_file SET tc_votea_file.* = g_votea.* WHERE ROWID = g_votea_rowid
      IF SQLCA.SQLCODE OR SQLCA.sqlerrd[3] = 0 THEN
         CALL cl_err3("upd","tc_votea_file","","",SQLCA.SQLCODE,"","",1)  #No.FUN-660129
         CONTINUE WHILE
      END IF
      EXIT WHILE
   END WHILE
   CLOSE i901_cl
   COMMIT WORK
  
  #start FUN-640063 add
   CALL i901_b_fill("1=1")
   CALL i901_bp_refresh()
  #end FUN-640063 add
END FUNCTION
FUNCTION i901_i(p_cmd)
DEFINE
   l_n       LIKE type_file.num5,    #No.FUN-680136 SMALLINT
   p_cmd     LIKE type_file.chr1     #a:輸入 u:更改  #No.FUN-680136 VARCHAR(1)
   DEFINE    li_result   LIKE type_file.num5    #No.FUN-680136 SMALLINT
   IF s_shut(0) THEN
      RETURN
   END IF
   DISPLAY BY NAME g_votea.tc_voteauser,g_votea.tc_voteamodu,g_votea.tc_voteadate,g_votea.tc_voteaacti,g_votea.tc_voteaconf
   CALL cl_set_head_visible("","YES")           #No.FUN-6B0032
 
   INPUT BY NAME g_votea.tc_votea01,g_votea.tc_votea02,g_votea.tc_votea03 WITHOUT DEFAULTS
 
      BEFORE INPUT
         LET g_before_input_done = FALSE
         CALL i901_set_entry(p_cmd)
         CALL i901_set_no_entry(p_cmd)
         LET g_before_input_done = TRUE
          #No:MOD-540182 --start--
         CALL cl_set_docno_format("tc_votea01") 
          #No:MOD-540182 ---end---
      AFTER FIELD tc_votea01
         #單號處理方式:
         #在輸入單別後, 至單據性質檔中讀取該單別資料;
         #若該單別不需自動編號, 則讓使用者自行輸入單號, 並檢查其是否重複
         #若要自動編號, 則單號不用輸入, 直到單頭輸入完成後, 再行自動指定單號
          #No:MOD-540182 --start--
         IF NOT cl_null(g_votea.tc_votea01) THEN
            CALL s_check_no("apm",g_votea.tc_votea01,g_votea01_t,"6","tc_votea_file","tc_votea01","") RETURNING li_result,g_votea.tc_votea01
            DISPLAY BY NAME g_votea.tc_votea01
            IF (NOT li_result) THEN
               LET g_votea.tc_votea01=g_votea_o.tc_votea01
               NEXT FIELD tc_votea01
            END IF
          #  DISPLAY g_smy.smydesc TO smydesc
            IF g_votea.tc_votea01 != g_votea01_t OR g_votea01_t IS NULL THEN
               #進行輸入之單號檢查
               #No:MOD-540182 --start-- 暫時先mark,因為此支程式裡面沒有改成動態編碼長度
#              CALL s_mfgchno(g_votea.tc_votea01) RETURNING g_i,g_votea.tc_votea01
#              DISPLAY BY NAME g_votea.tc_votea01
#              IF NOT g_i THEN
#                 NEXT FIELD tc_votea01
#              END IF
                #No:MOD-540182 ---end---
#              SELECT count(*) INTO l_n FROM tc_votea_file
#               WHERE tc_votea01 = g_votea.tc_votea01
#              IF l_n > 0 THEN   #單據編號重複
#                 CALL cl_err(g_votea.tc_votea01,-239,0)
#                 LET g_votea.tc_votea01 = g_votea01_t
#                 DISPLAY BY NAME g_votea.tc_votea01
#                 NEXT FIELD tc_votea01
#              END IF
            END IF
         END IF
       #No:MOD-540182 ---end---
      AFTER FIELD tc_votea02                 
         IF cl_null(g_votea.tc_votea02) THEN
            LET g_votea_o.tc_votea02 = g_votea.tc_votea02
    NEXT FIELD tc_votea02
         END IF
  AFTER FIELD tc_votea03                 
         #IF cl_null(g_votea.tc_votea03) THEN
         #   LET g_votea_o.tc_votea03 = g_votea.tc_votea03
 #   NEXT FIELD tc_votea03
         #END IF
        IF NOT cl_null(g_votea.tc_votea03) THEN
        IF g_votea.tc_votea03 NOT MATCHES "[UR]" OR g_votea.tc_votea03 IS NULL
         THEN CALL cl_err(g_votea.tc_votea03,'cxx1001',0)
              LET g_votea_o.tc_votea03 = g_votea.tc_votea03
              DISPLAY BY NAME g_votea.tc_votea03
              NEXT FIELD tc_votea03
         END IF
        END IF
      ON ACTION CONTROLZ
         CALL cl_show_req_fields()
      ON ACTION CONTROLG
         CALL cl_cmdask()
      ON ACTION CONTROLF                  #欄位說明
         CALL cl_set_focus_form(ui.Interface.getRootNode()) RETURNING g_fld_name,g_frm_name #Add on 040913
         CALL cl_fldhelp(g_frm_name,g_fld_name,g_lang) #Add on 040913
 
      ON ACTION controlp
         CASE
            WHEN INFIELD(tc_votea01) #單據編號
                 LET g_t1 = s_get_doc_no(g_votea.tc_votea01)     #No:MOD-540182
                 CALL q_smycust(FALSE,FALSE,g_t1,'APM','6') RETURNING g_t1 #TQC-670008
                 LET g_votea.tc_votea01 = g_t1                 #No:MOD-540182
                 DISPLAY BY NAME g_votea.tc_votea01
                 CALL i901_tc_votea01('d')
                 NEXT FIELD tc_votea01
            OTHERWISE EXIT CASE
          END CASE
      ON IDLE g_idle_seconds
         CALL cl_on_idle()
         CONTINUE INPUT
 
      ON ACTION about         #MOD-4C0121
         CALL cl_about()      #MOD-4C0121
 
      ON ACTION help          #MOD-4C0121
         CALL cl_show_help()  #MOD-4C0121
 
   END INPUT
END FUNCTION

 

 

arrow
arrow
    全站熱搜

    jeffreyhu 發表在 痞客邦 留言(0) 人氣()