Текущее время: Вт, апр 23 2024, 12:15

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Кривая транзакция
СообщениеДобавлено: Чт, сен 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 
Гость
Николай написал(а):
Дело не в проге, а в подходе. Тебе ж уже советовали. По моему лучший совет от круглолицего в темных очках, воспользуйся бапишной
функцией.


за круглолицего - ответишь! :twisted: :evil:


Пометить тему как нерешенную
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB