Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Hi

Former Member
0 Likes
698

Hi,

I need your help to get a output report.

Report is for each material and plant for last 24 months to come in one line. same mat next plant for 24 months shd come in next line. like that for each material and plant.

I am able to derive a code

mat plant sales ......date

x......1 ......12 ......12-09-2007

x...... 1 ......9 ......10-08-2007

x...... 1 ......9...... 10-08-2006

x...... 1 ...... 9...... 10-11-2005

y...... 1 ......9 ......10-11-2006

y...... 1 ...... 9 ...... 10-10-2006

y...... 1 ......9 ...... 10-6-2006

I want to summerize and print each mat/ plant in a single line

cur date = sep 2007

mat plant 9/7 8/7 7/7 6/6 5/7 4/7 ....... 9/5

x 1 12 9 -- -- -- -- -- -- -- -- -- -- --- --- -- -- -- --

if there is no value I need to insert a comma and the lenght is always 24 + 2 whether the values are there or not. 24 for sales of last 24 months and 2 is mat and plant

I need to write a code

appreciate your quick response

Regards,

Senthil

5 REPLIES 5
Read only

Former Member
0 Likes
664

Easy my friend,

Just use AT END Operator for ur Material to summarize.

If u want the code then send me ur code then i can do some changes in ur finalitab then return it to u

Regards,

Usman Malik

Read only

0 Likes
664

Thanks for response.

I dont have the complete code right now. And I used another loop to summarize for each month and another loop for concatenation.

Please let me know if this is ok. thanks a lot.

REPORT ZSENTEST1.

data : It_vbak like vbak OCCURS 0 WITH HEADER LINE.

data : it_vbap like vbap OCCURS 0 WITH HEADER LINE.

data : begin of it_vbak_vbap ,

vbak1 like vbak,

vbap1 like vbap,

END OF it_vbak_vbap.

data : begin of it_tol occurs 0 ,

matnr like vbap-matnr,

vbeln like vbak-vbeln,

vkorg like vbak-vkorg,

werks like vbap-werks,

auart like vbak-auart,

kunnr like vbak-kunnr,

erdat like vbak-erdat,

vtweg like vbak-vtweg,

pstyv like vbap-pstyv,

lfrel like vbap-lfrel,

END OF it_tol.

data : wa_vbak like line of it_vbak.

DATA : wa_vbap like line of it_vbap.

data : wa_tol like LINE OF it_tol.

data : lowdate like vbap-erdat.

data : datechar(8) type c.

lowdate = SY-DATUM.

CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'

EXPORTING

MONTHS = '-24'

OLDDATE = lowdate

IMPORTING

NEWDATE = lowdate.

write : / lowdate , ' function - lowdate'.

move lowdate to datechar.

move 0 to lowdate.

move datechar to lowdate.

*s_erdat-low = lowdate.

*s_erdat-high = sy-datum.

selection-SCREEN begin of block b1 with frame title text-002.

select-options s_vkorg for it_vbak-vkorg DEFAULT '1000' to 'zzzzz'.

select-options s_auart for it_vbak-auart.

select-options s_erdat for it_vbak-erdat. " DEFAULT lowdate to sy-datum. "

select-options s_kunnr for it_vbak-kunnr.

select-options s_vtweg for It_vbak-vtweg.

select-options s_pstyv for it_tol-pstyv.

PARAMETERS : s_lfrel like it_tol-lfrel.

selection-SCREEN end of BLOCK b1.

  • *if s_erdat is INITIAL.

  • * s_erdat-high = sy-datum.

  • s_erdat-low = sy-datum - 730.

  • endif.

if s_erdat is INITIAL.

s_erdat-high = sy-datum.

move lowdate to s_erdat-low.

write : / s_erdat-low.

endif.

Select * from vbak into table it_vbak WHERE

vkorg in s_vkorg

and auart in s_auart

and kunnr in s_kunnr

and erdat BETWEEN s_erdat-low and s_erdat-high

AND vtweg in s_vtweg.

select * from vbap into table it_vbap

for all entries in it_vbak

where vbeln = it_vbak-vbeln

and pstyv in s_pstyv

and lfrel = s_lfrel.

loop at it_vbak into wa_vbak.

read table it_vbap into wa_vbap with key vbeln = wa_vbak-vbeln .

wa_tol-vbeln = wa_vbak-vbeln.

wa_tol-vkorg = wa_vbak-vkorg.

wa_tol-werks = wa_vbap-werks.

