CREATE OR REPLACE PROCEDURE SAPUOB0101
{
  X_RETURN OUT VARCHAR2 -- 返却値
} IS


    -----------------------
 -- 発注受領データ抽出 --
 -----------------------
    CURSOR C_SARPOE IS
  SELECT
   PORRECNU,    -- 発注受領No
   SPRACPNU,    -- 仕入先受付No
   GERNU,     -- 発注No
   CRTKB,     -- 訂正区分
   ORDRPLKB,    -- 注文回答区分
   ERRINFRK,    -- エラー情報
   GERRQSCD,    -- 発注依頼部門コード
   GERPCRNM,    -- 発注依頼担当者
   EDISPRKB    -- EDI仕入先区分
  FROM SARPOE
  WHERE GERTDCFL = '0';
  
    W_FLAG NUMBER(10);    --フラグ
   
   
      
   
    -------------------------------------------------
    -- 発注受領に異常データがあった場合の発注取消処理 --3
    -------------------------------------------------
    PROCEDURE UPDATE_SAPUOR
    {
  V_ERRINFRK IN SARPOE.ERRINFRK%TYPE -- エラー情報 
  V_GERNU IN SARPOE.GERNU%TYPE    -- 発注No    
    } IS
  BEGIN
  
   UPDATE
    SAPUOR
   SET
    PORIRERK = V_ERRINFRK,    -- 発注受領エラー情報
    PORCCLFL = '1',     -- 発注取消フラグ
    GERDCHFL = '1',      -- 発注差異チェックフラグ
    UPDSYSDT = SYSDATE,     -- 更新システム日時
    UPDSTFCD = 'PUOB0101'    -- 更新社員コード
   WHERE
    GERNU = V_GERNU AND     -- 発注No  
    GERCBNNU =
    (SELECT MAX(SAPUOR.GERCBNNU) FROM SAPUOR WHERE GERNU = V_GERNU);
  END UPDATE_SAPUOR;
  
 --------------------------------------------------------------------------------------------------------
    -- 発注受領データの発注差異チェックにおいてエラーが発生した場合に担当者へ通知するためのメッセージテーブル更新--4
    --------------------------------------------------------------------------------------------------------
 PROCEDURE UPDATE_SAMESS
 {
  V_GERNU IN SARPOE.GERNU%TYPE    -- 発注No    
 } IS
  BEGIN
   UPDATE
    SAMESS
   SET
    MSGID = TO_NUMBER(SELECT MAX(MSGID) FROM SAMESS) + 1, -- メッセージID 
    MSGTSMDE = TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMMDD')),   -- メッセージ発信日付
    MSGTSMTIM = TO_CHAR(SYSDATE, 'HH24MISS'),     -- メッセージ発信時刻
    TRASTFCD = GETSTFCODEBATCH(V_GERNU, SYSDATE),    -- 送信先社員コード
    TRAPOSCD = GETPOSCODEBATCH(V_GERNU, SYSDATE),    -- 送信先所属コード
    SDFSTFCD = ' ',            -- 発信元社員コード
    SDFPOSCD = 'PUOB0101',          -- 発信元所属コード
    MSGRK = '発注No'||V_GERNU||'において発注受領データにエラーがありました。また、該当の発注を取消しました。', -- メッセージ
    OPEFCTKB = '03',           -- 業務機能区分
    UPDSYSDT = SYSDATE,           -- 更新システム日時
    UPDSTFCD = 'PUOB0101';          -- 更新社員コード
 END UPDATE_SAMESS;
 
 
 
 ---------------------------------------------
    -- 発注受領データ明細からのデータ取得を行う。--5
    --------------------------------------------- 
 PROCEDURE GET_SARPDE_DATA
 {
  V_PORRECNU IN SARPOE.PORRECNU%TYPE    -- 発注受領No   
 } IS
  BEGIN
   SELECT
   GERLINNU,       -- 発注行№
   SPRATLNU,       -- 仕入先受付行No
   GERMDLNU,          -- 発注型番
   PDTCD,        -- 商品コード
   SUPUP,        -- 仕入単価
   ERRINFRK       -- エラー情報
   FROM SARPDE
   WHERE PORRECNU = V_PORRECNU;
 END GET_SARPDE_DATA;
 
 
 --------------------------------------------------------------------------------
    -- 発注受領データ明細にエラーがあった場合、発注明細に差異があった旨書き込みを行う。--7
    --------------------------------------------------------------------------------
 PROCEDURE UPDATE_SAPUOD_DATA
 {
  V_ERRINFRK IN SARPDE.ERRINFRK%TYPE,   -- エラー情報
  V_GERMDLNU IN SARPDE.GERMDLNU%TYPE,   -- 発注型番
  V_GERLINNU IN SARPDE.GERLINNU%TYPE   -- 発注行№
 } IS
  BEGIN
   UPDATE
    SAPUOD
   SET 
     PORIRERK = V_ERRINFRK, -- 発注受領エラー情報
     GERDCHFL = '1',     -- 発注差異チェックフラグ
     UPDSYSDT = SYSDATE,    -- 更新システム日時
     UPDSTFCD = 'PUOB0101'  -- 更新社員コード
   WHERE
    GERMDLNU = V_GERMDLNU AND  -- 発注型番
    GERLINNU = V_GERLINNU;    -- 発注行№
 END UPDATE_SAPUOD_DATA;


    -------------------------------------------------
    -- NEC,NECカスタマックスの発注明細データ更新 --8(1)
    -------------------------------------------------
 PROCEDURE UPDATE_SAPUOD_ONE
 {
  V_SPRACPNU IN SAPUOR.SPRACPNU%TYPE,   -- 仕入先受付№
  V_SPRATLNU IN SARPDE.SPRATLNU%TYPE,   -- 仕入先受付行No
  V_SPRADIRK IN SARPDE.SPRADIRK%TYPE,   -- 仕入先受付明細識別子
  V_GERMDLNU IN SARPDE.GERMDLNU%TYPE,   -- 発注型番
  V_GERLINNU IN SARPDE.GERLINNU%TYPE   -- 発注行№
 } IS
  BEGIN
   UPDATE
    SAPUOD
   SET
    SPRACPNU = V_SPRACPNU,    -- 仕入先受付№
    SPRATLNU = V_SPRATLNU,    -- 仕入先受付行No
    SPRADIRK = V_SPRADIRK,    -- 仕入先受付明細識別子
    UPDSYSDT = SYSDATE,     -- 更新システム日時
     UPDSTFCD = 'PUOB0101'    -- 更新社員コード
   WHERE
    GERMDLNU = V_GERMDLNU AND   -- 発注型番
    GERLINNU = V_GERLINNU;    -- 発注行№
 END UPDATE_SAPUOD_ONE;


    ---------------------------------------------------
    -- ソフトバンク、ダイワボウの発注明細データ更新 --8(2)
    ---------------------------------------------------
    PROCEDURE UPDATE_SAPUOD_TWO
    {
  V_SPRACPNU IN SAPUOR.SPRACPNU%TYPE,   -- 仕入先受付№
  V_SPRATLNU IN SARPDE.SPRATLNU%TYPE,   -- 仕入先受付行No
  V_GERMDLNU IN SARPDE.GERMDLNU%TYPE,   -- 発注型番
  V_GERLINNU IN SARPDE.GERLINNU%TYPE   -- 発注行№
    } IS
  BEGIN
   UPDATE
     SAPUOD
    SET
     SPRACPNU = V_SPRACPNU,    -- 仕入先受付№
     SPRATLNU = V_SPRATLNU,    -- 仕入先受付行No
     UPDSYSDT = SYSDATE,     -- 更新システム日時
      UPDSTFCD = 'PUOB0101'    -- 更新社員コード
    WHERE
     GERMDLNU = V_GERMDLNU AND   -- 発注型番
     GERLINNU = V_GERLINNU;    -- 発注行№
 END UPDATE_SAPUOD_TWO;
 
 
 
 ---------------------------------
    -- NECFの発注明細データ更新 --8(3)
    ---------------------------------
    PROCEDURE UPDATE_SAPUOD_THREE
    {
  V_SPRACPNU IN SAPUOR.SPRACPNU%TYPE,   -- 仕入先受付№
  V_GERMDLNU IN SARPDE.GERMDLNU%TYPE,   -- 発注型番
  V_GERLINNU IN SARPDE.GERLINNU%TYPE   -- 発注行№
    } IS
  BEGIN
   UPDATE
     SAPUOD
    SET
     SPRACPNU = V_SPRACPNU,    -- 仕入先受付№
     UPDSYSDT = SYSDATE,     -- 更新システム日時
      UPDSTFCD = 'PUOB0101'    -- 更新社員コード
    WHERE
     GERMDLNU = V_GERMDLNU AND   -- 発注型番
     GERLINNU = V_GERLINNU;    -- 発注行№
 END UPDATE_SAPUOD_THREE;
 
 ----------------------
    -- エラー情報の更新 --9
    ----------------------
 PROCEDURE UPDATE_SARPOE
    {
  V_PORRECNU IN SARPOE.PORRECNU%TYPE    -- 発注受領No
    } IS
  BEGIN
   UPDATE
     SARPOE
    SET
     ERRINFRK = '発注受領データ明細にエラーがあります',-- エラー情報
     UPDSYSDT = SYSDATE,        -- 更新システム日時
      UPDSTFCD = 'PUOB0101'       -- 更新社員コード
    WHERE
     GERNU = V_PORRECNU;     -- 発注受領No
 END UPDATE_SARPOE;
  

 ----------------------------------
    -- 発注差異チェックフラグの更新 --10
    ----------------------------------  
 PROCEDURE UPDATE_SAPUOR
    {
  V_GERNU IN SARPOE.GERNU%TYPE    -- 発注No
    } IS
  BEGIN
   UPDATE
     SAPUOR
    SET
     PORCCLFL = '1',      -- 発注取消フラグ
     GERDCHFL = '1',      -- 発注差異チェックフラグ
     UPDSYSDT = SYSDATE,     -- 更新システム日時
      UPDSTFCD = 'PUOB0101'    -- 更新社員コード
    WHERE
     GERNU = V_PORRECNU;     -- 発注受領No
 END UPDATE_SAPUOR; 
 
 
 
 ------------------------------------------
    -- エラーをメッセージテーブルへ書き込む --11
    ------------------------------------------ 
   
    PROCEDURE INSERT_SAMESS
    {
  V_GERNU IN SARPOE.GERNU%TYPE    -- 発注No
    } IS
  BEGIN
   INSERT INTO
     SAMESS
   VALUES 
     MSGID =             -- メッセージID
     (SELECT MAX(MSGID) FROM SAMESS) + 1,       
     MSGTSMDE = TO_CHAR(SYSDATE, 'YYYYMMDD'),    -- メッセージ発信日付         
     MSGTSMTIM = TO_CHAR(SYSDATE, 'HH24MISS'),    -- メッセージ発信時刻         
     SDFSTFCD = 'PUOB0101',         -- 発信元社員コード         
     SDFPOSCD = ' ',          -- 発信元所属コード         
     TRASTFCD = GETSTFCODEBATCH(V_GERNU, SYSDATE), -- 送信先社員コード         
     TRAPOSCD = GETPOSCODEBATCH(V_GERNU, SYSDATE), -- 送信先所属コード         
     OPEFCTKB = '発注No('||V_GERNU||')において発注受領明細データにエラーがありました。また、該当の発注を取消しました。'  -- 業務機能区分         
     MSGRK = '03',           -- メッセージ                  
     UPDSYSDT = SYSDATE,          -- 更新システム日時           
     UPDSTFCD = 'PUOB0101'         -- 更新社員コード           
 END INSERT_SAMESS; 
 
 
 
 -----------------------
    -- 発注データの更新 --12
    -----------------------
 PROCEDURE UPDATE_SAPUOR_ONE
    {
  V_GERNU IN SARPOE.GERNU%TYPE    -- 発注No
    } IS
  BEGIN
   UPDATE
     SAPUOR
    SET
     PORRECDE = SYSDATE,     -- 発注受領日
     PORCDTKB = '70'      -- 発注受領
     UPDSYSDT = SYSDATE,     -- 更新システム日時
      UPDSTFCD = 'PUOB0101'    -- 更新社員コード
    WHERE
     GERNU = V_GERNU AND     -- 発注No
     GERCBNNU =       -- 発注No履歴枝番
     (SELECT MAX(GERCBNNU) FROM SAPUOR WHERE GERNU = V_GERNU)
 END UPDATE_SAPUOR_ONE; 
  
 
 -----------------------
    -- エラー情報の更新 --13
    -----------------------
 PROCEDURE UPDATE_SARPOE
    {
  V_PORRECNU IN SARPOE.PORRECNU%TYPE    -- 発注受領No
    } IS
  BEGIN
   UPDATE
     SARPOE
    SET
     GERTDCFL = '1'
     UPDSYSDT = SYSDATE,    -- 更新システム日時
      UPDSTFCD = 'PUOB0101'   -- 更新社員コード
    WHERE
     PORRECNU = V_PORRECNU;   -- 発注受領No
 END UPDATE_SARPOE;
  
    ------------------------------------------------
    -- 発注受領.発注Noが発注.発注Noに存在しない場合 --
    ------------------------------------------------
    PROCEDURE GET_SAPUOR_GERNU
    {
  V_GERNU IN SARPOE.GERNU%TYPE,
  W_FLAG OUT VARCHAR2
    } IS
  V_GERNU SAPUOR.GERNU%TYPE;
  
  BEGIN
   SELECT GERNU
   INTO V_GERNU
   FROM SAPUOR
   WHERE GERTDCFL = '0' AND GERNU = V_GERNU;
   
   IF V_GERNU IS NULL OR LEN(V_GERNU) = 0 THEN
    W_FLAG = '1';
   END IF;
  END GET_SAPUOR_GERNU;
  
  
 
    --
    -- SAPUOB0101 本体
    BEGIN
  
  D_SARPOE   C_SARPOE%ROWTYPE; -- 発注受領
 
  FOR D_SARPOE IN C_SARPOE LOOP
  
  GET_SAPUOR_GERNU(D_SARPOE.GERNU, W_FLAG); --発注受領.発注Noが発注.発注Noに存在しない場合(W_FLAG IS '1')
  
  IF D_SARONE.ERRINFRK IS NOT NULL OR  LENGTH(D_SARONE.ERRINFRK) > 0 THEN
  
  END IF;
  
  IF D_SARONE.PORRECNU IS NULL OR LENGTH(D_SARONE.PORRECNU) = 0 OR W_FLAG = 1 THEN
  
   
  ELSE
   
  END IF;
  
  END LOOP;
   COMMIT;
  EXCEPTION
   ROLLBACK;
    END SAPUOB0101;