abap编程
-
金融账户管理工具查询界面优化
在《我的负债管理四步法》中提到我用SAP ABAP写了个简单的金融账户管理报表,用来管理自己的银行、保险等金融账号,每个月都会打开更新一下资产负债情况,然后反思下自己该做出哪些调整…
-
abap编程学习例子
适合新人入门的SAP ABAP编程学习例子(abap programming examples)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233REPORT zdemo_alvgrid .TYPE-POOLS: slis.*Data DeclarationDATA: BEGIN OF itab OCCURS 0,f1 TYPE i,f2 TYPE i,f3 TYPE i,END OF itab.DATA: it_fieldcatalog TYPE slis_t_fieldcat_alv,wa_fieldcatalog TYPE slis_fieldcat_alv,gd_layout TYPE slis_layout_alv,gd_repid LIKE sy-repid.itab-f1 = '1'.itab-f2 = '10'.itab-f3 = '1234'.APPEND itab.itab-f1 = '2'.itab-f2 = '400'.itab-f3 = '4321'.APPEND itab.itab-f1 = '3'.itab-f2 = '5120'.itab-f3 = '0766'.APPEND itab.itab-f1 = '4'.itab-f2 = '620'.itab-f3 = '3245'.APPEND itab.itab-f1 = '5'.itab-f2 = '9430'.itab-f3 = '564'.APPEND itab.itab-f1 = '6'.itab-f2 = '1098'.itab-f3 = '14'.APPEND itab.itab-f1 = '7'.itab-f2 = '140'.itab-f3 = '4325'.APPEND itab.wa_fieldcatalog-fieldname = 'F1'.wa_fieldcatalog-reptext_ddic = 'field1'.APPEND wa_fieldcatalog TO it_fieldcatalog .CLEAR wa_fieldcatalog .wa_fieldcatalog-fieldname = 'F2'.wa_fieldcatalog-reptext_ddic = 'field2'.wa_fieldcatalog-do_sum = 'X'.APPEND wa_fieldcatalog TO it_fieldcatalog .CLEAR wa_fieldcatalog .wa_fieldcatalog-fieldname = 'F3'.wa_fieldcatalog-reptext_ddic = 'field3'.wa_fieldcatalog-do_sum = 'X'.APPEND wa_fieldcatalog TO it_fieldcatalog .CLEAR wa_fieldcatalog .* gd_layout-gd_layout-colwidth_optimize = 'X'.gd_layout-totals_text = 'Totals'.gd_repid = sy-repid.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTINGi_callback_program = gd_repidis_layout = gd_layoutit_fieldcat = it_fieldcatalog[]TABLESt_outtab = itab.simple interactive reportreport zintractive .TYPES : BEGIN OF str_mard,matnr TYPE mard-matnr,lgort TYPE mard-lgort,werks TYPE mard-werks,END OF str_mard.DATA : wa_mard TYPE str_mard,it_mard TYPE TABLE OF str_mard.TYPES : BEGIN OF str_makt,matnr TYPE makt-matnr,maktg TYPE makt-maktg,END OF str_makt.DATA : wa_makt TYPE str_makt,it_makt TYPE TABLE OF str_makt.TYPES : BEGIN OF str_mara,matnr TYPE mara-matnr,ersda TYPE mara-ersda,ernam TYPE mara-ernam,laeda TYPE mara-laeda,mtart TYPE mara-mtart,matkl TYPE mara-matkl,meins TYPE mara-meins,END OF str_mara.DATA : wa_mara TYPE str_mara,it_mara TYPE TABLE OF str_mara.TYPES : BEGIN OF str_final,matnr TYPE mara-matnr,ersda TYPE mara-ersda,ernam TYPE mara-ernam,laeda TYPE mara-laeda,mtart TYPE mara-mtart,matkl TYPE mara-matkl,meins TYPE mara-meins,lgort TYPE mard-lgort,werks TYPE mard-werks,END OF str_final.DATA: wa_final TYPE str_final,it_final TYPE TABLE OF str_final.PARAMETERS : plant TYPE mard-werks,stor LIKE mard-lgort.SELECT matnrlgortwerksFROM mardINTO TABLE it_mardWHERE lgort = stor AND werks = plant..SELECT matnrmaktgFROM maktINTO TABLE it_maktFOR ALL ENTRIES IN it_mardWHERE matnr = it_mard-matnrAND spras = 'E'.SELECT matnrersdaernamlaedamtartmatklmeinsFROM maraINTO TABLE it_maraFOR ALL ENTRIES IN it_maktWHERE matnr = it_makt-matnr.LOOP AT it_makt INTO wa_makt.WRITE : /1 wa_makt-matnr COLOR 1,40 wa_makt-maktg COLOR 2.HIDE wa_makt-matnr.ENDLOOP.CLEAR wa_mard-matnr.AT LINE-SELECTION.REFRESH it_final.CLEAR wa_final.ULINE.IF sy-lsind = 1.WRITE : /1 'MATERIAL NO' COLOR 2,20 'CREATION DATE' COLOR 3,32 'PERSON CREATED',50 'DATE OF LIST' ,65 'MATERIALTYPE',80 'MATGROUP' ,90 'UNITOFMEASURE',110 'STORLOCATION' COLOR 4,130 'PLANT' COLOR 5.ULINE.ENDIF.LOOP AT it_mara INTO wa_mara WHERE matnr = wa_makt-matnr.wa_final-matnr = wa_mara-matnr.wa_final-ersda = wa_mara-ersda.wa_final-ernam = wa_mara-ernam.wa_final-laeda = wa_mara-laeda.wa_final-mtart = wa_mara-mtart.wa_final-matkl = wa_mara-matkl.wa_final-meins = wa_mara-meins.READ TABLE it_mard INTO wa_mard WITH KEY matnr = wa_makt-matnr.wa_final-lgort = wa_mard-lgort.wa_final-werks = wa_mard-werks.APPEND wa_final TO it_final.ENDLOOP.LOOP AT it_final INTO wa_final.WRITE :/1 wa_final-matnrCOLOR 2,20 wa_final-ersda ,37 wa_final-ernam,50 wa_final-laeda ,70 wa_final-mtart ,85 wa_final-matkl ,95 wa_final-meins,115 wa_final-lgort ,130 wa_final-werks .ENDLOOP.TOP-OF-PAGE.WRITE : /1 'MATERIAL NO' COLOR 1,40 'DISCRIPTION' COLOR 2.ULINE .deleting, inserting, updating a record from work areareport .DATA: BEGIN OF itab OCCURS 0,name(10) TYPE c,age TYPE i,END OF itab .SELECTION-SCREEN BEGIN OF LINE .PARAMETERS:p_wa(100) TYPE c .SELECTION-SCREEN END OF LINE .SELECTION-SCREEN SKIP 2.SELECTION-SCREEN BEGIN OF LINE .SELECTION-SCREEN:PUSHBUTTON 2(10) but1 USER-COMMAND cli1,PUSHBUTTON 15(20) but2 USER-COMMAND cli2 ,PUSHBUTTON 40(20) but3 USER-COMMAND cli3 VISIBLE LENGTH 5 .SELECTION-SCREEN END OF LINE .AT SELECTION-SCREEN .CASE sy-ucomm .WHEN 'CLI1'.itab-name = p_wa+0(10) .itab-age = p_wa+11(2).APPEND itab.WHEN 'CLI2'.DELETE itab WHERE name = p_wa+0(10) .WHEN 'CLI3'.READ TABLE itab WITH KEY name = p_wa+0(10).IF sy-subrc = 0.MODIFY itab TRANSPORTING name age.ELSE .EXIT.ENDIF .ENDCASE .START-OF-SELECTION .LOOP AT itab.WRITE:/ itab-name .ENDLOOP.user exit for a transactionreport z_find_userexit no standard page heading.TABLES : tstc, "SAP Transaction Codestadir, "Directory of Repository Objectsmodsapt, "SAP Enhancements - Short Textsmodact, "Modificationstrdir, "System table TRDIRtfdir, "Function Moduleenlfdir, "Additional Attributes for Function Moduleststct. "Transaction Code Texts*&---------------------------------------------------------------------**& Variables*&---------------------------------------------------------------------*DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.DATA : field1(30).DATA : v_devclass LIKE tadir-devclass.*&---------------------------------------------------------------------**& Selection Screen Parameters*&---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.SELECTION-SCREEN SKIP.PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.SELECTION-SCREEN SKIP.SELECTION-SCREEN END OF BLOCK a01.*&---------------------------------------------------------------------**& Start of main program*&---------------------------------------------------------------------*START-OF-SELECTION.* Validate Transaction CodeSELECT SINGLE * FROM tstcWHERE tcode EQ p_tcode.* Find Repository Objects for transaction codeIF sy-subrc EQ 0.SELECT SINGLE * FROM tadirWHERE pgmid = 'R3TR'AND object = 'PROG'AND obj_name = tstc-pgmna.MOVE : tadir-devclass TO v_devclass.IF sy-subrc NE 0.SELECT SINGLE * FROM trdirWHERE name = tstc-pgmna.IF trdir-subc EQ 'F'.SELECT SINGLE * FROM tfdirWHERE pname = tstc-pgmna.SELECT SINGLE * FROM enlfdirWHERE funcname = tfdir-funcname.SELECT SINGLE * FROM tadirWHERE pgmid = 'R3TR'AND object = 'FUGR'AND obj_name = enlfdir-area.MOVE : tadir-devclass TO v_devclass.ENDIF.ENDIF.* Find SAP ModifactionsSELECT * FROM tadirINTO TABLE jtabWHERE pgmid = 'R3TR'AND object = 'SMOD'AND devclass = v_devclass.SELECT SINGLE * FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode.FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.WRITE:/(19) 'Transaction Code - ',20(20) p_tcode,45(50) tstct-ttext.SKIP.IF NOT jtab[] IS INITIAL.WRITE:/(95) sy-uline.FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE:/1 sy-vline,2 'Exit Name',21 sy-vline ,22 'Description',95 sy-vline.WRITE:/(95) sy-uline.LOOP AT jtab.SELECT SINGLE * FROM modsaptWHERE sprsl = sy-langu ANDname = jtab-obj_name.FORMAT COLOR COL_NORMAL INTENSIFIED OFF.WRITE:/1 sy-vline,2 jtab-obj_name HOTSPOT ON,21 sy-vline ,22 modsapt-modtext,95 sy-vline.ENDLOOP.WRITE:/(95) sy-uline.DESCRIBE TABLE jtab.SKIP.FORMAT COLOR COL_TOTAL INTENSIFIED ON.WRITE:/ 'No of Exits:' , sy-tfill.ELSE.FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.WRITE:/(95) 'No User Exit exists'.ENDIF.ELSE.FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.WRITE:/(95) 'Transaction Code Does Not Exist'.ENDIF.* Take the user to SMOD for the Exit that was selected.AT LINE-SELECTION.GET CURSOR FIELD field1.CHECK field1(4) EQ 'JTAB'.SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.email simple programreport zmail.TABLES: ekko.PARAMETERS: p_email TYPE somlreci1-receiver .TYPES: BEGIN OF t_ekpo,ebeln TYPE ekpo-ebeln,ebelp TYPE ekpo-ebelp,aedat TYPE ekpo-aedat,matnr TYPE ekpo-matnr,END OF t_ekpo.DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0,wa_ekpo TYPE t_ekpo.TYPES: BEGIN OF t_charekpo,ebeln(10) TYPE c,ebelp(5) TYPE c,aedat(8) TYPE c,matnr(18) TYPE c,END OF t_charekpo.DATA: wa_charekpo TYPE t_charekpo.DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0WITH HEADER LINE.DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0WITH HEADER LINE.DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,w_cnt TYPE i,w_sent_all(1) TYPE c,w_doc_data LIKE sodocchgi1,gd_error TYPE sy-subrc,gd_reciever TYPE sy-subrc.*START_OF_SELECTIONSTART-OF-SELECTION.* Retrieve sample data from table ekpoPERFORM data_retrieval.* Populate table with detaisl to be entered into .xls filePERFORM build_xls_data_table.*END-OF-SELECTIONEND-OF-SELECTION.* Populate message body textPERFORM populate_email_message_body.* Send file by email as .xls speadsheetPERFORM send_file_as_email_attachmentTABLES it_messageit_attachUSING p_email'Example .xls documnet attachment''XLS''filename'' '' '' 'CHANGING gd_errorgd_reciever.* Instructs mail send program for SAPCONNECT to send email(rsconn01)PERFORM initiate_mail_execute_program.*&---------------------------------------------------------------------**& Form DATA_RETRIEVAL*&---------------------------------------------------------------------** Retrieve data form EKPO table and populate itab it_ekko*----------------------------------------------------------------------*FORM data_retrieval.SELECT ebeln ebelp aedat matnrUP TO 10 ROWSFROM ekpoINTO TABLE it_ekpo.ENDFORM. " DATA_RETRIEVAL*&---------------------------------------------------------------------**& Form BUILD_XLS_DATA_TABLE*&---------------------------------------------------------------------** Build data table for .xls document*----------------------------------------------------------------------*FORM build_xls_data_table.DATA: ld_store(50) TYPE c. "Leading zerosCONSTANTS: con_cret(5) TYPE c VALUE '0D', "OK for non Unicodecon_tab(5) TYPE c VALUE '09'. "OK for non UnicodeCONCATENATE 'EBELN' 'EBELP' 'AEDAT' 'MATNR' INTO it_attach SEPARATEDBY con_tab.CONCATENATE con_cret it_attach INTO it_attach.APPEND it_attach.LOOP AT it_ekpo INTO wa_charekpo.CONCATENATE '=REPLACE("' wa_charekpo-ebelp '",1,5,"'wa_charekpo-ebelp '")' INTO ld_store .CONCATENATE wa_charekpo-ebeln ld_store wa_charekpo-aedatwa_charekpo-matnr INTO it_attach SEPARATED BY con_tab.CONCATENATE con_cret it_attach INTO it_attach.APPEND it_attach.ENDLOOP.ENDFORM. " BUILD_XLS_DATA_TABLE*&---------------------------------------------------------------------**& Form SEND_FILE_AS_EMAIL_ATTACHMENT*&---------------------------------------------------------------------** Send email*----------------------------------------------------------------------*FORM send_file_as_email_attachment TABLES pit_messagepit_attachUSING p_emailp_mtitlep_formatp_filenamep_attdescriptionp_sender_addressp_sender_addres_typeCHANGING p_errorp_reciever.DATA: ld_error TYPE sy-subrc,ld_reciever TYPE sy-subrc,ld_mtitle LIKE sodocchgi1-obj_descr,ld_email LIKE somlreci1-receiver,ld_format TYPE so_obj_tp,ld_attdescription TYPE so_obj_nam,ld_attfilename TYPE so_obj_des,ld_sender_address LIKE soextreci1-receiver,ld_sender_address_type LIKE soextreci1-adr_typ,ld_receiver LIKE sy-subrc.ld_email = p_email.ld_mtitle = p_mtitle.ld_format = p_format.ld_attdescription = p_attdescription.ld_attfilename = p_filename.ld_sender_address = p_sender_address.ld_sender_address_type = p_sender_addres_type.* Fill the document data.w_doc_data-doc_size = 1.* Populate the subject/generic message attributesw_doc_data-obj_langu = sy-langu.w_doc_data-obj_name = 'SAPRPT'.w_doc_data-obj_descr = ld_mtitle .w_doc_data-sensitivty = 'F'.* Fill the document data and get size of attachmentCLEAR w_doc_data.READ TABLE it_attach INDEX w_cnt.w_doc_data-doc_size =( w_cnt - 1 ) * 255 + strlen( it_attach ).w_doc_data-obj_langu = sy-langu.w_doc_data-obj_name = 'SAPRPT'.w_doc_data-obj_descr = ld_mtitle.w_doc_data-sensitivty = 'F'.CLEAR t_attachment.REFRESH t_attachment.t_attachment[] = pit_attach[].* Describe the body of the messageCLEAR t_packing_list.REFRESH t_packing_list.t_packing_list-transf_bin = space.t_packing_list-head_start = 1.t_packing_list-head_num = 0.t_packing_list-body_start = 1.DESCRIBE TABLE it_message LINES t_packing_list-body_num.t_packing_list-doc_type = 'RAW'.APPEND t_packing_list.* Create attachment notificationt_packing_list-transf_bin = 'X'.t_packing_list-head_start = 1.t_packing_list-head_num = 1.t_packing_list-body_start = 1.DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.t_packing_list-doc_type = ld_format.t_packing_list-obj_descr = ld_attdescription.t_packing_list-obj_name = ld_attfilename.t_packing_list-doc_size = t_packing_list-body_num * 255.APPEND t_packing_list.* Add the recipients email addressCLEAR t_receivers.REFRESH t_receivers.t_receivers-receiver = ld_email.t_receivers-rec_type = 'U'.t_receivers-com_type = 'INT'.t_receivers-notif_del = 'X'.t_receivers-notif_ndel = 'X'.APPEND t_receivers.CALL FUNCTION 'SO_DOCUMENT_SEND_API1'EXPORTINGdocument_data = w_doc_dataput_in_outbox = 'X'sender_address = ld_sender_addresssender_address_type = ld_sender_address_typecommit_work = 'X'IMPORTINGsent_to_all = w_sent_allTABLESpacking_list = t_packing_listcontents_bin = t_attachmentcontents_txt = it_messagereceivers = t_receiversEXCEPTIONStoo_many_receivers = 1document_not_sent = 2document_type_not_exist = 3operation_no_authorization = 4parameter_error = 5x_error = 6enqueue_error = 7OTHERS = 8.* Populate zerror return codeld_error = sy-subrc.* Populate zreceiver return codeLOOP AT t_receivers.ld_receiver = t_receivers-retrn_code.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form INITIATE_MAIL_EXECUTE_PROGRAM*&---------------------------------------------------------------------** Instructs mail send program for SAPCONNECT to send email.*----------------------------------------------------------------------*FORM initiate_mail_execute_program.WAIT UP TO 2 SECONDS.SUBMIT rsconn01 WITH mode = 'INT'WITH output = 'X'AND RETURN.ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM*&---------------------------------------------------------------------**& Form POPULATE_EMAIL_MESSAGE_BODY*&---------------------------------------------------------------------** Populate message body text*----------------------------------------------------------------------*FORM populate_email_message_body.REFRESH it_message.it_message = 'Please find attached a list test ekpo records'.APPEND it_message.ENDFORM. " POPULATE_EMAIL_MESSAGE_BODYsimple alv interactivereport zpurchase_order.*--type poolsTYPE-POOLS:slis.*--internal tables for alvDATA:w_ebeln TYPE ekko-ebeln,w_prog TYPE sy-repid,t_fieldcat TYPE slis_t_fieldcat_alv,fs_fieldcat LIKE LINE OF t_fieldcat,t_eventcat TYPE slis_t_event,w_eventcat LIKE LINE OF t_eventcat.DATA:t_ekko LIKE STANDARD TABLE OF ekko,fs_ekko LIKE LINE OF t_ekko.DATA:t_ekpo LIKE STANDARD TABLE OF ekpo,fs_ekpo LIKE LINE OF t_ekpo.*---- SELECT-OPTIONS DECLARATIONSELECT-OPTIONS:s_ebeln FOR w_ebeln.*----- START-OF-SELECTIONSTART-OF-SELECTION.SELECT *FROM ekkoINTO TABLE t_ekkoWHERE ebeln IN s_ebeln.w_prog = sy-repid.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTINGi_callback_program = w_progi_callback_user_command = 'PICK'i_structure_name = 'EKKO'TABLESt_outtab = t_ekko.*&--------------------------------------------------------------------**& Form pick*---------------------------------------------------------------------*FORM pick USING command LIKE sy-ucommselfield TYPE slis_selfield.READ TABLE t_ekko INTO fs_ekko INDEX selfield-tabindex.CASE command.WHEN '&IC1'.SELECT *FROM ekpoINTO TABLE t_ekpoWHERE ebeln EQ fs_ekko-ebeln.w_prog = sy-repid.CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'EXPORTINGi_structure_name = 'EKPO'CHANGINGct_fieldcat = t_fieldcat.DELETE t_fieldcat WHERE fieldname EQ 'EBELN'.DELETE t_fieldcat WHERE fieldname EQ 'BUKRS'.DELETE t_fieldcat WHERE fieldname EQ 'LGORT'.DELETE t_fieldcat WHERE fieldname EQ 'WERKS'.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTINGi_callback_program = w_progit_fieldcat = t_fieldcatit_events = t_eventcatTABLESt_outtab = t_ekpo.ENDCASE. " CASE COMMANDENDFORM. " FORM PICKFORM t_eventcat.w_eventcat-name = 'TOP_OF_PAGE'.w_eventcat-form = 'TOP'.APPEND w_eventcat TO t_eventcat.ENDFORM.FORM top.READ TABLE t_ekpo INTO fs_ekpo INDEX 1.WRITE:/ 'Purchase Document Number'(001),30 fs_ekpo-ebeln,/ 'Company Code'(002), 30 fs_ekpo-bukrs,/ 'Plant'(003), 30 fs_ekpo-werks,/ 'Storage Location'(004),30 fs_ekpo-lgort.ENDFORM.time difference between two datesreport ztest.DATA : lv_seconds TYPE sytabix .DATA: l TYPE i,j(10) TYPE c,k(12) TYPE c.PARAMETERS:p_date1 TYPE sy-datum,p_date2 TYPE sy-datum.CALL FUNCTION 'SWI_DURATION_DETERMINE'EXPORTINGstart_date = p_date1end_date = p_date2start_time = sy-uzeitend_time = sy-uzeitIMPORTINGduration = lv_seconds.l = lv_seconds.j = l / 60 .k = l / 3600 .WRITE :/ k ,'hours' .WRITE:/ j , 'minutes' .WRITE:/ l ,'seconds' .day month year (month in words input sy-datum)report ztest .DATA ldate(20).CALL FUNCTION 'CONVERSION_EXIT_LDATE_OUTPUT'EXPORTINGinput = sy-datumIMPORTINGoutput = ldate.WRITE:/ ldate .SELECT with cursor statementreport ztest_dwbld1.DATA: it_ekko LIKE ekko OCCURS 5 WITH HEADER LINE.DATA: v_aedat TYPE sy-datum.DATA: dbcur TYPE cursor.START-OF-SELECTION.v_aedat = '20001102'.OPEN CURSOR dbcur FORSELECT * FROM ekko WHERE aedat = '20001102'.DO.FETCH NEXT CURSOR dbcur INTO TABLE it_ekko PACKAGE SIZE 5.IF sy-subrc <> 0.CLOSE CURSOR dbcur.EXIT.ELSE.LOOP AT it_ekko.WRITE: / it_ekko-ebeln.ENDLOOP.REFRESH it_ekko.ENDIF.ENDDO.colors in alvreport zdemo_alvgrid .TABLES: ekko.TYPE-POOLS: slis. "ALV Declarations*Data DeclarationTYPES: BEGIN OF t_ekko,ebeln TYPE ekpo-ebeln,ebelp TYPE ekpo-ebelp,statu TYPE ekpo-statu,aedat TYPE ekpo-aedat,matnr TYPE ekpo-matnr,menge TYPE ekpo-menge,meins TYPE ekpo-meins,netpr TYPE ekpo-netpr,peinh TYPE ekpo-peinh,line_color(4) TYPE c, "Used to store row color attributesEND OF t_ekko.DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,wa_ekko TYPE t_ekko.*ALV data declarationsDATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,gd_tab_group TYPE slis_t_sp_group_alv,gd_layout TYPE slis_layout_alv,gd_repid LIKE sy-repid.*Start-of-selection.START-OF-SELECTION.PERFORM data_retrieval.PERFORM build_fieldcatalog.PERFORM build_layout.PERFORM display_alv_report.*&---------------------------------------------------------------------**& Form BUILD_FIELDCATALOG*&---------------------------------------------------------------------** Build Fieldcatalog for ALV Report*----------------------------------------------------------------------*FORM build_fieldcatalog.fieldcatalog-fieldname = 'EBELN'.fieldcatalog-seltext_m = 'Purchase Order'.fieldcatalog-col_pos = 0.fieldcatalog-outputlen = 10.fieldcatalog-emphasize = 'X'.fieldcatalog-key = 'X'.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'EBELP'.fieldcatalog-seltext_m = 'PO Item'.fieldcatalog-col_pos = 1.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'STATU'.fieldcatalog-seltext_m = 'Status'.fieldcatalog-col_pos = 2.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'AEDAT'.fieldcatalog-seltext_m = 'Item change date'.fieldcatalog-col_pos = 3.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MATNR'.fieldcatalog-seltext_m = 'Material Number'.fieldcatalog-col_pos = 4.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MENGE'.fieldcatalog-seltext_m = 'PO quantity'.fieldcatalog-col_pos = 5.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MEINS'.fieldcatalog-seltext_m = 'Order Unit'.fieldcatalog-col_pos = 6.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'NETPR'.fieldcatalog-seltext_m = 'Net Price'.fieldcatalog-col_pos = 7.fieldcatalog-outputlen = 15.fieldcatalog-datatype = 'CURR'.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'PEINH'.fieldcatalog-seltext_m = 'Price Unit'.fieldcatalog-col_pos = 8.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.ENDFORM. " BUILD_FIELDCATALOG*&---------------------------------------------------------------------**& Form BUILD_LAYOUT*&---------------------------------------------------------------------** Build layout for ALV grid report*----------------------------------------------------------------------*FORM build_layout.gd_layout-no_input = 'X'.gd_layout-colwidth_optimize = 'X'.gd_layout-totals_text = 'Totals'(201).gd_layout-info_fieldname = 'LINE_COLOR'.ENDFORM. " BUILD_LAYOUT*&---------------------------------------------------------------------**& Form DISPLAY_ALV_REPORT*&---------------------------------------------------------------------** Display report using ALV grid*----------------------------------------------------------------------*FORM display_alv_report.gd_repid = sy-repid.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = gd_repidis_layout = gd_layoutit_fieldcat = fieldcatalog[]i_save = 'X'TABLESt_outtab = it_ekko.ENDFORM. " DISPLAY_ALV_REPORT*&---------------------------------------------------------------------**& Form DATA_RETRIEVAL*&---------------------------------------------------------------------** Retrieve data form EKPO table and populate itab it_ekko*----------------------------------------------------------------------*FORM data_retrieval.DATA: ld_color(1) TYPE c.SELECT ebeln ebelp statu aedat matnr menge meins netpr peinhUP TO 10 ROWSFROM ekpoINTO TABLE it_ekko.*Populate field with color attributesLOOP AT it_ekko INTO wa_ekko.ld_color = ld_color + 1.* Only 7 colours so need to reset color valueIF ld_color = 8.ld_color = 1.ENDIF.CONCATENATE 'C' ld_color '10' INTO wa_ekko-line_color.MODIFY it_ekko FROM wa_ekko.ENDLOOP.ENDFORM. " DATA_RETRIEVALamount to wordsdata: word(40) type c.CALL FUNCTION 'HR_IN_CHG_INR_WRDS'EXPORTINGamt_in_num = '10000078'IMPORTINGamt_in_words = word.WRITE:/ word.ADD time TO dateREPORT .DATA: i_date LIKE sy-datum,date LIKE sy-datum.i_date = sy-datum .CALL FUNCTION 'ADD_TIME_TO_DATE'EXPORTINGi_idate = i_date "Original datei_time = '1' " Ammount to addi_iprkz = '3' " unit: 'blank'-days 1-weeks 2-months 3-years* I_RDMHD =IMPORTINGo_idate = date. "new dateWRITE:/ date .simple alv grid with save layoutreport ztest.TYPE-POOLS: slis.DATA: report_id LIKE sy-repid.DATA: i_qmel LIKE qmel OCCURS 0.DATA: i_layout TYPE slis_layout_alv.SELECT * FROM qmel INTO TABLE i_qmel.report_id = sy-repid.PERFORM f1000_layout_init CHANGING i_layout.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = report_idi_structure_name = 'QMEL'is_layout = i_layouti_save = 'A'TABLESt_outtab = i_qmel.FORM f1000_layout_init USINGi_layout TYPE slis_layout_alv.CLEAR i_layout.i_layout-colwidth_optimize = 'X'.ENDFORM.last day of month for fny monthreport ztest .DATA:lv_actual_date TYPE sy-datum,lv_end_of_month_date TYPE sy-datum.PARAMETERS:p_date TYPE dats.lv_actual_date = p_date.CALL FUNCTION 'FIMA_DATE_CREATE'EXPORTINGi_date = lv_actual_date* I_FLG_END_OF_MONTH = ' '* I_YEARS = 0* I_MONTHS = 0* I_DAYS = 0* I_CALENDAR_DAYS = 0i_set_last_day_of_month = 'X'IMPORTINGe_date = lv_end_of_month_date.WRITE: / lv_end_of_month_date.month and year f4 helpreport zpopdate.DATA: v_code LIKE sy-subrc.PARAMETER: v_month LIKE isellist-month.AT SELECTION-SCREEN ON VALUE-REQUEST FOR v_month.CALL FUNCTION 'POPUP_TO_SELECT_MONTH'EXPORTINGactual_month = '200205'language = sy-langustart_column = 8start_row = 5IMPORTINGselected_month = v_monthreturn_code = v_codeEXCEPTIONSfactory_calendar_not_found = 1holiday_calendar_not_found = 2month_not_found = 3OTHERS = 4.PROGRAM to OPEN a FILE ON the pcREPORT zum_open_word .* The internal table is declared of size 3DATA: BEGIN OF itab OCCURS 3,line(50),END OF itab.PARAMETERS: prog(70) DEFAULT'C:\Program Files\Microsoft Office\Office\WINWORD.EXE'.PARAMETERS: file1(70) DEFAULT 'C:\TEMP\TEST.TXT'.* Tick to print the Text file after saving from MS WORDSPARAMETERS: s_up AS CHECKBOX.* Tick to create new or overwrite Text filePARAMETERS: s_new AS CHECKBOX.IF s_up = 'X'.CALL FUNCTION 'GUI_UPLOAD'EXPORTINGfilename = 'FILE1'TABLESdata_tab = itabEXCEPTIONSfile_open_error = 1.IF sy-subrc = 0.LOOP AT itab.WRITE: / itab.ENDLOOP.ELSE.WRITE: / 'File open error.'.ENDIF.ELSE.IF s_new = 'X'.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGfilename = 'FILE1'TABLESdata_tab = itabEXCEPTIONSfile_write_error = 1no_batch = 2gui_refuse_filetransfer = 3invalid_type = 4OTHERS = 5.ENDIF.CASE sy-subrc.WHEN 1.WRITE: / 'GUI DOWNLOAD FILE WRITE ERROR'.WHEN 2.WRITE: / 'GUI DOWNLOAD NO BATCH'.WHEN 3.WRITE: / 'GUI DOWNLOAD GUI REFUSE FILETRANSFER'.WHEN 4.WRITE: / 'GUI DOWNLOAD INVALID TYPE'.WHEN 5.WRITE: / 'GUI DOWNLOAD OTHERS'.ENDCASE.CALL FUNCTION 'WS_EXECUTE'EXPORTINGprogram = progcommandline = 'FILE1'inform = ' 'EXCEPTIONSfrontend_error = 1no_batch = 2prog_not_found = 3illegal_option = 4gui_refuse_execute = 5OTHERS = 6.CASE sy-subrc.WHEN 1.WRITE: / 'FRONTEND ERROR'.WHEN 2.WRITE: / 'NO BATCH'.WHEN 3.WRITE: / 'PROGRAM NOT FOUND'.WHEN 4.WRITE: / 'ILLEGA OPTION'.WHEN 5.WRITE: / 'GUI REFUSE EXECUTE'.WHEN 6.WRITE: / 'OTHERS'.ENDCASE.ENDIF.number in wordsreport ztest .PARAMETERS: v_int TYPE i .DATA words LIKE spell.CALL FUNCTION 'SPELL_AMOUNT'EXPORTINGamount = v_intlanguage = sy-languIMPORTINGin_words = words.WRITE words-word.month in words (input date)report zmonth.DATA x_month(11).PARAMETERS:p_date TYPE sy-datum.CALL FUNCTION 'CONVERSION_EXIT_LDATE_OUTPUT'EXPORTINGinput = p_dateIMPORTINGoutput = x_month.WRITE:/ 'Month ', x_month+3(8).MODIFY itabREPORT ztest .TABLES:mara,marc,mard.DATA:BEGIN OF it_final OCCURS 0,matnr LIKE mara-matnr,mtart LIKE mara-mtart,meins LIKE mara-meins,werks LIKE marc-werks,pstat LIKE marc-pstat,lgort LIKE mard-lgort,labst LIKE mard-labst,END OF it_final.SELECT-OPTIONS:s_matnr FOR mara-matnr.START-OF-SELECTION.SELECT matnrmtartmeinsFROM maraINTO TABLE it_finalWHERE matnr IN s_matnr.IF sy-subrc = 0.LOOP AT it_final.SELECT SINGLEwerkspstatFROM marcINTO (it_final-werks,it_final-pstat)WHERE matnr = it_final-matnr.MODIFY it_final.IF sy-subrc = 0.SELECT SINGLElgortlabstFROM mardINTO (it_final-lgort,it_final-labst)WHERE werks = it_final-werks.MODIFY it_final.ENDIF.ENDLOOP.ENDIF.IF sy-subrc = 0.LOOP AT it_final.WRITE:/ it_final-matnr,it_final-mtart,it_final-meins,it_final-werks,it_final-pstat,it_final-lgort,it_final-labst.ENDLOOP.ENDIF.lbd with out macrosreport ztest .TABLES pernr.INFOTYPES : 0001.START-OF-SELECTION.GET pernr.WRITE : / 'Result from Macros'.rp-provide-from-frst p0001 space pn-begda pn-endda.IF pnp-sw-found = 1.WRITE : / '-------------------------------------'.WRITE : / 'Result from rp-provide-from-frst'.WRITE : / '-------------------------------------'.WRITE : / p0001-pernr, p0001-begda, p0001-endda.ENDIF.rp-provide-from-last p0001 space pn-begda pn-endda.IF pnp-sw-found = 1.WRITE : / '-------------------------------------'.WRITE : / 'Result from rp-provide-from-last'.WRITE : / '-------------------------------------'.WRITE : / p0001-pernr, p0001-begda, p0001-endda.ENDIF.rp-read-infotype pernr-pernr 0001 p0001 pn-begda pn-endda.IF pnp-sw-found = 1.WRITE : / '-------------------------------------'.WRITE : / 'Result from rp-read-infotype'.WRITE : / '-------------------------------------'.LOOP AT p0001.WRITE : / p0001-pernr, p0001-begda, p0001-endda.ENDLOOP.ENDIF.END-OF-SELECTION.list box from user valuesreport ztest.TYPE-POOLS: vrm.DATA: name TYPE vrm_id,list TYPE vrm_values,value LIKE LINE OF list.PARAMETERS: ps_parm(10) AS LISTBOX VISIBLE LENGTH 10.AT SELECTION-SCREEN OUTPUT.name = 'PS_PARM'.value-key = '1'.value-text = 'LINE 1'.APPEND value TO list.value-key = '2'.value-text = 'LINE 2'.APPEND value TO list.value-key = '3'.value-text = 'LINE 3'.APPEND value TO list.value-key = '4'.value-text = 'LINE 4'.APPEND value TO list.value-key = '5'.value-text = 'LINE 5'.APPEND value TO list.value-key = '6'.value-text = 'LINE 6'.APPEND value TO list.value-key = '7'.value-text = 'LINE 7'.APPEND value TO list.CALL FUNCTION 'VRM_SET_VALUES'EXPORTINGid = namevalues = list.START-OF-SELECTION.WRITE: / 'PARAMETER:', ps_parm.simple ldb reporttables:pernr.INFOTYPES:0002,0008.GET pernr.PROVIDE * FROM p0002 BETWEEN pn-begda AND pn-endda.ENDPROVIDE.PROVIDE * FROM p0008 BETWEEN pn-begda AND pn-endda.ENDPROVIDE.IF sy-subrc = 0.WRITE:/ p0002-pernr,p0002-begda,p0002-endda,p0002-vorna,p0008-ansal,p0008-lga01,p0008-bet01,p0008-preas.ENDIF.simple inner jionreport ztest .TABLES:mara,marc,mard.DATA:BEGIN OF itab OCCURS 0,matnr LIKE mara-matnr,mtart LIKE mara-mtart,meins LIKE mara-meins,werks LIKE marc-werks,pstat LIKE marc-pstat,labst LIKE mard-labst,lgort LIKE mard-lgort,maktx LIKE makt-maktx,END OF itab.SELECT-OPTIONS:s_matnr FOR mara-matnr.START-OF-SELECTION.SELECT a~matnra~mtarta~meinsb~werksb~pstatc~lgortc~labstINTO CORRESPONDING FIELDS OF TABLE itabFROM mara AS a INNER JOIN marc AS b ON a~matnr = b~matnrINNER JOIN mard AS c ON a~matnr = c~matnrAND b~werks = c~werksWHERE a~matnr IN s_matnr.IF sy-subrc = 0.LOOP AT itab.SELECT SINGLE maktxFROM maktINTO itab-maktxWHERE matnr = itab-matnr.MODIFY itab.WRITE:/ itab-matnr,itab-mtart,itab-meins,itab-werks,itab-pstat,itab-lgort,itab-labst,itab-maktx.ENDLOOP.user exit in a programreport ztest .TABLES : tstc,tadir,modsapt,modact,trdir,tfdir,enlfdir,sxs_attrt ,tstct.DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.DATA : field1(30).DATA : v_devclass LIKE tadir-devclass.PARAMETERS : p_tcode LIKE tstc-tcode,p_pgmna LIKE tstc-pgmna.DATA wa_tadir TYPE tadir.START-OF-SELECTION.IF NOT p_tcode IS INITIAL.SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.ELSEIF NOT p_pgmna IS INITIAL.tstc-pgmna = p_pgmna.ENDIF.IF sy-subrc EQ 0.SELECT SINGLE * FROM tadirWHERE pgmid = 'R3TR'AND object = 'PROG'AND obj_name = tstc-pgmna.MOVE : tadir-devclass TO v_devclass.IF sy-subrc NE 0.SELECT SINGLE * FROM trdirWHERE name = tstc-pgmna.IF trdir-subc EQ 'F'.SELECT SINGLE * FROM tfdirWHERE pname = tstc-pgmna.SELECT SINGLE * FROM enlfdirWHERE funcname = tfdir-funcname.SELECT SINGLE * FROM tadirWHERE pgmid = 'R3TR'AND object = 'FUGR'AND obj_name EQ enlfdir-area.MOVE : tadir-devclass TO v_devclass.ENDIF.ENDIF.SELECT * FROM tadir INTO TABLE jtabWHERE pgmid = 'R3TR'AND object IN ('SMOD', 'SXSD')AND devclass = v_devclass.SELECT SINGLE * FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode.FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.WRITE:/(19) 'Transaction Code - ',20(20) p_tcode,45(50) tstct-ttext.SKIP.IF NOT jtab[] IS INITIAL.WRITE:/(105) sy-uline.FORMAT COLOR COL_HEADING INTENSIFIED ON.* Sorting the internal TableSORT jtab BY object.DATA : wf_txt(60) TYPE c,wf_smod TYPE i,wf_badi TYPE i,wf_object2(30) TYPE c.CLEAR : wf_smod, wf_badi , wf_object2.* Get the total SMOD.LOOP AT jtab INTO wa_tadir.AT FIRST.FORMAT COLOR COL_HEADING INTENSIFIED ON.WRITE:/1 sy-vline,2 'Enhancement/ Business Add-in',41 sy-vline ,42 'Description',105 sy-vline.WRITE:/(105) sy-uline.ENDAT.CLEAR wf_txt.AT NEW object.IF wa_tadir-object = 'SMOD'.wf_object2 = 'Enhancement' .ELSEIF wa_tadir-object = 'SXSD'.wf_object2 = ' Business Add-in'.ENDIF.FORMAT COLOR COL_GROUP INTENSIFIED ON.WRITE:/1 sy-vline,2 wf_object2,105 sy-vline.ENDAT.CASE wa_tadir-object.WHEN 'SMOD'.wf_smod = wf_smod + 1.SELECT SINGLE modtext INTO wf_txtFROM modsaptWHERE sprsl = sy-languAND name = wa_tadir-obj_name.FORMAT COLOR COL_NORMAL INTENSIFIED OFF.WHEN 'SXSD'.* For BADiswf_badi = wf_badi + 1 .SELECT SINGLE text INTO wf_txtFROM sxs_attrtWHERE sprsl = sy-languAND exit_name = wa_tadir-obj_name.FORMAT COLOR COL_NORMAL INTENSIFIED ON.ENDCASE.WRITE:/1 sy-vline,2 wa_tadir-obj_name HOTSPOT ON,41 sy-vline ,42 wf_txt,105 sy-vline.AT END OF object.WRITE : /(105) sy-uline.ENDAT.ENDLOOP.WRITE:/(105) sy-uline.SKIP.FORMAT COLOR COL_TOTAL INTENSIFIED ON.WRITE:/ 'No.of Exits:' , wf_smod.WRITE:/ 'No.of BADis:' , wf_badi.ELSE.FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.WRITE:/(105) 'No userexits or BADis exist'.ENDIF.ELSE.FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.WRITE:/(105) 'Transaction does not exist'.ENDIF.AT LINE-SELECTION.DATA : wf_object TYPE tadir-object.CLEAR wf_object.GET CURSOR FIELD field1.CHECK field1(8) EQ 'WA_TADIR'.READ TABLE jtab WITH KEY obj_name = sy-lisel+1(20).MOVE jtab-object TO wf_object.CASE wf_object.WHEN 'SMOD'.SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.WHEN 'SXSD'.SET PARAMETER ID 'EXN' FIELD sy-lisel+1(20).CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.ENDCASE.itab to excel or txt file( using f4_file)tables : mara.*-------------INTERNAL TABLE DECLARATIONTYPES : BEGIN OF itab,matnr TYPE mara-matnr,meins TYPE mara-meins,ernam LIKE mara-ernam,aenam LIKE mara-aenam,mtart LIKE mara-mtart,END OF itab.DATA : ig_itab TYPE itab OCCURS 0.DATA : v_file TYPE string.DATA : t_file TYPE rlgrap-filename.*-------------RETRIVE DATA FROM DATABASESELECTmatnrmeins ernam aenam mtart FROM maraINTO CORRESPONDING FIELDS OF TABLEig_itabUP TO 10 ROWS.*-------------CALLING FUNCTION MODULESCALL FUNCTION 'F4_FILENAME' "PASS THE FILE NAME AS U NEED.EXPORTINGfield_name = 'T_FILE'IMPORTINGfile_name = t_file.v_file = t_file. "STRING CONVERSION*-------------CALLING GUI DOWNLOAD TO EXTRACTCALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGfilename = v_filefiletype = 'ASC'write_field_separator = 'X'write_lf = 'X'TABLESdata_tab = ig_itab.simple download from itab to filereport zvenkattest0.DATA: BEGIN OF itab OCCURS 0,a TYPE c,c TYPE c,b TYPE i,END OF itab.itab-a = 'a' .itab-c = ':'.itab-b = 1 .APPEND itab .itab-a = 'b' .itab-c = ':'.itab-b = 2 .APPEND itab .itab-a = 'c' .itab-c = ':'.itab-b = 3 .APPEND itab .DATA: file TYPE string .file = 'C:\Documents and Settings\venkatapp\Desktop\test.txt'.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGfilename = filefiletype = 'ASC'write_field_separator = ':'TABLESdata_tab = itab.upload or downloadreport ztest.DATA : g_file(128) TYPE c.DATA : g_path(80) TYPE c.DATA : g_end(8) TYPE c.DATA : g_subrc LIKE sy-subrc.PARAMETERS: p_uname LIKE sy-uname DEFAULT sy-uname.PARAMETERS: p_langu LIKE sy-langu DEFAULT sy-langu.SELECTION-SCREEN SKIP.PARAMETERS: p_imp RADIOBUTTON GROUP act .PARAMETERS: p_exp RADIOBUTTON GROUP act DEFAULT 'X'.SELECTION-SCREEN ULINE.SELECTION-SCREEN BEGIN OF BLOCK fil.PARAMETERS: p_type LIKE rlgrap-filetype DEFAULT 'ASC'.PARAMETERS: p_path LIKE g_path DEFAULT 'C:\TEMP\XXX.MEN'.SELECTION-SCREEN END OF BLOCK fil.DATA: it_user_nodes TYPE TABLE OF bxmnodes1 WITH HEADER LINE.DATA: it_fav_nodes TYPE TABLE OF bxmnodes WITH HEADER LINE.DATA: BEGIN OF it_pcf OCCURS 0,line(4096) TYPE c.DATA: END OF it_pcf.INITIALIZATION.REPLACE 'XXX' WITH sy-uname INTO p_path.CONDENSE p_path NO-GAPS.sy-title = 'UPLOAD/DOWNLOAD FAVORITE'.START-OF-SELECTION.CLEAR it_user_nodes[].CLEAR it_fav_nodes[].g_file = p_uname.IF p_uname <> sy-uname.MESSAGE w398(00) WITH 'CURRENT USER <> USER TO BE MODIFIED!'.ENDIF.IF p_imp = 'X'.PERFORM import_fav TABLES it_fav_nodes.PERFORM write_fav_db TABLES it_fav_nodes.ELSEIF p_exp = 'X'.PERFORM export_fav TABLES it_fav_nodes.ENDIF.FORM data_export TABLES pit_pcfUSING p_file.CALL FUNCTION 'DOWNLOAD'EXPORTINGfilename = p_filefiletype = p_typeTABLESdata_tab = pit_pcfEXCEPTIONSfile_open_error = 1file_write_error = 2invalid_filesize = 3invalid_table_width = 4invalid_type = 5no_batch = 6unknown_error = 7gui_refuse_filetransfer = 8OTHERS = 9.IF sy-subrc NE 0.WRITE: / 'FAILURE IN DOWNLOAD' , p_file.ENDIF.ENDFORM.FORM data_import TABLES pit_pcfUSING p_file p_subrc.CALL FUNCTION 'UPLOAD'EXPORTINGfilename = p_filefiletype = p_typeTABLESdata_tab = pit_pcfEXCEPTIONSconversion_error = 1file_open_error = 2file_read_error = 3invalid_table_width = 4invalid_type = 5no_batch = 6unknown_error = 7gui_refuse_filetransfer = 8OTHERS = 9.IF sy-subrc NE 0.WRITE: / 'UPLOAD FAILED' , p_file.p_subrc = sy-subrc .ENDIF.ENDFORM.FORM import_fav TABLES pit_fav_nodes STRUCTURE it_fav_nodes.g_file = p_path.PERFORM data_import TABLES it_fav_nodes USING g_file g_subrc .ENDFORM.FORM export_fav TABLES pit_fav_nodes STRUCTURE it_fav_nodes.CALL FUNCTION 'BX_FAVOS_READ_ALL_NODES'EXPORTINGuser_name = p_unamelanguage = p_languTABLESoutput_nodes_and_texts = it_fav_nodes.g_file = p_path.PERFORM data_export TABLES it_fav_nodes USING g_file .ENDFORM.FORM write_fav_db TABLES pit_fav_nodes STRUCTURE it_fav_nodes.CALL FUNCTION 'BX_FAVOS_WRITE_ALL_NODES'EXPORTINGuser_name = p_unametarget_client = sy-mandtTABLESinput_nodes_and_texts = pit_fav_nodes.ENDFORM.f4 help for monthreport ztest.TABLES: t247 , dfies.PARAMETERS:p_month LIKE t247-mnr.DATA: BEGIN OF itab OCCURS 0,mnr LIKE t247-mnr,ktx LIKE t247-ktx,END OF itab .DATA : lt_fields TYPE TABLE OF dfies,ls_field TYPE dfies.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_month.SELECT mnrktxFROM t247 INTO CORRESPONDING FIELDS OF TABLE itabWHERE spras = 'EN'.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGretfield = 'P_MONTH'dynpprog = sy-cprogdynpnr = sy-dynnrdynprofield = 'MNR'value_org = 'S'TABLESvalue_tab = itabfield_tab = lt_fields.f4 help for a field with ztable*--crete a z table with 2 fields and name(10) and age(2) and create entries..report message-id zmsf.TABLES:zzz000000 ,dfies.DATA: BEGIN OF itab OCCURS 0,name(10) ,age(2),END OF itab.DATA : lt_fields TYPE TABLE OF dfies WITH HEADER LINE,ls_field TYPE dfies.PARAMETER: p_name(10) TYPE c.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_name.REFRESH itab.REFRESH lt_fields.lt_fields-tabname = 'ZZZ00000'.lt_fields-fieldname = 'NAME'.APPEND lt_fields.CLEAR lt_fields .lt_fields-tabname = 'ZZZ00000'.lt_fields-fieldname = 'AGE'.lt_fields-position = '2'.APPEND lt_fields.CLEAR lt_fields .SELECT nameage FROM zzz00000INTO TABLE itab.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGretfield = lt_fields-fieldnamedynpprog = sy-cprogdynpnr = sy-dynnrdynprofield = 'NAME'value_org = 'S'TABLESvalue_tab = itabfield_tab = lt_fields.f4 help for a z table*--create a z table with fields pernr like pa0002-pernr* vorna like pa0002-vorna* nachn like pa0002-nachn* and create entries for the tablereport message-id zmsf.TABLES:zzz000000 ,dfies.DATA: BEGIN OF itab OCCURS 0,pernr LIKE pa0002-pernr,vorna LIKE pa0002-vorna,nachn LIKE pa0002-nachn,END OF itab.DATA : lt_fields TYPE TABLE OF dfies,ls_field TYPE dfies.PARAMETER: pernr LIKE pa0002-pernr .AT SELECTION-SCREEN ON VALUE-REQUEST FOR pernr.SELECT pernrvornanachnFROM zzz000000INTO TABLE itab .CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGretfield = 'PERNR'dynpprog = sy-cprogdynpnr = sy-dynnrdynprofield = 'PERNR'value_org = 'S'TABLESvalue_tab = itabfield_tab = lt_fields.START-OF-SELECTION.SELECT pernrvornanachnFROM zzz000000INTO TABLE itabWHERE pernr = pernr.LOOP AT itab.WRITE:/ itab-pernr,itab-vorna,itab-nachn.ENDLOOP.f4 help for datereport message-id zmsf.DATA:l_select_date LIKE workflds-gkday,l_select_week LIKE scal-week.* pop up calendar.CALL FUNCTION 'F4_DATE'EXPORTINGdate_for_first_month = sy-datumIMPORTINGselect_date = l_select_dateselect_week = l_select_weekEXCEPTIONScalendar_buffer_not_loadable = 1date_after_range = 2date_before_range = 3date_invalid = 4factory_calendar_not_found = 5holiday_calendar_not_found = 6parameter_conflict = 7OTHERS = 8.IF sy-subrc <> 0.EXIT.ENDIF.* Validate date - An invalid date is caused by using the cancel* button on the calendarCALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'EXPORTINGdate = l_select_dateEXCEPTIONSplausibility_check_failed = 1OTHERS = 2.IF sy-subrc <> 0.* User has cancelled the calendarEXIT.ENDIF.REPORT header alignmentREPORT LINE-SIZE 200.WRITE:/(140) 'THIS IS THE HEADER OF THE PAGE' CENTERED,/(140) 'THIS IS THE VENKAT TEST HEADING' CENTERED,/(140) 'HI FRIEND THIS IS WORKING' CENTERED,/(10) 'date:' LEFT-JUSTIFIED,(10) sy-datum LEFT-JUSTIFIED,(90) 'CLIENT' RIGHT-JUSTIFIED,(08) sy-mandt RIGHT-JUSTIFIED,/(10) 'time:' LEFT-JUSTIFIED,(10) sy-uzeit LEFT-JUSTIFIED,(92) 'USERNAME' RIGHT-JUSTIFIED,(10) sy-uname RIGHT-JUSTIFIED.inserting deleteing updating values from work area*--hi create a zdatabase table with 2 entries name(10) and age(2) .report ztest .TABLES:zzz00000.DATA: BEGIN OF itab OCCURS 0,name(10) TYPE c,age TYPE i,END OF itab .SELECTION-SCREEN BEGIN OF LINE .PARAMETERS:p_wa(100) TYPE c .SELECTION-SCREEN END OF LINE .SELECTION-SCREEN SKIP 2.SELECTION-SCREEN BEGIN OF LINE .SELECTION-SCREEN:PUSHBUTTON 2(10) but1 USER-COMMAND cli1,PUSHBUTTON 15(20) but2 USER-COMMAND cli2 ,PUSHBUTTON 40(20) but3 USER-COMMAND cli3 VISIBLE LENGTH 5 .SELECTION-SCREEN END OF LINE .AT SELECTION-SCREEN .CASE sy-ucomm .WHEN 'CLI1'.zzz00000-name = p_wa+0(10) .zzz00000-age = p_wa+11(2).INSERT zzz00000.WHEN 'CLI2'.DELETE FROM zzz00000 WHERE name = p_wa+0(10)..WHEN 'CLI3'.UPDATE zzz00000 FROM p_wa .ENDCASE .alv blocked listreport z_alv_list_block.TYPE-POOLS: slis. " ALV Global typesSELECTION-SCREEN :SKIP,BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDEDPARAMETERS p_max(2) TYPE n DEFAULT '02' OBLIGATORY.SELECTION-SCREEN END OF LINE.DATA:* 1st TableBEGIN OF gt_kna1 OCCURS 0, " Data displayedkunnr LIKE kna1-kunnr, " Customer numberernam LIKE kna1-ernam, " Name of Person who Createderdat LIKE kna1-erdat, " Creation datename1 LIKE kna1-name1, " Name 1END OF gt_kna1,* 2nd TableBEGIN OF gt_mara OCCURS 0,ernam LIKE mara-ernam, " Name of Person who Createdmatnr LIKE mara-matnr, " Material numberersda LIKE mara-ersda, " Creation datebrgew LIKE mara-brgew, " Gross weightEND OF gt_mara,* 3rd TableBEGIN OF gt_vbak OCCURS 0,vkorg LIKE vbak-vkorg, " Sales organizationkunnr LIKE vbak-kunnr, " Sold-to partyvbeln LIKE vbak-vbeln, " Sales documentnetwr LIKE vbak-netwr, " Net Value of the Sales Orderwaerk LIKE vbak-waerk, " SD document currencyEND OF gt_vbak.INITIALIZATION.v_1 = 'Maximum of records to read'.START-OF-SELECTION.* Read dataSELECT * FROM kna1UP TO p_max ROWSINTO CORRESPONDING FIELDS OF TABLE gt_kna1.SELECT * FROM maraUP TO p_max ROWSINTO CORRESPONDING FIELDS OF TABLE gt_mara.SELECT * FROM vbakUP TO p_max ROWSINTO CORRESPONDING FIELDS OF TABLE gt_vbak.CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'EXPORTINGi_callback_program = sy-cprogi_callback_user_command = 'USER_COMMAND'.PERFORM list_append TABLES gt_kna1USING '1''GT_KNA1'.PERFORM list_append TABLES gt_maraUSING '2''GT_MARA'.PERFORM list_append TABLES gt_vbakUSING '3''GT_VBAK'.PERFORM f_list_display.*---------------------------------------------------------------------** FORM USER_COMMAND **---------------------------------------------------------------------*FORM user_command USING i_ucomm LIKE sy-ucommis_selfield TYPE slis_selfield. "#EC CALLEDCASE i_ucomm.WHEN '&IC1'. " PickCASE is_selfield-tabname.WHEN 'GT_MARA'.WHEN 'GT_KNA1'.WHEN 'GT_VBAK'.READ TABLE gt_vbak INDEX is_selfield-tabindex.IF sy-subrc EQ 0.* Sales order numberSET PARAMETER ID 'AUN' FIELD gt_vbak-vbeln.* Display Sales OrderCALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.ENDIF.ENDCASE.ENDCASE.ENDFORM. " USER_COMMAND*---------------------------------------------------------------------*< /div>* Form list_append*---------------------------------------------------------------------*FORM list_append TABLES ut_tableUSING u_no TYPE char1u_tabname TYPE slis_tabname.* Macro definitionDEFINE m_fieldcat.ls_fieldcat-fieldname = &1.ls_fieldcat-ref_tabname = &2.append ls_fieldcat to lt_fieldcat.END-OF-DEFINITION.DEFINE m_sort.ls_sort-fieldname = &1.ls_sort-up = 'X'.append ls_sort to lt_sort.END-OF-DEFINITION.DATA :ls_fieldcat TYPE slis_fieldcat_alv,lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalogls_sort TYPE slis_sortinfo_alv,lt_sort TYPE slis_t_sortinfo_alv. " Sort tableDATA:lt_events TYPE slis_t_event,ls_event TYPE slis_alv_event,ls_layout TYPE slis_layout_alv.ls_layout-group_change_edit = 'X'.ls_layout-colwidth_optimize = 'X'.ls_layout-zebra = 'X'.ls_layout-detail_popup = 'X'.ls_layout-get_selinfos = 'X'.ls_layout-max_linesize = '200'.CASE u_no.WHEN '1'.* Build field catalog and sort tablem_fieldcat 'KUNNR' 'KNA1'.m_fieldcat 'ERNAM' 'KNA1'.m_fieldcat 'ERDAT' 'KNA1'.m_fieldcat 'NAME1' 'KNA1'.m_sort 'KUNNR'.WHEN '2'.m_fieldcat 'MATNR' 'MARA'.m_fieldcat 'ERNAM' 'MARA'.m_fieldcat 'ERSDA' 'MARA'.m_fieldcat 'BRGEW' 'MARA'.m_sort 'MATNR'.WHEN '3'.m_fieldcat 'VBELN' 'VBAK'.m_fieldcat 'VKORG' 'VBAK'.m_fieldcat 'KUNNR' 'VBAK'.m_fieldcat 'NETWR' 'VBAK'.m_fieldcat 'WAERK' 'VBAK'.m_sort 'VBELN'.ENDCASE.IF u_no CA '13'.MOVE 'TOP_OF_PAGE' TO ls_event-name.CONCATENATE 'TOP_OF_PAGE' u_no INTO ls_event-form.APPEND ls_event TO lt_events.ELSE.MOVE 'TOP_OF_LIST' TO ls_event-name.CONCATENATE 'TOP_OF_LIST' u_no INTO ls_event-form.APPEND ls_event TO lt_events.ENDIF.CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'EXPORTINGit_fieldcat = lt_fieldcatis_layout = ls_layouti_tabname = u_tabnameit_events = lt_eventsit_sort = lt_sortTABLESt_outtab = ut_table.ENDFORM. " LIST_APPEND*---------------------------------------------------------------------** Form f_list_display*---------------------------------------------------------------------*FORM f_list_display.DATA ls_print TYPE slis_print_alv.ls_print-no_print_selinfos = 'X'. " Display no selection infosls_print-no_print_listinfos = 'X'. " Display no listinfosls_print-reserve_lines = 2. " Lines reserved for end of pageCALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'EXPORTINGi_interface_check = ' 'is_print = ls_print.ENDFORM. " F_LIST_DISPLAY*---------------------------------------------------------------------** FORM top_of_page1 **---------------------------------------------------------------------*FORM top_of_page1. "#EC CALLEDPERFORM top_of_page.ENDFORM.*---------------------------------------------------------------------** FORM top_of_page3 **---------------------------------------------------------------------*FORM top_of_page3. "#EC CALLEDPERFORM top_of_page.ENDFORM.*---------------------------------------------------------------------** FORM top_of_page **---------------------------------------------------------------------*FORM top_of_page.ULINE.WRITE : sy-uname, sy-title(56) CENTERED, sy-datum.ULINE.ENDFORM.*---------------------------------------------------------------------** FORM top_of_list2 **---------------------------------------------------------------------*FORM top_of_list2. "#EC CALLEDWRITE 'TOP OF LIST2'.ENDFORM.alv interactive report with varientreport ztest no standard page heading line-size 650message-id zz_9838 .TYPE-POOLS: slis.*type declaration for values from ekkoTYPES: BEGIN OF i_ekko,ebeln LIKE ekko-ebeln,aedat LIKE ekko-aedat,bukrs LIKE ekko-bukrs,bsart LIKE ekko-bsart,lifnr LIKE ekko-lifnr,END OF i_ekko.DATA: it_ekko TYPE STANDARD TABLE OF i_ekko INITIAL SIZE 0,wa_ekko TYPE i_ekko.*type declaration for values from ekpoTYPES: BEGIN OF i_ekpo,ebeln LIKE ekpo-ebeln,ebelp LIKE ekpo-ebelp,matnr LIKE ekpo-matnr,menge LIKE ekpo-menge,meins LIKE ekpo-meins,netpr LIKE ekpo-netpr,END OF i_ekpo.DATA: it_ekpo TYPE STANDARD TABLE OF i_ekpo INITIAL SIZE 0,wa_ekpo TYPE i_ekpo.*variable for Report IDDATA: v_repid LIKE sy-repid .*declaration for fieldcatalogDATA: i_fieldcat TYPE slis_t_fieldcat_alv,wa_fieldcat TYPE slis_fieldcat_alv.DATA: it_listheader TYPE slis_t_listheader.* declaration for events table where user comand or set PF status will* be definedDATA: v_events TYPE slis_t_event,wa_event TYPE slis_alv_event.* declartion for layoutDATA: alv_layout TYPE slis_layout_alv.* declaration for variant(type of display we want)DATA: i_variant TYPE disvariant,i_variant1 TYPE disvariant,i_save(1) TYPE c.*PARAMETERS : p_var TYPE disvariant-variant.*Title displayed when the alv list is displayedDATA: i_title_ekko TYPE lvc_title VALUE 'FIRST LIST DISPLAYED'.DATA: i_title_ekpo TYPE lvc_title VALUE 'SECONDRY LIST DISPLAYED'.INITIALIZATION.v_repid = sy-repid.PERFORM build_fieldcatlog.PERFORM event_call.PERFORM populate_event.START-OF-SELECTION.PERFORM data_retrieval.PERFORM build_listheader USING it_listheader.PERFORM display_alv_report.*&--------------------------------------------------------------------**& Form BUILD_FIELDCATLOG*&--------------------------------------------------------------------** Fieldcatalog has all the field details from ekko*---------------------------------------------------------------------*FORM build_fieldcatlog.wa_fieldcat-tabname = 'IT_EKKO'.wa_fieldcat-fieldname = 'EBELN'.wa_fieldcat-seltext_m = 'PO NO.'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'IT_EKKO'.wa_fieldcat-fieldname = 'AEDAT'.wa_fieldcat-seltext_m = 'DATE.'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'IT_EKKO'.wa_fieldcat-fieldname = 'BUKRS'.wa_fieldcat-seltext_m = 'COMPANY CODE'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'IT_EKKO'.wa_fieldcat-fieldname = 'BUKRS'.wa_fieldcat-seltext_m = 'DOCMENT TYPE'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'IT_EKKO'.wa_fieldcat-fieldname = 'LIFNR'.wa_fieldcat-no_out = 'X'.wa_fieldcat-seltext_m = 'VENDOR CODE'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.ENDFORM. "BUILD_FIELDCATLOG*&--------------------------------------------------------------------**& Form EVENT_CALL*&--------------------------------------------------------------------** we get all events - TOP OF PAGE or USER COMMAND in table v_events*---------------------------------------------------------------------*FORM event_call.CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type = 0IMPORTINGet_events = v_events.ENDFORM. "EVENT_CALL*&--------------------------------------------------------------------**& Form POPULATE_EVENT*&--------------------------------------------------------------------** Events populated for TOP OF PAGE & USER COMAND*---------------------------------------------------------------------*FORM populate_event.READ TABLE v_events INTO wa_event WITH KEY name = 'TOP_OF_PAGE'.IF sy-subrc EQ 0.wa_event-form = 'TOP_OF_PAGE'.MODIFY v_events FROM wa_event TRANSPORTING form WHERE name =wa_event-form.ENDIF.READ TABLE v_events INTO wa_event WITH KEY name = 'USER_COMMAND'.IF sy-subrc EQ 0.wa_event-form = 'USER_COMMAND'.MODIFY v_events FROM wa_event TRANSPORTING form WHERE name =wa_event-name.ENDIF.ENDFORM. "POPULATE_EVENT*&--------------------------------------------------------------------**& Form data_retrieval*&--------------------------------------------------------------------** retreiving values from the database table ekko*---------------------------------------------------------------------*FORM data_retrieval.SELECT ebeln aedat bukrs bsart lifnr FROM ekko INTO TABLE it_ekko.ENDFORM. "data_retrieval*&--------------------------------------------------------------------**& Form bUild_listheader*&--------------------------------------------------------------------** text*---------------------------------------------------------------------** -->I_LISTHEADEtext*---------------------------------------------------------------------*FORM build_listheader USING i_listheader TYPE slis_t_listheader.DATA hline TYPE slis_listheader.hline-info = 'this is my first alv pgm'.hline-typ = 'H'.ENDFORM. "build_listheader*&--------------------------------------------------------------------**& Form display_alv_report*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*FORM display_alv_report.v_repid = sy-repid.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = v_repidi_callback_user_command = 'USER_COMMAND'i_callback_top_of_page = 'TOP_OF_PAGE'i_grid_title = i_title_ekkoit_fieldcat = i_fieldcat[]i_save = 'A'it_events = v_eventsTABLESt_outtab = it_ekko.ENDFORM. "display_alv_report*&--------------------------------------------------------------------**& Form TOP_OF_PAGE*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*FORM top_of_page.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = it_listheader.ENDFORM. "TOP_OF_PAGE*&--------------------------------------------------------------------**& Form USER_COMMAND*&--------------------------------------------------------------------** text*---------------------------------------------------------------------** -->R_UCOMM text* -->, text* -->RS_SLEFIELDtext*---------------------------------------------------------------------*FORM user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.CASE r_ucomm.WHEN '&IC1'.READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.PERFORM build_fieldcatlog_ekpo.PERFORM event_call_ekpo.PERFORM populate_event_ekpo.PERFORM data_retrieval_ekpo.PERFORM build_listheader_ekpo USING it_listheader.PERFORM display_alv_ekpo.ENDCASE.ENDFORM. "user_command*&--------------------------------------------------------------------**& Form BUILD_FIELDCATLOG_EKPO*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*FORM build_fieldcatlog_ekpo.wa_fieldcat-tabname = 'IT_EKPO'.wa_fieldcat-fieldname = 'EBELN'.wa_fieldcat-seltext_m = 'PO NO.'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'IT_EKPO'.wa_fieldcat-fieldname = 'EBELP'.wa_fieldcat-seltext_m = 'LINE NO'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'I_EKPO'.wa_fieldcat-fieldname = 'MATNR'.wa_fieldcat-seltext_m = 'MATERIAL NO.'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'I_EKPO'.wa_fieldcat-fieldname = 'MENGE'.wa_fieldcat-seltext_m = 'QUANTITY'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'I_EKPO'.wa_fieldcat-fieldname = 'MEINS'.wa_fieldcat-seltext_m = 'UOM'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-tabname = 'I_EKPO'.wa_fieldcat-fieldname = 'NETPR'.wa_fieldcat-seltext_m = 'PRICE'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.ENDFORM. "BUILD_FIELDCATLOG_EKPO*&--------------------------------------------------------------------**& Form event_call_ekpo*&--------------------------------------------------------------------** we get all events - TOP OF PAGE or USER COMMAND in table v_events*---------------------------------------------------------------------*FORM event_call_ekpo.CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type = 0IMPORTINGet_events = v_events.ENDFORM. "event_call_ekpo*&--------------------------------------------------------------------**& Form POPULATE_EVENT*&--------------------------------------------------------------------** Events populated for TOP OF PAGE & USER COMAND*---------------------------------------------------------------------*FORM populate_event_ekpo.READ TABLE v_events INTO wa_event WITH KEY name = 'TOP_OF_PAGE'.IF sy-subrc EQ 0.wa_event-form = 'TOP_OF_PAGE'.MODIFY v_events FROM wa_event TRANSPORTING form WHERE name =wa_event-form.ENDIF.ENDFORM. "POPULATE_EVENT*&--------------------------------------------------------------------**& Form TOP_OF_PAGE*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*FORM f_top_of_page.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = it_listheader.ENDFORM. "TOP_OF_PAGE*&--------------------------------------------------------------------**& Form USER_COMMAND*&--------------------------------------------------------------------** text*---------------------------------------------------------------------** -->R_UCOMM text* -->, text* -->RS_SLEFIELDtext*---------------------------------------------------------------------**retreiving values from the database table ekkoFORM data_retrieval_ekpo.SELECT ebeln ebelp matnr menge meins netpr FROM ekpo INTO TABLE it_ekpo.ENDFORM.FORM build_listheader_ekpo USING i_listheader TYPE slis_t_listheader.DATA: hline1 TYPE slis_listheader.hline1-typ = 'H'.hline1-info = 'CHECKING PGM'.ENDFORM.FORM display_alv_ekpo.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = v_repidi_callback_top_of_page = 'TOP_OF_PAGE'i_grid_title = i_title_ekpoit_fieldcat = i_fieldcat[]i_save = 'A'it_events = v_eventsTABLESt_outtab = it_ekpo.ENDFORM.alv grid display reportreport ztufi091 .*&---------------------------------------------------------------------**& Report ZDEMO_ALVGRID **& **&---------------------------------------------------------------------**& **& Example of a simple ALV Grid Report **& ................................... **& **& The basic requirement for this demo is to display a number of **& fields from the EKKO table. **&---------------------------------------------------------------------**REPORT zdemo_alvgrid .TABLES: ekko.TYPE-POOLS: slis. "ALV Declarations*Data Declaration*----------------TYPES: BEGIN OF t_ekko,ebeln TYPE ekpo-ebeln,ebelp TYPE ekpo-ebelp,statu TYPE ekpo-statu,aedat TYPE ekpo-aedat,matnr TYPE ekpo-matnr,menge TYPE ekpo-menge,meins TYPE ekpo-meins,netpr TYPE ekpo-netpr,peinh TYPE ekpo-peinh,END OF t_ekko.DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,wa_ekko TYPE t_ekko.*ALV data declarationsDATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,gd_tab_group TYPE slis_t_sp_group_alv,gd_layout TYPE slis_layout_alv,gd_repid LIKE sy-repid,gt_events TYPE slis_t_event,gd_prntparams TYPE slis_print_alv.*************************************************************************Start-of-selection.START-OF-SELECTION.PERFORM data_retrieval.PERFORM build_fieldcatalog.PERFORM build_layout.PERFORM build_events.PERFORM build_print_params.PERFORM display_alv_report.*&---------------------------------------------------------------------**& Form BUILD_FIELDCATALOG*&---------------------------------------------------------------------** Build Fieldcatalog for ALV Report*----------------------------------------------------------------------*FORM build_fieldcatalog.* There are a number of ways to create a fieldcat.* For the purpose of this example i will build the fieldcatalog manualy* by populating the internal table fields individually and then* appending the rows. This method can be the most time consuming but can* also allow you more control of the final product.* Beware though, you need to ensure that all fields required are* populated. When using some of functionality available via ALV, such as* total. You may need to provide more information than if you were* simply displaying the result* I.e. Field type may be required in-order for* the 'TOTAL' function to work.fieldcatalog-fieldname = 'EBELN'.fieldcatalog-seltext_m = 'Purchase Order'.fieldcatalog-col_pos = 0.fieldcatalog-outputlen = 10.fieldcatalog-emphasize = 'X'.fieldcatalog-key = 'X'.* fieldcatalog-do_sum = 'X'.* fieldcatalog-no_zero = 'X'.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'EBELP'.fieldcatalog-seltext_m = 'PO Item'.fieldcatalog-col_pos = 1.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'STATU'.fieldcatalog-seltext_m = 'Status'.fieldcatalog-col_pos = 2.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'AEDAT'.fieldcatalog-seltext_m = 'Item change date'.fieldcatalog-col_pos = 3.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MATNR'.fieldcatalog-seltext_m = 'Material Number'.fieldcatalog-col_pos = 4.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MENGE'.fieldcatalog-seltext_m = 'PO quantity'.fieldcatalog-col_pos = 5.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'MEINS'.fieldcatalog-seltext_m = 'Order Unit'.fieldcatalog-col_pos = 6.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'NETPR'.fieldcatalog-seltext_m = 'Net Price'.fieldcatalog-col_pos = 7.fieldcatalog-outputlen = 15.fieldcatalog-datatype = 'CURR'.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.fieldcatalog-fieldname = 'PEINH'.fieldcatalog-seltext_m = 'Price Unit'.fieldcatalog-col_pos = 8.APPEND fieldcatalog TO fieldcatalog.CLEAR fieldcatalog.ENDFORM. " BUILD_FIELDCATALOG*&---------------------------------------------------------------------**& Form BUILD_LAYOUT*&---------------------------------------------------------------------** Build layout for ALV grid report*----------------------------------------------------------------------*FORM build_layout.gd_layout-no_input = 'X'.gd_layout-colwidth_optimize = 'X'.gd_layout-totals_text = 'Totals'(201).* gd_layout-totals_only = 'X'.* gd_layout-f2code = 'DISP'. "Sets fcode for when double* "click(press f2)* gd_layout-zebra = 'X'.* gd_layout-group_change_edit = 'X'.* gd_layout-header_text = 'helllllo'.ENDFORM. " BUILD_LAYOUT*&---------------------------------------------------------------------**& Form DISPLAY_ALV_REPORT*&---------------------------------------------------------------------** Display report using ALV grid*----------------------------------------------------------------------*FORM display_alv_report.gd_repid = sy-repid.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = gd_repidi_callback_top_of_page = 'TOP-OF-PAGE' "see FORMi_callback_user_command = 'USER_COMMAND'* i_grid_title = outtextis_layout = gd_layoutit_fieldcat = fieldcatalog[]* it_special_groups = gd_tabgroupit_events = gt_eventsis_print = gd_prntparamsi_save = 'X'* is_variant = z_templateTABLESt_outtab = it_ekkoEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM. " DISPLAY_ALV_REPORT*&---------------------------------------------------------------------**& Form DATA_RETRIEVAL*&---------------------------------------------------------------------** Retrieve data form EKPO table and populate itab it_ekko*----------------------------------------------------------------------*FORM data_retrieval.SELECT ebeln ebelp statu aedat matnr menge meins netpr peinhUP TO 10 ROWSFROM ekpoINTO TABLE it_ekko.ENDFORM. " DATA_RETRIEVAL*-------------------------------------------------------------------** Form TOP-OF-PAGE **-------------------------------------------------------------------** ALV Report Header **-------------------------------------------------------------------*FORM top-of-page.*ALV Header declarationsDATA: t_header TYPE slis_t_listheader,wa_header TYPE slis_listheader,t_line LIKE wa_header-info,ld_lines TYPE i,ld_linesc(10) TYPE c.* Titlewa_header-typ = 'H'.wa_header-info = 'EKKO Table Report'.APPEND wa_header TO t_header.CLEAR wa_header.* Datewa_header-typ = 'S'.wa_header-key = 'Date: '.CONCATENATE sy-datum+6(2) '.'sy-datum+4(2) '.'sy-datum(4) INTO wa_header-info. "todays dateAPPEND wa_header TO t_header.CLEAR: wa_header.* Total No. of Records SelectedDESCRIBE TABLE it_ekko LINES ld_lines.ld_linesc = ld_lines.CONCATENATE 'Total No. of Records Selected: ' ld_linescINTO t_line SEPARATED BY space.wa_header-typ = 'A'.wa_header-info = t_line.APPEND wa_header TO t_header.CLEAR: wa_header, t_line.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = t_header.* i_logo = 'Z_LOGO'.ENDFORM.*------------------------------------------------------------------** FORM USER_COMMAND **------------------------------------------------------------------** --> R_UCOMM ** --> RS_SELFIELD **------------------------------------------------------------------*FORM user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.* Check function codeCASE r_ucomm.WHEN '&IC1'.* Check field clicked on within ALVgrid reportIF rs_selfield-fieldname = 'EBELN'.* Read data table, using index of row user clicked onREAD TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.* Set parameter ID for transaction screen fieldSET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.* Sxecute transaction ME23N, and skip initial data entry screenCALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.ENDIF.ENDCASE.ENDFORM.*&---------------------------------------------------------------------**& Form BUILD_EVENTS*&---------------------------------------------------------------------** Build events table*----------------------------------------------------------------------*FORM build_events.DATA: ls_event TYPE slis_alv_event.CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type = 0IMPORTINGet_events = gt_events[].READ TABLE gt_events WITH KEY name = slis_ev_end_of_pageINTO ls_event.IF sy-subrc = 0.MOVE 'END_OF_PAGE' TO ls_event-form.APPEND ls_event TO gt_events.ENDIF.READ TABLE gt_events WITH KEY name = slis_ev_end_of_listINTO ls_event.IF sy-subrc = 0.MOVE 'END_OF_LIST' TO ls_event-form.APPEND ls_event TO gt_events.ENDIF.ENDFORM. " BUILD_EVENTS*&---------------------------------------------------------------------**& Form BUILD_PRINT_PARAMS*&---------------------------------------------------------------------** Setup print parameters*----------------------------------------------------------------------*FORM build_print_params.gd_prntparams-reserve_lines = '3'. "Lines reserved for footergd_prntparams-no_coverpage = 'X'.ENDFORM. " BUILD_PRINT_PARAMS*&---------------------------------------------------------------------**& Form END_OF_PAGE*&---------------------------------------------------------------------*FORM end_of_page.DATA: listwidth TYPE i,ld_pagepos(10) TYPE c,ld_page(10) TYPE c.WRITE: sy-uline(50).SKIP.WRITE:/40 'Page:', sy-pagno .ENDFORM.*&---------------------------------------------------------------------**& Form END_OF_LIST*&---------------------------------------------------------------------*FORM end_of_list.DATA: listwidth TYPE i,ld_pagepos(10) TYPE c,ld_page(10) TYPE c.SKIP.WRITE:/40 'Page:', sy-pagno .ENDFORM.icons in alv*&---------------------------------------------------------------------**& Report ZALV_ICON **& **&---------------------------------------------------------------------*report zalv_icon .************************************************************************* Include Programs************************************************************************INCLUDE .************************************************************************* Database Tables************************************************************************TABLES: kna1. "Customer Master************************************************************************* Types************************************************************************TYPE-POOLS: kkblo.************************************************************************* Structures************************************************************************* Structure to hold the Color InformationDATA: BEGIN OF st_color,color(3) TYPE c,END OF st_color.* Structure to hold the Icon InformationDATA: BEGIN OF st_icon,icon(4) TYPE c,END OF st_icon.* ALV Field Catalog StructureDATA: st_fieldcat TYPE slis_fieldcat_alv.* ALV Layout StructureDATA: st_layout TYPE slis_layout_alv.************************************************************************* Internal Tables************************************************************************* Output TableDATA: BEGIN OF tbl_kna1 OCCURS 0.INCLUDE STRUCTURE st_icon. "Icon StructureINCLUDE STRUCTURE kna1. "Customer Master StructureINCLUDE STRUCTURE st_color. "Color StructureDATA: END OF tbl_kna1.* ALV Field Catalog TableDATA: tbl_fieldcat TYPE slis_t_fieldcat_alv.************************************************************************* Variables************************************************************************DATA: fieldname(30) TYPE c,g_repid LIKE sy-repid.************************************************************************* Start of Selection************************************************************************START-OF-SELECTION.g_repid = sy-repid.PERFORM get_data.************************************************************************* End of Selection************************************************************************END-OF-SELECTION.PERFORM do_fancy_stuff.PERFORM get_layout.PERFORM get_fieldcat.PERFORM create_report.*&---------------------------------------------------------------------**& Form CREATE_REPORT*&---------------------------------------------------------------------** Learn to read the subroutine name!*----------------------------------------------------------------------*FORM create_report.CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'EXPORTINGi_interface_check = ' 'i_callback_program = g_repidi_callback_user_command = 'PROCESS_USER_COMMANDS'it_fieldcat = tbl_fieldcati_default = 'X'i_save = ' 'is_layout = st_layoutTABLESt_outtab = tbl_kna1EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM. " CREATE_REPORT*&---------------------------------------------------------------------**& Form GET_FIELDCAT*&---------------------------------------------------------------------** Build the Field Catalog*----------------------------------------------------------------------*FORM get_fieldcat.* Here the field catalog is created. To display more fields simply* 'uncomment' the additional lines and add the field name. Also note* that the field catalog is much more powerful than this. You can* intensify fields, change the colour, assign reference fields, etc.* Look at type slis_fieldcat_alv for more options.PERFORM write_fieldcat USING 'ICON' 'TBL_KNA1' ' ' 'X' 1 '2' 'X'' '.PERFORM write_fieldcat USING 'KUNNR' 'TBL_KNA1' 'KNA1' 'X' 2 ' ' ' '' '.PERFORM write_fieldcat USING 'NAME1' 'TBL_KNA1' 'KNA1' ' ' 3 '10' ' ''X'.PERFORM write_fieldcat USING 'STRAS' 'TBL_KNA1' 'KNA1' ' ' 4 ' ' ' '' '.PERFORM write_fieldcat USING 'TELF1' 'TBL_KNA1' 'KNA1' ' ' 5 ' ' ' '' '.PERFORM write_fieldcat USING 'ORT01' 'TBL_KNA1' 'KNA1' ' ' 6 ' ' ' '' '.PERFORM write_fieldcat USING 'PSTLZ' 'TBL_KNA1' 'KNA1' ' ' 7 ' ' ' '' '.PERFORM write_fieldcat USING 'SORTL' 'TBL_KNA1' 'KNA1' ' ' 8 ' ' ' '' '.PERFORM write_fieldcat USING 'ERNAM' 'TBL_KNA1' 'KNA1' ' ' 9 ' ' ' '' '.PERFORM write_fieldcat USING 'SPRAS' 'TBL_KNA1' 'KNA1' ' ' 10 ' ' ' '' '.* perform write_fieldcat using ' ' 'TBL_KNA1' 'KNA1' ' ' 10 ' '.* perform write_fieldcat using ' ' 'TBL_KNA1' 'KNA1' ' ' 11 ' '.* perform write_fieldcat using ' ' 'TBL_KNA1' 'KNA1' ' ' 12 ' '.ENDFORM. " GET_FIELDCAT*&---------------------------------------------------------------------**& Form WRITE_FIELDCAT*&---------------------------------------------------------------------** Write the Field Catalog data to the Field Catalog Table*----------------------------------------------------------------------** -->name Field name* -->tab Table name* -->st Structure Name* -->key Is this field a Key?* -->pos Position Number* -->length Field Length* -->icon Display as Icon* -->hot Hotspot*----------------------------------------------------------------------*FORM write_fieldcat USING name tab st key pos length icon hot.st_fieldcat-fieldname = name.st_fieldcat-tabname = tab.st_fieldcat-ref_tabname = st.st_fieldcat-key = key.st_fieldcat-col_pos = pos.st_fieldcat-outputlen = length.st_fieldcat-icon = icon.st_fieldcat-hotspot = hot.APPEND st_fieldcat TO tbl_fieldcat.CLEAR st_fieldcat.ENDFORM. " WRITE_FIELDCAT*&---------------------------------------------------------------------**& Form PROCESS_USER_COMMANDS*&---------------------------------------------------------------------** Interactive Reporting Commands*----------------------------------------------------------------------*FORM process_user_commands USING syst-ucomm LIKE syst-ucommselfield TYPE slis_selfield.* This subroutine is called when there is user interaction in the output* In this case if the user double clicks the Customer Number then the* program will call transaction XD03 and display the Customer Master* DataCASE syst-ucomm.WHEN '&IC1'.* get cursor field fieldname.READ TABLE tbl_kna1 INDEX selfield-tabindex.SET PARAMETER ID 'KUN' FIELD tbl_kna1-kunnr.CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.ENDCASE.ENDFORM. " PROCESS_USER_COMMANDS*&---------------------------------------------------------------------**& Form GET_LAYOUT*&---------------------------------------------------------------------** set the layout of the ALV.* add color to the row?*----------------------------------------------------------------------*FORM get_layout.st_layout-info_fieldname = 'COLOR'.st_layout-colwidth_optimize = 'X'.st_layout-get_selinfos = 'X'.ENDFORM. " GET_LAYOUT*&---------------------------------------------------------------------**& Form get_data*&---------------------------------------------------------------------** Get some data to play with*----------------------------------------------------------------------*FORM get_data.SELECT * FROM kna1 INTO CORRESPONDING FIELDS OF TABLE tbl_kna1UP TO 30 ROWS.ENDFORM. " get_data*&---------------------------------------------------------------------**& Form do_fancy_stuff*&---------------------------------------------------------------------** Do some fancy pants stuff for example changing the color of* lines and adding icons*----------------------------------------------------------------------*FORM do_fancy_stuff.* Here we will demonstrate changing the color of ALV Record lines as* well as displaying IconsLOOP AT tbl_kna1.* All records where NAME1 begins with 'M', will be displayed in Bluish* GreenIF tbl_kna1-name1(1) EQ 'M'.tbl_kna1-color = 'C41'. "Bluish GreenMODIFY tbl_kna1 TRANSPORTING color.ENDIF.* All records with no TELF1 will be displayed in White and have a* Warning IconIF tbl_kna1-telf1 IS INITIAL.tbl_kna1-color = 'C00'. "Whitetbl_kna1-icon = '@AH@'. "Warning IconMODIFY tbl_kna1 TRANSPORTING icon color.ENDIF.ENDLOOP.ENDFORM. " do_fancy_stuffGET fields OF ANY TABLEREPORT ytabflds .TABLES: dd02l, dd03l, dd04t.PARAMETERS thetable LIKE dd02l-tabname OBLIGATORY.DATA: BEGIN OF mytable,tabname LIKE dd02l-tabname,as4local LIKE dd02l-as4local,as4vers LIKE dd02l-as4vers,END OF mytable.SELECT SINGLE tabname as4local as4vers INTO mytable FROM dd03lWHERE tabname = thetable.WRITE: / mytable-tabname, 11 mytable-as4local, 13 mytable-as4vers.SELECT * FROM dd03lWHERE tabname = mytable-tabname ANDas4local = mytable-as4local AND as4vers = mytable-as4vers.WRITE: / dd03l-fieldname, 11 dd03l-keyflag, 13 dd03l-rollname,24 dd03l-checktable, 35 dd03l-inttype, 37 dd03l-reftable,48 dd03l-datatype.SELECT SINGLE * FROM dd04tWHERE rollname = dd03l-rollname ANDas4local = mytable-as4local AND as4vers = mytable-as4vers ANDddlanguage = 'E'.WRITE: 53 dd04t-ddtext.ENDSELECT.different select statementsfor all entriesthe for all entries creates a where clause, where all the entries in the driver table are combined with or.IF the NUMBER OFENTRIES IN the driver TABLE IS larger than rsdb/max_blocking_factor, several similar sql statements are executed to limit thelength of the where clause.the pluslarge amount of datamixing processing and reading of datafast internal reprocessing of datafastthe minusdifficult to program/understandmemory could be critical (use free or package size)some steps that might make for all entries more efficient:removing duplicates from the the driver tablesorting the driver tableif possible, convert the data in the driver table to ranges so a between statement is used instead of and or statement:for all entries in i_tabwhere mykey >= i_tab-low andmykey <= i_tab-high.nested selectsthe plus:small amount of datamixing processing and reading of dataeasy to code - and understandthe minus:large amount of datawhen mixed processing isn’t neededperformance killer no. 1select using joinsthe plusvery large amount of datasimilar to nested selects - when the accesses are planned by the programmerin some cases the fastestnot so memory criticalthe minusvery difficult to program/understandmixing processing and reading of data not possibleuse the selection criteriaselect * from sbook.CHECK: sbook-carrid = 'LH' ANDsbook-connid = '0400'.ENDSELECT.SELECT * FROM sbookWHERE carrid = 'LH' ANDconnid = '0400'.ENDSELECT.use the aggregated functionsc4a = '000'.SELECT * FROM t100WHERE sprsl = 'D' ANDarbgb = '00'.CHECK: t100-msgnr > c4a.c4a = t100-msgnr.ENDSELECT.SELECT MAX( msgnr ) FROM t100 INTO c4aWHERE sprsl = 'D' ANDarbgb = '00'.SELECT with viewselect * FROM dd01lWHERE domname LIKE 'CHAR%'AND as4local = 'A'.SELECT SINGLE * FROM dd01tWHERE domname = dd01l-domnameAND as4local = 'A'AND as4vers = dd01l-as4versAND ddlanguage = sy-langu.ENDSELECT.SELECT * FROM dd01vWHERE domname LIKE 'CHAR%'AND ddlanguage = sy-langu.ENDSELECT.SELECT with index supportselect * FROM t100WHERE arbgb = '00'AND msgnr = '999'.ENDSELECT.SELECT * FROM t002.SELECT * FROM t100WHERE sprsl = t002-sprasAND arbgb = '00'AND msgnr = '999'.ENDSELECT.ENDSELECT.SELECT … INTO TABLErefresh x006.SELECT * FROM t006 INTO x006.APPEND x006.ENDSELECTSELECT * FROM t006 INTO TABLE x006.SELECT with selection listselect * FROM dd01lWHERE domname LIKE 'CHAR%'AND as4local = 'A'.ENDSELECTSELECT domname FROM dd01lINTO dd01l-domnameWHERE domname LIKE 'CHAR%'AND as4local = 'A'.ENDSELECTKEY access TO multiple LINESLOOP AT tab.CHECK tab-k = kval." ...ENDLOOP.LOOP AT tab WHERE k = kval." ...ENDLOOP.copying internal tablesrefresh tab_dest.LOOP AT tab_src INTO tab_dest.APPEND tab_dest.ENDLOOP.tab_dest[] = tab_src[].modifying a set of linesloop at tab.IF tab-flag IS INITIAL.tab-flag = 'X'.ENDIF.MODIFY tab.ENDLOOP.tab-flag = 'X'.MODIFY tab TRANSPORTING flagWHERE flag IS INITIAL.deleting a sequence of linesdo 101 times.DELETE tab_dest INDEX 450.ENDDO.DELETE tab_dest FROM 450 TO 550.linear search vs. binaryread table tab with key k = 'X'.READ TABLE tab WITH KEY k = 'X' BINARY SEARCH.comparison of internal tablesdescribe table: tab1 lines l1,tab2 lines l2.IF l1 <> l2.tab_different = 'X'.ELSE.tab_different = space.LOOP AT tab1.READ TABLE tab2 INDEX sy-tabix.IF tab1 <> tab2.tab_different = 'X'. EXIT.ENDIF.ENDLOOP.ENDIF.IF tab_different = space." ...ENDIF.IF tab1[] = tab2[]." ...ENDIF.MODIFY selected COMPONENTSLOOP AT tab.tab-date = sy-datum.MODIFY tab.ENDLOOP.wa-date = sy-datum.LOOP AT tab.MODIFY tab FROM wa TRANSPORTING date.ENDLOOP.appending two internal tablesloop at tab_src.APPEND tab_src TO tab_dest.ENDLOOPAPPEND LINES OF tab_src TO tab_dest.deleting a set of linesloop at tab_dest where k = kval.DELETE tab_dest.ENDLOOPDELETE tab_dest WHERE k = kval.tools available in sap to pin-point a performance problemthe runtime analysis (se30)sql trace (st05)tips and tricks toolthe performance databaseoptimizing the load of the databaseusing table bufferingusing buffered tables improves the performance considerably. note that in some cases a stament can not be used with a buffered table, so when using these staments the buffer will be bypassed. these staments are:select distinctorder by / group by / having clauseany where clasuse that contains a subquery or is null expressionjoin sa select... for updateif you wnat to explicitly bypass the bufer, use the bypass buffer addition to the select clause.use the abap sort clause instead of order bythe order by clause is executed on the database server while the abap sort statement is executed on the application server. the datbase server will usually be the bottleneck, so sometimes it is better to move thje sort from the datsbase server to theapplication server.IF you are NOT sorting BY the PRIMARY KEY ( E.g. using the order by primary key statement) but are sorting by another key, it could be better to use the abap sort stament to sort the data in an internal table. note however that for very large resultsets it might not be a feasible solution and you would want to let the datbase server sort it.avoid ther select distinct statementas with the order by clause it could be better to avoid using select distinct, IF some OF the FIELDS are NOT PART OF an INDEX.instead use abap sort + delete adjacent duplicates on an internal table, to delete duplciate rows.left outerjoinreport ztest.DATA: customer TYPE scustom,booking TYPE sbook.SELECT scustom~namescustom~postcodescustom~citysbook~fldatesbook~carridsbook~connidsbook~bookidINTO (customer-name, customer-postcode, customer-city,booking-fldate, booking-carrid, booking-connid,booking-bookid)FROM scustom LEFT OUTER JOIN sbookON scustom~id = sbook~customid ANDsbook~fldate = '20081015'ORDER BY scustom~name sbook~fldate.WRITE: / customer-name, customer-postcode, customer-city,booking-fldate, booking-carrid, booking-connid,booking-bookid.ENDSELECT.give name of function module get details of thatprogram yclip3jnc.TYPE-POOLS : slis.PARAMETERS: p_func LIKE fupararef-funcname. " Name of Function ModuleDATA : BEGIN OF i_tab OCCURS 0,funcname LIKE fupararef-funcname, " Name of Function Moduleparamtype LIKE fupararef-paramtype, " Parameter typepposition LIKE fupararef-pposition, " Internal Table, Current Line Indexoptional LIKE fupararef-optional, " Optional parametersparameter LIKE fupararef-parameter, " Parameter namedefaultval LIKE fupararef-defaultval, " Default value for import parameterstructure LIKE fupararef-structure, " Associated Type of an Interface Parameterstext LIKE funct-stext, " Short textEND OF i_tab.DATA: BEGIN OF mtab_new_prog OCCURS 0,line(172) TYPE c,END OF mtab_new_prog.DATA: funcdesc LIKE tftit-stext, " Short text for function modulemylen TYPE i,myrc TYPE i.CONSTANTS: myhats(40) VALUE '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'.TRANSLATE p_func TO UPPER CASE.SELECT SINGLEtftit~stext " Short text for function moduleINTO funcdescFROM tftitWHERE tftit~funcname = p_funcAND tftit~spras = sy-langu.TRANSLATE p_func TO LOWER CASE.CONCATENATE `CALL FUNCTION ` p_func ` " ` funcdesc INTO mtab_new_prog-line.APPEND mtab_new_prog.TRANSLATE p_func TO UPPER CASE.SELECTfupararef~funcname " Name of Function Modulefupararef~paramtype " Parameter typefupararef~pposition " Internal Table, Current Line Indexfupararef~optional " Optional parametersfupararef~parameter " Parameter namefupararef~defaultval " Default value for import parameterfupararef~structure " Associated Type of an Interface Parameterfunct~stext " Short textINTO TABLE i_tabFROM fupararefINNER JOIN functON fupararef~funcname = funct~funcnameAND fupararef~parameter = funct~parameterAND funct~spras = sy-languWHERE fupararef~funcname = p_funcAND fupararef~r3state = 'A'ORDER BY fupararef~paramtypefupararef~pposition.LOOP AT i_tab.AT NEW paramtype.CASE i_tab-paramtype.WHEN 'C'.MOVE ' CHANGING' TO mtab_new_prog-line.WHEN 'E'.MOVE ' IMPORTING' TO mtab_new_prog-line.WHEN 'I'.MOVE ' EXPORTING' TO mtab_new_prog-line.WHEN 'T'.MOVE ' TABLES' TO mtab_new_prog-line.WHEN 'X'.MOVE ' EXCEPTIONS' TO mtab_new_prog-line.ENDCASE.APPEND mtab_new_prog.ENDAT.IF i_tab-optional = 'X'.mtab_new_prog-line = `*^^^`.ELSE.mtab_new_prog-line = `^^^^`.ENDIF.IF i_tab-paramtype = 'X'.MOVE i_tab-pposition TO i_tab-defaultval.CONDENSE i_tab-defaultval.ELSE.TRANSLATE i_tab-parameter TO LOWER CASE.ENDIF.CONCATENATE mtab_new_prog-line i_tab-parameter '^=^' INTO mtab_new_prog-line.IF i_tab-defaultval IS NOT INITIAL.CONCATENATE mtab_new_prog-line i_tab-defaultval INTO mtab_new_prog-line.ENDIF.mylen = strlen( mtab_new_prog-line ).IF mylen < 31.COMPUTE mylen = 31 - mylen.ELSE.MOVE 1 TO mylen.ENDIF.TRANSLATE i_tab-structure TO LOWER CASE.CONCATENATE mtab_new_prog-line myhats+0(mylen) ` " ` i_tab-structure INTO mtab_new_prog-line.mylen = strlen( mtab_new_prog-line ).IF mylen < 47.COMPUTE mylen = 47 - mylen.ELSE.MOVE 1 TO mylen.ENDIF.CONCATENATE mtab_new_prog-line myhats+0(mylen) ` ` i_tab-stext INTO mtab_new_prog-line.APPEND mtab_new_prog.ENDLOOP. " LOOP AT I_TABCONCATENATE ` . " ` p_func INTO mtab_new_prog-line.APPEND mtab_new_prog.LOOP AT mtab_new_prog.TRANSLATE mtab_new_prog-line USING `^ `.MODIFY mtab_new_prog.IF mtab_new_prog = space.SKIP 1.ENDIF.WRITE: / mtab_new_prog.ENDLOOP. " LOOP AT MTAB_NEW_PROG* Write the beautiful program code to ClipBoard from internal tableCALL METHOD cl_gui_frontend_services=>clipboard_exportIMPORTINGdata = mtab_new_prog[]CHANGINGrc = myrc.abap clip boardreport yclipjnc. .TABLES:e071 , " Change & Transport System: Object Entries of Requests/Taskstadir , " Directory of Repository Objectstrdir , " Generated Table for View TRDIRdd02t . " R/3 DD: SAP table textsDATA: BEGIN OF mtab_old_prog OCCURS 0,line(172) TYPE c,END OF mtab_old_prog.DATA: BEGIN OF mtab_new_prog OCCURS 0,line(172) TYPE c,END OF mtab_new_prog.DATA: BEGIN OF mtab_jnc_prog OCCURS 0,line(172) TYPE c,END OF mtab_jnc_prog.DATA:* Hold an entire statement, even if it spans multiple linesBEGIN OF mtab_long_line OCCURS 0,start TYPE i,end TYPE i,code(9999) TYPE c, "For type "C", a maximum length specification of 65535 is allowed.END OF mtab_long_line.DATA: BEGIN OF mtab_tabname OCCURS 0,tabname LIKE dd02t-tabname, " Table nametabdesc LIKE dd02t-ddtext, " Short text describing ABAP/4*DictioEND OF mtab_tabname.* Queue to hold list of internal table names for commenting the ENDLOOP* lineDATA: BEGIN OF mtab_itab_names OCCURS 0,tabname(40) TYPE c,END OF mtab_itab_names.* Queue to hold list of table names for commenting the ENDSELECT lineDATA: BEGIN OF mtab_tab_names OCCURS 0,tabname(40) TYPE c,END OF mtab_tab_names.DATA: BEGIN OF mtab_form_names OCCURS 0,tabname(40) TYPE c,END OF mtab_form_names.DATA: mylength TYPE i,myrc TYPE i.CONSTANTS: myhats(40) VALUE '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'.* START of EXECUTION* Read the program code in ClipBoard into an internal tableCALL METHOD cl_gui_frontend_services=>clipboard_importIMPORTINGdata = mtab_old_prog[]length = mylength.IF sy-subrc NE 0.WRITE: / `Unable to read ClipBoard`.WRITE: / `Exiting program`.ENDIF.PERFORM create_condensed_table TABLES mtab_old_prog mtab_long_line.PERFORM format_program.CALL FUNCTION `PRETTY_PRINTER`EXPORTINGinctoo = spaceTABLESntext = mtab_jnc_progotext = mtab_new_progEXCEPTIONSenqueue_table_full = 1include_enqueued = 2include_readerror = 3include_writeerror = 4OTHERS = 5.* Write the beautiful program code to ClipBoard from internal tableCALL METHOD cl_gui_frontend_services=>clipboard_exportIMPORTINGdata = mtab_jnc_prog[]CHANGINGrc = myrc.LOOP AT mtab_jnc_prog.IF mtab_jnc_prog = space.SKIP 1.ENDIF.WRITE: / mtab_jnc_prog.ENDLOOP. " LOOP AT MTAB_JNC_PROG*---------------------------------------------------------------------** FORM CREATE_CONDENSED_TABLE **---------------------------------------------------------------------** Create a table that has all statements condensed onto 1 line **---------------------------------------------------------------------*FORM create_condensed_tableTABLES ftab_old_prog STRUCTURE mtab_old_progftab_long_line STRUCTURE mtab_long_line.DATA:* Structure to hold program code/commentBEGIN OF fstr_line,code(172) TYPE c, " Program Codecomment(172) TYPE c, " Inline commentsEND OF fstr_line.LOOP AT ftab_old_prog.IF ftab_long_line-start = 0.ftab_long_line-start = ftab_long_line-end + 1.CLEAR ftab_long_line-end.ENDIF.* Strip off any inline comments so they do not get in the way* If comments are not separated, then words in the comments could* look like keywords, and cause problemsSPLIT ftab_old_prog-line AT `"` INTO fstr_line-code fstr_line-comment.* Align all statements to be left justifiedSHIFT fstr_line-code LEFT DELETING LEADING space.* Put all lines that make up a single statement into one field* This will make it easier to isolate key words. For example, if you* want to process a TABLES statement, but exclude the TABLES part of a* function call, or a subroutine call.CONCATENATE ftab_long_line-code fstr_line-codeINTO ftab_long_line-code SEPARATED BY space.IF fstr_line-code CA `.` OR " Period means end of statementfstr_line-code(1) = `*` OR " Comment Linefstr_line-code CO space. " Blank Line* Keep track of the table index that the statement ends onftab_long_line-end = sy-tabix.* Remove delimiter from concatenation of fieldsSHIFT ftab_long_line-code LEFT BY 1 PLACES.APPEND ftab_long_line.CLEAR: ftab_long_line-code, ftab_long_line-start.* Don`t clear out fstr_long_line-end yet. It is used to calc* fstr_long_line-start.ENDIF.ENDLOOP. " LOOP AT FTAB_OLD_PROGENDFORM. " FORM CREATE_CONDENSED_TABLE*---------------------------------------------------------------------** FORM FORMAT_PROGRAM **---------------------------------------------------------------------*FORM format_program.DATA: lstr_old_prog LIKE LINE OF mtab_old_prog.LOOP AT mtab_long_line.TRANSLATE mtab_long_line-code TO UPPER CASE.IF mtab_long_line-code(1) EQ `*`. " Do not modify Comment LinesLOOP AT mtab_old_prog FROM mtab_long_line-startTO mtab_long_line-end.mtab_new_prog-line = mtab_old_prog-line.APPEND mtab_new_prog.ENDLOOP. " LOOP AT MTAB_OLD_PROGELSEIF mtab_long_line-code(6) EQ `TABLES`.* Reformat any TABLES statements. Will only reformat when TABLES* is at the start of the statement. Will not try to get table* descriptions for CALL FUNCTIONS or FORM/PERFORMs* Get the table names from mstr_long_line.PERFORM get_table_names_from_statement TABLES mtab_tabnameUSING mtab_long_line-code.* Find the descriptions for each tablePERFORM get_table_descriptions TABLES mtab_tabname.* create the new statementPERFORM build_new_tables_statement USING mtab_long_line.ELSE. " All other modifications to the code handled hereLOOP AT mtab_old_prog FROM mtab_long_line-startTO mtab_long_line-end.* Remove extra spaces from line for comparisonslstr_old_prog-line = mtab_old_prog-line.CONDENSE lstr_old_prog-line.TRANSLATE lstr_old_prog-line TO UPPER CASE.IF lstr_old_prog-line CS `"`. " Commentsmtab_new_prog-line = mtab_old_prog-line.ELSE.IF lstr_old_prog-line CS ` LIKE ` ORlstr_old_prog-line CS ` TYPE ` ORlstr_old_prog-line CS ` FOR ` ORlstr_old_prog-line CS `~`. "jnc OpenSQL table~columnPERFORM get_for_like_comment USING mtab_old_progCHANGING mtab_new_prog.ELSEIF lstr_old_prog-line(8) = 'LOOP AT'.* save table name into a queuePERFORM enqueue_itab_name USING mtab_long_line-code.mtab_new_prog-line = mtab_old_prog-line.ELSEIF lstr_old_prog-line(7) = `ENDLOOP`.* get name off of queue and add it as a comment to the ENDLOOP linePERFORM add_comment_to_endloop USING mtab_old_prog-lineCHANGING mtab_new_prog-line.ELSEIF lstr_old_prog-line(7) EQ 'SELECT' ANDlstr_old_prog-line(13) NE 'SELECT SINGLE'.* save table name into a queuePERFORM enqueue_tab_name USING mtab_old_prog-line.mtab_new_prog-line = mtab_old_prog-line.ELSEIF lstr_old_prog-line(9) = `ENDSELECT`.* get name off of queue and add it as a comment to the ENDSELECTPERFORM add_comment_to_select USING mtab_old_prog-lineCHANGING mtab_new_prog-line.ELSEIF lstr_old_prog-line(5) = 'FORM'.* save form name into a queuePERFORM enqueue_form_name USING mtab_old_prog-line.mtab_new_prog-line = mtab_old_prog-line.ELSEIF lstr_old_prog-line(7) = `ENDFORM`.* get name off of queue and add it as a comment to the ENDFORMPERFORM add_comment_to_endform USING mtab_old_prog-lineCHANGING mtab_new_prog-line.ELSE. " Any other linesmtab_new_prog-line = mtab_old_prog-line.ENDIF.ENDIF.APPEND mtab_new_prog.ENDLOOP. " LOOP AT MTAB_OLD_PROGENDIF.ENDLOOP. " LOOP AT MTAB_LONG_LINEENDFORM. " FORM FORMAT_PROGRAM*---------------------------------------------------------------------** FORM GET_TABLE_NAMES_FROM_STATEMENT **---------------------------------------------------------------------*FORM get_table_names_from_statement TABLES ftab_tabnameSTRUCTURE mtab_tabnameUSING fc_statement.CLEAR ftab_tabname.REFRESH ftab_tabname.REPLACE `TABLES` WITH space INTO fc_statement.TRANSLATE fc_statement USING `. `. " Replace periodsTRANSLATE fc_statement USING `, `. " Replace commasTRANSLATE fc_statement USING `: `. " Replace colonsCONDENSE fc_statement. " Remove all extra spacesSPLIT fc_statement AT space INTO TABLE ftab_tabname.ENDFORM. " FORM GET_TABLE_NAMES_FROM_STATEMENT*---------------------------------------------------------------------** FORM GET_TABLE_DESCRIPTIONS **---------------------------------------------------------------------*FORM get_table_descriptions TABLES ftab_tabname STRUCTURE mtab_tabname.LOOP AT ftab_tabname.SELECT SINGLE * FROM dd02tWHERE tabname = ftab_tabname-tabnameAND ddlanguage = sy-langu.IF sy-subrc = 0.ftab_tabname-tabdesc = dd02t-ddtext.MODIFY ftab_tabname.ENDIF.ENDLOOP. " LOOP AT FTAB_TABNAMEENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM BUILD_NEW_TABLES_STATEMENT **---------------------------------------------------------------------*FORM build_new_tables_statement USING fstr_long_line LIKEmtab_long_line.DATA: lc_sep(1) TYPE c,li_rows TYPE i,wordlen TYPE i.DESCRIBE TABLE mtab_tabname LINES li_rows.mtab_new_prog-line = `TABLES:`.APPEND mtab_new_prog.LOOP AT mtab_tabname.IF sy-tabix = li_rows.lc_sep = `.`.ELSE.lc_sep = `,`.ENDIF.wordlen = strlen( mtab_tabname-tabname ).IF wordlen < 12.wordlen = 12 - wordlen.ELSE.wordlen = 1.ENDIF.CONCATENATE `^^` mtab_tabname-tabname lc_sep myhats+0(wordlen) ` " ` mtab_tabname-tabdescINTO mtab_new_prog.TRANSLATE mtab_new_prog USING `^ `.APPEND mtab_new_prog.ENDLOOP. " LOOP AT MTAB_TABNAMEENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM GET_FOR/LIKE_COMMENT **---------------------------------------------------------------------*FORM get_for_like_comment USING VALUE(f_old_prog) LIKE mtab_old_progCHANGING f_new_prog LIKE mtab_new_prog.DATA:lc_dummy(1) TYPE c,lc_tabname(40) TYPE c,wordlen TYPE i,ltab_nametab LIKE dntab OCCURS 0 WITH HEADER LINE,lstr_old_prog LIKE LINE OF mtab_old_prog,BEGIN OF lstr_field,tabname LIKE dd02t-tabname, " Table namefldname LIKE dd02t-tabname, " Table nameEND OF lstr_field.lstr_old_prog-line = f_old_prog. " SAVE inputTRANSLATE f_old_prog TO UPPER CASE.CONDENSE f_old_prog.IF f_old_prog-line CA `"` OR " Line already commentedf_old_prog-line(1) = `*`.f_new_prog = f_old_prog.RETURN.ELSEIF f_old_prog CS ` LIKE `.SPLIT f_old_prog AT ` LIKE ` INTO lc_dummy lc_tabname.ELSEIF f_old_prog CS ` TYPE `.SPLIT f_old_prog AT ` TYPE ` INTO lc_dummy lc_tabname.ELSEIF f_old_prog CS ` FOR `.SPLIT f_old_prog AT ` FOR ` INTO lc_dummy lc_tabname.ELSEIF f_old_prog CS `~`.MOVE f_old_prog TO lc_tabname.CONDENSE lc_tabname.SPLIT lc_tabname AT `~` INTO lstr_field-tabname lstr_field-fldname.ELSE.f_new_prog = lstr_old_prog-line.RETURN.ENDIF.* If there is anything following the table-field in a LIKE or FOR clause* it will be removed so that only the table-field remainsIF NOT f_old_prog CS `~`.CONDENSE lc_tabname.TRANSLATE lc_tabname USING `. `. " Remove periodsTRANSLATE lc_tabname USING `, `. " Remove commasCONDENSE lc_tabname. " Remove extra white spaceSPLIT lc_tabname AT `-` INTO lstr_field-tabname lstr_field-fldname.* The system variables are actually defined in DDIC structure SYSTIF lstr_field-tabname = `SY`.lstr_field-tabname = `SYST`.ENDIF.ENDIF.TRANSLATE lstr_field-tabname TO UPPER CASE.TRANSLATE lstr_field-fldname TO UPPER CASE.CALL FUNCTION 'NAMETAB_GET'EXPORTINGtabname = lstr_field-tabnameTABLESnametab = ltab_nametabEXCEPTIONSinternal_error = 1table_has_no_fields = 2table_not_activ = 3no_texts_found = 4OTHERS = 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.READ TABLE ltab_nametabWITH KEY tabname = lstr_field-tabnamefieldname = lstr_field-fldname.IF sy-subrc = 0.wordlen = strlen( lstr_old_prog-line ).IF wordlen < 45.wordlen = 45 - wordlen.ELSE.wordlen = 1.ENDIF.CONCATENATE lstr_old_prog-line myhats+0(wordlen) ` " ` ltab_nametab-fieldtextINTO f_new_prog.TRANSLATE mtab_new_prog USING `^ `.ELSE.f_new_prog = lstr_old_prog-line.ENDIF.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ENQUEUE_ITAB_NAME **---------------------------------------------------------------------*FORM enqueue_itab_name USING VALUE(f_line) LIKE mtab_long_line-code.DATA:lc_dummy(1) TYPE c,lc_itab(40) TYPE c.TRANSLATE f_line TO UPPER CASE.SPLIT f_line AT `LOOP AT ` INTO lc_dummy lc_itab.SPLIT lc_itab AT space INTO lc_itab lc_dummy.TRANSLATE lc_itab USING `. `.CONDENSE lc_itab.mtab_itab_names = lc_itab.* Always have the most recent LOOP AT table as the first entry in the* queueINSERT mtab_itab_names INDEX 1.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ADD_COMMENT_TO_ENDLOOP **---------------------------------------------------------------------*FORM add_comment_to_endloop USING fstr_long_line LIKE mtab_old_prog-lineCHANGING f_prog_line LIKE mtab_new_prog-line.IF mtab_old_prog-line NA `"`. " No comments* Get the internal table from the queueREAD TABLE mtab_itab_names INDEX 1.CONCATENATE mtab_old_prog-line ` "` `LOOP AT` mtab_itab_names-tabnameINTO f_prog_line SEPARATED BY space.* Dequeue the itab nameDELETE mtab_itab_names INDEX 1.ELSE.f_prog_line = mtab_old_prog-line.ENDIF.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ENQUEUE_TAB_NAME **---------------------------------------------------------------------*FORM enqueue_tab_name USING f_line LIKE mtab_old_prog-line.DATA:lc_dummy(1) TYPE c,lc_tab(40) TYPE c.TRANSLATE f_line TO UPPER CASE.SPLIT f_line AT ` FROM ` INTO lc_dummy lc_tab.CONDENSE lc_tab. " Remove leading/trailing extra spacesSPLIT lc_tab AT space INTO lc_tab lc_dummy.TRANSLATE lc_tab USING `. `.CONDENSE lc_tab.mtab_tab_names = lc_tab.* Always have the most recent LOOP AT table as the first entry in the* queueINSERT mtab_tab_names INDEX 1.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ADD_COMMENT_TO_SELECT **---------------------------------------------------------------------*FORM add_comment_to_select USING fstr_long_line LIKE mtab_old_prog-lineCHANGING f_prog_line.IF mtab_old_prog-line NA `"`. " No comments* Get the table from the queueREAD TABLE mtab_tab_names INDEX 1.CONCATENATE mtab_old_prog-line ` "` `SELECT FROM`mtab_tab_names-tabnameINTO f_prog_line SEPARATED BYspace.* Dequeue the tab nameDELETE mtab_tab_names INDEX 1.ELSE.f_prog_line = mtab_old_prog-line.ENDIF.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ADD_COMMENT_TO_ENDFORM **---------------------------------------------------------------------*FORM add_comment_to_endform USING fstr_long_line LIKEmtab_old_prog-lineCHANGING f_prog_line.IF mtab_old_prog-line NA `"`. " No comments* Get the table from the queueREAD TABLE mtab_form_names INDEX 1.CONCATENATE mtab_old_prog-line ` "` `FORM` mtab_form_names-tabnameINTO f_prog_line SEPARATED BY space.* Dequeue the form nameDELETE mtab_form_names INDEX 1.ELSE.f_prog_line = mtab_old_prog-line.ENDIF.ENDFORM. " FORM GET_TABLE_DESCRIPTIONS*---------------------------------------------------------------------** FORM ENQUEUE_FORM_NAME **---------------------------------------------------------------------*FORM enqueue_form_name USING f_line.DATA:lc_dummy(1) TYPE c,lc_tab(40) TYPE c.TRANSLATE f_line TO UPPER CASE.SPLIT f_line AT `FORM ` INTO lc_dummylc_tab.CONDENSE lc_tab. " Remove leading/trailing extra spacesSPLIT lc_tab AT space INTO lc_tab lc_dummy.TRANSLATE lc_tab USING `. `.CONDENSE lc_tab.mtab_form_names = lc_tab.* Always have the most recent LOOP AT table as the first entry in the* queueINSERT mtab_form_names INDEX 1.ENDFORM. " FORM ENQUEUE_FORM_NAMEsimple tree in abap report program 4report zrjntrial_treeline-count 65line-size 80no standard pageheading.DATA: BEGIN OF items OCCURS 100,id(10),parent_id(10),text(20),symbol,END OF items,tabix_stack LIKE sy-tabix OCCURS 10 WITH HEADER LINE,items_show LIKE items OCCURS 100 WITH HEADER LINE.INCLUDE .* append sample items (mixed order)PERFORM append_item USING:'1' '' 'Food','2' '' 'Drinks','12' '9' 'Jack Daniels','17' '11' 'Bosch','3' '' 'Tools','4' '1' 'Meat','16' '11' 'Metabo','5' '1' 'Chocolate','6' '2' 'Alcoholic','8' '4' 'Pork','10' '5' 'Milka','11' '3' 'Drills','13' '9' 'Jim Beam','7' '4' 'Beef','14' '2' 'Non-alcoholic','35' '31' 'Teran','9' '6' 'Whiskey','15' '14' 'Coca-cola','18' '6' 'Wine','28' '18' 'Croatia','33' '28' 'Slavonia','34' '28' 'Istria','29' '18' 'Hungary','30' '29' 'Tokaj','19' '33' 'Enjingi','20' '33' 'Zdjelarevic','22' '19' 'Riesling','23' '19' 'Chardonnay','24' '20' 'Riesling','32' '31' 'Malvazija','25' '20' 'Merlot','31' '34' 'Tomasevic'.* show initial list (items with level 0 - parentless items)LOOP AT items WHERE parent_id = ''.MOVE-CORRESPONDING items TO items_show.items_show-symbol = '+'.APPEND items_show.ENDLOOP.PERFORM print_tree TABLES items_show.* at line-selection - when the node is opened/closed or item double-clkAT LINE-SELECTION.READ TABLE items WITH KEY parent_id = items_show-id. "see 'hide'IF sy-subrc = 0. "item has children - expand or collapsesy-lsind = 0.PERFORM expand_collapse USING items_show-id.PERFORM print_tree TABLES items_show.ELSE. "item has NO children - perform some actionREAD TABLE items WITH KEY id = items_show-id.WRITE: 'Action performed on item "' NO-GAP, items-text NO-GAP,'", id.', items-id.ENDIF.* form print_treeFORM print_tree TABLES items STRUCTURE items.DATA: v_tabix LIKE sy-tabix,start_tabix LIKE sy-tabix,v_level LIKE sy-tfill,v_offset TYPE i,v_id LIKE items-id,v_parent_id LIKE items-parent_id,v_parent_id_for_vline LIKE items-parent_id,v_prev_level TYPE i,v_items_count LIKE sy-tfill,v_vlines_string(200).CHECK NOT items[] IS INITIAL.SORT items BY parent_id id.READ TABLE items INDEX 1.v_parent_id = items-parent_id.start_tabix = 1.REFRESH tabix_stack.DO.LOOP AT items FROM start_tabix.v_tabix = start_tabix = sy-tabix."remember current indexv_id = items-id.v_parent_id_for_vline = items-parent_id.* decrease level and exit loop if parent not the same as previousIF items-parent_id NE v_parent_id.PERFORM read_from_stack CHANGING start_tabix. "level = NoOfRecsREAD TABLE items INDEX start_tabix.v_parent_id = items-parent_id.ADD 1 TO start_tabix. "next loop starts from parent index + 1* clear vlineIF v_level > 1.v_offset = 2 + ( v_level - 2 ) * 3.IF v_level = 1. v_offset = 1. ENDIF.v_vlines_string+v_offset = ' '.ENDIF.EXIT.ENDIF.v_parent_id = items-parent_id.* write itemFORMAT COLOR OFF.DESCRIBE TABLE tabix_stack LINES v_level."level is no of*StackRecsWRITE: / v_vlines_string.v_offset = v_level * 3.IF v_level NE 0.IF v_prev_level < v_level.WRITE: AT v_offset '|', / ''.WRITE: / v_vlines_string.ENDIF.v_offset = v_level * 3.WRITE AT v_offset '|--'.ENDIF.v_offset = v_offset + 3.CASE items-symbol.WHEN '+'.WRITE AT v_offset sym_plus_folder AS SYMBOLCOLOR 4 INTENSIFIED HOTSPOT.WHEN '-'.WRITE AT v_offset sym_minus_folder AS SYMBOLCOLOR 4 INTENSIFIED HOTSPOT.WHEN OTHERS. FORMAT COLOR 5.ENDCASE.WRITE: items-text.v_prev_level = v_level.HIDE: items-id.ADD 1 TO v_items_count.READ TABLE items WITH KEY parent_id = items-id.* increase level and exit loop if item has childrenIF sy-subrc = 0.start_tabix = sy-tabix.APPEND v_tabix TO tabix_stack. "level is no of recs in stackv_parent_id = items-parent_id.* set vlinev_tabix = v_tabix + 1.READ TABLE items INDEX v_tabix.v_offset = 2 + ( v_level - 1 ) * 3.IF v_level > 0.IF items-parent_id = v_parent_id_for_vline AND sy-subrc = 0.v_vlines_string+v_offset = '|'.ELSE.v_vlines_string+v_offset = ' '.ENDIF.ENDIF.EXIT.ENDIF.* at last - decrease levelAT LAST.* clear vlineIF v_level > 1.v_offset = 2 + ( v_level - 2 ) * 3.IF v_level = 1. v_offset = 1. ENDIF.v_vlines_string+v_offset = ' '.ENDIF." next loop starts from parent index, not parent index + 1" because of different parents level will decrease anywayPERFORM read_from_stack CHANGING start_tabix.APPEND start_tabix TO tabix_stack. "must return index to stackENDAT.ENDLOOP.DESCRIBE TABLE items.IF start_tabix > sy-tfill OR v_items_count >= sy-tfill.EXIT.ENDIF.ENDDO.ENDFORM.* form expand_collapseFORM expand_collapse USING VALUE(v_id).DATA: v_no_more_orphans,items_temp LIKE items OCCURS 100 WITH HEADER LINE.DELETE items_show WHERE parent_id = v_id. "try to collapseIF sy-subrc = 0. "succesfull first collapseDO. "cascade collapse - delete 'orphans' that are leftREFRESH items_temp.MOVE items_show[] TO items_temp[].SORT items_temp BY id.v_no_more_orphans = 'X'.LOOP AT items_show WHERE parent_id NE ''.READ TABLE items_temp WITH KEY id = items_show-parent_idBINARY SEARCH TRANSPORTING NO FIELDS.IF sy-subrc NE 0. "no parent - it's an orphanCLEAR v_no_more_orphans.DELETE items_show.ENDIF.ENDLOOP.IF v_no_more_orphans = 'X'. EXIT. ENDIF.ENDDO.items_show-symbol = '+'.MODIFY items_show TRANSPORTING symbol WHERE id = v_id.ELSE. "unsuccessfull collapse - expanditems_show-symbol = '-'.MODIFY items_show TRANSPORTING symbol WHERE id = v_id.LOOP AT items WHERE parent_id = v_id. "show childrenAPPEND items TO items_show.ENDLOOP.LOOP AT items_show WHERE parent_id = v_id. "check grandchildrenREAD TABLE items WITH KEY parent_id = items_show-id.IF sy-subrc = 0.items_show-symbol = '+'.ELSE.items_show-symbol = ''.ENDIF.MODIFY items_show.ENDLOOP.ENDIF.ENDFORM.* form append_itemFORM append_item USING VALUE(id) VALUE(parent_id) VALUE(text).items-id = id.items-parent_id = parent_id.items-text = text.APPEND items.ENDFORM.* form read_from_stackFORM read_from_stack CHANGING tabix LIKE sy-tabix.DESCRIBE TABLE tabix_stack.CHECK sy-tfill NE 0.READ TABLE tabix_stack INDEX sy-tfill.tabix = tabix_stack.DELETE tabix_stack INDEX sy-tfill.ENDFORM.tab strips for the selection screenreport ztabstrips line-size 120no standard page heading.TABLES: ekko, ekpo, eket, marc, t134h.*---------------------------------------------------------------------** Tab Strips 1*---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.SELECTION-SCREEN BEGIN OF BLOCK vendor WITH FRAME TITLE text-t00.SELECT-OPTIONS vendor FOR ekko-lifnr.SELECTION-SCREEN SKIP.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT (10) text-m01.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN SKIP.SELECT-OPTIONS vplant FOR ekko-reswk.SELECTION-SCREEN END OF BLOCK vendor.SELECTION-SCREEN END OF SCREEN 101.*---------------------------------------------------------------------** Tab Strips 2*---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.SELECTION-SCREEN BEGIN OF BLOCK data1 WITH FRAME TITLE text-t02.SELECT-OPTIONS: busarea FOR t134h-gsber,plant FOR ekpo-werks,puorg FOR ekko-ekorg.SELECTION-SCREEN END OF BLOCK data1.SELECTION-SCREEN SKIP.SELECTION-SCREEN BEGIN OF BLOCK data2 WITH FRAME TITLE text-t03.SELECT-OPTIONS sched FOR ekko-ebeln.SELECT-OPTIONS matl FOR ekpo-matnr.SELECTION-SCREEN END OF BLOCK data2.SELECTION-SCREEN END OF SCREEN 102.*---------------------------------------------------------------------** Tab Strips 3*---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN.SELECTION-SCREEN BEGIN OF BLOCK rype WITH FRAME TITLE text-t04.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS del RADIOBUTTON GROUP one.SELECTION-SCREEN COMMENT 4(35) text-c05 FOR FIELD del.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS fix RADIOBUTTON GROUP one.SELECTION-SCREEN COMMENT 4(35) text-c06 FOR FIELD fix.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK rype.SELECTION-SCREEN SKIP.SELECTION-SCREEN BEGIN OF BLOCK interval WITH FRAME TITLE text-t05.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS mon RADIOBUTTON GROUP two.SELECTION-SCREEN COMMENT 4(15) text-c01 FOR FIELD mon.PARAMETERS evalmon TYPE spbup.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS wek RADIOBUTTON GROUP two.SELECTION-SCREEN COMMENT 4(15) text-c02 FOR FIELD wek.PARAMETERS evalweek TYPE sptag.SELECTION-SCREEN COMMENT 35(30) text-i01.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK interval.SELECTION-SCREEN SKIP.SELECTION-SCREEN BEGIN OF BLOCK type WITH FRAME TITLE text-t01.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS ext RADIOBUTTON GROUP thr.SELECTION-SCREEN COMMENT 4(15) text-c08 FOR FIELD int.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS int RADIOBUTTON GROUP thr.SELECTION-SCREEN COMMENT 4(15) text-c07 FOR FIELD ext.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK type.SELECTION-SCREEN BEGIN OF BLOCK pre WITH FRAME TITLE text-t06.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS vn RADIOBUTTON GROUP slv.SELECTION-SCREEN COMMENT 4(15) text-c09 FOR FIELD vn.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS bp RADIOBUTTON GROUP slv.SELECTION-SCREEN COMMENT 4(17) text-c10 FOR FIELD bp.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK pre.SELECTION-SCREEN END OF SCREEN 103.SELECTION-SCREEN BEGIN OF TABBED BLOCK uno FOR 20 LINES.SELECTION-SCREEN TAB (15) name1 USER-COMMAND ucomm1DEFAULT SCREEN 101.SELECTION-SCREEN TAB (17) name2 USER-COMMAND ucomm2DEFAULT SCREEN 102.SELECTION-SCREEN TAB (23) name3 USER-COMMAND ucomm3DEFAULT SCREEN 103.SELECTION-SCREEN END OF BLOCK uno.INITIALIZATION.name1 = text-n01.name2 = text-n02.name3 = text-n03.simple alv tree report program 3report ztree_test_pgm.TYPE-POOLS : fibs,stree.DATA : t_node TYPE snodetext.DATA : node_tab LIKE t_node OCCURS 0 WITH HEADER LINE.CLEAR : node_tab, node_tab[].node_tab-type = 'T'.node_tab-name = 'Earth'.node_tab-tlevel = '01'.node_tab-nlength = '5'.node_tab-color = '4'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 3.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'Europe'.node_tab-tlevel = '02'.node_tab-nlength = '6'.node_tab-color = '1'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 4.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'Germany'.node_tab-tlevel = '03'.node_tab-nlength = '7'.node_tab-color = '4'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 4.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'Berlin'.node_tab-tlevel = '04'.node_tab-nlength = '6'.node_tab-color = '4'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 3.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'Asia'.node_tab-tlevel = '02'.node_tab-nlength = '4'.node_tab-color = '1'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 3.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'India'.node_tab-tlevel = '03-'.node_tab-nlength = '5'.node_tab-color = '1'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 3.APPEND node_tab.CLEAR node_tab.node_tab-type = 'P'.node_tab-name = 'Bombay'.node_tab-tlevel = '04-'.node_tab-nlength = '6'.node_tab-color = '1'.node_tab-text = 'Hello'.node_tab-tlength ='5'.node_tab-tcolor = 3.APPEND node_tab.CLEAR node_tab.CALL FUNCTION 'RS_TREE_CONSTRUCT'TABLESnodetab = node_tab.DATA: type_mapping TYPE stree_ctl_type_mapping_tab.DATA: wa_type TYPE stree_ctl_type_mapping.CLEAR: type_mapping[].wa_type-type = 'A'.wa_type-icon = '@BL@'.APPEND wa_type TO type_mapping.CALL FUNCTION 'RS_TREE_LIST_DISPLAY'EXPORTINGuse_control = 'L'.simple tree structure in abap report2report zvvmur12 .TABLES: knvh.TYPES: BEGIN OF worktype,level(2),hkunnr LIKE knvh-kunnr,kunnr LIKE knvh-hkunnr,END OF worktype.DATA: it_knvh TYPE TABLE OF worktype,wa_knvh LIKE LINE OF it_knvh,it_temp TYPE TABLE OF worktype,wa_temp LIKE LINE OF it_temp,it_work TYPE TABLE OF worktype,wa_work LIKE LINE OF it_work.DATA : BEGIN OF it_nodes OCCURS 0.INCLUDE STRUCTURE snodetext.DATA : END OF it_nodes.CONSTANTS: number_of_levels TYPE i VALUE 6.PARAMETER: p_hkunnr LIKE knvh-hkunnr.START-OF-SELECTION.* Parent = 1. hierarchy nodewa_temp-kunnr = p_hkunnr.APPEND wa_temp TO it_temp.wa_work-kunnr = wa_temp-kunnr.wa_work-level = 1.APPEND wa_work TO it_work.* Reading customer hierarchy (max. 6 level)DO number_of_levels TIMES.CHECK NOT it_temp IS INITIAL.SELECT kunnr hkunnrFROM knvhINTO CORRESPONDING FIELDS OF TABLE it_knvhFOR ALL ENTRIES IN it_tempWHERE hkunnr = it_temp-kunnr.LOOP AT it_knvh INTO wa_knvh.wa_knvh-level = sy-index + 1.APPEND wa_knvh TO it_work.ENDLOOP.it_temp[] = it_knvh[].ENDDO.* Hierarchy nodes -> tree controlLOOP AT it_work INTO wa_work WHERE level = 1.PERFORM make_node.LOOP AT it_work INTO wa_work WHERE level = 2 ANDhkunnr = wa_work-kunnr.PERFORM make_node.LOOP AT it_work INTO wa_work WHERE level = 3 ANDhkunnr = wa_work-kunnr.PERFORM make_node.LOOP AT it_work INTO wa_work WHERE level = 4 ANDhkunnr = wa_work-kunnr.PERFORM make_node.LOOP AT it_work INTO wa_work WHERE level = 5 ANDhkunnr = wa_work-kunnr.PERFORM make_node.LOOP AT it_work INTO wa_work WHERE level = 6 ANDhkunnr = wa_work-kunnr.PERFORM make_node.ENDLOOP.ENDLOOP.ENDLOOP.ENDLOOP.ENDLOOP.ENDLOOP.* Making the tree controlCALL FUNCTION 'RS_TREE_CONSTRUCT'TABLESnodetab = it_nodesEXCEPTIONStree_failure = 1.* Display the tree controlDATA : f15 TYPE c.CALL FUNCTION 'RS_TREE_LIST_DISPLAY'EXPORTINGcallback_program = sy-repidIMPORTINGf15 = f15.FORM make_node.it_nodes-name = wa_work-kunnr.it_nodes-color = 1.it_nodes-intensiv = 1.it_nodes-text = wa_work-kunnr.it_nodes-tlength = 16.it_nodes-tlevel = wa_work-level.it_nodes-tcolor = 1.it_nodes-tintensiv = 1.APPEND it_nodes.ENDFORM.simple tree structure in abap** An ABAP reporting tree program that allows the user to press enter or double click on* any line. The report is updated with new internal table data and re-written. The cursor* and paging returns to the exact same line the user was on, even though the report was* re-written from the internal table. Input fields are filled with data based on ENTER of* DOUBLE CLICK. [+] and [-] is displayed on each line and changes if user selects to* expand/collapse.** Create a gui status (8000) with Functions Keys* ENTER = ENTE* BACK = BACK* EXIT = %EX* CANCEL = RW* PICK = F2* EXPAND ALL = EXPA* COLLAPSE ALL = COLA** Written by : SAP Basis, ABAP Programming and Other IMG Stuff* http://www.sap-img.com*report ztree no standard page headingline-count 65line-size 80.DATA: BEGIN OF it_data OCCURS 0,exp(1) TYPE c,werks LIKE t001w-werks,matnr LIKE mara-matnr,value1(13) TYPE c,value2(13) TYPE c,END OF it_data.DATA: w_matnr LIKE mara-matnr,w_count TYPE i,g_field(40) TYPE c.DATA: BEGIN OF page,scrlline LIKE syst-lilli, "scroll line to top of screencursline LIKE syst-lilli, "line to put cursor onhdrlines TYPE i, "lines in header + 1twohdrs TYPE i, "two headers on screencpostop TYPE i, "position of cursor from topcposbot TYPE i, "position of cursor from bottomcposit TYPE i, "position on the screenpagno TYPE i, "pageno of linepgelines TYPE i, "lines used so farEND OF page.START-OF-SELECTION.PERFORM build_it_data.END-OF-SELECTION.PERFORM write_report.TOP-OF-PAGE.PERFORM top_of_page.TOP-OF-PAGE DURING LINE-SELECTION.PERFORM top_of_page.AT LINE-SELECTION.g_field = space.GET CURSOR FIELD g_field.PERFORM line_selection.AT USER-COMMAND.g_field = space.GET CURSOR FIELD g_field.PERFORM user_command.*---------------------------------------------------------------------** FORM BUILD_IT_DATA **---------------------------------------------------------------------*FORM build_it_data.it_data-werks = '0000'.WHILE it_data-werks < '0100'.ADD '10' TO it_data-werks.w_matnr = 0.WHILE w_matnr < 10.ADD 1 TO w_matnr.it_data-exp = '+'.WRITE w_matnr TO it_data-matnr.IF it_data-werks = 10 AND w_matnr = 1.WRITE 'ZTEST2' TO it_data-value1.WRITE 'Testing program 2' TO it_data-value2.ELSE.CLEAR: it_data-value1, it_data-value2.ENDIF.APPEND it_data.ENDWHILE.ENDWHILE.ENDFORM.*---------------------------------------------------------------------** FORM WRITE_REPORT **---------------------------------------------------------------------*FORM write_report.SET PF-STATUS '8000'.syst-lsind = '0'.LOOP AT it_data.AT NEW werks.FORMAT COLOR COL_HEADING INTENSIFIED OFF.WRITE: /1 syst-vline NO-GAP,'[' NO-GAP,it_data-exp NO-GAP HOTSPOT ON,']'.FORMAT COLOR COL_NORMAL INTENSIFIED ON.WRITE: it_data-werks,AT syst-linsz syst-vline.page-pagno = syst-pagno.HIDE: it_data-werks, page-pagno.ENDAT.IF it_data-exp = '-'.FORMAT COLOR COL_NORMAL INTENSIFIED OFF.WRITE: /1 syst-vline,8 it_data-matnr,it_data-value1 INPUT ON,it_data-value2 INPUT ON,AT syst-linsz syst-vline.HIDE: it_data, page-pagno.ENDIF.ENDLOOP.ULINE.ENDFORM.*---------------------------------------------------------------------** FORM USER_COMMAND **---------------------------------------------------------------------*FORM user_command.PERFORM set_scroll_line.CASE sy-ucomm.WHEN 'ENTE'.READ TABLE it_data WITH KEY werks = it_data-werksmatnr = it_data-matnr.IF syst-subrc = 0.CASE g_field.WHEN 'IT_DATA-VALUE1'.IF it_data-value1 <> space.SUBMIT (it_data-value1) VIA SELECTION-SCREEN AND RETURN.ELSE.it_data-value1 = 'Enter 1 Press'(001).ENDIF.WHEN 'IT_DATA-VALUE2'.it_data-value2 = 'Enter 2 Press'(001).ENDCASE.MODIFY it_data INDEX syst-tabix.ENDIF.PERFORM write_report.PERFORM position_list.CASE g_field.WHEN 'IT_DATA-EXP'.ADD 1 TO page-cursline.SET CURSOR FIELD 'IT_DATA-VALUE1' LINE page-cursline.WHEN 'IT_DATA-VALUE1'.SET CURSOR FIELD 'IT_DATA-VALUE1' LINE page-cursline.WHEN 'IT_DATA-VALUE2'.SET CURSOR FIELD 'IT_DATA-VALUE2' LINE page-cursline.ENDCASE.WHEN 'EXPA'.PERFORM set_expand USING '-'.PERFORM write_report.WHEN 'COLA'.PERFORM set_expand USING '+'.PERFORM write_report.ENDCASE.ENDFORM.*---------------------------------------------------------------------** FORM SET_EXPAND **---------------------------------------------------------------------*FORM set_expand USING w_exp.LOOP AT it_data.it_data-exp = w_exp.MODIFY it_data INDEX syst-tabix.ENDLOOP.ENDFORM.*---------------------------------------------------------------------** FORM LINE_SELECTION **---------------------------------------------------------------------*FORM line_selection.PERFORM set_scroll_line.READ TABLE it_data WITH KEY werks = it_data-werksmatnr = it_data-matnr.CASE g_field.WHEN 'IT_DATA-EXP'.LOOP AT it_data WHERE werks = it_data-werks.IF it_data-exp = '-'.it_data-exp = '+'.ELSE.it_data-exp = '-'.ENDIF.MODIFY it_data INDEX syst-tabix.ENDLOOP.WHEN 'IT_DATA-VALUE1'.it_data-value1 = 'Double Click'(004).MODIFY it_data INDEX syst-tabix.WHEN 'IT_DATA-VALUE2'.it_data-value2 = 'Double Click'(004).MODIFY it_data INDEX syst-tabix.ENDCASE.PERFORM write_report.PERFORM position_list.CASE g_field.WHEN 'IT_DATA-EXP'.ADD 1 TO page-cursline.SET CURSOR FIELD 'IT_DATA-VALUE1' LINE page-cursline.WHEN 'IT_DATA-VALUE1'.SET CURSOR FIELD 'IT_DATA-VALUE1' LINE page-cursline.WHEN 'IT_DATA-VALUE2'.SET CURSOR FIELD 'IT_DATA-VALUE2' LINE page-cursline.ENDCASE.ENDFORM.*---------------------------------------------------------------------** FORM SET_SCROLL_LINE ** determine the correct line to scroll the re-written report to, so ** that the user is returned to the same spot on the screen ** if user is mid way between pages, ie two headers are visable on the ** screen, check if they are on the secondary page and adjust the ** scroll variable accordingly so as not to jump up lines because the ** scroll variable will be out by the number of lines in the extra hdr **---------------------------------------------------------------------*FORM set_scroll_line.page-cursline = syst-lilli.page-scrlline = syst-lilli - ( syst-curow - page-hdrlines ).page-pgelines = ( page-pagno - 1 ) * syst-linct.page-cpostop = ( page-scrlline + syst-curow ) - page-pgelines.page-cposbot = ( page-scrlline - syst-curow ) - page-pgelines.page-cposit = page-cpostop + page-cposbot.page-twohdrs = page-hdrlines * 2.IF page-cposit LT page-twohdrs.page-scrlline = page-scrlline + 1.ENDIF.ENDFORM.*---------------------------------------------------------------------** FORM POSITION_LIST **---------------------------------------------------------------------*FORM position_list.CALL FUNCTION 'LIST_SCROLL_LINE_TOPMOST'EXPORTINGlist_index = 1list_line = page-scrllineEXCEPTIONSOTHERS = 1.CHECK syst-subrc = 0.ENDFORM.*---------------------------------------------------------------------** FORM TOP_OF_PAGE **---------------------------------------------------------------------*FORM top_of_page.* set page-hdrlines = lines in header + 1 system generated blank linepage-hdrlines = 5.ULINE.WRITE : /1 syst-vline, 'Header'(002), AT syst-linsz syst-vline.WRITE : /1 syst-vline, 'Lines'(003), AT syst-linsz syst-vline.ULINE.ENDFORM. -
SAP ABAP编程常用表(FICO)
ABAP编程常用表(FICO模块) – GL部分 FAGLFLEXT(FMGLFLEXT) 新总账汇总表GLT0 旧总帐汇总表SKA1 总账科目主记录 (科目表) 科目…