SAPфорум.RU https://sapboard.ru/forum/ |
|
Кривая транзакция https://sapboard.ru/forum/viewtopic.php?f=13&t=369 |
Страница 1 из 1 |
Автор: | Гость [ Чт, сен 02 2004, 08:55 ] |
Заголовок сообщения: | Кривая транзакция |
Господа помогите разобраться с программой, в частности со вторым и третьим пакетным вводом, мне необходимо в транзакции sd02 и fk02 пролистывание или переход на новую пустую строчку, чего только не <я не знать русский языка> не получается, помогите пожалуйста. REPORT ZDEBITOR_BNK MESSAGE-ID ZN. DATA FLAG_TR. DATA: FIO(50), FLAG, FLAG_VBTYP, POSNR(3), FFULL(20), BVTYP LIKE KNBK-BVTYP. data j type i. DATA: VTAB LIKE LFBK OCCURS 0 WITH HEADER LINE. DATA: N TYPE I. DATA: BEGIN OF ITAB_SR OCCURS 0. include structure KNBK. DATA END OF ITAB_SR. DATA: BEGIN OF TAB OCCURS 10. INCLUDE STRUCTURE BDCDATA. DATA END OF TAB. TABLES: KNA1, LFA1, KNBK, LFBK, T001, BNKA, KNB1. CONTROLS: TC_ITAB TYPE TABLEVIEW USING SCREEN 100. DATA COLS_WA LIKE LINE OF TC_ITAB-COLS. DATA: i TYPE i. DATA: BEGIN OF ITAB OCCURS 0, flag, banka LIKE bnka-banka, marked, old. include structure KNBK. DATA END OF ITAB. DATA: BEGIN OF ITAB_BNKA OCCURS 0. include structure BNKA. DATA END OF ITAB_BNKA. START-OF-SELECTION. PARAMETERS: BUKRS LIKE BKPF-BUKRS MEMORY ID BUK, KUNNR LIKE KNA1-KUNNR. SELECTION-SCREEN COMMENT 55(34) FIO1. INITIALIZATION. * Проверка на наличие кредитора/дебитора AT SELECTION-SCREEN ON KUNNR. SELECT SINGLE * FROM KNA1 WHERE KUNNR = KUNNR. IF SY-SUBRC NE 0. FLAG = 'X'. MESSAGE I013 WITH KUNNR. ELSE. SELECT SINGLE * FROM KNB1 WHERE BUKRS = BUKRS AND KUNNR = KUNNR. IF SY-SUBRC = 0. CONCATENATE KNA1-NAME1 KNA1-NAME2 INTO FIO SEPARATED BY SPACE. CONDENSE FIO. FIO1 = FIO+0(34). ELSE. MESSAGE I015 WITH KUNNR BUKRS. FLAG = 'X'. EXIT. ENDIF. ENDIF. * Проверка на наличие БЕ AT SELECTION-SCREEN ON BUKRS. SELECT SINGLE * FROM T001 WHERE BUKRS = BUKRS. IF SY-SUBRC NE 0. MESSAGE I014 WITH BUKRS. FLAG = 'X'. ENDIF. START-OF-SELECTION. IF FLAG = 'X'. SET SCREEN 0. LEAVE SCREEN. ENDIF. SELECT SINGLE * FROM KNA1 WHERE KUNNR = KUNNR. * Выбираем банковские данные на дебитора i = 0. SELECT * FROM KNBK WHERE KUNNR = KUNNR. i = i + 1. MOVE-CORRESPONDING KNBK TO ITAB. ITAB-OLD = 'X'. APPEND ITAB. CLEAR ITAB. ENDSELECT. IF SY-SUBRC NE 0. CLEAR ITAB. * ITAB-OLD = 'X'. APPEND ITAB. i = 1. ENDIF. TC_ITAB-LINES = i. LOOP AT ITAB. IF ITAB-BANKL NE SPACE. SELECT SINGLE * FROM BNKA WHERE BANKL = ITAB-BANKL AND BANKS = 'RU'. CONCATENATE BNKA-BANKA ' / ' BNKA-BRNCH INTO ITAB-BANKA. MODIFY ITAB. ENDIF. * IF COLS_WA-SCREEN-NAME = 'ITAB-BVTYP'. * COLS_WA-SCREEN-INPUT = '0'. * MODIFY TC_ITAB-COLS FROM COLS_WA. * ENDIF. ENDLOOP. CALL SCREEN 100. *&---------------------------------------------------------------------* *& Module MODIFY_ITAB OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE MODIFY_ITAB_OUT OUTPUT. IF ITAB-BANKL NE SPACE AND ITAB-OLD NE 'X'. TRANSLATE ITAB-BANKS TO UPPER CASE. SELECT SINGLE * FROM BNKA WHERE BANKL = ITAB-BANKL AND BANKS = 'RU'. CONCATENATE BNKA-BANKA ' / ' BNKA-BRNCH INTO ITAB-BANKA. MODIFY ITAB INDEX TC_ITAB-CURRENT_LINE. ENDIF. ENDMODULE. " MODIFY_ITAB OUTPUT *&---------------------------------------------------------------------* *& Module MODIFY_ITAB INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE MODIFY_ITAB_IN INPUT. * LOOP AT TC_ITAB-COLS INTO COLS_WA. * IF COLS_WA-SCREEN-NAME = 'ITAB-BVTYP'. * COLS_WA-SCREEN-INPUT = '0'. * MODIFY TC_ITAB-COLS FROM COLS_WA. * ENDIF. * ENDLOOP. IF ITAB-OLD NE 'X'. MODIFY ITAB INDEX TC_ITAB-CURRENT_LINE. SELECT SINGLE * FROM BNKA WHERE BANKS = 'RU' AND BANKL = ITAB-BANKL. IF SY-SUBRC NE 0. ITAB_BNKA-BANKS = 'RU'. ITAB_BNKA-BANKL = ITAB-BANKL. CALL SCREEN 0101. ENDIF. ENDIF. ENDMODULE. " MODIFY_ITAB INPUT *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'SCR100'. ENDMODULE. " STATUS_0100 OUTPUT *---------------------------------------------------------------------* * MODULE EXIT INPUT *---------------------------------------------------------------------* * *---------------------------------------------------------------------* MODULE EXIT INPUT. IF SY-UCOMM = 'EPOS'. LEAVE PROGRAM. ENDIF. IF SY-UCOMM = 'BACK'. SET SCREEN 0. LEAVE SCREEN. ENDIF. ENDMODULE. "EXIT INPUT *&---------------------------------------------------------------------* *& Module EXIT101 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE EXIT101 INPUT. IF SY-UCOMM = 'EPOS'. LEAVE PROGRAM. ENDIF. IF SY-UCOMM = 'BACK'. LEAVE TO SCREEN 0100. ENDIF. ENDMODULE. " EXIT101 INPUT *&---------------------------------------------------------------------* *& Module STATUS0101 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS0101 OUTPUT. SET PF-STATUS 'SCR101'. ENDMODULE. " STATUS0101 OUTPUT *&---------------------------------------------------------------------* *& Module OK_CODE_101 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE OK_CODE_101 INPUT. IF SY-UCOMM = 'SAVE'. refresh tab. perform bdc_dynpro using 'SAPMF02B' '0100'. perform bdc_field using 'BDC_CURSOR' 'BNKA-BANKL'. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'BNKA-BANKS' 'RU'. perform bdc_field using 'BNKA-BANKL' ITAB-BANKL. perform bdc_dynpro using 'SAPMF02B' '0110'. perform bdc_field using 'BDC_CURSOR' 'BNKA-BRNCH'. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'BNKA-BANKA' ITAB_BNKA-BANKA. perform bdc_field using 'BNKA-STRAS' ITAB_BNKA-STRAS. perform bdc_field using 'BNKA-ORT01' ITAB_BNKA-ORT01. perform bdc_field using 'BNKA-BRNCH' ITAB_BNKA-BRNCH. perform bdc_dynpro using 'SAPMF02B' '0110'. perform bdc_field using 'BDC_CURSOR' 'BNKA-BANKA'. perform bdc_field using 'BDC_OKCODE' '=UPDA'. perform bdc_field using 'BNKA-BANKA' ITAB_BNKA-BANKA. perform bdc_field using 'BNKA-STRAS' ITAB_BNKA-STRAS. perform bdc_field using 'BNKA-ORT01' ITAB_BNKA-ORT01. perform bdc_field using 'BNKA-BRNCH' ITAB_BNKA-BRNCH. CALL TRANSACTION 'FI01' USING TAB MODE 'E'. SY-UCOMM = ''. LOOP AT ITAB. IF ITAB-BANKL NE SPACE AND ITAB-BANKA EQ SPACE. SELECT SINGLE * FROM BNKA WHERE BANKL = ITAB-BANKL. CONCATENATE BNKA-BANKA ' / ' BNKA-BRNCH INTO ITAB-BANKA. MODIFY ITAB. ENDIF. ENDLOOP. REFRESH ITAB_BNKA. LEAVE TO SCREEN 0100. ENDIF. ENDMODULE. " OK_CODE_101 INPUT *&--------------------------------------------------------------------* *& Form BDC_DYNPRO *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -->PROGRAM text * -->DYNPRO text *---------------------------------------------------------------------* FORM BDC_DYNPRO USING PROGRAM DYNPRO. CLEAR TAB. TAB-PROGRAM = PROGRAM. TAB-DYNPRO = DYNPRO. TAB-DYNBEGIN = 'X'. APPEND TAB. ENDFORM. " BDC_DYNPRO *&--------------------------------------------------------------------* *& Form BDC_FIELD *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -->FNAM text * -->FVAL text *---------------------------------------------------------------------* FORM BDC_FIELD USING FNAM FVAL. CLEAR TAB. TAB-FNAM = FNAM. TAB-FVAL = FVAL. APPEND TAB. ENDFORM. " BDC_FIELD *&---------------------------------------------------------------------* *& Module OK_CODE_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE OK_CODE_0100 INPUT. CASE SY-UCOMM. WHEN 'SAVE'. FLAG_TR = ''. LOOP AT ITAB WHERE OLD NE 'X'. MOVE-CORRESPONDING ITAB TO ITAB_SR. APPEND ITAB_SR. CLEAR ITAB_SR. ENDLOOP. LOOP AT ITAB_SR. LOOP AT ITAB WHERE BANKL NE '' AND OLD EQ 'X'. IF ITAB-BANKS = ITAB_SR-BANKS AND ITAB-BANKL = ITAB_SR-BANKL AND ITAB-BANKN = ITAB_SR-BANKN AND ITAB-KOINH = ITAB_SR-KOINH AND ITAB-BKONT = ITAB_SR-BKONT. FLAG_TR = 'X'. * MESSAGE 'Такая запись уже существует! Введите новую' TYPE 'I'. ENDIF. ENDLOOP. ENDLOOP. REFRESH ITAB_SR. FLAG_VBTYP = ''. BVTYP = ITAB-BVTYP. I = 0. LOOP AT ITAB. IF ITAB-BVTYP = BVTYP. I = I + 1. ENDIF. ENDLOOP. IF I > 1 AND FLAG_VBTYP NE 'X'. * MESSAGE 'Такой тип банка уже есть в таблице' TYPE 'I'. FLAG_VBTYP = 'X'. ENDIF. IF FLAG_VBTYP NE 'X' AND FLAG_TR NE 'X'. i = 0. LOOP AT ITAB. SELECT * FROM KNBK WHERE BANKS = ITAB-BANKS AND BANKL = ITAB-BANKL AND BANKN = ITAB-BANKN AND BKONT = ITAB-BKONT. * ITAB-FLAG = 'X'. MODIFY ITAB. ENDSELECT. ENDLOOP. LOOP AT ITAB WHERE OLD = 'X'. i = i + 1. ENDLOOP. LOOP AT ITAB WHERE OLD NE 'X'. i = i + 1. IF i LE 10. POSNR = i. CONCATENATE '0' POSNR INTO POSNR. ELSE. POSNR = '02'. ENDIF. CONDENSE POSNR NO-GAPS. * Дебитор REFRESH TAB. perform bdc_dynpro using 'SAPMF02D' '0106'. perform bdc_field using 'BDC_CURSOR' 'RF02D-KUNNR'. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'RF02D-KUNNR' KUNNR. perform bdc_field using 'RF02D-BUKRS' BUKRS. perform bdc_field using 'RF02D-D0130' 'X'. perform bdc_dynpro using 'SAPMF02D' '0130'. FFULL = ''. CONCATENATE 'KNBK-BVTYP(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_dynpro using 'SAPMF02D' '0130'. * perform bdc_field using 'BDC_CURSOR' * 'KNBK-BANKS(01)'. DO N TIMES. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'BDC_CURSOR' 'KNBK-BANKS(01)'. ENDDO. * perform bdc_field using 'BDC_OKCODE' * '=ENTR'. perform bdc_dynpro using 'SAPMF02D' '0130'. perform bdc_field using 'BDC_CURSOR' FFULL. perform bdc_field using 'BDC_OKCODE' '=UPDA'. FFULL = ''. CONCATENATE 'KNBK-BANKS(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BANKS. FFULL = ''. CONCATENATE 'KNBK-BANKL(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BANKL. FFULL = ''. CONCATENATE 'KNBK-BANKN(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BANKN. FFULL = ''. CONCATENATE 'KNBK-BKONT(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BKONT. FFULL = ''. CONCATENATE 'KNBK-BVTYP(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BVTYP. CALL TRANSACTION 'FD02' USING TAB MODE 'A' UPDATE 'S'. * Конец дебитору * Кредитор SELECT * FROM LFBK WHERE LIFNR = KUNNR. move-corresponding LFBK TO VTAB. APPEND VTAB. ENDSELECT. DESCRIBE TABLE VTAB LINES N. N = N + 1. IF i > 6. j = 1. ENDIF. posnr = N. IF i LE 6. POSNR = N. CONCATENATE '0' POSNR INTO POSNR. ENDIF. CONDENSE POSNR NO-GAPS. REFRESH TAB. perform bdc_dynpro using 'SAPMF02K' '0106'. perform bdc_field using 'BDC_CURSOR' 'RF02K-D0130'. perform bdc_field using 'BDC_OKCODE' '/00'. perform bdc_field using 'RF02K-LIFNR' KUNNR. perform bdc_field using 'RF02K-BUKRS' BUKRS. perform bdc_field using 'RF02K-D0130' 'X'. perform bdc_dynpro using 'SAPMF02K' '0130'. FFULL = ''. CONCATENATE 'LFBK-BVTYP(' POSNR ')' INTO FFULL. CONDENSE FFULL NO-GAPS. DO I TIMES. perform bdc_field using 'BDC_OKCODE' '/P+'. perform bdc_field using 'BDC_CURSOR' FFULL. perform bdc_field using 'BDC_CURSOR' N. ENDDO. perform bdc_field using 'BDC_OKCODE' '=ENTR'. FFULL = ''. CONCATENATE 'LFBK-BANKS(' POSNR ')' INTO FFULL. " EG CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL " EG ITAB-BANKS. FFULL = ''. CONCATENATE 'LFBK-BANKL(' POSNR ')' INTO FFULL. " EG CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL " EG ITAB-BANKL. FFULL = ''. CONCATENATE 'LFBK-BANKN(' POSNR ')' INTO FFULL. " EG CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL " EG ITAB-BANKN. FFULL = ''. CONCATENATE 'LFBK-BKONT(' POSNR ')' INTO FFULL. " EG CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL ITAB-BKONT. FFULL = ''. CONCATENATE 'LFBK-BVTYP(' POSNR ')' INTO FFULL. " EG CONDENSE FFULL NO-GAPS. perform bdc_field using FFULL " EG ITAB-BVTYP. perform bdc_dynpro using 'SAPMF02K' '0130'. *perform bdc_field using 'BDC_CURSOR' * 'LFBK-BANKS(01)'. perform bdc_field using 'BDC_OKCODE' '=UPDA'. CALL TRANSACTION 'FK02' USING TAB MODE 'A' UPDATE 'S'. * Конец кредитору ENDLOOP. ENDIF. LEAVE PROGRAM. WHEN 'ZNL'. CLEAR ITAB. APPEND ITAB. TC_ITAB-LINES = TC_ITAB-LINES + 1. COLS_WA-SCREEN-INPUT = '1'. WHEN 'ZDL'. LOOP AT ITAB WHERE MARKED = 'X' AND OLD NE 'X'. DELETE ITAB. ENDLOOP. TC_ITAB-LINES = TC_ITAB-LINES - 1. ENDCASE. ENDMODULE. " OK_CODE_0100 INPUT *&---------------------------------------------------------------------* *& Module BVTYP INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE BVTYP INPUT. FLAG_VBTYP = ''. BVTYP = ITAB-BVTYP. I = 0. LOOP AT ITAB. IF ITAB-BVTYP = BVTYP. I = I + 1. ENDIF. ENDLOOP. IF I > 1 AND FLAG_VBTYP NE 'X'. MESSAGE 'Такой тип банка уже есть в таблице' TYPE 'I'. FLAG_VBTYP = 'X'. ENDIF. ENDMODULE. " BVTYP INPUT *&---------------------------------------------------------------------* *& Module TOTAL_RECORD INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE TOTAL_RECORD INPUT. FLAG_TR = ''. LOOP AT ITAB WHERE OLD NE 'X'. MOVE-CORRESPONDING ITAB TO ITAB_SR. APPEND ITAB_SR. CLEAR ITAB_SR. ENDLOOP. LOOP AT ITAB_SR. LOOP AT ITAB WHERE BANKL NE '' AND OLD EQ 'X'. IF ITAB-BANKS = ITAB_SR-BANKS AND ITAB-BANKL = ITAB_SR-BANKL AND ITAB-BANKN = ITAB_SR-BANKN AND ITAB-KOINH = ITAB_SR-KOINH AND ITAB-BKONT = ITAB_SR-BKONT. FLAG_TR = 'X'. MESSAGE 'Такая запись уже существует! Введите новую' TYPE 'I'. ENDIF. ENDLOOP. ENDLOOP. REFRESH ITAB_SR. ENDMODULE. " TOTAL_RECORD INPUT |
Автор: | Николай [ Чт, сен 02 2004, 09:57 ] |
Заголовок сообщения: | |
Дело не в проге, а в подходе. Тебе ж уже советовали. По моему лучший совет от круглолицего в темных очках, воспользуйся бапишной функцией. |
Автор: | Гость [ Чт, сен 02 2004, 10:09 ] |
Заголовок сообщения: | |
Николай, а не могли бы вы показать в программе как прикрутить эту функцию, пожалуйста |
Автор: | ВН [ Чт, сен 02 2004, 10:31 ] |
Заголовок сообщения: | |
Николай написал(а): Дело не в проге, а в подходе. Тебе ж уже советовали. По моему лучший совет от круглолицего в темных очках, воспользуйся бапишной
функцией. за круглолицего - ответишь! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |