Timeout in select mseg
Hi,
i try this short report and get allways a runtime-error. Has anyone an idea where i can
in MSEG faster?
REPORT ZTEST MESSAGE-ID ZZ.
TABLES: LFA1, "Lieferantenstamm (allgemeiner Teil)
LFM1, "Lieferantenstamm Einkaufssicht
MSEG.
PARAMETERS: P_MJAHR LIKE MKPF-MJAHR.
SELECT-OPTIONS: S_MBLNR FOR MSEG-LIFNR.
SELECT-OPTIONS: S_LIFNR FOR LFA1-LIFNR.
DATA: DMBTR LIKE MSEG-DMBTR.
DATA: DMBTR_SUM LIKE MSEG-DMBTR.
START-OF-SELECTION.
SELECT * FROM LFA1 WHERE LIFNR IN S_LIFNR.
SELECT SINGLE * FROM LFM1 WHERE LIFNR = LFA1-LIFNR
AND EKORG = '1000'.
CLEAR: DMBTR_SUM.
IF SY-SUBRC = 0.
* Nur wenn auch Einkaufssicht vorhanden
SELECT DMBTR FROM MSEG INTO DMBTR
WHERE MBLNR IN S_MBLNR
AND MJAHR = P_MJAHR
AND LIFNR = LFA1-LIFNR
AND BWART = '101' "Wareneingang
AND KZBEW = 'B'. "Bestellung.
ADD DMBTR TO DMBTR_SUM.
ENDSELECT.
ENDIF.
WRITE: LFA1-LIFNR, DMBTR_SUM.
ENDSELECT.
END-OF-SELECTION.
Thanks.
regards, Dieter
Moderator message - Moved to the correct forum
Edited by: Rob Burbank on May 12, 2009 9:30 AM
Use this
*& Report ZSKC_SDN
REPORT ZTEST MESSAGE-ID ZZ.
TABLES: LFA1, "Lieferantenstamm (allgemeiner Teil)
LFM1, "Lieferantenstamm Einkaufssicht
MSEG.
* D A T A
TYPES : BEGIN OF TY_LIFNR,
LIFNR TYPE LIFNR,
SUM TYPE WERTV9,
END OF TY_LIFNR,
BEGIN OF TY_MSEG,
MBLNR TYPE MBLNR,
MJAHR TYPE MJAHR,
ZEILE TYPE MBLPO,
LIFNR TYPE ELIFN,
DMBTR TYPE DMBTR,
END OF TY_MSEG.
DATA : T_LIFNR TYPE SORTED TABLE OF TY_LIFNR WITH UNIQUE KEY LIFNR,
T_MSEG TYPE STANDARD TABLE OF TY_MSEG.
DATA : IS_MSEG TYPE TY_MSEG.
FIELD-SYMBOLS : <FS_LIFNR> TYPE TY_LIFNR.
* S E L E C T I O N S C R E E N
PARAMETERS: P_MJAHR LIKE MKPF-MJAHR.
SELECT-OPTIONS: S_MBLNR FOR MSEG-LIFNR.
SELECT-OPTIONS: S_LIFNR FOR LFA1-LIFNR.
* S T A R T O F S E L E C T I O N
START-OF-SELECTION.
* Get the list of vendors.
SELECT LFA1~LIFNR
FROM LFA1 INNER JOIN LFM1
ON LFA1~LIFNR = LFM1~LIFNR
INTO TABLE T_LIFNR
WHERE LFA1~LIFNR IN S_LIFNR
AND LFM1~EKORG EQ '1000'.
CHECK SY-SUBRC EQ 0.
* Get Document Segment: Material.
SELECT MBLNR MJAHR ZEILE LIFNR DMBTR
INTO TABLE T_MSEG
FROM MSEG
WHERE MBLNR IN S_MBLNR
AND MJAHR EQ P_MJAHR
AND BWART EQ '101'
AND KZBEW EQ 'B'.
CHECK SY-SUBRC EQ 0.
SORT T_MSEG BY LIFNR.
* Calculate and Add.
LOOP AT T_MSEG INTO IS_MSEG.
READ TABLE T_LIFNR ASSIGNING <FS_LIFNR> WITH KEY LIFNR = IS_MSEG-LIFNR
BINARY SEARCH.
CHECK SY-SUBRC EQ 0.
<FS_LIFNR>-SUM = <FS_LIFNR>-SUM + IS_MSEG-DMBTR.
ENDLOOP.
* Print output.
LOOP AT T_LIFNR ASSIGNING <FS_LIFNR>.
WRITE :/ <FS_LIFNR>-LIFNR, <FS_LIFNR>-SUM.
ENDLOOP.
Use this..This is the tuned version keeping the functionality intact. I assume u will be passing both the vendor number and the Material doc # in the selection screen.
Similar Messages
-
Help with timeout for select inside loop
Hi everyone, im a little confused with this code. Can you help me to optimize it? Its giving Timeout dump.
Thanks so much, I´m new in abap and I tried hard, but its getting worse.
Any idea is welcomed.
LOOP AT it_lips.
SELECT SINGLE *
FROM vbak
WHERE vbeln = it_lips-vgbel.
IF sy-subrc <> 0 OR vbak-vbtyp <> 'C'.
CONTINUE.
ENDIF.
SELECT SINGLE *
FROM vbup
WHERE vbeln = it_lips-vgbel
AND posnr = it_lips-vgpos.
IF sy-subrc = 0 AND vbup-lfgsa = 'C'.
READ TABLE it_likp WITH KEY vbeln = it_lips-vbeln.
IF it_likp-wadat < it_likp-wadat_ist.
it_data-statu = 'N'.
v_countn = v_countn + 1.
ELSE.
it_data-statu = 'S'.
v_counts = v_counts + 1.
ENDIF.
ELSE.
CONTINUE.
ENDIF.
it_data-vbeln = it_lips-vgbel.
it_data-posnr = it_lips-vgpos.
SELECT SINGLE matnr arktx kwmeng vrkme
INTO (it_data-matnr, it_data-arktx, it_data-mengs, it_data-vrkme)
FROM vbap
WHERE vbeln = it_lips-vgbel
AND posnr = it_lips-vgpos.
it_data-menge = it_data-mengs.
it_data-kunnr = vbak-kunnr.
SELECT SINGLE name1
INTO it_data-name1
FROM kna1
WHERE kunnr = it_data-kunnr.
it_data-edatu = it_likp-wadat.
it_data-wadat = it_likp-wadat_ist.
it_data-vkorg = it_likp-vkorg.
APPEND it_data.
CLEAR: it_data, vbak, it_vbep, vbap, kna1, it_lips, it_likp.
ENDLOOP.The issue of SELECTing within a LOOP is much overblown. All of the SELECTs are SELECT SINGLE using the fully qualified primary key. Using a JOIN or FOR ALL ENTRIES might speed this up a bit, but dollars to doughnuts, the problem is here:
READ TABLE it_likp WITH KEY vbeln = it_lips-vbeln.
If it_likp is a standard table, you will be reading half of all of the entries, on average, every time you do the read. If you don't want to change it to a sorted or hashed table, SORT it_likp by vbeln before going into the loop and use the addition BINARY SEARCH on the READ statement.
Rob
Edited by: Rob Burbank on Apr 18, 2010 9:34 PM
Edited by: Rob Burbank on Apr 19, 2010 10:15 AM -
PREFIX ORACLE_SEM_FS_NS timeout via Jena Adapter
Hi,
I am executing SPARQL via Jena Adapter and would like to specify timeout.
I use PREFIX ORACLE_SEM_FS_NS: <http://oracle.com/semtech#timeout=5> , according the the sem dev guide Jena examples, but the timeout value has no effect at all.
For some heavy queries QueryExecution->execSelect() never returns
I found this thread - Re: Query IDs in ORACLE_SEM_FS_NS : 32 or 64 bits? , which discuss the similar subject. I tried to add qid to the prefix, but that did not help. I don't use Joseki endpoint nor OracleQueryMgtServlet to manage(kill) long queries. Maybe I will provide the latter function in the future, but I would like to start with that users specify the timeout and query would interrupt itself if not ready.
So, is there anything else I have to do in Java/Jena code or somewhere else?
Thanks, best regards
Jürgen
After some more testing it turns that the problem with timeout is related to certain type of queries only. Normally the timeout works.
But when LET statement is used in some way, then timeout does not occur and it seems the query simply hangs:
This query works and times out (if timeout value is set short enough):
SELECT DISTINCT
?HR_Zone
(count(?e) AS ?major_count)
WHERE {
?e rdf:type r:ST_Episode .
OPTIONAL
?e r:isClassifiedAs rn:major_st_episode .
OPTIONAL{
?e r:mappedHRZone ?zone .
?zone r:index ?HR_Zone
GROUP BY ?HR_Zone
This query does not finsih (in boundaries of my patients) and does not time out:
SELECT DISTINCT
?HR_Zone
(count(?e) AS ?major_count)
WHERE {
?e rdf:type r:ST_Episode .
OPTIONAL
?e r:isClassifiedAs rn:major_st_episode .
LET( ?emajor := ?e )
OPTIONAL{
?e r:mappedHRZone ?zone .
?zone r:index ?HR_Zone
GROUP BY ?HR_Zone
However, one might think that LET is not supported - but without ARQ functions it works. This query works and times out (with short timeout value)
SELECT DISTINCT
?emajor ?HR_Zone
WHERE {
?e rdf:type r:ST_Episode .
OPTIONAL
?e r:isClassifiedAs rn:major_st_episode .
LET( ?emajor := ?e )
OPTIONAL{
?e r:mappedHRZone ?zone .
?zone r:index ?HR_Zone
Edited by: user8793616 on 2010-sep-29 04:51Hi Jurgen,
The timeout pragma is most effective when used with SPARQL 1.0 queries, since they are supported natively. Once you start using ARQ features - which are not available in Oracle so they are processed in the mid-tier - timeout becomes less reliable.
Cheers,
Vladimir -
PROLEM IN RETRIVING MATNR FROM MSEG IN STOCK REPORT
HI FRIENDS ,
IAM DOING A REPORT IN WHICH I HAVE TO DISPLAY THOSE MATERIAL NUMBER WHICH HAS UNRESTRICTED STOCK AS OF TODAY
AND ALSO THOSE WHICH HAVE TRANSACTION DONE IN LAST ONE YEAR THAT I THINK HAVE TO TAKE FRM MKPF AND MSEG ,
I SELECTED MATNR FROM MARD AND ALSO GAVE THE LOGIC WHICH IS BELOW BUT GETTING PROBLEM TO HAVE THOSE MATNR WHICH ARE
TRANSACTION DONE.
NEED HELP CAN GIVE ME SUGGESTION
SELECT mard~matnr
mard~werks
mard~lgort
mard~labst
mara~mtart
FROM mard
INNER JOIN mara ON
maramatnr = mardmatnr
INNER JOIN MAKT ON
MAKTMATNR = MARDMATNR
INTO TABLE imard
WHERE mard~matnr IN s_matnr
AND mara~mtart IN s_mtart.
AND SPRAS = SY-LANGU.
IF imard[] IS NOT INITIAL .
SELECT makt~matnr
makt~maktx
FROM makt
INTO TABLE imakt FOR ALL ENTRIES IN imard
WHERE matnr = imard-matnr
AND spras = sy-langu.
ENDIF.
SELECT mkpf~mblnr
mkpf~budat
FROM mkpf INTO TABLE imkpf .
IF imkpf IS NOT INITIAL.
SELECT mseg~mblnr
mseg~matnr
mseg~werks
mseg~bwart
mseg~menge
mseg~shkzg
FROM mseg INTO TABLE imseg FOR ALL ENTRIES IN imkpf
WHERE mblnr = imkpf-mblnr.
ENDIF.
LOOP AT imard.
CLEAR itab.
IF imard-labst > 0.
itab-matnr = imard-matnr.
itab-werks = imard-werks.
ELSE.
CONTINUE.
ENDIF.
READ TABLE imakt WITH KEY matnr = imard-matnr.
IF sy-subrc = 0.
itab-maktx = imakt-maktx.
ENDIF.
APPEND itab.
ENDLOOP.
PLS REPLY ME .
FARUKHhi Farukh,
i see the field as DLINL as the date of Last Posted Count for Unrestricted-Use Stock .. which is found in table MARD .. I think in the initila select you can add an additional chec on that field .. if it falls in the last year..
regards
satesh -
Solaris 10 svc:/milestone/single-user timeout during patch run
Hello all,
when doing a patch run (Oct 07 baseline) on a Solaris 10 client the machine rebooted into single user as per normal. However the time for the patches to be applied in single user took so long the single-user milestone timed out and the machine went into maintenance mode. The machine did continue to complete the rest of the patch run. Anyone else seen this and have a work around? I don't really want to blanket increase the service timeout. Selected console output below..
( 27 / 37 ) Installing '127111-02' - succeeded.
( 28 / 37 ) Performing 'Mandatory reboot with reconfigure and action as single-user'
( 29 / 37 ) Installing '127753-02' Nov 22 10:30:08 svc.startd[7]: svc:/milestone/single-user:default: Method or service exit timed out. Killing contract 31.Nov 22 10:30:08 svc.startd[7]: milestone/single-user:default failed: transitioned to maintenance (see 'svcs -xv' for details)
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run
Root password for system maintenance (control-d to bypass): Nov 22 10:30:20 svc.startd[7]: network/ntp:default failed repeatedly: transitioned to maintenance (see 'svcs -xv' for details)
Nov 22 10:30:20 svc.startd[7]: failed to abandon contract 45: Permission denied
- succeeded.
( 30 / 37 ) Installing '119757-09' - succeeded.
( 31 / 37 ) Installing '127737-01' - succeeded.
( 32 / 37 ) Installing '127718-01' - succeeded.
( 33 / 37 ) Installing '125184-04' - succeeded.
( 34 / 37 ) Installing '124444-01' - succeeded.
( 35 / 37 ) Installing 'postpatch' - succeeded.
( 36 / 37 ) Performing 'Reboot'
( 37 / 37 ) Performing 'Reboot with reconfigure'Hi, yes I see it all the time and it's normal and in fact documented in the release notes:
http://docs.sun.com/app/docs/doc/820-0428/6nc5u3kou?l=en&a=view#smftimeout
One workaround is to ignore it and not do anything! In fact I think that is the preferred workaround.
Another question, just out of curiosity, what does your "postpatch" Post action script do? Just wondering if it might be something useful for other sites too? -
Dynamic ALV as per the periods on the selection screen
Hello Experts
I am new to dynamic ALV , Please help me to sought out my confusion.
I want to create a dynamic ALV , based on the period mentioned at selection screen.
for example I want to display the movement type ( sum of the quantity ) for materials for the full month.
I want the ALV output as below.
Material .........qty 01.04.2011..... qty 02.04.2011... qty 03.04.2011 ........ qty 30.04.2011
AB1........................... 30.................... 20............................. 50......................... 200
AB2.................................................... 50 ............................. 80 ..........................10
I create an internal table itab with there fields to selact the data
MATNR
date
qty
select MATNR
date
qty
into itab
from mseg
where based on the selection screen.
then collect the data to other table date wise , now i have summrise data of material quantity
now the results after collection data into table itab2 is as follows
Material ................... date ................................ qty
AB1 .................... 01.04.2011....................... 30
AB1 ................... 02.04.2011 ....................... 20
AB1 ................... 03.04.2011....................... 50
AB1 ................... .30.04.2011....................... 200
AB2 .................... 02.04.2011....................... 50
AB2 ....................... 03.04.2011....................... 80
AB2 ....................... 30.04.2011 ....................... 10
How can I display these fields horizontally instead of vertically ,
and to the exact column as per the field catalog column header belongs to date.
it would be so helpful if somebody explain with code by taking the above example.
Thanks in AdvanceHello Both Experts ,
I write the below code and it is working for the requirement.
Can you please check
REPORT z_test_dynamic .
TABLES : mkpf , mseg .
TYPES : BEGIN OF t_mseg ,
mblnr TYPE mblnr ,
bwart TYPE bwart ,
matnr TYPE matnr ,
werks TYPE werks_d ,
menge TYPE menge_d ,
budat TYPE budat ,
END OF t_mseg.
TYPES : BEGIN OF t_mseg_1 ,
matnr TYPE matnr ,
menge TYPE menge_d ,
budat TYPE budat ,
END OF t_mseg_1.
DATA : gt_mseg TYPE STANDARD TABLE OF t_mseg ,
gs_mseg TYPE t_mseg,
gt_mseg_1 TYPE STANDARD TABLE OF t_mseg_1 ,
gs_mseg_1 TYPE t_mseg_1,
gt_mseg_2 TYPE STANDARD TABLE OF t_mseg_1 ,
gs_mseg_2 TYPE t_mseg_1..
DATA : gt_date TYPE STANDARD TABLE OF sy-datum ,
gs_date TYPE sy-datum..
DATA: ok_code LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'CONTAINER_01',
grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container.
DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gp_table TYPE REF TO data.
FIELD-SYMBOLS: <gt_table> TYPE table.
SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_matnr FOR mseg-matnr ,
s_bwart FOR mseg-bwart NO INTERVALS,
s_werks FOR mseg-werks ,
s_budat FOR mkpf-budat .
PARAMETERS : p_mjahr TYPE mjahr OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK b1.
PERFORM field_catalog.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = gp_table.
ASSIGN gp_table->* TO <gt_table>.
PERFORM select_main_data.
PERFORM move_data.
*& Form select_main_data
* text
* --> p1 text
* <-- p2 text
FORM select_main_data .
SELECT mseg~mblnr
mseg~bwart
mseg~matnr
mseg~werks
mseg~menge
mkpf~budat
INTO TABLE gt_mseg
FROM mseg AS mseg INNER JOIN mkpf AS mkpf
ON mseg~mblnr = mkpf~mblnr AND
mseg~mjahr = mkpf~mjahr
WHERE matnr IN s_matnr AND
budat IN s_budat AND
werks IN s_werks AND
bwart IN s_bwart AND
mseg~mjahr EQ p_mjahr .
IF gt_mseg IS NOT INITIAL.
LOOP AT gt_mseg INTO gs_mseg.
gs_mseg_1-matnr = gs_mseg-matnr.
gs_mseg_1-budat = gs_mseg-budat.
gs_mseg_1-menge = gs_mseg-menge.
COLLECT gs_mseg_1 INTO gt_mseg_1.
ENDLOOP.
ENDIF.
gt_mseg_2 = gt_mseg_1.
DELETE ADJACENT DUPLICATES FROM gt_mseg_2 COMPARING matnr.
ENDFORM. " select_main_data
*& Form field_catalog
* text
* --> p1 text
* <-- p2 text
FORM field_catalog .
DATA : lt_day_attributes TYPE STANDARD TABLE OF casdayattr ,
ls_day_attributes TYPE casdayattr .
DATA: ls_fieldcat TYPE lvc_s_fcat ,
lv_fieldname TYPE lvc_fname.
IF s_budat-high IS INITIAL.
s_budat-high = s_budat-low.
ENDIF.
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
* FACTORY_CALENDAR = ' '
* HOLIDAY_CALENDAR = ' '
date_from = s_budat-low
date_to = s_budat-high
language = sy-langu
* IMPORTING
* YEAR_OF_VALID_FROM =
* YEAR_OF_VALID_TO =
* RETURNCODE =
TABLES
day_attributes = lt_day_attributes
* EXCEPTIONS
* FACTORY_CALENDAR_NOT_FOUND = 1
* HOLIDAY_CALENDAR_NOT_FOUND = 2
* DATE_HAS_INVALID_FORMAT = 3
* DATE_INCONSISTENCY = 4
* OTHERS = 5
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT lt_day_attributes INTO ls_day_attributes.
gs_date = ls_day_attributes-date.
APPEND gs_date TO gt_date.
ENDLOOP.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-inttype = 'CHAR18'.
ls_fieldcat-coltext = 'MATERIAL'.
* ls_fieldcat-decimals_o = '2'.
ls_fieldcat-outputlen = 18.
APPEND ls_fieldcat TO gt_fieldcat.
LOOP AT gt_date INTO gs_date.
CONCATENATE 'QTY_' gs_date INTO lv_fieldname.
ls_fieldcat-fieldname = lv_fieldname.
ls_fieldcat-inttype = 'QUAN'.
ls_fieldcat-coltext = gs_date.
ls_fieldcat-decimals_o = '2'.
* ls_fieldcat-outputlen = 18.
APPEND ls_fieldcat TO gt_fieldcat.
ENDLOOP.
ENDFORM. " field_catalog
*& Form move_data
* text
* --> p1 text
* <-- p2 text
FORM move_data .
DATA: l_row TYPE sy-index.
FIELD-SYMBOLS: <ls_table>.
FIELD-SYMBOLS: <l_field> ,
<l_mseg_1> TYPE t_mseg_1.
DATA: ls_fieldcat TYPE lvc_s_fcat .
ASSIGN LOCAL COPY OF INITIAL LINE OF <gt_table> TO <ls_table>.
SORT gt_mseg_1 BY matnr.
LOOP AT gt_mseg_1 ASSIGNING <l_mseg_1> .
IF <l_field> IS ASSIGNED.
UNASSIGN <l_field>.
ENDIF.
MOVE-CORRESPONDING <l_mseg_1> TO <ls_table>.
READ TABLE gt_fieldcat INTO ls_fieldcat WITH KEY coltext = <l_mseg_1>-budat.
IF sy-subrc EQ 0.
ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <ls_table> TO <l_field>.
<l_field> = <l_mseg_1>-menge.
ELSE.
<l_field> = 0.
ENDIF.
AT end of matnr.
APPEND <ls_table> TO <gt_table>.
clear <ls_table>.
ENDAT.
ENDLOOP.
ENDFORM. " move_data
your answers help me lot . I am awarding the points.
Very Very Thanks
Edited by: Dilraj Singh on Apr 13, 2011 3:58 PM
Edited by: Dilraj Singh on Apr 13, 2011 4:09 PM
Edited by: Dilraj Singh on Apr 13, 2011 4:23 PM -
Are there any alternatives for mseg and mkpf
I had to display from table S032...following fields.
S032-LETZTABG --> Date: last (i.e. most recent) goods issue
S032-LETZTVER --> Date: last (i.e. most recent) consumption
However the data was not properly filled in s032 table. So I went for mseg and mkpf table to get budat based on moment types.
SELECT MSEG~MATNR
MSEG~WERKS
MSEG~LGORT
MSEG~BWART
MKPF~BUDAT
INTO TABLE IT_MSEG
FROM MKPF AS MKPF INNER JOIN MSEG AS MSEG
ON
MKPFMBLNR = MSEGMBLNR AND
MKPFMJAHR = MSEGMJAHR
FOR ALL ENTRIES IN T_OUT_TMP
WHERE MSEG~MATNR EQ T_OUT_TMP-MATNR
AND MSEG~WERKS EQ T_OUT_TMP-WERKS.
Are there any other alternative table for mseg and mkpf...
Because my above coding ( which includes above SELECT of mseg and mkpf )got performance issue...
Could you please suggest me anyu other alternative for mseg and mkpf ...Try to include the BUDAT in the selection of the MKPF.. if you don't have any restriction in MKPF than just pass an empty range.
RANGES: S_BUDAT FOR MKPF-BUDAT.
SELECT
MKPF~BUDAT "<<<
MSEG~MATNR
MSEG~WERKS
MSEG~LGORT
MSEG~BWART
INTO TABLE IT_MSEG
FROM MKPF AS MKPF INNER JOIN MSEG AS MSEG
ON
MKPF~MBLNR = MSEG~MBLNR AND
MKPF~MJAHR = MSEG~MJAHR
FOR ALL ENTRIES IN T_OUT_TMP
WHERE
MKPF~BUDAT IN S_BUDAT " <<<
MSEG~MATNR EQ T_OUT_TMP-MATNR
AND MSEG~WERKS EQ T_OUT_TMP-WERKS.
Regards,
Naimesh Patel -
Roundtrip timeout in remote invocations
Does anybody know how to specify or implement CORBA like roundtrip timeouts for RMI calls ?
Our application has strict reqirements to detect network interrupts quickly ( < 3 seconds ) under all circumstances, not just when reading the result from a socket. Thus just setting a socket read timeout as suggested in answers to similar posts is not sufficient. We also need the remote call to timeout if the request could not be sent to the remote within a specified, short time.
As far as i could find out, RMI does not support this feature. Did i miss anything ?
Thanks in advance for any help, MartinHi ejp, i disagree. This is my view:
The (BSD like) Socket APIs on Unix-like OSses do not directly offer timeouts at all, neither for reading nor for writing. Reading/Writing to sockets is done through standard read() and write() calls, which do not have any timeout parameter. However, the JAVA Socket API has added timeout functionality for reading from a socket. In the SUN implementation for linux this is implemented using select() and non-blocking reading. BTW, i know of socket TCP-APIs that DO offer timeouts for reading and writing directly.
Although writing of small chunks of data is handled by the TCP stack in background asynchronously, a timeout on writing is extremely usefull. Think of this scenario: The application writes a fairly huge amount of data to a socket. The send buffer fills up, and the thread that issued the write is blocked. Now, Mr. Murphy stumbles over the network cable next floor, and tears it apart. The sending thread will now stay blocked until the inner TCP machinery gives up retransmitting the data, what takes VERY long (depending on the TCP stack implementation / configuration), and cannot be tolerated.
This scenario can be handled with a simple write timeout, that just prevents the writer from beeing blocked for longer than the timeout period. This kind of timeout could be implemented as easily as the read timeout via select and non-blocking writing - indeed i have done this in many applications in my past live as C programmer. I'm quite astonished that the designers of the JAVA Socket API left it to the users of the API to work around this.
Of course, implementation of asynchronous notifications about timeouts of every chunk of data written to the socket would be much more complicated and must be supported by the underlying TCP stack.
kind regards, Martin -
CFQUERY Timeout Parameter for SQL2005 Fails
Here's my test:
<cfquery name="test" datasource="dsn" timeout="1">
select top 20000 *
from table
</cfquery>
<cfoutput>#cfquery.ExecutionTime#</cfoutput>
I'm getting 3000+ for this value. This shouldn't be, right? Because I have the timeout parameter set for a second? The driver I'm using is the one that's
supplied with CFMX7.02, "Microsoft SQL Server", hooked into a MS SQL Server 2005 Standard. Why is CF ignoring the timeout parameter?Hi,
Anyone? I saw many articles in Metalink regarding the tx_timeout parameter - also one which a customer is demanding an explanation and enhancement on the tx_timeout parameter. Come to think of it, when will it work? only for Exchange? (found some hints on this in metalink).
But still, is there no other way to immediately know if the port has opened or not?
I will try the following: http://www.oraclenerd.com/2008/11/javaplsql-port-scanner-ii.html , but still would prefer a PL/SQL solution though.
Many Thanks,
Henry Wu -
Urgent: Regarding Inner join relation b/w MSEG, MKPF, MARA and MAKT
I have written o code like below for inner join. However, The program has take much more time to give out put. Could any one please correct the below inner join statement. Its very urgent.
Thanks for your help.
SELECT mseg~mblnr
mseg~matnr
mseg~werks
mseg~charg
mseg~lifnr
mseg~bualt
mseg~erfmg
mseg~ebeln
mseg~ebelp
mkpf~budat
mara~zzshelf_life
makt~maktx
FROM mseg
INNER JOIN mkpf
ON mkpfmblnr EQ msegmblnr
INNER JOIN mara
ON msegmatnr EQ maramatnr
INNER JOIN makt
ON maramatnr EQ maktmatnr
INTO TABLE gt_mat_doc
WHERE mseg~matnr IN s_matnr
AND mseg~werks IN s_werks
AND mseg~lifnr IN s_lifnr
AND mseg~bwart EQ p_bwart
AND ( msegebeln NE ' ' AND msegebeln IN s_ebeln )
AND mkpf~budat IN s_budat
AND mara~mtart IN s_mtart
AND makt~spras EQ sy-langu.Hi,
Do like this
Types: begin of ty_mesg_mkpf,
mblnr type mseg-mblnr,
matnr type mseg-matnr,
werks type mseg-werks,
charg type mseg-charg,
lifnr type mseg-lifnr,
bualt type mseg-bualt,
erfmg type mseg-erfmg,
ebeln type mseg-ebeln,
ebelp type mseg-ebelp,
budat type mkpf-budat,
end of ty_mseg_mkpf,
Begin og ty_mara_makt,
matnr type mara-matnr,
zzshelf_life type mara-zzshelf_life,
maktx type makt-maktx,
end of ty_mara_makt.
Data: it_mseg_mkpf type table of ty_mseg_mkpf,
wa_mseg_mkpf type ty_mseg_mkpf,
it_mara_makt type table of ty_mara_makt,
wa_mara_makt type ty_mara_makt.
SELECT m1~mblnr
m1~matnr
m1~werks
m1~charg
m1~lifnr
m1~bualt
m1~erfmg
m1~ebeln
m1~ebelp
m2~budat
FROM mseg
INTO TABLE it_mseg_mkpf
INNER JOIN mkpf
ON m1mblnr EQ m2mblnr
WHERE m1~matnr IN s_matnr
AND m1~werks IN s_werks
AND m1~lifnr IN s_lifnr
AND m1~bwart EQ p_bwart
AND ( m1ebeln NE ' ' AND m1ebeln IN s_ebeln )
AND m2~budat IN s_budat
if sy-subrc = 0.
Select m3~matnr
m3~zzshelf_life
m4~maktx from mara as m3
INNER JOIN makt as m4
ON m3matnr EQ m4matnr
INTO TABLE it_mara_makt
where m3~mtart IN s_mtart
AND m4~spras EQ sy-langu.
endif.
loop at it_mseg_mkpf into wa_mseg_mkpf.
Move necessary field values from wa_mseg_mkpf to wa_mat_doc.
Read table it_mara_makt into wa_mara_makt with key matnr = wa_mseg_mkpf-matnr.
if sy-subrc = 0.
move remaining field values to wa_mat_doc.
append wa_mat_doc to gt_mat_doc.
clear wa_mat_doc.
endif.
endloop.
Regards,
Satish -
Timeout attribute of cfquery ignored?
I set up the following SELECT * test on a table with a huge number of rows, just to make sure the query would run over 1 second:
<cfquery name="test" datasource="#ds#" timeout="1">
SELECT *
FROM request_stats
</cfquery>
The debugging info indicates that the query took 2539ms, but instead of throwing an error the query ran & returned results. Maybe I am not understanding how the timeout attribute should work? The CF docs indicate that "Because the timeout attribute only affects the maximum time for each suboperation of a query, the cumulative time may exceed its value" -- but does a simple query like this one have suboperations?
I'm using CF9.According to Charlie Arehart on New for CF9 (and 9.0.1): a query timeout that really works, with a caveat, the timeout attribute of the cfquery tag "generally does not work."
As mentioned in the same post, there is a query timeout option available in the CF Administrator for certain data source types, but unfortunately not for the ODBC Socket that I'm using.
Additionally, the CF9 docs indicate, regarding the timeout attribute, that "For JDBC statements, ColdFusion sets this attribute. For other drivers, see the driver documentation." So it's possible that the timeout attribute does work, but only for some drivers. -
Closing stock by using opening sock
Hi All,
I got opening stock by using this how can I calculate closing stock,pls help me.
REPORT zhzl_material_analysis_gb LINE-SIZE 1000.
tables:mara,mseg,s034.
TYPE-POOLS: slis.
DATA: budat TYPE budat.
DATA: v_fieldcat TYPE slis_fieldcat_alv,
v_t_fieldcat TYPE slis_t_fieldcat_alv.
*Internal Tables for Opening Stock Calculation
DATA : BEGIN OF t_mbew OCCURS 0,
matnr LIKE mbew-matnr,
bwkey LIKE mbew-bwkey,
lbkum LIKE mbew-lbkum,
salk3 LIKE mbew-salk3,
END OF t_mbew.
DATA: BEGIN OF i_mbew OCCURS 0,
mblnr LIKE mseg-mblnr,
mjahr LIKE mseg-mjahr,
menge LIKE mseg-menge,
meins TYPE meins,
bwart LIKE mseg-bwart,
matnr LIKE mseg-matnr,
*REP werks as bwkey
bwkey LIKE mseg-werks,
shkzg LIKE mseg-shkzg,
dmbtr LIKE mseg-dmbtr,
zeile LIKE mseg-zeile,
smbln LIKE mseg-smbln,
smblp LIKE mseg-smblp,
sjahr LIKE mseg-sjahr,
kunnr LIKE mseg-kunnr,
mblnr1 LIKE mkpf-mblnr,
mjahr1 LIKE mkpf-mjahr,
budat LIKE mkpf-budat,
taxkd LIKE knvi-taxkd,
END OF i_mbew.
DATA: BEGIN OF i_mara OCCURS 0,
matnr LIKE mara-matnr,
matkl LIKE mara-matkl,
spart LIKE mara-spart,
END OF i_mara.
DATA: i_makt TYPE TABLE OF makt WITH HEADER LINE.
DATA: BEGIN OF i_collect OCCURS 0,
matnr LIKE mara-matnr,
bwkey LIKE mbew-bwkey,
menge LIKE bsim-menge,
dmbtr LIKE bsim-dmbtr,
END OF i_collect.
DATA: BEGIN OF i_op_stock OCCURS 0,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
matkl LIKE mara-matkl,
bwkey LIKE mbew-bwkey,
menge LIKE bsim-menge,
dmbtr LIKE bsim-dmbtr,
spart LIKE mara-spart,
END OF i_op_stock.
*The Selection-Screen Construction
SELECTION-SCREEN: BEGIN OF BLOCK sel_block WITH FRAME.
PARAMETER: p_werks LIKE mseg-werks.
*PlantCompany Code
SELECT-OPTIONS : s_date FOR budat,
p_spart for mara-spart,
*Division
p_bukrs for mseg-bukrs .
SELECTION-SCREEN: END OF BLOCK sel_block .
START-OF-SELECTION.
PERFORM opening_stock.
PERFORM alv.
*FORM opening_stock *
*Calculates stock for date value in the low field of the *
*select-options.
FORM opening_stock.
CLEAR t_mbew.
SELECT * FROM mbew INTO CORRESPONDING FIELDS OF TABLE t_mbew
WHERE bwkey = p_werks .
SORT t_mbew BY matnr.
REFRESH i_mbew.
CLEAR i_mbew.
LOOP AT t_mbew.
i_mbew-matnr = t_mbew-matnr.
i_mbew-bwkey = t_mbew-bwkey.
i_mbew-dmbtr = t_mbew-salk3.
i_mbew-menge = t_mbew-lbkum.
APPEND i_mbew.
CLEAR i_mbew.
ENDLOOP.
SELECT
mseg~mblnr
mseg~mjahr
mseg~bwart
mseg~menge
mseg~matnr
mseg~shkzg
mseg~werks AS bwkey
mseg~zeile
mseg~smbln
mseg~smblp
mseg~sjahr
mseg~kunnr
mkpf~mblnr AS mblnr1
mkpf~mjahr AS mjahr1
mkpf~budat
FROM mseg AS mseg INNER JOIN
mkpf AS mkpf ON
msegmblnr = mkpfmblnr
AND
msegmjahr = mkpfmjahr
APPENDING CORRESPONDING FIELDS OF TABLE i_mbew
WHERE mkpf~budat > s_date-low
AND mseg~bukrs in p_bukrs
AND mseg~werks = p_werks
AND mseg~kzvbr = ' '
AND mseg~bustw NE ' '.
SORT i_mbew BY matnr budat mblnr.
SORT i_mara BY matnr.
SORT i_makt BY matnr.
LOOP AT i_mbew.
IF i_mbew-shkzg = 'S'.
i_mbew-dmbtr = i_mbew-dmbtr * ( - 1 ).
i_mbew-menge = i_mbew-menge * ( - 1 ).
ENDIF.
MODIFY i_mbew TRANSPORTING dmbtr menge.
ENDLOOP.
CLEAR i_collect.
LOOP AT i_mbew.
i_collect-matnr = i_mbew-matnr.
i_collect-bwkey = i_mbew-bwkey.
i_collect-dmbtr = i_mbew-dmbtr.
i_collect-menge = i_mbew-menge.
COLLECT i_collect.
ENDLOOP.
CLEAR: i_collect,i_op_stock.
LOOP AT i_collect.
MOVE-CORRESPONDING i_collect TO i_op_stock.
APPEND i_op_stock.
CLEAR i_op_stock.
ENDLOOP.
CHECK NOT i_op_stock[] IS INITIAL.
LOOP AT i_op_stock.
DELETE i_op_stock WHERE menge = 0.
ENDLOOP.
SORT i_op_stock BY matnr.
SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE i_mara
FOR ALL ENTRIES IN i_op_stock
WHERE matnr = i_op_stock-matnr
AND spart in p_spart.
SELECT * FROM makt INTO TABLE i_makt
FOR ALL ENTRIES IN i_mara
WHERE matnr = i_mara-matnr
AND spras = 'EN'.
LOOP AT i_op_stock.
CLEAR i_mara.
READ TABLE i_mara WITH KEY matnr = i_op_stock-matnr.
IF sy-subrc = 0.
i_op_stock-matkl = i_mara-matkl.
i_op_stock-spart = i_mara-spart.
MODIFY i_op_stock TRANSPORTING matkl spart.
ELSE.
DELETE i_op_stock.
ENDIF.
ENDLOOP.
LOOP AT i_op_stock.
CLEAR i_makt.
READ TABLE i_makt WITH KEY matnr = i_op_stock-matnr.
IF sy-subrc = 0.
i_op_stock-maktx = i_makt-maktx.
MODIFY i_op_stock TRANSPORTING maktx.
ELSE.
DELETE i_op_stock.
ENDIF.
ENDLOOP.
ENDFORM.
FORM alv.
CLEAR v_fieldcat.
v_fieldcat-col_pos = 1.
v_fieldcat-fieldname = 'MATNR'.
v_fieldcat-seltext_m = 'Material code'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 2.
v_fieldcat-fieldname = 'MAKTX'.
v_fieldcat-seltext_m = 'Description'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 3.
v_fieldcat-fieldname = 'MATKL'.
v_fieldcat-seltext_m = 'Material Group'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 4.
v_fieldcat-fieldname = 'SPART'.
v_fieldcat-seltext_m = 'Division'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 5.
v_fieldcat-fieldname = 'BWKEY'.
v_fieldcat-seltext_m = 'Plant'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 6.
v_fieldcat-fieldname = 'DMBTR'.
v_fieldcat-seltext_m = 'Amount'.
APPEND v_fieldcat TO v_t_fieldcat.
v_fieldcat-col_pos = 7.
v_fieldcat-fieldname = 'MENGE'.
v_fieldcat-seltext_m = 'Quantity'.
APPEND v_fieldcat TO v_t_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = v_t_fieldcat
TABLES
t_outtab = i_op_stock.
ENDFORM.
Thanks®ds,
Sree.Hi,
Please note that MBEW contains the stock position as of now. MBEWH contains the closing stock of all the previous periods. However if there is no transaction in a particular period you may not find a record in MBEWH for that period.
Please refer to SAP documentation:
[Back To Resultlist]
Material Master (Industry/Retail): Enhancements to Period Closing
Description
In Release 4.5A, the period closing function has been redesigned to eliminate or at least alleviate the following problems:
Long runtime if there are very many stock segments
Locking of all materials while the period closing program is run
Data inconsistencies in stock segments due to incorrect operation of the period closing program by users
The enhancements made to eliminate or alleviate these problems affect the way in which period closing is performed technically and particularly the data design. As a result, the following information is intended primarily for the following persons:
System administrators
Developers (for example, in customer projects)
Other persons in IT departments or systems departments
Runtime
The runtime of the period closing program has been improved substantially since no stock tables (such as MBEW, MARD, or MCHB) are updated any longer for the change in period, unless the change in period is a change in fiscal year. Only the material ledger tables are updated.
If the change in period coincides with the end of a fiscal year, the program also updates the physical inventory indicators and thus those tables relevant to physical inventory management; that is, even in this case, table MBEW in particular is no longer updated.
Locking of materials
The materials are locked by the period closing program only if the material ledger is used.
In the case of a change in fiscal year, no physical inventory transactions can be performed when running the period closing program.
Ease of use
As of Release 4.5A, period closing is performed in inventory management or invoice verification; that is, whenever, for example, a goods movement is made, the period is updated in the relevant stock segments of the material if the material is moved for the first time in this period.
Changes to the interface
There have been no changes to the interface.
Changes in procedure
The implementation of the above enhancements has required the data design to be changed as follows:
Stock tables MBEW, EBEW, QBEW, MARC, MARD, MCHB, MKOL, MSKA, MSSA, MSKU, MSLB, MSPR, and MSSQ now have history tables, for example, MBEWH is the history table for MBEW, and EBEWH the history table for EBEW. For each period, these history tables can contain an entry with the corresponding stock information, and are created for the previous period whenever there is a change in period-relevant information such as unrestricted-use stock. This means that the information for the previous period can no longer be read directly from tables MBEW, EBEW, and so on, but that tables MBEWH, EBEWH, etc. have to be read and interpreted.
The point in time at which the system is upgraded to Release 4.5A is important for interpreting the history tables. If the period has been closed at least once after the upgrade, the stocks for the previous period are contained, for example, in history table MARDH. If this table does not contain a corresponding entry, the previous period stock for the corresponding stock fields is the same as the current stock.
Fields LFMON/LFGJA of the stock tables no longer contain the current period, but one of the following periods, depending on when the upgrade took place:
Period of the last goods movement, invoice verification, price change, or other function that has resulted in period-specific information being updated
Period of the release upgrade if no such function has been performed since the system was upgraded
The current period is still recorded (as prior to Release 4.5A) in table MARV.
Planning
In a future release, it is planned for the data in the material ledger to no longer be updated by the period closing program. This will further increase the speed of the program.
[Back To Resultlist]
Regards
Raju Chitale -
Hi experts....
I want to put data in first row in alv report. I am using reuse_alv_list_display for alv report output.
I used "FIELDCAT_LN-ROW_POS = '1'. '
but it doesn't make any effect in output.
please help me.
thank you.Hi..
Code is like this...
*& Report Z_MATERIAL_ANALYSIS
Report Z_MATERIAL_ANALYSIS.
TYPE-POOLS: SLIS , VRM.
DATA: G_REPID LIKE SY-REPID,
GS_PRINT TYPE SLIS_PRINT_ALV,
GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
GT_EVENTS TYPE SLIS_T_EVENT,
i_sort TYPE slis_t_sortinfo_alv,
gs_layout TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT_LN LIKE LINE OF GT_FIELDCAT,
COL_POS TYPE I.
DATA: gs_variant LIKE disvariant,
g_save.
TABLES : MSEG , MKPF.
DATA : BEGIN OF ITAB1 OCCURS 0,
601_602 LIKE MSEG-MENGE,
END OF ITAB1.
DATA : BEGIN OF ITAB OCCURS 0,
LGORT LIKE MSEG-LGORT,
BWART LIKE MSEG-BWART,
ZEILE LIKE MSEG-ZEILE,
MENGE LIKE MSEG-MENGE,
MEINS LIKE MSEG-MEINS,
MATNR LIKE MSEG-MATNR,
WERKS LIKE MSEG-WERKS,
SHKZG LIKE MSEG-SHKZG,
MBLNR LIKE MKPF-MBLNR,
BUDAT LIKE MKPF-BUDAT,
SIGN(2),
101_102 LIKE MSEG-MENGE,
301 LIKE MSEG-MENGE,
311 LIKE MSEG-MENGE,
321 LIKE MSEG-MENGE,
601_602 LIKE MSEG-MENGE,
641_642 LIKE MSEG-MENGE,
653 LIKE MSEG-MENGE,
671 LIKE MSEG-MENGE,
END OF ITAB.
DATA: TOTAL_PLUS,
TOTAL_MINUS,
TOTAL.
SELECT-OPTIONS : MATNR FOR MSEG-MATNR,
DAT FOR MKPF-BUDAT.
PARAMETERS : LGORT LIKE MSEG-LGORT,
WERKS LIKE MSEG-WERKS,
BWART LIKE MSEG-BWART.
SELECT MSEG~MATNR
MSEG~LGORT
MSEG~BWART
MSEG~ZEILE
MSEG~MENGE
MSEG~MEINS
MSEG~WERKS
MSEG~SHKZG
MKPF~MBLNR
MKPF~BUDAT
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM MSEG
INNER JOIN MKPF ON MSEGMBLNR = MKPFMBLNR
WHERE MSEG~MATNR IN MATNR
AND MSEG~LGORT EQ LGORT
AND MKPF~BUDAT IN DAT
AND MSEG~WERKS EQ WERKS.
*LOOP AT ITAB.
*IF ITAB-BWART EQ
*WRITE : / 'MATNR', 10 'LGORT',20 'BWART', 30 'ZEILE',40 'MENGE',50
*'101102', 60
*'MEINS', 70 'MBLNR', 80 'BUDAT'.
LOOP AT ITAB.
IF ITAB-BWART = '101' OR ITAB-BWART = '102'.
SELECT MENGE INTO (ITAB-101_102) FROM MSEG WHERE MATNR = ITAB-MATNR
AND MBLNR = ITAB-MBLNR
AND LGORT = ITAB-LGORT
AND WERKS = ITAB-WERKS
AND ZEILE = ITAB-ZEILE.
MODIFY ITAB.
ENDSELECT.
ENDIF.
IF ITAB-BWART = '601' OR ITAB-BWART = '602'.
SELECT MENGE INTO (ITAB-601_602) FROM MSEG WHERE MATNR = ITAB-MATNR
AND MBLNR = ITAB-MBLNR
AND LGORT = ITAB-LGORT
AND WERKS = ITAB-WERKS
AND ZEILE = ITAB-ZEILE.
AND BWART IN ('601','602').
MODIFY ITAB.
ENDSELECT.
ENDIF.
IF ITAB-BWART = '641' OR ITAB-BWART = '642'.
SELECT MENGE INTO CORRESPONDING FIELDS OF TABLE ITAB1 FROM MSEG
WHERE MATNR = ITAB-MATNR
AND MBLNR = ITAB-MBLNR
AND LGORT = ITAB-LGORT
AND WERKS = ITAB-WERKS
AND ZEILE = ITAB-ZEILE.
MODIFY ITAB.
ENDSELECT.
ENDIF.
ENDLOOP.
LOOP AT ITAB.
IF ITAB-SHKZG = 'H'.
ITAB-SIGN = '+'.
MODIFY ITAB.
ELSE.
ITAB-SIGN = '-'.
MODIFY ITAB.
ENDIF.
ENDLOOP.
*LOOP AT ITAB.
*WRITE : /
ITAB-MATNR,
ITAB-LGORT,
ITAB-BWART,
ITAB-ZEILE,
ITAB-MENGE,
ITAB-TOT ,
ITAB-101_102,
ITAB-SIGN,
ITAB-601_602.
ITAB-SIGN.
ITAB-MEINS,
ITAB-MBLNR,
ITAB-BUDAT,
ITAB-SHKZG.
*AT LAST.
*SUM.
*WRITE : / ITAB-101_102.
*ENDAT.
*ENDLOOP.
PERFORM BUILD.
PERFORM CALL_ALV.
FORM BUILD.
DATA: FIELDCAT_IN TYPE SLIS_FIELDCAT_ALV.
REFRESH GT_FIELDCAT.
*CLEAR GT_FIELDCAT.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-FIELDNAME = '101_102'.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-ROW_POS = '1'.
FIELDCAT_LN-COL_POS = '1'.
APPEND FIELDCAT_LN TO GT_FIELDCAT.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-FIELDNAME = '301 '.
FIELDCAT_LN-TABNAME = 'ITAB'.
FIELDCAT_LN-NO_OUT = 'X'.
FIELDCAT_LN-SELTEXT_L = 'Description'.
FIELDCAT_LN-OUTPUTLEN = 22.
FIELDCAT_LN-DO_SUM = 'X'. "SUM UPON DISPLAY
APPEND FIELDCAT_LN TO GT_FIELDCAT.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-FIELDNAME = '601_602'.
FIELDCAT_LN-TABNAME = 'ITAB1'.
FIELDCAT_LN-ROW_POS = '1'.
FIELDCAT_LN-COL_POS = '1'.
*FIELDCAT_LN-NO_OUT = 'X'.
FIELDCAT_LN-SELTEXT_L = 'Base qty'.
FIELDCAT_LN-NO_ZERO = 'X'.
FIELDCAT_LN-just = 'C'.
*FIELDCAT_LN-DO_SUM = 'X'. "SUM UPON DISPLAY
APPEND FIELDCAT_LN TO GT_FIELDCAT.
g_repid = sy-repid.
gs_variant-report = g_repid.
g_save = 'A'.
ENDFORM.
FORM EVENTTAB_BUILD CHANGING LT_EVENTS TYPE SLIS_T_EVENT.
CONSTANTS:
GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
*GC_FORMNAME_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE'.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = LT_EVENTS.
READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE GC_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO LT_EVENTS.
ENDIF.
ENDFORM.
FORM CALL_ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_STRUCTURE_NAME = 'ITAB'
IS_LAYOUT = gs_layout
i_save = g_save
is_variant = gs_variant
IT_FIELDCAT = GT_FIELDCAT[]
IT_SORT = I_SORT
IT_EVENTS = GT_EVENTS[]
IS_PRINT = GS_PRINT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. -
How to include maintaince view in da report
I did a report for Audit Inventory Ageing Company-wise Summary i am getting the output of the report well. what I need is that i should include a field WGBEZ of the maintaince view V023 so that to display material group description. where & how should i write the code in my code. kindly give suggestions. i here with attaching my code.
Title : Aged Stock
Description : 'Audit Inventory Ageing Company-wise Summary
REPORT ZMMR0024MOD LINE-SIZE 170 NO STANDARD PAGE HEADING .
TYPE-POOLS : SLIS.
TABLES : T001,
T023,
T001K,
MARA,
marv,
MAKT,
MBEW,
MSEG,
ekpo.
Constants
CONSTANTS : GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE
'TOP_OF_PAGE'.
Internal Tables
DATA : BEGIN OF GT_FINAL OCCURS 0,
MATKL LIKE MARA-MATKL,
MATNR LIKE MARA-MATNR,
WGBEZ LIKE V023-WGBEZ,
LBKUM LIKE MBEW-LBKUM,
tot_val type p decimals 2,
MAKTX LIKE MAKT-MAKTX,
tot_amt type p decimals 2,
price type p decimals 2,
meins like mara-meins,
END OF GT_FINAL,
DETAIL_FINAL LIKE GT_FINAL OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF MAT_FINAL OCCURS 0,
MATKL LIKE MARA-MATKL,
TOT_VAL LIKE MSEG-MENGE,
TOT_AMT LIKE MBEW-SALK3,
PRICE LIKE MBEW-SALK3,
meins like mara-meins,
END OF MAT_FINAL.
DATA : BEGIN OF I_MARA OCCURS 0,
MATNR LIKE MARA-MATNR,
MATKL LIKE MARA-MATKL,
MAKTX LIKE MAKT-MAKTX,
WGBEZ LIKE V023-WGBEZ,
MEINS LIKE MARA-MEINS,
LBKUM LIKE MBEWH-LBKUM,
TOT_AMT LIKE MBEW-SALK3,
END OF I_MARA.
DATA : BEGIN OF I_MKPF_MSEG OCCURS 0,
MATNR LIKE MARA-MATNR,
MBLNR LIKE MSEG-MBLNR,
ZEILE LIKE MSEG-ZEILE,
MENGE LIKE MSEG-MENGE,
BWART LIKE MSEG-BWART,
BUDAT LIKE MKPF-BUDAT,
NET_VAL LIKE MSEG-MENGE,
ebeln like mseg-ebeln,
ebelp like mseg-ebelp,
lfbnr like mseg-lfbnr,
lfpos like mseg-lfpos,
SHKZG LIKE MSEG-SHKZG,
meins like mara-meins,
END OF I_MKPF_MSEG,
WA_TEMP LIKE I_MKPF_MSEG.
DATA : BEGIN OF I_MBEWH OCCURS 0,
MATNR LIKE MARA-MATNR,
LBKUM LIKE MBEW-LBKUM,
SALK3 LIKE MBEW-SALK3,
BWKEY LIKE MBEW-BWKEY,
END OF I_MBEWH.
DATA : I_MBEWH1 LIKE I_MBEWH OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF I_TEMP OCCURS 0,
MATNR LIKE MARA-MATNR,
NET_VAL LIKE MSEG-MENGE,
meins like mara-meins,
END OF I_TEMP.
RANGES : RANGE_WERK FOR T001W-WERKS,
RANGE_DATE FOR SY-DATUM,
S_BWTAR FOR BWTAR.
DATA : PERIOD LIKE BAPI0002_4-FISCAL_PERIOD,
FISCAL_YEAR LIKE BAPI0002_4-FISCAL_YEAR,
CUR_VAL LIKE MSEG-MENGE,
NET_VAL LIKE MSEG-MENGE,
TOT_VAL LIKE MSEG-MENGE,
TOT_QTY LIKE MSEG-MENGE,
TOT_AMT1 LIKE MBEW-SALK3,
RES_DATE LIKE SY-DATUM,
NUM LIKE MBEW-SALK3,
UOM LIKE MARA-MEINS.
Data declarations for alv
DATA : GV_PAGE TYPE N VALUE 0.
DATA : GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
GT_SORT TYPE SLIS_T_SORTINFO_ALV,
GT_FILTER TYPE SLIS_T_FILTER_ALV,
GT_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
GT_EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE,
GV_REPID LIKE SY-REPID,
GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
GV_SAVE(1) TYPE C,
GT_VARIANT LIKE DISVARIANT,
GV_DOMNAME LIKE DD07V-DOMNAME,
GV_DOMVAL LIKE DD07V-DOMVALUE_L,
GW_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Selection screen
SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE TEXT-001.
PARAMETERS : GS_BUKRS LIKE T001K-BUKRS OBLIGATORY.
SELECT-OPTIONS : GS_MATKL FOR MARA-MATKL,
GS_MATNR FOR MARA-MATNR.
PARAMETERS : gs_ped like s031-spmon OBLIGATORY,
GS_DAYS(3) TYPE n,
MG1 RADIOBUTTON GROUP GR1,
MT2 RADIOBUTTON GROUP GR1.
SELECTION-SCREEN END OF BLOCK SEL.
Validations on selection screen
AT SELECTION-SCREEN ON GS_BUKRS.
PERFORM F00_VALIDATE_COMPANY_CODE.
AT SELECTION-SCREEN ON GS_MATKL.
IF NOT GS_MATKL[] IS INITIAL.
PERFORM F01_VALIDATE_MATERIAL_GROUP.
ENDIF.
AT SELECTION-SCREEN ON GS_MATNR.
IF NOT GS_MATNR[] IS INITIAL.
PERFORM F01_VALIDATE_MATERIAL.
ENDIF.
AT SELECTION-SCREEN ON GS_days.
if gs_days = ''.
gs_days = 0.
endif.
START-OF-SELECTION.
GV_REPID = SY-REPID.
PERFORM F20_EVENTTAB_BUILD CHANGING GT_EVENTS[].
PERFORM F30_SELECT_PRIMARY_DATA.
IF MG1 = 'X'.
PERFORM F11_DATA_FORMAT_GROUP.
PERFORM F50_MATERIAL_GROUP_DATA.
PERFORM F40_DISPLAY_REPORT TABLES MAT_FINAL.
ELSEIF MT2 = 'X'.
PERFORM F10_DATA_FORMAT_MAT.
PERFORM F40_DISPLAY_REPORT TABLES GT_FINAL.
ENDIF.
*& Form F20_EVENTTAB_BUILD
FORM F20_EVENTTAB_BUILD CHANGING LT_EVENTS TYPE SLIS_T_EVENT.
CONSTANTS: LC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE
'TOP_OF_PAGE',
LC_FORMNAME_USER_COMMAND TYPE SLIS_FORMNAME VALUE
'USER_COMMAND'.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = LT_EVENTS.
note : lt_events has all the events
READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE GC_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO LT_EVENTS.
ENDIF.
READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE LC_FORMNAME_USER_COMMAND TO LS_EVENT-FORM.
APPEND LS_EVENT TO LT_EVENTS.
ENDIF.
ENDFORM. "F20_EVENTTAB_BUILD
*& Form F12_E04_COMMENT_BUILD
FORM F12_E04_COMMENT_BUILD USING E04_LT_TOP_OF_PAGE TYPE
SLIS_T_LISTHEADER.
DATA : LS_LINE TYPE SLIS_LISTHEADER,
LV_TEXT(100) TYPE C,
LV_DAYLOW(2) TYPE C,
LV_MONTHLOW(2) TYPE C,
LV_YEARHIGH(4) TYPE C,
LV_DAYHIGH(2) TYPE C,
LV_MONTHHIGH(2) TYPE C,
LV_YEARLOW(4) TYPE C,
LV_DATFORMAT1(10),
LV_DATFORMAT2(10).
CONCATENATE 'Company Code :' ' ' GS_BUKRS
INTO LV_TEXT SEPARATED BY SPACE.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
CLEAR LV_TEXT.
IF NOT GS_MATKL[] IS INITIAL.
IF GS_MATKL-HIGH IS INITIAL AND NOT GS_MATKL-LOW IS INITIAL.
CONCATENATE 'Material Group :' ' ' GS_MATKL-LOW
INTO LV_TEXT SEPARATED BY SPACE.
ELSE .
CONCATENATE 'Material Group :' GS_MATKL-LOW ' to'
GS_MATKL-HIGH INTO LV_TEXT SEPARATED BY SPACE.
ENDIF.
ENDIF.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
CLEAR LV_TEXT.
IF NOT GS_MATNR[] IS INITIAL.
IF GS_MATNR-HIGH IS INITIAL AND NOT GS_MATNR-LOW IS INITIAL.
CONCATENATE 'Material :' ' ' GS_MATNR-LOW
INTO LV_TEXT SEPARATED BY SPACE.
ELSE .
CONCATENATE 'Material :' GS_MATNR-LOW ' to'
GS_MATNR-HIGH INTO LV_TEXT SEPARATED BY SPACE.
ENDIF.
ENDIF.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
CLEAR LV_TEXT.
LV_YEARLOW = gs_ped+0(4).
LV_MONTHLOW = gs_ped+4(2).
LV_DAYLOW = gs_ped+6(2).
CONCATENATE LV_DAYLOW LV_MONTHLOW LV_YEARLOW INTO LV_DATFORMAT1
*SEPARATED BY '.'.
CONCATENATE 'Key month : ' gs_ped
INTO LV_TEXT SEPARATED BY SPACE.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
CLEAR LV_TEXT.
CONCATENATE 'Number of days :' ' ' GS_DAYS
INTO LV_TEXT SEPARATED BY SPACE.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
CLEAR LV_TEXT.
GV_PAGE = GV_PAGE + 1.
CONCATENATE 'PAGE NO : ' ' ' GV_PAGE
INTO LV_TEXT SEPARATED BY SPACE.
CLEAR LS_LINE.
LS_LINE-TYP = 'H'.
LS_LINE-INFO = LV_TEXT.
APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
ENDFORM. "F12_E04_COMMENT_BUILD
FORM TOP_OF_PAGE *
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDFORM. "TOP_OF_PAGE
*& Form validate_sales_organization
text
FORM F00_VALIDATE_COMPANY_CODE .
SELECT SINGLE BUKRS
FROM T001
INTO T001-BUKRS
WHERE BUKRS = GS_BUKRS.
IF SY-SUBRC = 0.
ELSE.
MESSAGE E000(ZCBOM) WITH 'Please enter the valid material group'.
ENDIF.
ENDFORM. " validate_sales_organization
*& Form VALIDATE_PLANT
text
--> p1 text
<-- p2 text
FORM F01_VALIDATE_MATERIAL_GROUP.
SELECT SINGLE MATKL
FROM T023
INTO T023-MATKL
WHERE MATKL IN GS_MATKL.
IF SY-SUBRC = 0.
ELSE.
MESSAGE E000(ZCBOM) WITH 'Please enter the valid material group'.
ENDIF.
ENDFORM. " VALIDATE_PLANT
*& Form VALIDATE_MATERIAL
text
--> p1 text
<-- p2 text
FORM F01_VALIDATE_MATERIAL.
SELECT SINGLE MATNR
FROM MARA
INTO MARA-MATNR
WHERE MATNR IN GS_MATNR.
IF SY-SUBRC = 0.
ELSE.
MESSAGE E000(ZCBOM) WITH 'Please enter the valid material '.
ENDIF.
ENDFORM. " VALIDATE_MATERIAL
*& Form F40_DISPLAY_REPORT
FORM F40_DISPLAY_REPORT TABLES IT.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GV_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND '
IT_FIELDCAT = GT_FIELDCAT[]
IT_SPECIAL_GROUPS = GT_SP_GROUP[]
IT_SORT = GT_SORT[]
I_SAVE = GV_SAVE
IS_VARIANT = GT_VARIANT
IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = IT. "it_1.
CLEAR:GT_FIELDCAT.
REFRESH:GT_FIELDCAT.
ENDFORM. " F40_DISPLAY_REPORT
*& Form F30_SELECT_PRIMARY_DATA
text
FORM F30_SELECT_PRIMARY_DATA .
subroutine to get the actual data
to get the plants for the given company code
data : temp_bukrs like BAPI0002_2-COMP_CODE,
temp_date like BAPI0002_4-POSTING_DATE.
data : last_day(2) type n,
from_date like sy-datum,
temp_date1 like sy-datum,
cal_month(2) type n,
cal_year(4) type n.
SELECT DISTINCT BWKEY FROM T001K INTO RANGE_WERK-LOW WHERE BUKRS = GS_BUKRS.
RANGE_WERK-SIGN = 'I'.
RANGE_WERK-OPTION = 'EQ'.
APPEND RANGE_WERK.
ENDSELECT.
*selecting material that is relevant to the selection criteria
SELECT MARA~MATNR MATKL MEINS MAKTX
FROM MARA JOIN MAKT
ON MAKTMATNR = MARAMATNR
INTO CORRESPONDING FIELDS OF TABLE I_MARA
WHERE MARA~MATNR IN GS_MATNR
AND MATKL IN GS_MATKL
AND MAKT~SPRAS = 'EN'.
temp_bukrs = gs_bukrs.
cal_month = gs_ped+4(2).
cal_year = gs_ped+0(4).
concatenate cal_year cal_month '01' into temp_date.
*temp_date = temp_date1.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = temp_bukrs
POSTING_DATE = temp_date
IMPORTING
FISCAL_YEAR = fiscal_year
FISCAL_PERIOD = period.
select single * from marv into marv where bukrs = temp_bukrs.
temp_date1 = temp_date.
if sy-subrc = 0.
if ( marv-lfmon ne period or marv-lfgja ne fiscal_year ).
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN = temp_date
IMPORTING
LAST_DAY_OF_MONTH = from_date
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2.
else.
from_date = sy-datum.
endif.
endif.
to define the range for posting date
RES_DATE = from_date - GS_DAYS.
RANGE_DATE-LOW = RES_DATE.
RANGE_DATE-HIGH = from_date.
RANGE_DATE-OPTION = 'BT'.
RANGE_DATE-SIGN = 'I'.
APPEND RANGE_DATE.
to select documents and their quantities for the given range of posting dates
with goods movement type 101 105 657 453 459 501 521 and their reversals
if range_date-low ne range_date-high.
SELECT MSEG~MATNR MSEG~MBLNR MSEG~ZEILE MSEG~MENGE MSEG~BWART mseg~ebeln mseg~ebelp
MKPF~BUDAT MSEG~SHKZG
FROM MKPF
JOIN MSEG ON MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE I_MKPF_MSEG
FOR ALL ENTRIES IN I_MARA
WHERE MSEG~MATNR = I_MARA-MATNR
AND MSEG~WERKS IN RANGE_WERK
AND MKPF~BUDAT IN RANGE_DATE
AND MSEG~BWART IN ('101','105','657','453','459','501','521','561','309','701','712', "711
'102','106','658','454','460','502','522','562').
DELETE I_MKPF_MSEG WHERE ( BWART = '309' AND SHKZG = 'H')
or ( bwart = '453' and shkzg = 'H')
or ( bwart = '454' and shkzg = 'S').
endif.
SORT I_MKPF_MSEG BY MATNR MBLNR.
LOOP AT I_MKPF_MSEG.
if i_mkpf_mseg-bwart = '101' or i_mkpf_mseg-bwart = '102'.
select single * from ekpo where ebeln = i_mkpf_mseg-ebeln
and ebelp = i_mkpf_mseg-ebelp.
if ekpo-pstyp = 7.
delete i_mkpf_mseg where ebeln = i_mkpf_mseg-ebeln
and ebelp = i_mkpf_mseg-ebelp.
CLEAR I_MKPF_MSEG-MENGE.
endif.
endif.
IF ( I_MKPF_MSEG-BWART = '101' OR I_MKPF_MSEG-BWART = '105' OR I_MKPF_MSEG-BWART = '712' OR
I_MKPF_MSEG-BWART = '657' OR I_MKPF_MSEG-BWART = '453' OR "I_MKPF_MSEG-BWART = '711' OR
I_MKPF_MSEG-BWART = '459' OR I_MKPF_MSEG-BWART = '501' OR I_MKPF_MSEG-BWART = '701' OR
I_MKPF_MSEG-BWART = '521' OR I_MKPF_MSEG-BWART = '561' OR I_MKPF_MSEG-BWART = '309').
NET_VAL = NET_VAL + I_MKPF_MSEG-MENGE.
ENDIF.
IF ( I_MKPF_MSEG-BWART = '102' OR I_MKPF_MSEG-BWART = '106' OR
I_MKPF_MSEG-BWART = '658' OR I_MKPF_MSEG-BWART = '454' OR
I_MKPF_MSEG-BWART = '460' OR I_MKPF_MSEG-BWART = '502' OR
I_MKPF_MSEG-BWART = '522' OR I_MKPF_MSEG-BWART = '562').
NET_VAL = NET_VAL - I_MKPF_MSEG-MENGE.
ENDIF.
WA_TEMP = I_MKPF_MSEG.
AT END OF MATNR.
I_TEMP-MATNR = WA_TEMP-MATNR.
I_TEMP-NET_VAL = NET_VAL.
APPEND I_TEMP.
CLEAR NET_VAL.
ENDAT.
ENDLOOP.
SORT I_MARA BY MATNR.
SORT I_TEMP BY MATNR.
SELECT MATNR LBKUM SALK3 BWKEY
FROM MBEWH
INTO CORRESPONDING FIELDS OF TABLE I_MBEWH
FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR
AND BWKEY IN RANGE_WERK
AND BWTAR IN S_BWTAR
AND LFGJA = FISCAL_YEAR
AND LFMON = PERIOD.
SELECT MATNR LBKUM SALK3 BWKEY
FROM MBEW
INTO CORRESPONDING FIELDS OF TABLE I_MBEWH1
FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR
AND BWKEY IN RANGE_WERK.
AND LFMON = PERIOD
AND LFGJA = FISCAL_YEAR.
SORT I_MBEWH BY MATNR BWKEY.
SORT I_MBEWH1 BY MATNR BWKEY.
LOOP AT I_MBEWH.
LOOP AT I_MBEWH1 WHERE MATNR = I_MBEWH-MATNR
AND BWKEY = I_MBEWH-BWKEY.
DELETE I_MBEWH1.
ENDLOOP.
ENDLOOP.
APPEND LINES OF I_MBEWH1 TO I_MBEWH.
CLEAR : I_MBEWH1.
REFRESH I_MBEWH1.
SORT I_MBEWH BY MATNR.
LOOP AT I_MBEWH .
I_MBEWH1 = I_MBEWH.
AT END OF MATNR.
SUM.
I_MBEWH1-LBKUM = I_MBEWH-LBKUM.
I_MBEWH1-SALK3 = I_MBEWH-SALK3.
APPEND I_MBEWH1.
ENDAT.
ENDLOOP.
DELETE I_MBEWH1 WHERE LBKUM <= 0.
LOOP AT I_MARA.
CLEAR : CUR_VAL,
NUM,
TOT_VAL,
TOT_AMT1,
I_MBEWH1.
GT_FINAL-MATNR = I_MARA-MATNR.
GT_FINAL-MATKL = I_MARA-MATKL.
GT_FINAL-MAKTX = I_MARA-MAKTX.
gt_final-meins = I_MARA-MEINS.
READ TABLE I_MBEWH1 WITH KEY MATNR = I_MARA-MATNR.
GT_FINAL-LBKUM = I_MBEWH1-LBKUM.
to get the net inward movement vale that is to be subtracted from current value
READ TABLE I_TEMP WITH KEY MATNR = I_MARA-MATNR.
IF SY-SUBRC = 0 .
IF GT_FINAL-LBKUM > 0.
TOT_VAL = gt_final-lbkum - I_TEMP-NET_VAL.
if tot_val gt 0.
GT_FINAL-TOT_VAL = TOT_VAL.
GT_FINAL-PRICE = I_MBEWH1-SALK3 / gt_final-lbkum."TOT_VAL.
GT_FINAL-TOT_AMT = GT_FINAL-PRICE * GT_FINAL-TOT_VAL.
APPEND GT_FINAL.
endif.
ENDIF.
else.
if gt_final-lbkum > 0.
gt_final-tot_val = gt_final-lbkum.
GT_FINAL-PRICE = I_MBEWH1-SALK3 / gt_final-lbkum.
GT_FINAL-TOT_AMT = GT_FINAL-PRICE * GT_FINAL-TOT_VAL.
APPEND GT_FINAL.
endif.
ENDIF.
ENDLOOP.
DELETE GT_FINAL WHERE LBKUM LE 0.
ENDFORM. " F30_SELECT_PRIMARY_DATA
*& Form f10_DATA_FORMAT
text
FORM F10_DATA_FORMAT_MAT .
populating the field catalog table
MATNR
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATNR' 'MATNR' '1'
TEXT-003 'GT_FINAL' '15'.
MAKTX
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATKL' 'MATKL' '2'
TEXT-004 'GT_FINAL' '24'.
DESC
PERFORM F11_E01_FIELDCAT_INIT USING 'MAKT' 'MAKTX' 'MAKTX' '3'
TEXT-005 'GT_FINAL' '35'.
Material Group Decription
PERFORM F11_E01_FIELDCAT_INIT USING 'V023' 'WGBEZ' 'WGBEZ' '3'
TEXT-005 'GT_FINAL' '20'.
qty
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_VAL' 'MENGE' '4'
TEXT-006 'GT_FINAL' '15'.
MEINS
PERFORM F11_E01_FIELDCAT_INIT USING '' 'MEINS' 'MEINS' '4'
TEXT-008 'GT_FINAL' '15'.
TOTAL COST
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_AMT' 'SALK3' '5'
TEXT-007 'GT_FINAL' '24'.
PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
GV_SAVE = 'A'.
CLEAR GT_EVENTS.
REFRESH GT_EVENTS.
GT_EVENTS-NAME = 'TOP_OF_PAGE'.
GT_EVENTS-FORM = 'TOP_OF_PAGE'.
APPEND GT_EVENTS.
ENDFORM. " f10_DATA_FORMAT
*& Form F11_E01_FIELDCAT_INIT
text
FORM F11_E01_FIELDCAT_INIT USING T1 T2 T3 T4 T5 T6 T7.
CLEAR GW_FIELDCAT.
GW_FIELDCAT-REF_TABNAME = T1.
GW_FIELDCAT-FIELDNAME = T2.
GW_FIELDCAT-REF_FIELDNAME = T3.
GW_FIELDCAT-COL_POS = T4.
GW_FIELDCAT-SELTEXT_L = T5.
GW_FIELDCAT-TABNAME = T6.
GW_FIELDCAT-OUTPUTLEN = T7.
APPEND GW_FIELDCAT TO GT_FIELDCAT.
ENDFORM. " F11_E01_FIELDCAT_INIT
*& Form f40_material_group_data
text
--> p1 text
<-- p2 text
FORM F50_MATERIAL_GROUP_DATA .
SORT GT_FINAL BY MATKL.
LOOP AT GT_FINAL.
TOT_QTY = GT_FINAL-TOT_VAL + TOT_QTY.
TOT_AMT1 = GT_FINAL-TOT_AMT + TOT_AMT1.
UOM = GT_FINAL-MEINS.
AT END OF MATKL.
MAT_FINAL-MATKL = GT_FINAL-MATKL.
MAT_FINAL-TOT_VAL = TOT_QTY.
MAT_FINAL-TOT_AMT = TOT_AMT1.
MAT_FINAL-MEINS = UOM.
APPEND MAT_FINAL.
CLEAR : TOT_QTY,
TOT_AMT1.
ENDAT.
ENDLOOP.
ENDFORM. " f40_material_group_data
*& Form BUILD_DETAIL
text
--> p1 text
<-- p2 text
FORM BUILD_DETAIL .
DETAIL_FINAL[] = GT_FINAL[].
DELETE DETAIL_FINAL WHERE MATKL NE MAT_FINAL-MATKL.
ENDFORM. " BUILD_DETAIL
*& Form f11_data_format_group
text
--> p1 text
<-- p2 text
FORM F11_DATA_FORMAT_GROUP .
MATNR
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATNR' 'MATNR' '1'
TEXT-003 'GT_FINAL' '15'.
REFRESH GT_FIELDCAT[].
MAKTX
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATKL' 'MATKL' '2'
TEXT-004 'MAT_FINAL' '24'.
DESC
PERFORM F11_E01_FIELDCAT_INIT USING 'MAKT' 'MAKTX' 'MAKTX' '3'
TEXT-005 'GT_FINAL' '35'.
Material Group Decription
PERFORM F11_E01_FIELDCAT_INIT USING 'V023' 'WGBEZ' 'WGBEZ' '3'
TEXT-005 'GT_FINAL' '20'.
qty
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_VAL' 'MENGE' '4'
TEXT-006 'MAT_FINAL' '15'.
qty
PERFORM F11_E01_FIELDCAT_INIT USING '' 'MEINS' 'MEINS' '5'
TEXT-008 'MAT_FINAL' '15'.
TOTAL COST
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_AMT' 'SALK3' '6'
TEXT-007 'MAT_FINAL' '24'.
PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
GV_SAVE = 'A'.
CLEAR GT_EVENTS.
REFRESH GT_EVENTS.
GT_EVENTS-NAME = 'TOP_OF_PAGE'.
GT_EVENTS-FORM = 'TOP_OF_PAGE'.
APPEND GT_EVENTS.
ENDFORM. " f11_data_format_group
*& Form DETAIL_FORMAT_FIELDCAT
text
--> p1 text
<-- p2 text
FORM DETAIL_FORMAT_FIELDCAT .
REFRESH GT_FIELDCAT[].
MATNR
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATNR' 'MATNR' '1'
TEXT-003 'DETAIL_FINAL' '15'.
MAKTL
PERFORM F11_E01_FIELDCAT_INIT USING 'MARA' 'MATKL' 'MATKL' '2'
TEXT-004 'DETAIL_FINAL' '24'.
MAKTX
PERFORM F11_E01_FIELDCAT_INIT USING 'MAKT' 'MAKTX' 'MAKTX' '3'
TEXT-005 'DETAIL_FINAL' '35'.
qty
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_VAL' 'MENGE' '4'
TEXT-006 'DETAIL_FINAL' '15'.
UOM
PERFORM F11_E01_FIELDCAT_INIT USING '' 'MEINS' 'MEINS' '5'
TEXT-008 'DETAIL_FINAL' '15'.
TOTAL COST
PERFORM F11_E01_FIELDCAT_INIT USING '' 'TOT_AMT' 'SALK3' '6'
TEXT-007 'DETAIL_FINAL' '24'.
PERFORM F12_E04_COMMENT_BUILD USING GT_LIST_TOP_OF_PAGE[].
GV_SAVE = 'A'.
CLEAR GT_EVENTS.
REFRESH GT_EVENTS.
GT_EVENTS-NAME = 'TOP_OF_PAGE'.
GT_EVENTS-FORM = 'TOP_OF_PAGE'.
APPEND GT_EVENTS.
ENDFORM. " DETAIL_FORMAT_FIELDCAT
FORM USER_COMMAND *
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN '&IC1'. "doubleclick
IF RS_SELFIELD-TABNAME = 'MAT_FINAL'.
READ TABLE MAT_FINAL INDEX RS_SELFIELD-TABINDEX .
PERFORM BUILD_DETAIL.
PERFORM DETAIL_FORMAT_FIELDCAT.
PERFORM F20_EVENTTAB_BUILD CHANGING GT_EVENTS[].
PERFORM F40_DISPLAY_REPORT TABLES DETAIL_FINAL.
CLEAR DETAIL_FINAL[].
ENDIF.
CLEAR R_UCOMM.
ENDCASE.
ENDFORM. "USER_COMMANDHi,
Done with the help of abaper.
Thanks & Regards,
Sandeep -
Problem: new entered data is saved but I am facing one error message --- no
This is a module program for gate entry of materials(miro). This is a simple entry form which updates z tables with data entered. I have to send the new record details automatically through mail to the particular vendor email id from where the material has been purchased.
Problem: new entered data is saved but I am facing one error message --- no authorization to unpack list with rfc when the program is sending list through mail.
PROGRAM ZMMI001_GRN_ENTRY_BARCODE MESSAGE-ID ZMM .
*Table Declaration
TABLES : EKKO , EKPO , LFA1 , MARC ,
MARD , J_1IMTCHID , EKET , MSEG,
MKPF , ZMMT001_GRN_GATE,
ZMMT002_GRN_ITEM.
TABLES: ADR6.
*Table Control Declaration
CONTROLS : TC1 TYPE TABLEVIEW USING SCREEN 1000.
DATA: COLS LIKE LINE OF TC1-COLS.
*Internal Table Declaration
DATA : BEGIN OF IT_TC1 OCCURS 0,
SEL,
SNO(2) TYPE C,
ITEMCODE(18) TYPE C,
ITEMNAME(40) TYPE C,
QUANTITY TYPE P DECIMALS 2,
EXCISE(13) TYPE P DECIMALS 2,
END OF IT_TC1.
DATA : IT_TEMP_TC1 LIKE IT_TC1 OCCURS 0 WITH HEADER LINE.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA : IT_EKPO LIKE EKPO OCCURS 0 WITH HEADER LINE.
DATA : IT_EKKO LIKE EKKO OCCURS 0 WITH HEADER LINE.
DATA : IT_EKET LIKE EKET OCCURS 0 WITH HEADER LINE.
DATA : WK_ZMMT01 LIKE ZMMT001_GRN_GATE.
DATA : IT_ZMMT01 LIKE ZMMT001_GRN_GATE OCCURS 0 WITH HEADER LINE.
DATA : IT_ZMMT02 LIKE ZMMT002_GRN_ITEM OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF IT_TEMP_EKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
END OF IT_TEMP_EKPO.
DATA : BEGIN OF IT_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
BWART LIKE MSEG-BWART,
MATNR LIKE MSEG-MATNR,
EBELN LIKE MSEG-EBELN,
EBELP LIKE MSEG-EBELP,
BUDAT LIKE MKPF-BUDAT,
MENGE LIKE MSEG-MENGE,
END OF IT_MSEG.
DATA : BEGIN OF IT_TEMP_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
BWART LIKE MSEG-BWART,
EBELN LIKE MSEG-EBELN,
END OF IT_TEMP_MSEG.
DATA : BEGIN OF IT_TEMP_MKPF OCCURS 0,
MBLNR LIKE MKPF-MBLNR,
MJAHR LIKE MKPF-MJAHR,
BUDAT LIKE MKPF-BUDAT,
BKTXT LIKE MKPF-BKTXT,
END OF IT_TEMP_MKPF.
*Data Declaration
DATA : WK_SNO TYPE I,
WK_LIFNR LIKE LFA1-LIFNR,
WK_EBELN(10) TYPE C,
WK_VBELN(10) TYPE C,
WK_FKDAT TYPE D,
WK_NAME LIKE LFA1-NAME1,
WK_SCHNO(10) TYPE C,
WK_CHALNO(10) TYPE C,
WK_CHALDATE(10) TYPE C,
WK_GRNO(10) TYPE C,
WK_GRDATE(10) TYPE C,
WK_VEHICLE(10) TYPE C,
WK_CARRIER(10) TYPE C,
WK_FREIGHT(13) TYPE P DECIMALS 2,
WK_MDOC(3) TYPE C,
WK_DEPT(7) TYPE C,
WK_MODE(7) TYPE C,
WK_BASIC(13) TYPE P DECIMALS 2,
WK_EXCISE(13) TYPE P DECIMALS 2,
WK_TAX(13) TYPE P DECIMALS 2,
WK_APPVAL(13) TYPE P DECIMALS 2,
WK_CHAL(2) TYPE C,
WK_FORM38(9) TYPE C,
WK_COMMENT(30) TYPE C,
WK_MAKTX(40) TYPE C,
WK_LINES TYPE I,
WK_TOTAL LIKE MARD-LABST,
WK_LGORT LIKE MARD-LGORT,
WK_EXCISE_IND,
WK_TOT_EXCISE LIKE EKPO-NETWR,
WK_DIFF LIKE EKPO-NETWR,
WK_BSTYP LIKE EKKO-BSTYP,
WK_BSART LIKE EKKO-BSART,
WK_DIFF_QTY LIKE EKET-MENGE,
WK_101_QTY LIKE EKET-MENGE,
WK_102_QTY LIKE EKET-MENGE,
WK_122_QTY LIKE EKET-MENGE,
WK_WERKS LIKE EKPO-WERKS,
WK_CHAR_SNO TYPE STRING,
WK_DATE LIKE SY-DATUM,
WK_TIME LIKE SY-UZEIT.
DATA : WK_DATE1 LIKE SY-DATUM,
WK_DATE2 LIKE SY-DATUM,
WK_FISYEAR TYPE I,
WK_CHAR_YEAR(20) TYPE C.
DATA : V_UCOMM TYPE SY-UCOMM,
V_INDEX(10) TYPE C,
V_QUANTITY(8) TYPE C.
**DECLARATION FOR INPUT HELP*
TYPES : BEGIN OF VALUES,
TXZ01 LIKE EKPO-TXZ01,
MENGE LIKE EKPO-MENGE,
MATNR LIKE EKPO-MATNR,
END OF VALUES.
TYPES : BEGIN OF VALUES1,
EBELN LIKE EKKO-EBELN,
END OF VALUES1.
TYPES : BEGIN OF VALUES2,
NAME1 LIKE LFA1-NAME1,
LIFNR LIKE LFA1-LIFNR,
END OF VALUES2.
DATA: PROGNAME LIKE SY-REPID,
DYNNUM LIKE SY-DYNNR,
DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
VALUES_TAB TYPE TABLE OF VALUES WITH HEADER LINE,
VALUES_TAB1 TYPE TABLE OF VALUES1,
VALUE_EBELN TYPE TABLE OF VALUES1.
VALUES_TAB2 TYPE TABLE OF VALUES2.
DATA : VALUES_TAB2 TYPE VALUES2 OCCURS 0 WITH HEADER LINE.
DATA : RETURN_TAB LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
*nidhi
DATA: BEGIN OF IT_LFA1 OCCURS 0,
LIFNR LIKE LFA1-LIFNR,
ADRNR LIKE LFA1-ADRNR,
END OF IT_LFA1.
DATA: BEGIN OF IT_ADR6 OCCURS 0,
ADDRNUMBER TYPE ADR6-ADDRNUMBER,
SMTP_ADDR TYPE ADR6-SMTP_ADDR,
END OF IT_ADR6.
*nidhi
*& Module FILL_TABLE_CONTROL OUTPUT
text
MODULE FILL_TABLE_CONTROL OUTPUT.
READ TABLE IT_TEMP_TC1 INTO IT_TC1 INDEX TC1-CURRENT_LINE.
ENDMODULE. " FILL_TABLE_CONTROL OUTPUT
*& Module READ_TABLE_CONTROL INPUT
text
MODULE READ_TABLE_CONTROL INPUT.
*Validation for Item code
CLEAR : EKPO-MATNR,
EKPO-WERKS.
IF sy-uname = 'GATE1020'.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR
SY-UNAME = 'ABAP' ).
**SELECT SINGLE bstyp FROM EKKO INTO WK_BSTYP WHERE ebeln = wk_ebeln.
**SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
**ELSE.
SELECT SINGLE MATNR WERKS
FROM EKPO CLIENT SPECIFIED
INTO (EKPO-MATNR , EKPO-WERKS )
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
MATNR EQ IT_TC1-ITEMCODE.
ENDIF.
IF SY-SUBRC NE 0 AND NOT IT_TC1-ITEMCODE IS INITIAL.
CLEAR it_tc1.
MESSAGE E003 WITH TEXT-002.
ELSE.
SELECT SINGLE MAKTX FROM MAKT
CLIENT SPECIFIED
INTO WK_MAKTX WHERE
MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND SPRAS = SY-LANGU.
ENDIF.
ENDIF.
**SELECT SINGLE bstyp FROM EKKO INTO WK_BSTYP WHERE ebeln = wk_ebeln.
**SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
IF WK_BSART = 'ZLR' .
Validation for Quantity.
IF NOT IT_TC1-QUANTITY IS INITIAL.
READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
IF SY-SUBRC EQ 0 AND IT_TC1-QUANTITY GT VALUES_TAB-MENGE.
MESSAGE E003 WITH TEXT-013.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*Validation for Max.Stock Level
CLEAR : MARC-MABST.
SELECT SINGLE MABST FROM MARC
CLIENT SPECIFIED
INTO MARC-MABST
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND
WERKS = EKPO-WERKS.
CLEAR : MARD-LABST ,
MARD-INSME .
SELECT SINGLE labst insme FROM mard
CLIENT SPECIFIED
INTO (mard-labst , mard-insme )
WHERE MANDT = SY-MANDT AND
matnr = it_tc1-itemcode
AND werks = ekpo-werks.
SELECT SUM( LABST ) SUM( INSME ) FROM MARD
CLIENT SPECIFIED
INTO (MARD-LABST , MARD-INSME )
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE
AND WERKS = EKPO-WERKS.
CLEAR : WK_TOTAL.
WK_TOTAL = MARD-LABST + MARD-INSME + IT_TC1-QUANTITY.
IF WK_BSART = 'ZLR'.
IF WK_TOTAL GT MARC-MABST.
MESSAGE E001 WITH IT_TC1-ITEMCODE.
ENDIF.
ENDIF.
Appending the table control data to Internal table
READ TABLE IT_TEMP_TC1 INDEX TC1-CURRENT_LINE.
IT_TC1-SNO = TC1-CURRENT_LINE.
IF SY-SUBRC EQ 0.
MODIFY IT_TEMP_TC1 FROM IT_TC1 INDEX TC1-CURRENT_LINE.
ELSE.
READ TABLE IT_TEMP_TC1 WITH KEY ITEMCODE = IT_TC1-ITEMCODE.
IF SY-SUBRC NE 0.
IT_TC1-ITEMNAME = WK_MAKTX.
IF IT_TC1-ITEMCODE IS INITIAL.
CLEAR IT_TC1.
ELSE.
APPEND IT_TC1 TO IT_TEMP_TC1.
ENDIF.
ELSE.
MESSAGE E003 WITH TEXT-004.
ENDIF.
ENDIF.
CLEAR : J_1IMTCHID-J_1ICAPIND.
SELECT SINGLE J_1ICAPIND FROM J_1IMTCHID
CLIENT SPECIFIED
INTO J_1IMTCHID-J_1ICAPIND
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND
WERKS = EKPO-WERKS.
IF SY-SUBRC EQ 0.
IF J_1IMTCHID-J_1ICAPIND = 'N'.
WK_EXCISE_IND = 'N'.
ELSE.
WK_EXCISE_IND = 'E'.
ENDIF.
ENDIF.
ENDMODULE. " READ_TABLE_CONTROL INPUT
*& Module USER_COMMAND_1000 INPUT
text
MODULE USER_COMMAND_1000 INPUT.
V_UCOMM = SY-UCOMM.
CASE V_UCOMM.
WHEN 'WK_SAVE'.
IF WK_APPVAL > 0.
IF ( SY-UNAME = 'STORE1010' OR SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR SY-UNAME = 'STORE1080' ).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WK_VBELN
IMPORTING
OUTPUT = WK_VBELN.
SELECT * FROM EKKO INTO TABLE IT_EKKO WHERE EBELN = WK_EBELN
AND
LOEKZ NE 'X'.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKKO INDEX 1.
WK_BSTYP = IT_EKKO-BSTYP.
ENDIF.
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND LOEKZ NE 'X'.
SORT IT_EKPO BY EBELN EBELP.
IF WK_BSTYP = 'L'.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
SORT IT_EKET BY EBELN EBELP ETENR.
LOOP AT IT_EKPO.
CLEAR WK_DIFF_QTY.
LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
AND EBELP = IT_EKPO-EBELP
AND EINDT LE SY-DATUM.
WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE -
IT_EKET-WEMNG.
ENDLOOP.
IF WK_DIFF_QTY GT 0.
IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
APPEND IT_TEMP_EKPO.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF WK_BSTYP = 'F'.
SELECT * FROM EKET
CLIENT SPECIFIED
INTO TABLE IT_EKET
WHERE MANDT = SY-MANDT AND
EBELN = IT_EKPO-EBELN.
LOOP AT IT_EKPO.
CLEAR : WK_DIFF_QTY.
READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
EBELP = IT_EKPO-EBELP.
IF SY-SUBRC EQ 0.
WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
ENDIF.
IF WK_DIFF_QTY GT 0.
IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
APPEND IT_TEMP_EKPO.
ENDIF.
ENDLOOP.
ENDIF.
SORT IT_TEMP_EKPO BY EBELN EBELP.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GODYNPRO-PO_NUMBER'.
PERFORM BDC_FIELD USING 'GODYNPRO-PO_NUMBER'
WK_EBELN.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
IF WK_EXCISE_IND = 'E'.
PERFORM BDC_FIELD USING 'J_1IEXHEAD-EXNUM'
WK_VBELN.
PERFORM BDC_FIELD USING 'J_1IEXHEAD-EXDAT'
WK_FKDAT.
PERFORM BDC_FIELD USING 'GOHEAD-LFSNR'
WK_VBELN.
ELSE.
PERFORM BDC_FIELD USING 'GOHEAD-LFSNR'
WK_VBELN.
ENDIF.
CLEAR : WK_CHAR_SNO.
WK_CHAR_SNO = WK_SNO.
CONDENSE WK_CHAR_SNO NO-GAPS.
PERFORM BDC_FIELD USING 'GOHEAD-BKTXT'
WK_CHAR_SNO.
LOOP AT IT_TEMP_TC1.
READ TABLE IT_TEMP_EKPO WITH KEY MATNR =
IT_TEMP_TC1-ITEMCODE.
IF SY-SUBRC EQ 0.
CLEAR V_INDEX.
V_INDEX = SY-TABIX.
CONDENSE V_INDEX NO-GAPS.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GODYNPRO-DETAIL_ZEILE'.
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE'
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE'
V_INDEX.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GOITEM-ERFMG'.
PERFORM BDC_FIELD USING 'GOITEM-ERFMG'
CLEAR V_QUANTITY.
V_QUANTITY = IT_TEMP_TC1-QUANTITY.
CONDENSE V_QUANTITY NO-GAPS.
PERFORM BDC_FIELD USING 'GOITEM-ERFMG'
V_QUANTITY.
PERFORM BDC_FIELD USING 'GOITEM-LSMNG'
V_QUANTITY.
perform bdc_field using 'GOITEM-LGOBE'
WK_LGORT.
ENDIF.
ENDLOOP.
CALL TRANSACTION 'MIGO' USING BDCDATA
MODE 'E'
UPDATE 'L'.
IF SY-SUBRC NE 0.
MESSAGE E003 WITH TEXT-003.
LOOP AT SCREEN.
SCREEN-INPUT = 1.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
LEAVE PROGRAM.
ELSE.
CLEAR : WK_TOT_EXCISE.
IF NOT WK_EXCISE IS INITIAL.
LOOP AT IT_TEMP_TC1.
READ TABLE IT_EKPO WITH KEY MATNR = IT_TEMP_TC1-ITEMCODE.
IF SY-SUBRC EQ 0.
WK_TOT_EXCISE = WK_TOT_EXCISE +
( ( ( IT_EKPO-NETWR / IT_EKPO-MENGE ) * 16 / 100 )
IT_TEMP_TC1-QUANTITY ).
ENDIF.
ENDLOOP.
WK_DIFF = WK_EXCISE - WK_TOT_EXCISE.
IF WK_DIFF LE 0.
WK_DIFF = -1 * WK_DIFF.
ENDIF.
IF WK_DIFF GE 1.
WK_COMMENT = 'Difference in Excise. Please Check!'.
ENDIF.
ENDIF.
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKPO INDEX 1.
WK_WERKS = IT_EKPO-WERKS.
ENDIF.
SELECT * FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
INTO TABLE IT_ZMMT01
WHERE MANDT = SY-MANDT AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
SORT IT_ZMMT01 BY SERIAL DESCENDING.
READ TABLE IT_ZMMT01 INDEX 1.
WK_SNO = IT_ZMMT01-SERIAL + 1.
ELSE.
WK_SNO = 1.
ENDIF.
CLEAR WK_ZMMT01.
WK_ZMMT01-MANDT = SY-MANDT.
WK_ZMMT01-SERIAL = WK_SNO.
WK_ZMMT01-WERKS = WK_WERKS.
WK_ZMMT01-EBELN = WK_EBELN.
WK_ZMMT01-LIFNR = WK_LIFNR.
WK_ZMMT01-CHALNO = WK_CHALNO.
WK_ZMMT01-CHALDATE = WK_CHALDATE.
WK_ZMMT01-BILLNO = WK_VBELN.
WK_ZMMT01-BILLDATE = WK_FKDAT.
WK_ZMMT01-GRNUMBER = WK_GRNO.
WK_ZMMT01-GRDATE = WK_GRDATE.
WK_ZMMT01-VEHICLE = WK_VEHICLE.
WK_ZMMT01-CARRIER = WK_CARRIER.
WK_ZMMT01-FREIGHT = WK_FREIGHT.
WK_ZMMT01-MDOC = WK_MDOC.
WK_ZMMT01-DEPT = WK_DEPT.
WK_ZMMT01-PAYMODE = WK_MODE.
WK_ZMMT01-BASIC = WK_BASIC.
WK_ZMMT01-EXCISE = WK_EXCISE.
WK_ZMMT01-TAXAMT = WK_TAX.
WK_ZMMT01-APPVAL = WK_APPVAL.
WK_ZMMT01-CHALINV = WK_CHAL.
WK_ZMMT01-FORM38 = WK_FORM38.
WK_ZMMT01-COMMENTS = WK_COMMENT.
WK_ZMMT01-CDATE = SY-DATUM.
WK_ZMMT01-CTIME = SY-UZEIT.
WK_ZMMT01-PERSON = SY-UNAME.
IF WK_FKDAT+4(2) = '04' OR
WK_FKDAT+4(2) = '05' OR
WK_FKDAT+4(2) = '06' OR
WK_FKDAT+4(2) = '07' OR
WK_FKDAT+4(2) = '08' OR
WK_FKDAT+4(2) = '09' OR
WK_FKDAT+4(2) = '10' OR
WK_FKDAT+4(2) = '11' OR
WK_FKDAT+4(2) = '12'.
WK_DATE10(4) = WK_FKDAT0(4).
WK_DATE1+4(2) = '04'.
WK_DATE1+6(2) = '01'.
ELSEIF
WK_FKDAT+4(2) = '01' OR
WK_FKDAT+4(2) = '02' OR
WK_FKDAT+4(2) = '03'.
WK_FISYEAR = WK_FKDAT+0(4).
WK_FISYEAR = WK_FISYEAR - 1.
WK_CHAR_YEAR = WK_FISYEAR.
CONDENSE WK_CHAR_YEAR NO-GAPS.
WK_DATE1+0(4) = WK_CHAR_YEAR.
WK_DATE1+4(2) = '04'.
WK_DATE1+6(2) = '01'.
ELSE.
ENDIF.
nidhi
SELECT LIFNR ADRNR FROM LFA1 INTO TABLE IT_LFA1 WHERE LIFNR =
WK_ZMMT01-LIFNR.
SELECT ADDRNUMBER SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6 FOR
ALL ENTRIES IN IT_LFA1 WHERE ADDRNUMBER = IT_LFA1-ADRNR.
SELECT SINGLE * FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
WHERE MANDT = SY-MANDT AND
WERKS = WK_WERKS AND
LIFNR = WK_LIFNR AND
BILLNO = WK_VBELN AND
BILLDATE GE WK_DATE1.
IF SY-SUBRC EQ 0.
MESSAGE E003 WITH TEXT-006.
ENDIF.
CLEAR IT_ZMMT02.
REFRESH IT_ZMMT02.
LOOP AT IT_TEMP_TC1.
IT_ZMMT02-MANDT = SY-MANDT.
IT_ZMMT02-SERIAL = WK_SNO.
IT_ZMMT02-WERKS = WK_WERKS.
IT_ZMMT02-EBELN = WK_EBELN.
IT_ZMMT02-ITEMCODE = IT_TEMP_TC1-ITEMCODE.
IT_ZMMT02-DESCRIPTION = IT_TEMP_TC1-ITEMNAME.
IT_ZMMT02-QUANTITY = IT_TEMP_TC1-QUANTITY.
IT_ZMMT02-EXCISE = IT_TEMP_TC1-EXCISE.
APPEND IT_ZMMT02.
CLEAR IT_ZMMT02.
ENDLOOP.
IF IT_ZMMT02[] IS INITIAL.
MESSAGE E003 WITH TEXT-007.
ENDIF.
IF SY-UNAME = 'GATE1010' AND WK_WERKS NE '1010'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1020' AND WK_WERKS NE '1020'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1030' AND WK_WERKS NE '1030'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1040' AND WK_WERKS NE '1040'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1050' AND WK_WERKS NE '1050'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1060' AND WK_WERKS NE '1060'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'ABAP' AND WK_WERKS NE 'ABAP'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1070' AND WK_WERKS NE '1070'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1080' AND WK_WERKS NE '1080'.
MESSAGE E003 WITH TEXT-008.
ENDIF.
INSERT ZMMT001_GRN_GATE FROM WK_ZMMT01.
INSERT ZMMT002_GRN_ITEM FROM TABLE IT_ZMMT02.
IF SY-SUBRC EQ 0.
COMMIT WORK.
MESSAGE I002 WITH WK_SNO.
********nidhi*******************************************************
CALL SCREEN 1001.
CLEAR WK_LIFNR.
CLEAR WK_EBELN.
CLEAR WK_NAME.
CLEAR WK_SCHNO.
CLEAR WK_CHALNO.
CLEAR WK_CHALDATE.
CLEAR WK_VBELN.
CLEAR WK_FKDAT.
CLEAR WK_GRNO.
CLEAR WK_GRDATE.
CLEAR WK_VEHICLE.
CLEAR WK_CARRIER.
CLEAR WK_FREIGHT.
CLEAR WK_MDOC.
CLEAR WK_DEPT.
CLEAR WK_MODE.
CLEAR WK_BASIC.
CLEAR WK_EXCISE.
CLEAR WK_TAX.
CLEAR WK_APPVAL.
CLEAR WK_CHAL.
CLEAR WK_FORM38.
REFRESH IT_TEMP_TC1.
CLEAR WK_FISYEAR.
CLEAR WK_DATE1.
CLEAR WK_CHAR_YEAR.
CALL TRANSACTION 'ZMMI001'.
ELSE.
ROLLBACK WORK.
MESSAGE E003 WITH TEXT-006.
ENDIF.
ENDIF.
ELSE.
MESSAGE E009 WITH TEXT-014.
ENDIF.
WHEN 'WK_EXIT'.
WHEN 'WK_CLEAR'.
CLEAR WK_LIFNR.
CLEAR WK_EBELN.
CLEAR WK_NAME.
CLEAR WK_SCHNO.
CLEAR WK_CHALNO.
CLEAR WK_CHALDATE.
CLEAR WK_VBELN.
CLEAR WK_FKDAT.
CLEAR WK_GRNO.
CLEAR WK_GRDATE.
CLEAR WK_VEHICLE.
CLEAR WK_CARRIER.
CLEAR WK_FREIGHT.
CLEAR WK_MDOC.
CLEAR WK_DEPT.
CLEAR WK_MODE.
CLEAR WK_BASIC.
CLEAR WK_EXCISE.
CLEAR WK_TAX.
CLEAR WK_APPVAL.
CLEAR WK_CHAL.
CLEAR WK_FORM38.
REFRESH IT_TEMP_TC1 .
CLEAR WK_FISYEAR.
CLEAR WK_DATE1.
CLEAR WK_CHAR_YEAR.
WHEN 'DELETE'.
DELETE IT_TEMP_TC1 WHERE SEL = 'X'.
ENDCASE.
ENDMODULE. " USER_COMMAND_1000 INPUT
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
*& Module STATUS_1000 OUTPUT
text
MODULE STATUS_1000 OUTPUT.
SET PF-STATUS 'GRN'.
SET TITLEBAR 'GRN'.
PROGNAME = SY-REPID.
DYNNUM = SY-DYNNR.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'IT_TC1-ITEMCODE'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'WK_EBELN'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'WK_LIFNR'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
LOOP AT SCREEN.
IF SCREEN-NAME NE 'WK_COMMENT'.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
LOOP AT SCREEN.
IF SCREEN-NAME = 'WK_SNO' OR
SCREEN-NAME = 'SNO' OR
SCREEN-NAME = 'WK_COMMENT' .
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 0.
SCREEN-INPUT = 0.
SCREEN-OUTPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
IF WK_LIFNR IS INITIAL.
SET CURSOR FIELD 'WK_LIFNR'.
ELSEIF WK_EBELN IS INITIAL.
SET CURSOR FIELD 'WK_EBELN'.
ELSEIF WK_VBELN IS INITIAL.
SET CURSOR FIELD 'WK_VBELN'.
ELSEIF WK_FKDAT IS INITIAL.
SET CURSOR FIELD 'WK_FKDAT'.
ENDIF.
ELSE.
IF NOT WK_SNO IS INITIAL.
IF SY-UNAME = 'STORE1010'.
WK_WERKS = '1010'.
ELSEIF SY-UNAME = 'STORE1020'.
WK_WERKS = '1020'.
ELSEIF SY-UNAME = 'STORE1030'.
WK_WERKS = '1030'.
ELSEIF SY-UNAME = 'STORE1040'.
WK_WERKS = '1040'.
ELSEIF SY-UNAME = 'STORE1050'.
WK_WERKS = '1050'.
ELSEIF SY-UNAME = 'STORE1060'.
WK_WERKS = '1060'.
ELSEIF SY-UNAME = 'STORE1070'.
WK_WERKS = '1070'.
ELSEIF SY-UNAME = 'STORE1080'.
WK_WERKS = '1080'.
ENDIF.
SELECT SINGLE * FROM ZMMT001_GRN_GATE INTO WK_ZMMT01
WHERE SERIAL = WK_SNO AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
WK_WERKS = WK_ZMMT01-WERKS.
WK_EBELN = WK_ZMMT01-EBELN.
WK_LIFNR = WK_ZMMT01-LIFNR.
WK_CHALNO = WK_ZMMT01-CHALNO.
WK_CHALDATE = WK_ZMMT01-CHALDATE.
WK_VBELN = WK_ZMMT01-BILLNO.
WK_FKDAT = WK_ZMMT01-BILLDATE.
WK_GRNO = WK_ZMMT01-GRNUMBER.
WK_GRDATE = WK_ZMMT01-GRDATE.
WK_VEHICLE = WK_ZMMT01-VEHICLE.
WK_CARRIER = WK_ZMMT01-CARRIER.
WK_FREIGHT = WK_ZMMT01-FREIGHT.
WK_MDOC = WK_ZMMT01-MDOC.
WK_DEPT = WK_ZMMT01-DEPT.
WK_MODE = WK_ZMMT01-PAYMODE.
WK_BASIC = WK_ZMMT01-BASIC.
WK_EXCISE = WK_ZMMT01-EXCISE.
WK_TAX = WK_ZMMT01-TAXAMT.
WK_APPVAL = WK_ZMMT01-APPVAL.
WK_CHAL = WK_ZMMT01-CHALINV.
WK_FORM38 = WK_ZMMT01-FORM38.
WK_COMMENT = WK_ZMMT01-COMMENTS.
SELECT * FROM ZMMT002_GRN_ITEM INTO TABLE IT_ZMMT02
WHERE SERIAL = WK_SNO AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
CLEAR IT_TEMP_TC1.
REFRESH IT_TEMP_TC1.
LOOP AT IT_ZMMT02.
IT_TEMP_TC1-SNO = SY-TABIX.
IT_TEMP_TC1-ITEMCODE = IT_ZMMT02-ITEMCODE.
IT_TEMP_TC1-ITEMNAME = IT_ZMMT02-DESCRIPTION.
IT_TEMP_TC1-QUANTITY = IT_ZMMT02-QUANTITY.
APPEND IT_TEMP_TC1.
CLEAR IT_TEMP_TC1.
ENDLOOP.
ENDIF.
ENDIF.
LOOP AT SCREEN.
IF ( SCREEN-NAME NE 'WK_SNO' ) AND
( SCREEN-NAME NE 'WK_SAVE' ) AND
( SCREEN-NAME NE 'WK_CLEAR' ) AND
( SCREEN-NAME NE 'WK_EXIT' ).
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
LOOP AT TC1-COLS INTO COLS WHERE INDEX GT 0.
COLS-SCREEN-INPUT = '0'.
MODIFY TC1-COLS FROM COLS INDEX SY-TABIX.
ENDLOOP.
ENDIF.
ENDIF.
WK_DATE = SY-DATUM.
WK_TIME = SY-UZEIT.
TC1-LINES = 20.
ENDMODULE. " STATUS_1000 OUTPUT
*& Module EXIT_1000 INPUT
text
MODULE EXIT_1000 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT' OR 'WK_EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " EXIT_1000 INPUT
*& Module ITEM_CODE INPUT
text
MODULE ITEM_CODE INPUT.
REFRESH : VALUES_TAB.
CLEAR : VALUES_TAB.
IF ( SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1010' OR
SY-UNAME = 'GATE1030' OR
SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR
SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR
SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR
SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR
SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR
SY-UNAME = 'STORE1010' OR
SY-UNAME = 'ABAP' ).
SELECT * FROM EKKO CLIENT SPECIFIED
INTO TABLE IT_EKKO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKKO INDEX 1.
WK_BSTYP = IT_EKKO-BSTYP.
WK_BSART = IT_EKKO-BSART.
ENDIF.
if wk_bsart = 'ZLR'.
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
SORT IT_EKPO BY EBELN EBELP.
IF WK_BSTYP = 'L' AND WK_BSART = 'ZLR'.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
SORT IT_EKET BY EBELN EBELP ETENR.
LOOP AT IT_EKPO.
CLEAR WK_DIFF_QTY.
LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
AND EBELP = IT_EKPO-EBELP
AND EINDT LE SY-DATUM.
WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE - IT_EKET-WEMNG.
ENDLOOP.
IF WK_DIFF_QTY GT 0.
VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
VALUES_TAB-MENGE = WK_DIFF_QTY.
VALUES_TAB-MATNR = IT_EKPO-MATNR.
APPEND VALUES_TAB.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF WK_BSTYP = 'F'.
SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
mseg~bwart
mseg~matnr
mseg~ebeln
mseg~ebelp
mkpf~budat
mseg~menge INTO TABLE it_mseg
FROM mkpf INNER JOIN mseg
ON mkpfmblnr EQ msegmblnr
AND mkpfmjahr EQ msegmjahr
FOR ALL entries IN it_ekpo
WHERE bwart IN ('101','122','102')
AND werks = it_ekpo-werks
AND ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET
WHERE MANDT = SY-MANDT AND
EBELN = IT_EKPO-EBELN.
LOOP AT IT_EKPO.
CLEAR : WK_DIFF_QTY.
wk_101_qty,
wk_102_qty,
wk_122_qty.
LOOP AT it_mseg WHERE ebeln = it_ekpo-ebeln AND
ebelp = it_ekpo-ebelp.
IF it_mseg-bwart = '101'.
wk_101_qty = wk_101_qty + it_mseg-menge.
ENDIF.
IF it_mseg-bwart = '102'.
wk_102_qty = wk_102_qty + it_mseg-menge.
ENDIF.
IF it_mseg-bwart = '122'.
wk_122_qty = wk_122_qty + it_mseg-menge.
ENDIF.
ENDLOOP.
if not it_mseg[] is initial.
wk_diff_qty = it_ekpo-menge - wk_101_qty
- wk_102_qty - wk_122_qty.
else.
wk_diff_qty = it_ekpo-menge.
endif.
READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
EBELP = IT_EKPO-EBELP.
IF SY-SUBRC EQ 0.
WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
ENDIF.
IF wk_diff_qty LE it_ekpo-menge.
IF WK_DIFF_QTY GT 0.
VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
VALUES_TAB-MENGE = WK_DIFF_QTY.
VALUES_TAB-MATNR = IT_EKPO-MATNR.
APPEND VALUES_TAB.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
SELECT TXZ01
MATNR FROM EKPO CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
ENDIF.
ELSE.
SELECT TXZ01
MATNR FROM EKPO CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
ENDIF.
SORT VALUES_TAB BY TXZ01.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'IT_TC1-ITEMCODE'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'IT_TC1-ITEMCODE'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB
RETURN_TAB = RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*BREAK-POINT.
IF SY-SUBRC = 0.
READ TABLE RETURN_TAB INDEX 1.
SELECT SINGLE MAKTX FROM MAKT CLIENT SPECIFIED
INTO WK_MAKTX WHERE
MANDT = SY-MANDT AND
MATNR = RETURN_TAB-FIELDVAL AND SPRAS = SY-LANGU.
ENDIF.
ENDMODULE. " ITEM_CODE INPUT
*& Module CHECK_INPUT INPUT
text
MODULE CHECK_INPUT INPUT.
CLEAR : EKKO-EBELN , EKKO-LIFNR.
SELECT SINGLE EBELN LIFNR FROM EKKO CLIENT SPECIFIED
INTO (EKKO-EBELN , EKKO-LIFNR ) WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC NE 0 AND ( SY-UNAME = 'GATE1010' OR
SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR
SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR
SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR
SY-UNAME = 'GATE1080' OR SY-UNAME = 'ABAP' ).
IF WK_EBELN NE SPACE.
MESSAGE E003 WITH TEXT-001.
ENDIF.
ELSE.
WK_LIFNR = EKKO-LIFNR.
CLEAR : LFA1-NAME1.
SELECT SINGLE NAME1 FROM LFA1 CLIENT SPECIFIED
INTO LFA1-NAME1 WHERE
MANDT = SY-MANDT AND
LIFNR = WK_LIFNR.
IF SY-SUBRC EQ 0.
WK_NAME = LFA1-NAME1.
ENDIF.
ENDIF.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
IF wk_vbeln IS INITIAL.
set cursor field wk_vbeln.
MESSAGE E003 WITH text-009.
ENDIF.
IF wk_fkdat IS INITIAL.
MESSAGE E003 WITH text-010.
ENDIF.
ENDIF.
IF ( SY-UNAME = 'STORE1010' OR SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR SY-UNAME = 'STORE1080' ).
CLEAR : ZMMT001_GRN_GATE.
SELECT SINGLE EBELN CDATE FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
INTO (ZMMT001_GRN_GATE-EBELN ,
ZMMT001_GRN_GATE-CDATE )
WHERE MANDT = SY-MANDT AND
SERIAL = WK_SNO AND WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
SELECT MBLNR
MJAHR
BUDAT
BKTXT FROM MKPF CLIENT SPECIFIED
INTO TABLE IT_TEMP_MKPF
WHERE MANDT = SY-MANDT AND
BUDAT = ZMMT001_GRN_GATE-CDATE
AND BKTXT = WK_SNO.
IFHi,
after calling you programm and get the message call transaction su53. That willl display the authorization that you need.
Hope this helps.
Regards
Bernd
Maybe you are looking for
-
Hi, I live in Romania and need to call El Salvador on a daily basis, what packages are available that can save me money in comparison to standard phone networks? Kind regards, George
-
Auto start and shutdown 9iR2 on Mac OS X?
Does anybody know how to set up Mac OS X to auto start and auto shutdown 9iR2 on Mac OS X?
-
Moving location of original file
I have a referenced library as I am sharing photos on a server between multiple computers (Mac and PC's). I need to change how a couple of folders are organized on that server. However, I don't want to break the reference to those files in iPhoto. Ho
-
Passing comma separated string
1) This query works select a.GSDB_SITE_CODE from GFSTQ75_GSDB_SITE a where a.IS_ASSEMBLY_PLANT_FLAG = 'Y' and a.EFFECTIVE_OUT_DTS = '31-DEC-9999' and a.ISO3_COUNTRY_CODE IN ('RUS','AUS','SA') 2) This query not working select a.GSDB_SITE_CODE from GFS
-
Hi, I am Unable to RDP my Work Windows 7 based System from my MAC 10.10.2 using MICROSOFT REMOTE DESKTOP Version 8.0.15 (Build 25886)