‎2007 Feb 17 10:16 AM
SELECT-OPTIONS: p_fileid FOR gdf_fileid
OBLIGATORY
NO INTERVALS.
i defined the variant above.
some error happened as following.
step1. i input some fileid in the select screen, one of them is not exist in related table.
step2: enter or F8 , the message popup : ' fileid xxx exist'
the unexist fileid will be displayed in the input text.
step3: delete the fileid.
step4: when i click the right button of select-option. a message popup
' the message is neccessory to be input'.
why, how to solve the problem. i wanna open the dialog then return to the select screen.
‎2007 Feb 17 10:23 AM
Hi,
please check your declarations
what is gdf_fileid?
select-options : s_matnr for mara-matnr.
Regards
Shiva
‎2007 Feb 17 10:26 AM
‎2007 Feb 17 10:31 AM
Hi,
have you written any code in at selection screen for validation of the same
regards
Shiva
‎2007 Feb 17 10:37 AM
source code,please do me a favor
INITIALIZATION.
初期化
PERFORM init_params.
AT SELECTION-SCREEN OUTPUT.
送信日付が当日また当日以前の「未処理」ものを抽出
PERFORM get_misyori_data.
AT SELECTION-SCREEN.
入力チェック
PERFORM check_input
CHANGING gdt_zel06t002. "UK送信管理テーブル
*&----
*
*& Include ZEL03M0018F01
*&----
*
画面チェック *
*&----
*
*&----
*
*& Form init_params
*&----
*
選択画面入力前処理
*----
*
FORM init_params .
データ宣言
DATA:
lds_uk_management TYPE gts_zel06t002, "UK送信管理作業領域
ldt_uk_management TYPE gtt_zel06t002, "UK送信管理データ
lds_fileid TYPE gts_fileid, "ファイルID用作業領域
ldf_lines TYPE i, "データセットの件数
ldf_year_from(4) TYPE c, "From年
ldf_month_from(2) TYPE c, "From月
ldf_day_from(2) TYPE c, "From日
ldf_year_to(4) TYPE c, "To年
ldf_month_to(2) TYPE c, "To月
ldf_day_to(2) TYPE c. "To日
REFRESH gdt_uk_management.
* パラメータ制御
PERFORM control_parameter.
UK送信管理データの検索
SELECT seqno "連番
datab "FROM日付
datbi "TO日付
fileid "ファイルID
f_proc "処理区分
dattr "送信日付
insertdate "登録日
compdate "処理完了日
INTO CORRESPONDING FIELDS OF TABLE gdt_uk_management
FROM zel06t002
WHERE f_proc = gcf_null "空白
AND dattr <= sy-datum. "システム日付
当該レコードの「FILEID」はブランクな場合、レコードを削除する
DELETE gdt_uk_management WHERE fileid = gcf_null. "空白
ファイルID件数の取得
DESCRIBE TABLE gdt_uk_management LINES ldf_lines.
データが取得できた場合
IF ldf_lines > 0.
CLEAR lds_uk_management.
画面項目出力値を取得する
READ TABLE gdt_uk_management INDEX 1
INTO lds_uk_management.
From日付
ldf_year_from = lds_uk_management-datab(4).
ldf_month_from = lds_uk_management-datab+4(2).
ldf_day_from = lds_uk_management-datab+6(2).
画面項目「From」設定する
CONCATENATE ldf_year_from "From年
gcf_slash "Slash
ldf_month_from "From月
gcf_slash "Slash
ldf_day_from "From日
INTO p_datab.
To日付
ldf_year_to = lds_uk_management-datbi(4).
ldf_month_to = lds_uk_management-datbi+4(2).
ldf_day_to = lds_uk_management-datbi+6(2).
画面項目「To」設定する
CONCATENATE ldf_year_to "To年
gcf_slash "Slash
ldf_month_to "To月
gcf_slash "Slash
ldf_day_to "To日
INTO p_datbi.
ENDIF. "ldf_lines > 0
複数レコードが抽出された場合は以下のメッセージを出力する
IF ldf_lines > 1.
MESSAGE s319(zel0305).
未処理データが複数あります。対象を確認して下さい。
ENDIF. "ldf_lines > 1
ENDFORM. " init_params
*&----
*
*& Form control_parameter
*&----
*
パラメータ制御
*----
*
FORM control_parameter .
* データ宣言
TYPE-POOLS sscr.
DATA:
lds_restrict TYPE sscr_restrict, "パラメータ制限情報
lds_opt_list TYPE sscr_opt_list, "オプション一覧
lds_ass TYPE sscr_ass. "オブジェクト割当用
CONSTANTS: lcf_name_fileid TYPE sscr_opt_list-name VALUE 'P_FILEID'. "ファイルID
ファイルIDオプションセット
lds_opt_list-name = 'JUST_EQ'. "JUST_EQ
lds_opt_list-options-eq = gcf_on. "X
lds_opt_list-options-bt = gcf_null. "null
lds_opt_list-options-cp = gcf_null. "null
lds_opt_list-options-ge = gcf_null. "null
lds_opt_list-options-gt = gcf_null. "null
lds_opt_list-options-le = gcf_null. "null
lds_opt_list-options-lt = gcf_null. "null
APPEND lds_opt_list TO lds_restrict-opt_list_tab.
ファイルIDのオプション割当
lds_ass-kind = gcf_msgty. "S
lds_ass-name = lcf_name_fileid. "P_FILEID
lds_ass-sg_main = gcf_i. "I
lds_ass-sg_addy = gcf_null. "null
lds_ass-op_main = 'JUST_EQ'. "JUST_EQ
lds_ass-op_addy = gcf_null. "null
APPEND lds_ass TO lds_restrict-ass_tab.
オプション制限モジュール呼出
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction = lds_restrict. "パラメータ制限情報
ENDFORM. " control_parameter
*&----
*
*& Form check_input
*&----
*
選択画面入力後処理
*----
*
<--PRT_ZEL06T002 UK送信管理テーブル
*----
*
FORM check_input CHANGING prt_zel06t002 TYPE gtt_zel06t002.
データ宣言
DATA:
ldf_check(1) TYPE c, "flag
lds_zel06t002 TYPE gts_zel06t002, "UK送信管理作業領域
ldf_year_from(4) TYPE c, "From年
ldf_month_from(2) TYPE c, "From月
ldf_day_from(2) TYPE c, "From日
ldf_year_to(4) TYPE c, "To年
ldf_month_to(2) TYPE c, "To月
ldf_day_to(2) TYPE c, "To日
ldf_answer(1) TYPE c, "リターンコード: '1'、'2'
f_flag(1) TYPE c. "変数1
会社コードチェック
SELECT COUNT(*)
BYPASSING BUFFER
FROM t001
WHERE bukrs = p_bukrs. "会社コード
判断
IF sy-dbcnt = 0.
MESSAGE e333(zel0305) WITH p_bukrs.
指定された会社コード &1 は存在しません。
ENDIF.
UK送信管理データの検索
SELECT seqno "連番
fileid "ファイルID
datab "From日付
datbi "To日付
f_proc "処理区分
dattr "送信日付
insertdate "登録日
INTO CORRESPONDING FIELDS OF TABLE prt_zel06t002
FROM zel06t002
WHERE fileid IN p_fileid. "fileid
* 判断
IF sy-subrc <> 0.
CLEAR p_datab.
CLEAR p_datbi.
MESSAGE e331(zel0305).
ファイルIDは存在しません
ENDIF.
loop
CLEAR ldf_check.
LOOP AT p_fileid.
READ TABLE prt_zel06t002 WITH KEY fileid = p_fileid-low
TRANSPORTING NO FIELDS.
判断
IF sy-subrc <> 0.
ldf_check = gcf_on. "X
EXIT.
ENDIF.
ENDLOOP.
判断
IF ldf_check = gcf_on. "X
CLEAR p_datab.
CLEAR p_datbi.
MESSAGE e331(zel0305).
ファイルIDは存在しません
ENDIF.
画面項目出力値を取得する
READ TABLE prt_zel06t002 INDEX 1
INTO lds_zel06t002.
From日付
ldf_year_from = lds_zel06t002-datab(4).
ldf_month_from = lds_zel06t002-datab+4(2).
ldf_day_from = lds_zel06t002-datab+6(2).
画面項目「From」設定する
CONCATENATE ldf_year_from "From年
gcf_slash "Slash
ldf_month_from "From月
gcf_slash "Slash
ldf_day_from "From日
INTO p_datab.
To日付
ldf_year_to = lds_zel06t002-datbi(4).
ldf_month_to = lds_zel06t002-datbi+4(2).
ldf_day_to = lds_zel06t002-datbi+6(2).
画面項目「To」設定する
CONCATENATE ldf_year_to "To年
gcf_slash "Slash
ldf_month_to "To月
gcf_slash "Slash
ldf_day_to "To日
INTO p_datbi.
ループ処理
LOOP AT prt_zel06t002 INTO lds_zel06t002 WHERE f_proc <> gcf_null.
MOVE gcf_on TO f_flag. "X
EXIT.
ENDLOOP.
* 判断
IF f_flag = gcf_on. "X
ポップアップにて確認メッセージを出力する
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = text-008 "ダイアログボックス内の質問テキスト
text_button_1 = 'はい' "第 1 押ボタンのテキスト
text_button_2 = 'いいえ' "第 2 押しボタンのテキスト
default_button = '2' "カーソル位置
display_cancel_button = '' "取消押ボタン表示用のボタン
start_column = 25 "POPUP の開始列
start_row = 8 "POPUP の開始行
IMPORTING
answer = ldf_answer "リターンコード: '1'、'2'
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
判断
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
判断
IF ldf_answer <> 1.
LEAVE SCREEN.
ENDIF.
ENDIF.
* 売上送信フラグ、在庫送信フラグ、どちらもチェックが入っていない場合
IF p_sales = gcf_null "空白
AND p_stock = gcf_null. "空白
MESSAGE e332(zel0305).
送信対象を選択してください
ENDIF.
ENDFORM. " check_input
*&----
*
*& Form get_misyori_data
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM get_misyori_data .
データ宣言
DATA:
lds_fileid TYPE gts_fileid, "ファイルID用作業領域
lds_uk_management TYPE gts_zel06t002. "UK送信管理作業領域
CLEAR p_fileid[].
LOOP AT gdt_uk_management INTO lds_uk_management.
MOVE:
'I' TO lds_fileid-sign, "Sign
'EQ' TO lds_fileid-option, "Option
lds_uk_management-fileid TO lds_fileid-low. "Low値
APPEND lds_fileid TO p_fileid.
ENDLOOP.
ENDFORM. " get_misyori_data
‎2007 Feb 17 10:46 AM
Hi
FORM get_misyori_data .
データ宣言
DATA:
lds_fileid TYPE gts_fileid, "ファイルID用作業領域
lds_uk_management TYPE gts_zel06t002. "UK送信管理作業領域
SELECT seqno "連番
datab "FROM日付
datbi "TO日付
fileid "ファイルID
f_proc "処理区分
dattr "送信日付
insertdate "登録日
compdate "処理完了日
INTO CORRESPONDING FIELDS OF TABLE gdt_uk_management
FROM zel06t002
WHERE f_proc = gcf_null "空白
AND dattr <= sy-datum. "システム日付
CLEAR p_fileid[].
<b>LOOP AT gdt_uk_management INTO lds_uk_management.</b>
MOVE:
'I' TO lds_fileid-sign, "Sign
'EQ' TO lds_fileid-option, "Option
lds_uk_management-fileid TO lds_fileid-low. "Low値
APPEND lds_fileid TO p_fileid.
ENDLOOP.
ENDFORM. " get_misyori_data
<b>LOOP AT gdt_uk_management INTO lds_uk_management.</b>
the internal table gdt_uk_management will be empty till it comes to start of selection write the code to get the same value into the same.
regards
Shiva
‎2007 Feb 17 11:57 AM
‎2007 Feb 19 2:46 PM