wa_tol-auart = wa_vbak-auart.

wa_tol-kunnr = wa_vbak-kunnr.

wa_tol-erdat = wa_vbak-erdat.

wa_tol-vtweg = wa_vbak-vtweg.

wa_tol-matnr = wa_vbap-matnr.

wa_tol-pstyv = wa_vbap-pstyv.

wa_tol-lfrel = wa_vbap-lfrel.

append wa_tol to it_tol.

endloop.

sort it_tol by vkorg werks ascending erdat descending.

data : mat11 like vbap-matnr,

plt1 like vbap-werks.

loop at it_tol to 1.

write : / it_tol-vkorg under 'it_tol-vkorg'

, it_tol-werks, it_tol-auart, it_tol-kunnr ,

it_tol-erdat , it_tol-pstyv , it_tol-lfrel .

mat11 = it_tol-matnr.

plt1 = it_tol-werks.

ENDloop.

Read only

0 Likes
664

I will be able to get a sum of all the months or the days. But can you let me how it can be feasible to summarize and display each mat / plant in one line with last 24 months. then another line for another plant.

thanks a lot.

Senthil

Read only

Former Member
0 Likes
664

Hello All,

I am getting error in a loop while concatination. Instead of getting 24 coma's I am getting around 32 comas. Can you please figure my error. please see below for the program code.

Thanks a lot.

Regards,

SEnthil

REPORT ZSENddd.

TABLES : VBAK,

VBAP.

DATA: BEGIN OF I_REPORT_VBAK OCCURS 0,

VKORG LIKE VBAK-VKORG, " SALES ORG

AUART LIKE VBAK-AUART, " SALES ORDER TYPE

ERDAT LIKE VBAK-ERDAT, " CREATION DATE ( RECORD WAS CREATED)

KUNNR LIKE VBAK-KUNNR, " SOLD TO PARTY

VTWEG LIKE VBAK-VTWEG, " DISTRIBUTION

VBELN LIKE VBAK-VBELN, " SALES DOCUMENT

SPART LIKE VBAK-SPART. " DIVISION

DATA: END OF I_REPORT_VBAK.

DATA: BEGIN OF I_REPORT_VBAP OCCURS 0,

MATNR LIKE VBAP-MATNR,

WERKS LIKE VBAP-WERKS,

ABGRU LIKE VBAP-ABGRU,

LFREL LIKE VBAP-LFREL,

ERDAT LIKE VBAP-ERDAT,

PSTYV LIKE VBAP-PSTYV, " ITEM CATEGORY

VBELN LIKE VBAP-VBELN.

DATA: END OF I_REPORT_VBAP.

DATA: BEGIN OF ITAB1 OCCURS 0,

MATNR LIKE VBAP-MATNR, " MATERIAL

WERKS LIKE VBAP-WERKS, " PLANT

KWMENG LIKE VBAP-KWMENG, " CUM. ORDER QTY IN SALES UNITS

VBELN LIKE VBAK-VBELN, "SALES ORDER NO

VBTYP LIKE VBAK-VBTYP,

ERDAT LIKE VBAK-ERDAT.

DATA: END OF ITAB1.

DATA : IT_VBAK LIKE VBAK OCCURS 0 WITH HEADER LINE.

DATA : IT_VBAP LIKE VBAP OCCURS 0 WITH HEADER LINE.

DATA : NUMBER1 TYPE NUM5,

NUMBER2 TYPE NUM5,

DATECHAR(3) TYPE C,

CHAR8 TYPE CHAR8,

CHAR2 TYPE CHAR2,

YRS TYPE NUM2 . " CHANGED FROM CHAR2

DATA : ITAB2 LIKE ITAB1.

DATA : TESTVBAK LIKE VBAK OCCURS 0 WITH HEADER LINE.

DATA : TESTVBAP LIKE VBAP OCCURS 0 WITH HEADER LINE.

DATA : CDATE(8) TYPE C,

ERDAT1(8) TYPE C,

MONTH2(2) TYPE C.

DATA : CDATE1(8) TYPE C.

DATA : SALES_QUANTITY TYPE I,

COUNT TYPE I.

DATA : BEGIN OF IT_TOL OCCURS 0 ,

MATNR LIKE VBAP-MATNR,

VBELN LIKE VBAK-VBELN,

VBTYP LIKE VBAK-VBTYP,

VKORG LIKE VBAK-VKORG,

WERKS LIKE VBAP-WERKS,

AUART LIKE VBAK-AUART,

KUNNR LIKE VBAK-KUNNR,

ERDAT LIKE VBAK-ERDAT,

VTWEG LIKE VBAK-VTWEG,

PSTYV LIKE VBAP-PSTYV,

LFREL LIKE VBAP-LFREL,

KWMENG LIKE VBAP-KWMENG,

END OF IT_TOL.

DATA : WA_VBAK LIKE LINE OF IT_VBAK.

DATA : WA_VBAP LIKE LINE OF IT_VBAP.

DATA : WA_TOL LIKE LINE OF IT_TOL.

TYPES: BEGIN OF T_PSER,

MAT TYPE VBAP-MATNR, " FOR MATERIAL

PLNT TYPE VBAP-WERKS, " LOCATION

IN_STOCKQTY LIKE VBAP-KWMENG, " FOR DEMAND - VALUE

IN_SUPP_CODE LIKE COUNT, " FOR COUNT OF VBAP RECORDS

IN_CDATE LIKE CDATE1, " MONTH

IN_DIVIS TYPE C, " FOR PLUS OR MINUS OF VBAP RECORDS

YEAR LIKE CHAR2,

END OF T_PSER.

DATA : GI_PSER TYPE T_PSER OCCURS 0 WITH HEADER LINE.

FIELD-SYMBOLS: <GF_PSER> LIKE LINE OF GI_PSER.

DATA: BEGIN OF FORFTP OCCURS 0,

MAT TYPE VBAP-MATNR, " FOR MATERIAL

PLNT TYPE VBAP-WERKS, " LOCATION

IN_STOCKQTY LIKE VBAP-KWMENG, " FOR DEMAND - VALUE

IN_SUPP_CODE TYPE NUM2, " FOR COUNT OF VBAP RECORDS

IN_CDATE TYPE NUM2 , "CDATE1, " MONTH

IN_DIVIS TYPE C, " FOR PLUS OR MINUS OF VBAP RECORDS

YEAR TYPE NUM2,

END OF FORFTP.

DATA : BEGIN OF FORMAT_DATA OCCURS 0,

MAT TYPE CHAR18,

FILLER TYPE CHAR1 VALUE ',',

IN_STOCKIND TYPE CHAR4,

FILLER1 TYPE CHAR1 VALUE ',',

DEMAND_SIGN TYPE CHAR1 , " TO STORE + OR -

IN_STOCKQTY TYPE CHAR5,

FILLER2 TYPE CHAR1 VALUE ',',

IN_CDATE TYPE CHAR3,

FILLER3 TYPE CHAR1 VALUE ',',

IN_SUPP_CODE TYPE CHAR5,

END OF FORMAT_DATA.

  • DATA : MAT11 TYPE VBAP-MATNR,

  • PLNT1 TYPE VBAP-WERKS.

DATA : MAT11(18) TYPE C, "VBAP-MATNR,

PLNT1(4) TYPE C. "VBAP-WERKS.

DATA : MON2 TYPE NUM2,

CUR_YR TYPE NUM2,

CUR_MON TYPE NUM2,

CHARI8 TYPE CHAR8,

CHARS8 TYPE CHAR8,

BLANK1(5) TYPE C VALUE ' ',

CHARS5 TYPE CHAR5,

NUMS5 TYPE NUM5.

DATA : BEGIN OF LP1,

DS TYPE C,

CT TYPE NUM2,

END OF LP1,

HOR_FILE TYPE CHAR128. "256.

DATA : BEGIN OF ITAB_LP OCCURS 0,

LINS TYPE CHAR128,

END OF ITAB_LP.

DATA : CAS(2) TYPE C VALUE 'HI',

FAS TYPE NUM2 VALUE 2.. "C VALUE 'BI'.

DATA : BEGIN OF IT_VBAK_VBAP ,

VBAK1 LIKE VBAK,

VBAP1 LIKE VBAP,

END OF IT_VBAK_VBAP.

DATA : C0(15) TYPE C,

C6(15) TYPE C.

DATA : TOTAL TYPE I.

*

*DATA : WA_VBAK LIKE LINE OF IT_VBAK.

*DATA : WA_VBAP LIKE LINE OF ITAB1.

*DATA : WA_TOL LIKE LINE OF IT_TOL.

DATA : LOWDATE LIKE VBAP-ERDAT.

DATA : DATECHAR8(8) TYPE C.

LOWDATE = SY-DATUM.

CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'

EXPORTING

MONTHS = '-24'

OLDDATE = LOWDATE

IMPORTING

NEWDATE = LOWDATE.

WRITE : / LOWDATE , ' FUNCTION - LOWDATE'.

MOVE LOWDATE TO DATECHAR8.

MOVE 0 TO LOWDATE.

MOVE DATECHAR8 TO LOWDATE.

*S_ERDAT-LOW = LOWDATE.

*S_ERDAT-HIGH = SY-DATUM.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE

TEXT-002.

SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG.

SELECT-OPTIONS: S_VTWEG FOR VBAK-VTWEG.

SELECT-OPTIONS: S_SPART FOR VBAK-SPART. " AVAILABLE IN VBAP ALSO

SELECT-OPTIONS: S_AUART FOR VBAK-AUART .

SELECTION-SCREEN SKIP.

SELECT-OPTIONS: S_PSTYV FOR VBAP-PSTYV.

SELECT-OPTIONS: S_KUNNR FOR VBAK-KUNNR.

SELECT-OPTIONS: S_ERDAT FOR VBAK-ERDAT DEFAULT LOWDATE TO SY-DATUM.

SELECTION-SCREEN SKIP.

PARAMETERS: P_OUTPUT(15) TYPE C OBLIGATORY DEFAULT

'VCR440R3D' LOWER CASE.

SELECTION-SCREEN END OF BLOCK B1.

*

START-OF-SELECTION.

*

*

**SELECT MATNR WERKS ABGRU LFREL PSTYV VBELN FROM VBAP INTO

*CORRESPONDING

    • FIELDS OF TABLE I_REPORT_VBAP WHERE

    • PSTYV IN S_PSTYV

    • AND ABGRU IN S_ABGRU

    • AND SPART IN S_SPART.

**

**

*INITIALISATION. AND ASSIGN DEFAULT VALUES

*TESTVBAK LIKE VBAK OCCURS 0 WITH HEADER LINE.

if s_erdat is INITIAL.

s_erdat-high = sy-datum.

move lowdate to s_erdat-low.

write : / s_erdat-low.

endif.

SELECT T01MATNR T01WERKS T01KWMENG T01VBELN T02VBTYP T02ERDAT

INTO CORRESPONDING FIELDS OF TABLE ITAB1 FROM VBAP AS T01

JOIN VBAK AS T02

ON T01VBELN EQ T02VBELN

WHERE VKORG IN S_VKORG

AND T02~AUART IN S_AUART

AND T02~ERDAT IN S_ERDAT

AND T02~KUNNR IN S_KUNNR

AND T02~VTWEG IN S_VTWEG

AND T02~SPART IN S_SPART

AND T01~PSTYV IN S_PSTYV

AND T01~ABGRU = ''

AND T01~LFREL = 'X'.

*IF S_ERDAT IS INITIAL.

*S_ERDAT-HIGH = SY-DATUM.

*MOVE LOWDATE TO S_ERDAT-LOW.

*WRITE : / S_ERDAT-LOW.

*ENDIF.

SELECT * FROM VBAK INTO TABLE IT_VBAK WHERE

VKORG IN S_VKORG

AND AUART IN S_AUART

AND KUNNR IN S_KUNNR

AND ERDAT BETWEEN S_ERDAT-LOW AND S_ERDAT-HIGH

AND VTWEG IN S_VTWEG.

END-OF-SELECTION.

WRITE : / 'IT_VBAK LOOP'.

WRITE 😕 'IT_VBAK-VKORG' , 'IT_VBAK-AUART' ,' IT_VBAK-VTWEG',

'IT_VBAK-SPART',

'IT_VBAK-VBTYP','IT_VBAK-ERDAT'.

LOOP AT IT_VBAK.

WRITE 😕 IT_VBAK-VKORG , IT_VBAK-AUART , IT_VBAK-VTWEG,

IT_VBAK-SPART, IT_VBAK-VBTYP,

IT_VBAK-ERDAT.

ENDLOOP.

WRITE : / ' END OF IT_VBAK LOOP'.

SELECT * FROM VBAP INTO TABLE IT_VBAP

FOR ALL ENTRIES IN IT_VBAK

WHERE VBELN = IT_VBAK-VBELN

AND PSTYV IN S_PSTYV

AND ABGRU = ''

AND LFREL = 'X'.

WRITE : / 'VBAP LOOP'.

LOOP AT IT_VBAP.

WRITE 😕 IT_VBAP-WERKS , IT_VBAP-KWMENG , IT_VBAP-ERDAT.

ENDLOOP.

LOOP AT IT_VBAK INTO WA_VBAK.

READ TABLE IT_VBAP INTO WA_VBAP WITH KEY VBELN = WA_VBAK-VBELN .

WA_TOL-WERKS = WA_VBAP-WERKS.

WA_TOL-MATNR = WA_VBAP-MATNR.

WA_TOL-PSTYV = WA_VBAP-PSTYV.

WA_TOL-LFREL = WA_VBAP-LFREL.

WA_TOL-KWMENG = WA_vbap-KWMENG.

WA_TOL-VBELN = WA_VBAK-VBELN.

WA_TOL-VKORG = WA_VBAK-VKORG.

WA_TOL-AUART = WA_VBAK-AUART.

WA_TOL-KUNNR = WA_VBAK-KUNNR.

WA_TOL-ERDAT = WA_VBAK-ERDAT.

WA_TOL-VTWEG = WA_VBAK-VTWEG.

WA_TOL-VBTYP = WA_VBAK-VBTYP.

APPEND WA_TOL TO IT_TOL.

ENDLOOP.

SORT IT_TOL BY VKORG WERKS ASCENDING ERDAT DESCENDING.

write : / ' start of it_tol'.

LOOP AT IT_TOL.

WRITE : / 'VBELN' , IT_TOL-VBELN , 'VKROG' ,IT_TOL-VKORG, 'WERKS' ,

IT_TOL-WERKS, 'AUART' ,IT_TOL-AUART, 'KUNNR',

IT_TOL-KUNNR , 'ERDAT' , IT_TOL-ERDAT, 'VTWEG' , IT_TOL-VTWEG ,

'MATNR' , IT_TOL-MATNR , 'PSTYV' ,

IT_TOL-PSTYV , 'LFREL' ,IT_TOL-LFREL , 'VBTYP' , IT_TOL-VBTYP,

'kwmeng' , it_tol-kwmeng.

ENDLOOP.

write : / ' end of it_tol'.

SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF ITAB1

WHERE VKORG IN S_VKORG

AND AUART IN S_AUART

AND ERDAT IN S_ERDAT

AND KUNNR IN S_KUNNR

AND VTWEG IN S_VTWEG

AND SPART IN S_SPART .

ENDSELECT.

SORT ITAB1 BY MATNR WERKS ASCENDING ERDAT DESCENDING.

LOOP AT IT_TOL from 2.

MOVE IT_TOL-ERDAT TO CHAR8.

SHIFT CHAR8 RIGHT BY 4 PLACES.

MOVE CHAR8 TO YRS. " YRS WILL CONTAIN YEAR

MOVE IT_TOL-ERDAT TO ERDAT1.

  • SHIFT ERDAT1 BY 4 PLACES.

SHIFT ERDAT1 right BY 2 PLACES.

shift erdat1 left by 2 places.

  • MOVE ERDAT1 TO MONTH2.

  • MOVE MONTH2 TO CDATE.

move erdat1 to cdate.

*write : / yrs, ' yrs' , cdate , 'cdate'.

IF CDATE <> CDATE1.

GI_PSER-MAT = ITAB2-MATNR.

GI_PSER-PLNT = ITAB2-WERKS.

MOVE SALES_QUANTITY TO GI_PSER-IN_STOCKQTY .

MOVE CDATE1 TO GI_PSER-IN_CDATE.

GI_PSER-YEAR = CHAR2.

  • GI_PSER-IN_STOCKQTY = SALES_QUANTITY.

  • GI_PSER-IN_CDATE = CDATE1 .

GI_PSER-IN_SUPP_CODE = COUNT.

IF GI_PSER-IN_STOCKQTY < 0.

GI_PSER-IN_DIVIS = '-'.

ELSE.

GI_PSER-IN_DIVIS = '+'.

ENDIF.

APPEND GI_PSER.

******

  • WRITE : / GI_PSER-MAT, GI_PSER-PLNT, GI_PSER-IN_STOCKQTY,

  • GI_PSER-IN_SUPP_CODE , ' CDATE' ,

  • GI_PSER-IN_CDATE , GI_PSER-IN_DIVIS, 'YEAR ' ,GI_PSER-YEAR.

******

CLEAR GI_PSER.

******

  • WRITE : / GI_PSER-MAT, GI_PSER-PLNT, GI_PSER-IN_STOCKQTY,

  • GI_PSER-IN_SUPP_CODE , ' CDATE' ,

  • GI_PSER-IN_CDATE , GI_PSER-IN_DIVIS, 'YEAR ' ,GI_PSER-YEAR.

******

MOVE SALES_QUANTITY TO TOTAL.

MOVE 0 TO SALES_QUANTITY.

IF IT_TOL-VBTYP = 'C'.

SALES_QUANTITY = SALES_QUANTITY + IT_TOL-KWMENG .

MOVE 1 TO COUNT.

ELSEIF IT_TOL-VBTYP = 'H'.

SALES_QUANTITY = SALES_QUANTITY - IT_TOL-KWMENG .

  • MOVE -1 TO COUNT.

MOVE 1 TO COUNT.

ENDIF.

MOVE IT_TOL-MATNR TO ITAB2-MATNR.

MOVE IT_TOL-WERKS TO ITAB2-WERKS.

MOVE IT_TOL-VBTYP TO ITAB2-VBTYP.

MOVE SALES_QUANTITY TO ITAB2-KWMENG.

MOVE SALES_QUANTITY TO TOTAL.

ELSE.

MOVE IT_TOL-MATNR TO ITAB2-MATNR.

MOVE IT_TOL-WERKS TO ITAB2-WERKS.

MOVE IT_TOL-VBTYP TO ITAB2-VBTYP.

MOVE IT_TOL-KWMENG TO ITAB2-KWMENG.

IF IT_TOL-VBTYP = 'C'.

SALES_QUANTITY = SALES_QUANTITY + IT_TOL-KWMENG .

COUNT = COUNT + 1.

ELSEIF IT_TOL-VBTYP = 'H'.

SALES_QUANTITY = SALES_QUANTITY - IT_TOL-KWMENG .

COUNT = COUNT - 1.

ENDIF.

  • ADDED WHEN THE LAST RECORD IS SAME.

MOVE SALES_QUANTITY TO TOTAL.

ENDIF.

  • WRITE 😕 IT_TOL-MATNR , IT_TOL-WERKS , IT_TOL-KWMENG , IT_TOL-VBTYP,

  • ERDAT1.

MOVE CDATE TO CDATE1.

MOVE YRS TO CHAR2.

ENDLOOP. " *********END OF THE LOOP

GI_PSER-MAT = ITAB2-MATNR.

GI_PSER-PLNT = ITAB2-WERKS.

MOVE TOTAL TO GI_PSER-IN_STOCKQTY .

MOVE CDATE TO GI_PSER-IN_CDATE.

GI_PSER-IN_SUPP_CODE = COUNT.

GI_PSER-YEAR = YRS.

IF GI_PSER-IN_STOCKQTY < 0.

GI_PSER-IN_DIVIS = '-'.

ELSE.

GI_PSER-IN_DIVIS = '+'.

ENDIF.

APPEND GI_PSER.

CLEAR GI_PSER.

  • WRITE : / 'START OF GI_PSER LOOP.'.

DATA : TEMPP1 TYPE I,

TEMPP2 TYPE I,

TEM1 TYPE I ,

TEM2 TYPE I.

WRITE : / 'GI_PSER LOOP'.

LOOP AT GI_PSER FROM 2.

WRITE : / GI_PSER-MAT, GI_PSER-PLNT, GI_PSER-IN_STOCKQTY,

GI_PSER-IN_SUPP_CODE , ' CDATE' ,

GI_PSER-IN_CDATE , GI_PSER-IN_DIVIS, 'YEAR ' ,GI_PSER-YEAR.

ENDLOOP.

*WRITE : / 'FTP LOOP'.

LOOP AT GI_PSER FROM 2.

MOVE GI_PSER-MAT TO FORFTP-MAT.

MOVE GI_PSER-PLNT TO FORFTP-PLNT.

MOVE GI_PSER-IN_STOCKQTY TO FORFTP-IN_STOCKQTY.

MOVE GI_PSER-IN_SUPP_CODE TO FORFTP-IN_SUPP_CODE.

MOVE GI_PSER-IN_CDATE TO FORFTP-IN_CDATE.

MOVE GI_PSER-IN_DIVIS TO FORFTP-IN_DIVIS.

MOVE GI_PSER-YEAR TO FORFTP-YEAR.

APPEND FORFTP.

ENDLOOP.

*WRITE : / 'FOR HOR_FILE'.

YRS = 0.

MON2 = 0.

MOVE IT_TOL-ERDAT TO CHARI8.

SHIFT CHARI8 BY 4 PLACES.

MOVE CHARI8 TO YRS. " YRS WILL CONTAIN YEAR

CUR_YR = YRS.

  • WRITE : / CUR_YR.

MOVE SY-DATUM TO CHARS8.

SHIFT CHARS8 BY 4 PLACES.

MOVE CHARS8 TO MON2.

CUR_MON = MON2.

  • WRITE : / CUR_MON.

  • WRITE : / SY-DATUM.

DATA : FNUMBER2 TYPE NUM2,

FNUMBER3 TYPE NUM2.

sort forftp by mat plnt ascending year in_cdate descending.

write : / ' for ftp loop'.

LOOP AT FORFTP.

WRITE : / FORFTP-MAT, FORFTP-PLNT, FORFTP-IN_STOCKQTY , FORFTP-IN_DIVIS

, FORFTP-IN_SUPP_CODE , ' CDATE' , FORFTP-IN_CDATE ,

'YEAR' , FORFTP-YEAR.

ENDLOOP.

                • FTP LOOOP.

*WRITE : / ' FTP LOOP'.

***********INITIALIZE

YRS = 0.

MON2 = 0.

MOVE SY-DATUM TO CHARI8.

SHIFT CHARI8 RIGHT BY 4 PLACES.

MOVE CHARI8 TO YRS. " YRS WILL CONTAIN YEAR

CUR_YR = YRS.

MOVE SY-DATUM TO CHARS8.

SHIFT CHARS8 RIGHT BY 2 PLACES.

MOVE CHARS8 TO MON2.

CUR_MON = MON2.

DATA : COMA TYPE C VALUE ',',

TEMPMAT(18) TYPE C,

TEMPMAT1(10) TYPE C,

TEMPSTR TYPE STRING,

L_LENGTH TYPE I,

SIGNS TYPE C.

**********MAIN PARA********************

WRITE : / ' MON2 ' , MON2.

LOOP AT FORFTP from 2.

IF FORFTP-MAT = MAT11 AND FORFTP-PLNT = PLNT1.

WHILE FAS GT 1. " setting a flag

IF FORFTP-IN_CDATE = MON2 AND FORFTP-YEAR = YRS.

MOVE FORFTP-IN_STOCKQTY TO NUMS5.

MOVE NUMS5 TO CHARS5.

MOVE FORFTP-IN_DIVIS TO SIGNS.

CONCATENATE HOR_FILE SIGNS CHARS5 COMA INTO HOR_FILE.

  • CONCATENATE HOR_FILE FORFTP-IN_DIVIS CHARS5 INTO HOR_FILE.

FAS = FAS - 1. " MOVE CAS TO FAS.

ELSE.

  • CONCATENATE HOR_FILE COMA BLANK1 INTO HOR_FILE.

CONCATENATE HOR_FILE COMA INTO HOR_FILE.

MON2 = MON2 - 1.

IF MON2 = 0. YRS = YRS - 1. MON2 = 12. ELSE. ENDIF.

ENDIF.

ENDWHILE.

FAS = 2.

ELSE. " FIRT IF

MOVE HOR_FILE TO ITAB_LP-LINS.

APPEND ITAB_LP.

MAT11 = FORFTP-MAT.

PLNT1 = FORFTP-PLNT.

MOVE CUR_YR TO YRS.

MOVE CUR_MON TO MON2.

MOVE '' TO HOR_FILE.

L_LENGTH = STRLEN( MAT11 ).

IF L_LENGTH > 10.

MOVE MAT11 TO TEMPMAT.

SHIFT TEMPMAT BY 8 PLACES.

MOVE TEMPMAT TO TEMPMAT1.

MOVE TEMPMAT1 TO MAT11.

ENDIF.

WHILE L_LENGTH LT 10.

L_LENGTH = L_LENGTH + 1.

CONCATENATE MAT11 ' ' INTO MAT11.

ENDWHILE.

  • WHILE L-LENGTH

  • CONCATENATE MAT11 COMA PLNT1 INTO HOR_FILE.

  • MOVE MAT11 TO TEMPMAT.

  • SHIFT TEMPMAT BY 8 PLACES.

  • MOVE TEMPMAT TO TEMPMAT1.

  • MOVE TEMPMAT1 TO TEMPSTR.

  • CONCATENATE TEMPSTR PLNT1 INTO HOR_FILE.

