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;