Текущее время: Чт, мар 28 2024, 14:21

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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