CONCATENATE MAT11 COMA PLNT1 coma INTO HOR_FILE.

MAT11 = FORFTP-MAT.

WHILE FAS GT 1 . "= CAS.

IF FORFTP-IN_CDATE = MON2 AND FORFTP-YEAR = YRS.

MOVE FORFTP-IN_STOCKQTY TO NUMS5.

MOVE NUMS5 TO CHARS5.

MOVE FORFTP-IN_DIVIS TO SIGNS.

CONCATENATE HOR_FILE SIGNS CHARS5 COMA INTO HOR_FILE.

FAS = FAS - 1. "MOVE CAS TO FAS.

ELSE.

MON2 = MON2 - 1.

IF MON2 = 0. YRS = YRS - 1. MON2 = 12. ELSE. ENDIF.

  • CONCATENATE HOR_FILE COMA BLANK1 INTO HOR_FILE.

CONCATENATE HOR_FILE COMA INTO HOR_FILE.

ENDIF.

ENDWHILE.

FAS = 2.

ENDIF.

**TO WRITE THE LAST REC.

ENDLOOP.

MOVE HOR_FILE TO ITAB_LP-LINS.

APPEND ITAB_LP.

*WRITE : / ' START OF ITAB_LP-LINS'.

LOOP AT ITAB_LP.

WRITE : / ITAB_LP-LINS.

ENDLOOP.

*PERFORM SEND_TO_PSER .

*LOOP AT FORFTP.

*

  • IF FORFTP-IN_CDATE = 06 AND FORFTP-YEAR = 06.

  • WRITE : / FORFTP-MAT , FORFTP-PLNT,

  • FORFTP-IN_STOCKQTY , FORFTP-IN_SUPP_CODE, TEMPP1 , FORFTP-IN_DIVIS

  • , TEMPP2.

*

  • ELSE.

  • ENDIF.

*

  • ENDLOOP.

LOOP AT GI_PSER FROM 2.

*

  • WRITE : / GI_PSER-MAT, GI_PSER-PLNT,

  • GI_PSER-IN_STOCKQTY, GI_PSER-IN_SUPP_CODE ,

  • GI_PSER-IN_CDATE , GI_PSER-YEAR.

FORMAT_DATA-MAT = GI_PSER-MAT.

FORMAT_DATA-FILLER = ','.

FORMAT_DATA-IN_STOCKIND = GI_PSER-PLNT.

FORMAT_DATA-FILLER1 = ','.

IF GI_PSER-IN_STOCKQTY GT 0.

MOVE '+' TO FORMAT_DATA-DEMAND_SIGN.

ELSE.

MOVE '-' TO FORMAT_DATA-DEMAND_SIGN.

ENDIF.

MOVE GI_PSER-IN_STOCKQTY TO NUMBER1. "FORMAT_DATA-IN_STOCKQTY.

MOVE NUMBER1 TO FORMAT_DATA-IN_STOCKQTY.

  • ASSIGN GI_PSER-IN_STOCKQTY TO FORMAT_DATA-IN_STOCKQTY.

FORMAT_DATA-FILLER2 = ','.

MOVE GI_PSER-IN_CDATE TO NUMBER2. "FORMAT_DATA-IN_CDATE.

MOVE DATECHAR TO FORMAT_DATA-IN_CDATE.

  • ASSIGN GI_PSER-IN_CDATE TO FORMAT_DATA-IN_CDATE.

FORMAT_DATA-FILLER3 = ','.

FORMAT_DATA-IN_SUPP_CODE = GI_PSER-IN_SUPP_CODE.

APPEND FORMAT_DATA.

CLEAR FORMAT_DATA.

ENDLOOP.

  • WRITE : / 'FORMAT DATA PARA'.

  • LOOP AT FORMAT_DATA.

*

  • WRITE : / FORMAT_DATA-MAT , FORMAT_DATA-FILLER ,

*FORMAT_DATA-IN_STOCKIND , FORMAT_DATA-FILLER1 ,FORMAT_DATA-DEMAND_SIGN

*,

  • FORMAT_DATA-IN_STOCKQTY, FORMAT_DATA-FILLER2 , FORMAT_DATA-IN_CDATE ,

  • FORMAT_DATA-FILLER3 ,

  • FORMAT_DATA-IN_SUPP_CODE .

  • ENDLOOP.

Read only

Former Member
0 Likes
664

There is a error in the loop which was causing lot of issues and it is solved.