Best code to sanitize table_name and schema_name

If one writes utility programs that take typically a table_name and a schema_name and one uses execute immediate then it
is not using bind variables and subject to sql injection. So what should I do to cleanse table_name and schema_name?
I see that names of tables are way more flexible than I thought:
http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements008.htm#SQLRF51109
Well we aren't doing quoted identifiers around here for our tables we created so I'm thinking of going for it in terms of
cleansing those parameters in utility programs solely designed to work on our creations. As a very legacy type, I would not create a table name that was not A-Z 0-9 and _  Unfortunately I totally forgot how to write a regex or whatever to get rid of anything not in A-Z 0-9 and _ .
Anyone care to remind me? (I never was good at regex :-(  I know, dumb question...

/* Prints how many distinct values there are in each field in the
given table for only fields that are varchar2,date or number
If the number <= 20 it prints each distinct value and count.
create or replace procedure
value_freq (intable in varchar2, inschema in varchar2 default null) is
  distinct_count integer;
  mystmt varchar2(500) := null;
  mytable varchar2(70) := null;
  good_name varchar2(40) := '^[[:alpha:]][[:alnum:]_]{0,29}$';
  dateformat varchar2(25) := 'mm/dd/yyyy';
  clean_table varchar2(30) := null;
  clean_schema varchar2(30) := null;
  TYPE num_rec IS RECORD
    (value number,
     value_count integer);
  TYPE vchar_rec IS RECORD
    (value varchar2(2000),
     value_count integer);
  TYPE date_rec IS RECORD
    (value date,
     value_count integer);
  TYPE num_table is TABLE OF num_rec INDEX BY binary_integer;
  nums num_table;
  TYPE vchar_table is TABLE OF vchar_rec INDEX BY binary_integer;
  vchars vchar_table;
  TYPE date_table is TABLE OF date_rec INDEX BY binary_integer;
  dates date_table;
BEGIN
  /* This assumes A-Z 0-9 _ table and schema names */
  if regexp_like(intable,good_name) then
      clean_table := upper(intable);
  end if;
  if regexp_like(inschema,good_name) then
      clean_schema := upper(inschema);
  end if;
  if clean_schema is null then
     mytable := upper(clean_table);
  else
     mytable := upper(clean_schema) || '.' || upper(clean_table);
  end if;
  dbms_output.put_line('Distinct value stats for ' || mytable);
  FOR mycol IN (SELECT column_name,data_type FROM all_tab_columns where
      TABLE_NAME = upper(clean_table)
      order by COLUMN_ID ) LOOP
      mystmt := 'SELECT COUNT(*) FROM (select distinct ' || mycol.column_name ||
' from ' || mytable || ')';
      EXECUTE IMMEDIATE mystmt into distinct_count;
      /* thanks to Burleson http://www.dba-oracle.com/plsql/t_plsql_dynamic.htm */
      if (mycol.data_type = 'NUMBER') then
          if (distinct_count > 20) then
              dbms_output.put_line(mycol.column_name || ': ' || distinct_count || ' distinct values too many to print');
          else
              dbms_output.put(mycol.column_name||': ' ||distinct_count || ' distinct values' );
              mystmt := 'select ' || mycol.column_name || ', count(*) from ' ||  mytable
               || ' group by ' || mycol.column_name || ' order by nvl(' || mycol.column_name || ',-99999)';
              --dbms_output.put_line(mystmt);
              EXECUTE IMMEDIATE mystmt BULK COLLECT into nums;
              dbms_output.put_line(chr(9));
              FOR i in nums.FIRST .. nums.LAST LOOP
                   dbms_output.put(nums(i).value || ': '  ||
                        nums(i).value_count || chr(9));
              END LOOP;
              dbms_output.put_line('');
          end if;
      elsif mycol.data_type = 'VARCHAR2' then
          if (distinct_count > 20) then
                dbms_output.put_line(mycol.column_name || ': ' || distinct_count || ' distinct values too many to print');
          else
               dbms_output.put(mycol.column_name||': ' ||distinct_count || ' distinct values' );
               mystmt := 'select ' || mycol.column_name || ', count(*) from ' ||  mytable
               || ' group by ' || mycol.column_name || ' order by nvl(' || mycol.column_name || ','' '')';
              --dbms_output.put_line(mystmt);
               EXECUTE IMMEDIATE mystmt BULK COLLECT into vchars;
               dbms_output.put_line(chr(9));
               FOR i in vchars.FIRST .. vchars.LAST LOOP
                   dbms_output.put(vchars(i).value || ': '  ||
                        vchars(i).value_count || chr(9));
               END LOOP;
               dbms_output.put_line('');
          end if;
      elsif mycol.data_type = 'DATE' then
          if (distinct_count > 20) then
                dbms_output.put_line(mycol.column_name || ': ' || distinct_count || ' distinct values too many to print');
          else
               dbms_output.put(mycol.column_name||': ' ||distinct_count || ' distinct values' );
               mystmt := 'select ' || mycol.column_name || ', count(*) from ' ||  mytable
               || ' group by ' || mycol.column_name || ' order by ' || mycol.column_name;
              --dbms_output.put_line(mystmt);
               EXECUTE IMMEDIATE mystmt BULK COLLECT into dates;
               dbms_output.put_line(chr(9));
               FOR i in dates.FIRST .. dates.LAST LOOP
                   dbms_output.put(to_char(dates(i).value,dateformat) || ': '  ||
                        dates(i).value_count || chr(9));
               END LOOP;
               dbms_output.put_line('');
          end if;
       end if; /* is date */
  END LOOP;
END;
show errors;

Similar Messages

  • Best Buy is about to and Elite Plus customer

    I've been an extremely loyal Best Buy customer for over 20 years.  I've been an Elite rewards member for 6 years, and Elite Plus since the new tier was created.  I've already re-qualified for Elite Plus for next year.  Needless to say, I shop at BBY several times per week.
    That may all change unless they can fix this colossal f$#k-up that is placing several of my pre-orders in jeopardy.
    Long story short: I've placed 6 orders that consist of video game pre-orders for limited edition versions, which are now fully reserved at all retailers, as well as several other pre-orders for pretty much every A-list release coming in Q4/Q1.  Some of these orders were placed as far back as February, right when the items became available for pre-order.
    My BBY credit card was recently updated from the in-store card to the BBY Platinum Mastercard.  The old card--which I used for all of those orders--has now been deactivated.  I've updated my account to include my new card as primary payment, but there is no self-help option to specifically update your payment on existing orders.
    I hit a snag when two of my orders that released yesterday went to process, and were denied payment, since they tried to ping the old card.  These orders were then cancelled for invalid payment before I had a chance to respond to the email regarding a payment problem.
    I called support today, to see if they could manually update the payment information on my outstanding orders, and we found in a conference call with Citibank support that even though my new card is valid, since the process of updating existing orders doesn't provide a way to enter the CVV code of my new card (since it's not required by .com's systems), when they go to enter the order, it registers as a CVV mismatch and the payment is denied.  After a few tries with one of my orders for a common-stock item, the order hit enough denied payments to be automatically cancelled.
    After being on the phone with them for 3 HOURS, I was essentially told that they had no way of fixing this.  The problem is, that when these limited-edition pre-orders hit their release date, they will encounter the same payment error and then be automatically cancelled.  But, if that happens, or if we cancel the existing orders and I attempt to re-order them, THEY WILL BE OUT OF STOCK AND UNAVAILABLE!!  Essentially, unless this error is fixed, I will lose all of my limited-edition pre-orders and since I can't order them anywhere else, I won't be able to replace the order anywhere, unless I shell out a ton of money on the secondary market.
    Obviously, I don't find this satisfactory.  I've entrusted Best Buy with thousands of dollars of pre-orders, and because of a stupid glitch in their system, they have now essentially told me that this is an inevitable problem that even their top tier of support cannot correct, and they offered nothing to fix the situation to ensure that I will receive the items that I had ordered several months in advance.
    This is absolutely outrageous, and it's the last straw.  If someone from Best Buy is reading this and can help fix the situation before my first LE pre-order of Q4 enters processing on 11/3/14, I would ask that they please contact me.  Otherwise, this screw-up is enough to finally end my two decades of loyalty at Best Buy.
    I am very serious about this.  If no solution is found, and my orders continue to get auto-cancelled, I intend to cancel all remaining pre-orders (over 15 pending items), cash out my $500 worth of banked points, then cancel my Best Buy accounts and never set foot in a store or visit them online again.  
    I know people often make these claims of "never again" to be hyperbolic and blow off steam, but this is not just idle talk or grandstanding.  With Amazon Prime giving me release-day delivery and competitive prices, and 3 GameStops and 2 Apple stores within a 10 mile radius, I could very easily get by without ever giving Best Buy my business again, and I am fully prepared to do so if these orders cannot be rectified.
    I would figure that Best Buy would go the extra mile to take care of their most loyal customers.  Heck, with how the customer base has eroded, I would figure they'd bend over backwards for ANY customer.  I can't imagine Best Buy can afford to lose too many more customers like me, but they're about to, unless something gets fixed and fast.
    Ball is in your court, Best Buy.  

    Good afternoon zsciaeount,
    Thank you for being a loyal Elite Plus customer. I am terribly disappointed to read about all the wasted time and frustration you have been through regarding your pre-orders. Updating your credit card information on these orders should not be so difficult, and I am truly very sorry for all the inconvenience and frustration you have encountered. 
    According to our records, I see you are working with our Executive Resolution team. I encourage you to continue to work with them to get this resolved immediately to avoid any more pre-orders from being impacted. Should you still need my assistance please do not hesitate to let me know. I assure you it is my goal to help our loyal customers in any way I can. I will also be documenting your experience for further review.
    Once again, I am truly very sorry for any disappointment this has caused, and I hope we are fortunate to continue to have you as a loyal Best Buy customer. 
    Sincerely, 
    Maria|Social Media Specialist | Best Buy® Corporate
     Private Message

  • K450e motherboard replaced now says error code 00ce machine type and serial number invalid

    Hey guys i just got a replacement motherboard, after motherboard was replaced on bootup the computer says error code 00ce: machine type and serial number are invalid. How do i get rid of this error it was replaced by the same motherboard type that was previously in the system. How can i reset the bios or enter the serial etc? Lenovo tech support was no help.

    Hi Qjafri829,
    Welcome to Lenovo Community!
    As per the query we understood that you are facing issue with serial number invalid error in your k450e desktop.
    As the motherboard been replaced the serial number and MTM number must be updated this is a new motherboard, you can visit to the nearest authorized service center for the serial number update in the BIOS.
    Click here to open a link where you can select the country and get the exact contact support number. I’m sure
    they will be a great help.
    Hope this helps. Do post back if issue persists!
    Best regards,       
    Ashwin.S
    Did someone help you today? Press the star on the left to thank them with a Kudo!
    If you find a post helpful and it answers your question, please mark it as an "Accepted Solution"! This will help the rest of the Community with similar issues identify the verified solution and benefit from it.
    Follow @LenovoForums on Twitter!

  • I've only had my iphone 5s for a week. I keep getting an error message of "Server has stopped responding."  I need the server to work. Does anyone know if there is a "fix" for the problem? Other wise, I probably best return for a refund and get a Samsung.

    I've only had my iphone 5s for a week. I keep getting an error message of "Server has stopped responding."  I need the server to work. Does anyone know if there is a "fix" for the problem? Other wise, I probably best return for a refund and get a Samsung.  Thanks

    sandyzotz wrote:
    Other wise, I probably best return for a refund and get a Samsung.
    Unlikely.  Based on the complete lack of detail of the issue provided it is entirely possible the same issue would occur.
    Unless and until the user provides some actual details of the problem, there is nothing the indicate that the issue is with the iPhone.

  • What is the best way to open emails and attachments without using wifi?

    For I-phone and I-pad, what is the best way to open emails and attachments without using wifi?  I turned off wifi in my settings but my boss thinks there may be another way and a better way to use something else instead of wifi.  Any help would be appreciated!  Thank you!

    Thanks!  That is a very good question you post.  My boss asked me that and I am assuming that he is having issues with using wifi wherever he is at.  My boss is the kind of person that when he asks something you look into it and ask him no questions...he's the only one asking questions!  But thank you for your response I will tell him the information you told me and hopefully that will help!

  • Retreive company code data  from t001k and plants from t001w based on bwkey

    here is my sample code pls.
      pls look into the  perform <b>PERFORM F_GET_COMPANY_CODE</b>.
    and also the link between the tables (custom) like ysda_exp_prtlog,
         Purpose:  The Monthly export declaration summarizes all SAD     *
                   export documents produced by the system. For each     *
                   plant in France this declaration has to be handed to  *
                   the Customs Authorities, together with copies of all  *
                   invoices mentioned in the report.                     *
         Preds/Successors : -                                            *
         External Datasets: -                                            *
         INCLUDE PROGRAM  : YYSDFORM                                     *
           MODIFICATION LOG
    Date  | Change Number | Initials | Description
    *01/10/03| G9DK943416    | AXJIRAP  | INITIAL PROGRAM                  *
    *03/10/03| G9DK943416    | TXHONGP  | CREATE PRINT-PROGRAM FOR ACCELIO *
    *26/10/03| G9DK943416    | KXSAWAS  | Merge all Accelio forms into one *
    *02/02/04| G9DK959869    | KXSAWAS  | Bug fix for Intercompany invoice *
           |               |          | and updating printing no. in     *
           |               |          | YSDA_DOC_NUMBER.
    *09/02/04| G9DK960368    | KXSAWAS  | TICKET AM6219029 various fix     *
           | G9DK960972    | KXUMNAUY | -Add yuei for download file      *
           | G9DK961073    |          | -Calculate invoice in case       *
           | G9DK961190    |          |  invoce is not yet made          *
           | G9DK961211    |          | -Fixed message type when there is*
           |               |          | no data found                    *
    *18/02/04| G9DK961418    | PXSOPHO  | -Shift the position in download  *
           |               |          | file
    *26/02/04| G9DK962077    | kxumnauy | TICKET AM6219029 various fix     *
           | G9DK962238    |          | TICKET AM6289971 fix export file *
           | G9DK962271    |          |
    *18/03/04| G9DK963806    | PXSOPHO  | TICKET AM6442955,AM6384438
           | G9DK964432    |          | - print only 4 chars of the
           | G9DK964590    |          | export procedure                 *
           |               | KXUMNAUY | - Fix internal report
           |               | KXSAWAS  | - Fix invoice currency to EUR.
           |               |          | - Fix SUASUNIC probelm when
           |               |          |   download file
    *09/06/04| G9DK968994    | KXUMNAUY |TICKET AM6789203
           | G9DK969188    |          |- Fix box 4 to print the department
           | G9DK969246    |          |code(first 2 char of the postal)
           | G9DK969319    |          |- Fix to print all invoice numbers
           | G9DK969345    |          |reported in the section 3
           | G9DK969466    |          |- Fix in case invoice currency is
           |               |          |not EUR, use local currency from
           |               |          |accounting document
           |               |          |- Fix in case there are different
           |               |          |codes are loaded on one truck
           |               |          |- Fix the invoice amount in column
           |               |          |27 has to be the amount relating to
           |               |          |the line item
           |               |          |- Fix the issue that Pro forma
           |               |          |invoice for STO (ZF8)shouldn't be
           |               |          |counted to be the final Interco
           |               |          |invoice
    *20/08/04| G9DK972875    | KXUMNAUY |AM7387219
           | G9DK973032    |          |-Exclude samples from the internal
           |               |          |sections 1 and 2
           |               |          |-Data pages: Column 11. When the
           |               |          |invoice amount is less then 1.000
           |               |          |EUR and the quantity is less then.
           |               |          |1.000 then "******" (6 x *) has to
           |               |          |be printed
    *07/02/05| G9DK983160    | RXBOONG  |AM8522207
           | G9DK983168    |          |Fix download to unix file
    *17/08/06| G9DK9A02DZ    | NKONGNG  |AM1983727:
           | G9DK9A02IK    |          |-do not show sample orders
           |               |          | (order type “FD” or ”ZFD”)
           |               |          |AM2985407:
           |               |          |-skip all “T2L*” documents
    *15/12/06| G9DK9A05GB    | ZZPWANA  | AM10208238
           |               | The Monthly Export Declaration for plant FR95
           |               | is showing invoice amounts in SGD in column
           |               | 27, where amounts in EUR should be shown. As
           |               | the amounts are labeled as EUR in column 26
           |               | this is unacceptable.The second issue is that
           |               | there are no invoice numbers shown in column
           |               | REM.
           |               | >> ZZPWANA:AM10208238:G9DK9A05GB <<
           |               | >> ZZPWANA:AM10208238:G9DK9A05GJ <<
    *05/02/07| G9BK900812    | PPATTAN  |AM10687113
           | G9DK9A0661    |          |Correction to the Monthly Export
           |               |          |Declaration – alpha character to
           |               |          |numeric field
           |               |
    *09/07/07| G9DK9A09ND    |VSRKODA   Replace plant with companycode,add
                                      new  column plant ,add new logic to
                                      verify that we had received *  *
                                      BAEcOMPLETE RESPONSE (fROM FC)
                                      for all the export transactions
    REPORT YSDF5092 LINE-SIZE   310
                    LINE-COUNT   65
                    NO STANDARD PAGE HEADING
                    MESSAGE-ID YSD_GENERAL.
         INCLUDE PROGRAM FOR ACCELIO                                     *
    INCLUDE YYSDFORM.    "Include for Accelio Print Process
    INCLUDE YSDF006B_INCLUDE.
         T A B L E S                                                     *
    TABLES: NAST.
         T Y P E S                                                       *
    TYPES : BEGIN OF TY_RAW,
              WERKS LIKE YSDA_EXP_PRTLOG-YY_PLANT,
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
              BWKEY  LIKE  YSDA_EXP_PRTLOG-YY_PLANT,
              VALUE_FROM  LIKE  YCACEDI-VALUE_FROM,
    *<-- End of G9DK9A09ND
              HEADER_SHT LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
              INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,  "G9DK962238
              PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
              PRINT_TIME LIKE YSDA_EXP_PRTLOG-YY_PRINT_TIME,
              DOCUMENT_CODE LIKE YSDA_EXP_PRTLOG-YY_DOCUMENT_CODE,
              HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
              DELIVERY LIKE YSDA_EXP_PRTLOG-YY_DELIVERY,
              INVOICE_AMT LIKE YSDA_EXP_PRTLOG-YY_INVOICE_AMT,
              EX_RATE LIKE YSDA_EXP_PRTLOG-YY_EX_RATE,
              CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
             INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO, "G9DK962238
              EXTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_EXTERNAL_NO,
              COMMODITY LIKE YSDA_EXP_PRTLOG-YY_COMMODITY,
              REPORT_FLAG LIKE YSDA_EXP_PRTLOG-YY_REPORT_FLAG,  "G9DK962077
            END OF TY_RAW.
    TYPES : BEGIN OF TY_DATA,
              HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
              INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,
              PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
              ZOLLA LIKE EIKP-ZOLLA,
              STGBE LIKE EIKP-STGBE,
              EXPVZ LIKE EIKP-EXPVZ,
              CONTA LIKE EIKP-CONTA,
              IEVER LIKE EIKP-IEVER,
              PDEST LIKE KNA1-LAND1,
              1DEST LIKE KNA1-LAND1,
              COMMODITY LIKE YSDA_EXP_PRTLOG-YY_COMMODITY,
              STATISTIC TYPE I,
              LFIMG LIKE LIPS-LFIMG,
              L15 TYPE I,
              REGFI(2),
              CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
              INVOICE_AMT TYPE I,
              ZDELN LIKE VBRK-VBELN,
              LIVRE(4),
              EXPRF LIKE EIPO-EXPRF,
              EXART LIKE EIPO-EXART,
              NTGEW LIKE LIKP-NTGEW,
              YY_SEQTAXNO LIKE VBRK-YY_SEQTAXNO,                "G9DK959869
            END OF TY_DATA.
    TYPES : BEGIN OF TY_HEADER,
              HEADER_SHT LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
              HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
              PRINT_NO LIKE YSDA_DOC_NUMBER-YY_PRINT_NO,
              WERKS LIKE T001W-WERKS,
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
              BUKRS  LIKE T001K-BUKRS,
              BWKEY  LIKE  T001K-BWKEY,
              VALUE_FROM LIKE YCACEDI-VALUE_FROM,
    *<-- End of G9DK9A09ND
              NAME1 LIKE T001W-NAME1,
              COM_NAME LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              POST_LOC LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              CUST_OFFICE LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              POST_CODE LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              DATE(25),
              ETAB LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              NO_SIREN LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              TEXT2 LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              TEXT5 LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              TEXT7A LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              TEXT7B LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
              TEXT8 LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
            END OF TY_HEADER.
    TYPES : BEGIN OF TY_DELIVERY,
              VBELN LIKE LIKP-VBELN,
              POSNR LIKE LIPS-POSNR,                            "G9DK961190
              VBUND  LIKE LIKP-VBUND,
              LFIMG LIKE LIPS-LFIMG,
              MEINS LIKE LIPS-MEINS,
              EXNUM LIKE LIKP-EXNUM,
              KUNNR LIKE LIKP-KUNNR,
              KUNAG LIKE LIKP-KUNAG,
              L15 LIKE LIPS-LFIMG,
              WADAT_IST LIKE LIKP-WADAT_IST,
              LDDAT LIKE LIKP-LDDAT,
              NTGEW LIKE LIKP-NTGEW,
              MATNR LIKE MARA-MATNR,
              VRKME LIKE LIPS-VRKME,                            "G9DK960368
              VGBEL LIKE LIPS-VGBEL,                            "G9DK961190
              VGPOS LIKE LIPS-VGPOS,                            "G9DK961190
              UECHA LIKE LIPS-UECHA,                            "G9DK961190
            END OF TY_DELIVERY.
    TYPES : BEGIN OF TY_INVOICE,
              ZDELN LIKE VBRK-VBELN,
              NETWR LIKE VBRK-NETWR,
              WAERK LIKE VBRK-WAERK,
              KURRF LIKE VBRK-KURRF,
              FKIMG LIKE VBRP-FKIMG,
              VRKME LIKE VBRP-VRKME,
            END OF TY_INVOICE.
    TYPES : BEGIN OF TY_INVOICE_TEMP,
              ZDELN LIKE VBRK-VBELN,
              FKART LIKE VBRK-FKART,
              YY_SEQTAXNO LIKE VBRK-YY_SEQTAXNO,
            END OF TY_INVOICE_TEMP.
    TYPES : BEGIN OF TY_EXPORT,
              EXNUM LIKE EIKP-EXNUM,
              ZOLLA LIKE EIKP-ZOLLA,
              STGBE LIKE EIKP-STGBE,
              EXPVZ LIKE EIKP-EXPVZ,
              CONTA LIKE EIKP-CONTA,
              IEVER LIKE EIKP-IEVER,
              EXPRF LIKE EIPO-EXPRF,
              EXART LIKE EIPO-EXART,
              EXPOS LIKE EIPO-EXPOS,                            "G9DK961190
              STAWN LIKE EIPO-STAWN,                            "G9DK961190
            END OF TY_EXPORT.
    TYPES : BEGIN OF TY_HFILE,
              POS1(8),
              POS2(4),
              POS3(2),
              POS4,
              POS5(8),
              POS6(4),
              POS7(14),
              POS8(20),
              POS9(20),
              POS10(20),
              POS11(8),
            END OF TY_HFILE.
    TYPES : BEGIN OF TY_DFILE,
             pos1(18),                                        "G9DK961418
             POS1(19),                                        "G9DK961418
              POS1(18),                                         "G9DK962238
              POS2(4),
              POS3(8),
              POS4(6),
              POS5(6),
              POS5A(4),
              POS6(9),
              POS6A(5),                                         "G9DK962238
              POS7(5),
              POS8(5),
              POS8A(22),
              POS9,
              POS10,
              POS11,
              POS12,
              POS13(5),
              POS13A,
              POS14(13),
              POS14A(31),
              POS15(2),
              POS16(2),
              POS16A(3),
              POS17(4),
              POS17A(3),
              POS18(3),
              POS18A(9),                                        "G9DK962238
              POS19,
              POS20(11),
              POS21(11),
              POS22(10),
              POS23(10),
              POS23A(40),
              POS24(4),
              POS25(3),
              POS26,
              POS26A,
              POS27,
              POS28(3),
              POS29,
            END OF TY_DFILE,
            BEGIN OF TY_TVKO,                                   "G9DK959869
              VKORG     LIKE TVKO-VKORG,                        "G9DK959869
              BUKRS     LIKE TVKO-BUKRS,                        "G9DK959869
              KUNNR     LIKE TVKO-KUNNR,                        "G9DK959869
            END OF TY_TVKO.                                     "G9DK959869
         D A T A                                                         *
    DATA: GV_CUST_NUM LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
          GV_SIREN LIKE YSDA_DOC_FIXTEXT-YY_TEXT,
          GV_REP_NO LIKE YSDA_DOC_NUMBER-YY_PRINT_NO,
          GV_SEQ_NO TYPE I VALUE 0,
          GV_PRNTER     LIKE TSP01-RQDEST,      "Printer Name
          GV_DATE(8)   TYPE C,       "DATE
          GV_MONTH(2)  TYPE C,       "MONTH
          GV_DAY(2)    TYPE C,       "DAY
          GV_YEAR(4)   TYPE C,       "YEAR
          GV_ADD1(30)  TYPE C,       "TEXT-SIMBOL H01A
          GV_ADD2(30)  TYPE C,       "TEXT-SIMBOL H01B
          GV_COUNT     TYPE I,       "COUNT SEQUENCE
          GV_SEQUENCE(5) TYPE C,     "SEQUENCE
          GV_COPYNO    TYPE C,       "NUMBER OF COPY
          GV_DATETEMP(10)  TYPE C,   "DATE
          GV_SECTIONPAGE(2)   TYPE C,   "NO. OF PAGE IN SECTION
          GV_ITEM             TYPE I,   "NO. OF ITEM
          GV_EUR       LIKE VBRK-WAERK VALUE 'EUR',
          GV_INVOICE_NO       LIKE VBRK-VBELN,                  "G9DK959869
          GV_INVOICE_INTERCOM LIKE VBRK-VBELN,                  "G9DK959869
          GV_PRO_FORMA_STO    LIKE VBRK-VBELN,                  "G9DK969466
          GV_TEXT46           LIKE YSDA_DOC_FIXTEXT-YY_TEXT.    "G9DK959869
         C O N S T A N T S                                               *
    CONSTANTS: GC_M VALUE 'M',
               GC_J VALUE 'J',
               GC_C VALUE 'C',
               GC_D VALUE 'D',
               GC_E VALUE 'E',
               GC_F VALUE 'F',
               GC_U VALUE 'U',
               GC_X VALUE 'X',
               GC_0 VALUE '0',
               GC_2 VALUE '2',
               GC_3 VALUE '3',
               GC_MEXP(4) VALUE 'MEXP',
               GC_ZAAD(4) VALUE 'ZAAD',
               GC_ZSAD(4) VALUE 'ZSAD',
               GC_CY(2) VALUE 'CY',
               GC_M1(2) VALUE 'M1',
               GC_M2(2) VALUE 'M2',
               GC_M4(2) VALUE 'M4',
               GC_M5(2) VALUE 'M5',
               GC_M6(2) VALUE 'M6',
               GC_M7(2) VALUE 'M7',
               GC_M8(2) VALUE 'M8',
               GC_M9(2) VALUE 'M9',
               GC_C3(2) VALUE 'C3',
               GC_00(2) VALUE '00',
               GC_C1(2) VALUE 'C1',
               GC_C2(2) VALUE 'C2',
               GC_SI(2) VALUE 'SI',
               GC_N1(2) VALUE 'N1',
               GC_N2(2) VALUE 'N2',
               GC_FR(2) VALUE 'FR',
               GC_EN(2) VALUE 'EN',
               GC_TON LIKE T006-MSEHI VALUE 'TO',
               GC_L15 LIKE T006-MSEHI VALUE 'L15',
               GC_GRWR(4) VALUE 'GRWR',
               GC_SAISUNIC(8) VALUE 'SAISUNIC',
               GC_000000(6) VALUE '000000',
              GC_1 VALUE '1',                                 "G9BK900812
               GC_1 LIKE PLFH-MGVGW VALUE '1',                  "G9BK900812
               GC_DOT(1) VALUE '.',
               GC_TYP_EU(3)  TYPE C VALUE 'EU ',
               GC_TYP_EX(3)  TYPE C VALUE 'EX ',
               GC_TYP_COM(3) TYPE C VALUE 'COM',
               GC_BIS(3)     TYPE C VALUE 'BIS',
               GC_EUR(3)     TYPE C VALUE 'EUR',
               GC_IV(2)      TYPE C VALUE 'IV',
               GC_ZTDR(4)    TYPE C VALUE 'ZTDR',
               GC_ZF8(3)     TYPE C VALUE 'ZF8',
               GC_ZIV(3)     TYPE C VALUE 'ZIV',
               GC_FALSE(1)   TYPE C VALUE ' ',                 "yuie
               GC_STRUCT(31) TYPE C VALUE 'DATA',              "yuie
               GC_TOTAL TYPE VTXTM VALUE 'TOTAL NET UNIT PRICE',"G9DK960368
            GC_INTER_PERCENT TYPE VTXTM VALUE 'Inter-company %'."G9DK960368
         I N T E R N A L  T A B L E S                                    *
    DATA: BEGIN OF IT_DOC OCCURS 0,
            VBELN LIKE LIKP-VBELN,
            FKART LIKE VBRK-FKART,
            ERDAT LIKE VBFA-ERDAT,
            ERZET LIKE VBFA-ERZET,
            ZDELN LIKE VBRK-VBELN,
          END OF IT_DOC,
          BEGIN OF IT_VBRK OCCURS 0,
            ZDELN LIKE VBRK-VBELN,
          END OF IT_VBRK,
          BEGIN OF IT_SALES OCCURS 0,
            VBELN LIKE LIKP-VBELN,
            VBELV LIKE VBAK-VBELN,     "Order Number
            AUART LIKE VBAK-AUART,
            KNUMV LIKE VBAK-KNUMV,
            KALSM LIKE VBAK-KALSM,                              "G9DK960368
            WAERK LIKE VBAK-KALSM,                              "G9DK960368
            KNUMA LIKE VBAK-KNUMA,                              "G9DK960368
          END OF IT_SALES,
    *--> begin of G9DK961190 kxumnauy 13 feb 2004
          BEGIN OF IT_VBAP OCCURS 0,
             VBELN   LIKE  VBAK-VBELN,           " Sale doc.
             POSNR   LIKE  VBAP-POSNR,           " Sales document item
             KNUMV   LIKE  VBAK-KNUMV,           " No. of the document cond.
             KALSM   LIKE VBAK-KALSM,
             WAERK   LIKE VBAK-KALSM,
             KNUMA   LIKE VBAK-KNUMA,
          END OF IT_VBAP,
    *<-- end of G9DK961190
          BEGIN OF IT_KSCHL OCCURS 0,
            KNUMV LIKE KONV-KNUMV,
            KBETR LIKE KONV-KBETR,
            WAERS LIKE KONV-WAERS,                              "G9DK960368
          END OF IT_KSCHL,
          BEGIN OF IT_VBKD OCCURS 0,
            VBELV LIKE VBAK-VBELN,
            INCO1 LIKE VBKD-INCO1,
          END OF IT_VBKD,
          BEGIN OF IT_COUNTRY OCCURS 0,
            KUNNR LIKE KNA1-KUNNR,
            LAND1 LIKE KNA1-LAND1,
          END OF IT_COUNTRY,
          BEGIN OF IT_CNO OCCURS 0,
            HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
            INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,
            PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
            INVOICE_AMT LIKE YSDA_EXP_PRTLOG-YY_INVOICE_AMT,
            CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
    *-->Begin of G9DK9A09ND -VSRKODA -16/07/2007
            PLANT    LIKE YSDA_EXP_PRTLOG-YY_PLANT,
    *<--End of  G9DK9A09ND
          END OF IT_CNO,
          BEGIN OF IT_LNO OCCURS 0,
            HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
            INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,
            PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
            INVOICE_AMT LIKE YSDA_EXP_PRTLOG-YY_INVOICE_AMT,
            CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
    *-->Begin of G9DK9A09ND -VSRKODA -16/07/2007
            PLANT    LIKE YSDA_EXP_PRTLOG-YY_PLANT,
    *<--End of  G9DK9A09ND
           END OF IT_LNO,
          BEGIN OF IT_LINV OCCURS 0,
            HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
            INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,
            PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
            INVOICE_AMT LIKE YSDA_EXP_PRTLOG-YY_INVOICE_AMT,
            CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
    *-->Begin of G9DK9A09ND -VSRKODA -16/07/2007
            PLANT    LIKE YSDA_EXP_PRTLOG-YY_PLANT,
    *<--End of  G9DK9A09ND
            EX_RATE LIKE YSDA_EXP_PRTLOG-YY_EX_RATE,
            LFIMG LIKE LIPS-LFIMG,
            ZDELN LIKE VBRK-YY_SEQTAXNO,
          END OF IT_LINV,
          BEGIN OF IT_DIFF OCCURS 0,
            HEADER_TYP LIKE YSDA_EXP_PRTLOG-YY_HEADER_TYP,
            VBELV LIKE VBAK-VBELN,
            INTERNAL_NO LIKE YSDA_EXP_PRTLOG-YY_INTERNAL_NO,
            PRINT_DATE LIKE YSDA_EXP_PRTLOG-YY_PRINT_DATE,
            INVOICE_AMT LIKE YSDA_EXP_PRTLOG-YY_INVOICE_AMT,
            CURRENCY LIKE YSDA_EXP_PRTLOG-YY_CURRENCY,
    *-->Begin of G9DK9A09ND -VSRKODA -16/07/2007
            PLANT    LIKE YSDA_EXP_PRTLOG-YY_PLANT,
    *<--End of  G9DK9A09ND
            EX_RATE LIKE YSDA_EXP_PRTLOG-YY_EX_RATE,
            LFIMG LIKE LIPS-LFIMG,
            NETWR LIKE VBRK-NETWR,
            WAERK LIKE VBRK-WAERK,
            KURRF LIKE VBRK-KURRF,
            FKIMG LIKE VBRP-FKIMG,
            ZDELN LIKE VBRK-YY_SEQTAXNO,
          END OF IT_DIFF.
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
    Data :Begin  of it_t001k occurs 0,
          bwkey  like t001k-bwkey,
          bukrs   like t001k-bukrs,
          werks   like t001w-werks,
        end of it_t001k.
    TABLES: T001W.
    Data :Begin  of it_t001w occurS 0,
          bwkey  like t001w-bwkey,
         werks   like t001w-werks,
        end of it_t001w.
    *<-- End of G9DK9A09ND
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
    DATA: BEGIN OF IT_SIREN OCCURS 0,
          VALUE_FROM  LIKE YCACEDI-VALUE_FROM,
          MESTYP  LIKE  YCACEDI-MESTYP,
          DIRECT   LIKE YCACEDI-MESTYP,
          ORG_LEVEL  LIKE YCACEDI-ORG_LEVEL,
          ORG_VALUE  LIKE YCACEDI-ORG_VALUE,
          FIELDNAME  LIKE YCACEDI-FIELDNAME,
        END OF IT_SIREN.
    *<-- End of G9DK9A09ND
    *--> Begin of G9DK959869 KXSAWAS 02/02/2004
    DATA: BEGIN OF IT_ORDER OCCURS 0,
            VBELN LIKE VBAK-VBELN,        " Order no.
            VKORG LIKE VBAK-VKORG,        " Sale Org. of order
          END OF IT_ORDER,
          BEGIN OF WA_T001W,
            WERKS  LIKE   T001W-WERKS,    " Plant
            BUKRS  LIKE   T001K-BUKRS,
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
            BWKEY  LIKE   T001K-BWKEY,
    *<-- End of G9DK9A09ND
            VKORG  LIKE   T001W-VKORG,    " Sale Org. of plant
            COUNC  LIKE   T001W-COUNC,    " Country code
            LAND1  LIKE   T001W-LAND1,    "
            ADRNR  LIKE   T001W-ADRNR,
            ORT01  LIKE   T001W-ORT01,
          END OF WA_T001W,
          BEGIN OF IT_LIKP OCCURS 0,
            VBELN  LIKE LIKP-VBELN,        " Delivery
            VKORG  LIKE LIKP-VKORG,        " Sale organization
            KUNNR  LIKE LIKP-KUNNR,        " Ship-to party
            INCO1  LIKE LIKP-INCO1,        " Incoterm part1
            INCO2  LIKE LIKP-INCO2,        " Incoterm part2
          END OF IT_LIKP.
    *<-- End of G9DK959869
    DATA: IT_RAW TYPE TABLE OF TY_RAW WITH HEADER LINE,
          IT_DATA TYPE TABLE OF TY_DATA WITH HEADER LINE,
          IT_EXPORT TYPE TABLE OF TY_EXPORT WITH HEADER LINE,
          IT_DELIVERY TYPE TABLE OF TY_DELIVERY WITH HEADER LINE,
          IT_INVOICE TYPE TABLE OF TY_INVOICE WITH HEADER LINE,
          IT_FILE TYPE TABLE OF TY_DFILE WITH HEADER LINE,
          IT_HEADER TYPE TABLE OF TY_HEADER WITH HEADER LINE,
          IT_SELTAB TYPE TABLE OF RSPARAMS WITH HEADER LINE,
          IT_INVOICE_TEMP TYPE TABLE OF TY_INVOICE_TEMP WITH HEADER LINE,
          IT_TVKO_ORDER   TYPE TABLE OF TY_TVKO WITH HEADER LINE,"G9DK959869
          IT_DEL TYPE TABLE OF TY_DELIVERY WITH HEADER LINE.    "G9DK960368
    *--> Begin of G9DK960368 KXSAWAS 05/02/2004
    DATA: BEGIN OF YUIE_ITAB OCCURS 0,
           RECID(31),
           DATA(1024).
    DATA: END   OF YUIE_ITAB.
    TYPE-POOLS: YUIEX.
    *DATA : it_komv2     LIKE komv   OCCURS 0 WITH HEADER LINE. "G9DK961190
    *<-- End of G9DK960368
    *Begin of G9DK964590 kxumnauy 30 mar 2003
    DATA: BEGIN OF KEY_ZBAT01,
            MANDT           TYPE ZBAT01-MANDT,
            REPID           TYPE ZBAT01-REPID,
            FUNCT           TYPE ZBAT01-FUNCT,
          END OF KEY_ZBAT01.
    *End of G9DK964590
    *--> Begin of G9DK968994 kxumnauy
    DATA: BEGIN OF IT_INVOICE_ITEM OCCURS 0,
            VBELN LIKE VBRP-VBELN,
            POSNR LIKE VBRP-POSNR,
            NETWR LIKE VBRP-NETWR,
            VGBEL LIKE VBRP-VGBEL,
            VGPOS LIKE VBRP-VGPOS,
            MATNR LIKE VBRP-MATNR,
             fkimg LIKE VBRP-fkimg,               "G9DK969188
             vrkme LIKE VBRP-vrkme,               "G9DK969188
            ntgew LIKE VBRP-ntgew,                              "G9DK969188
            gewei LIKE VBRP-gewei,                              "G9DK969188
          END OF IT_INVOICE_ITEM.
    *<-- End of G9DK968994
    RANGES: S_LAST FOR SY-DATUM,
            S_PERIOD FOR SY-DATUM.
         W O R K A R E A S                                               *
    DATA: WA_RAW TYPE TY_RAW,
          WA_DATA TYPE TY_DATA,
          WA_EXPORT TYPE TY_EXPORT,
          WA_DOC LIKE IT_DOC,
          WA_SALES LIKE IT_SALES,
          WA_SALES1 LIKE IT_SALES,                              "G9DK972875
          WA_KSCHL LIKE IT_KSCHL,
          WA_VBKD LIKE IT_VBKD,
          WA_COUNTRY LIKE IT_COUNTRY,
          WA_DELIVERY TYPE TY_DELIVERY,
          WA_INVOICE TYPE TY_INVOICE,
          WA_LINV LIKE IT_LINV,
          WA_CNO LIKE IT_CNO,
          WA_LNO LIKE IT_LNO,
          WA_DIFF LIKE IT_DIFF,
          WA_HEADER TYPE TY_HEADER,
          WA_VBRK LIKE IT_VBRK,
          WA_FILE TYPE TY_DFILE,
          WA_HFILE TYPE TY_HFILE,
          WA_SELTAB TYPE RSPARAMS,
          WA_INVOICE_TEMP TYPE TY_INVOICE_TEMP,
          WA_TVKO_PLANT TYPE TY_TVKO,                           "G9DK959869
          WA_LIKP       LIKE IT_LIKP,                           "G9DK959869
          WA_DEL        LIKE IT_DELIVERY,                       "G9DK960368
          WA_KOMK       LIKE KOMK,                              "G9DK960368
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
          WA_T001K     LIKE T001K.
    *<-- End of G9DK9A09ND
         S E L E C T   -   O P T I O N S   /   P A R A M E T E R S       *
    SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.
    *Begin of change  VSRKODA
    PARAMETERS: P_BUKRS LIKE T001K-BUKRS,
               S_WERKS LIKE T001W-WERKS,
    *end of change   VSRKODA
                P_MNR LIKE T247-MNR,
                P_YEAR LIKE VBRK-GJAHR.
    SELECT-OPTIONS:   S_WERKS  FOR T001W-WERKS.
    PARAMETERS: P_PRNTER  LIKE TSP01-RQDEST.  "Printer Name
              p_file AS CHECKBOX.                            "yuie
    SELECTION-SCREEN END OF BLOCK SCR1.
    *--> Begin of G9DK960368 KXSAWAS 05/02/2004
    *--- Comment out ---
    *SELECTION-SCREEN BEGIN OF BLOCK b2
                   WITH FRAME TITLE text-t01.
    *PARAMETERS:     p_fname LIKE rlgrap-filename .
    *SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T01.
    PARAMETERS: P_FILE AS CHECKBOX.
    PARAMETERS: P_FNAME   TYPE EPSFILNAM LOWER CASE,  "interface UNIX file
                P_SPATH   TYPE EPSDIRNAM DEFAULT
                '/opt/mobil/batch/gem/other/common/data/' LOWER CASE.
    SELECTION-SCREEN END OF BLOCK B2.
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-T03.
    PARAMETERS: P_INTID    TYPE YINT_IDS     DEFAULT 'DCG_REPORT',
                P_SUBID    TYPE YINT_SUB_IDS DEFAULT 'MAIN'.
    SELECTION-SCREEN END OF BLOCK B3.
    *<-- End of G9DK960368
    AT SELECTION SCREEN
    AT SELECTION-SCREEN.
    To validate the data that user entered in the selection screen
      PERFORM F_VALIDATE_DATA.
      PERFORM F_GET_COMPANY_CODE.
         I N I T I A L I Z A T I O N                                     *
    INITIALIZATION.
      P_MNR = SY-DATUM+4(2).
      P_YEAR = SY-DATUM+0(4).
    *--> Begin of G9DK960368 KXSAWAS 05/02/2004
    *---Set default unix file name yuie
      CONCATENATE 'DCG_SAISUNIC' SY-UNAME
                INTO P_FNAME
                SEPARATED BY '_'.
    *<-- End of G9DK960368
         B E G I N - O F - S E L E C T I O N                             *
    START-OF-SELECTION.
      GV_PRNTER = P_PRNTER.
      PERFORM F_INIT_PERIOD.
      PERFORM F_GET_CURRENT_REPORT_NUMBER.
    PERFORM F_GET_COMPANY_CODE.
      PERFORM F_EXTRACT_RAW_DATA.
      PERFORM F_PROCESS_DATA.
      IF SY-BATCH EQ GC_X.
        PERFORM F_UPDATE_REPORT_NUMBER.
      ENDIF.
    END-OF-SELECTION.
      IF NOT ( IT_HEADER[] IS INITIAL AND IT_DATA[] IS INITIAL AND
                  IT_CNO[] IS INITIAL AND IT_LNO[]  IS INITIAL AND
                IT_LINV[] IS INITIAL AND IT_DIFF[] IS INITIAL ).
        PERFORM F_PRINT_ACCELIO.
      ELSE.
        MESSAGE ID 'YM' TYPE 'I' NUMBER '032'                   "G9DK961073
            WITH 'No data found for entered criteria'(E01).
        EXIT.
      ENDIF.
    *If run by batch job print invoice
      IF SY-BATCH EQ GC_X.
        PERFORM F_PRINT_INVOICE.
      ENDIF.
         B E G I N  O F  F O R M                                         *
    *&      Form  F_INIT_PERIOD
          Period
    FORM F_INIT_PERIOD.
      DATA: LV_FIRST LIKE SY-DATUM,
            LV_CURRENT LIKE SY-DATUM,
            LV_LAST LIKE SY-DATUM,
            LV_DTEMP_FIRST(12) TYPE C,
            LV_DTEMP_LAST(12) TYPE C.
      LV_FIRST+0(4) = P_YEAR.
      LV_FIRST+4(2) = P_MNR.
      LV_FIRST+6(2) = '01'.
    LAST DAY OF CURRENT MONTH
      CALL FUNCTION 'LAST_DAY_OF_MONTHS'
           EXPORTING
                DAY_IN            = LV_FIRST
           IMPORTING
                LAST_DAY_OF_MONTH = LV_CURRENT
           EXCEPTIONS
                DAY_IN_NO_DATE    = 1
                OTHERS            = 2.
      IF SY-SUBRC = 0.
        IF P_MNR < '2'.
          LV_FIRST+0(4) = P_YEAR - 1.
          LV_FIRST+4(2) = '12'.
          LV_FIRST+6(2) = '01'.
        ELSE.
          LV_FIRST+0(4) = P_YEAR.
          LV_FIRST+4(2) = P_MNR - 1.
          LV_FIRST+6(2) = '01'.
        ENDIF.
      LAST DAY OF LAST MONTH
        CALL FUNCTION 'LAST_DAY_OF_MONTHS'
             EXPORTING
                  DAY_IN            = LV_FIRST
             IMPORTING
                  LAST_DAY_OF_MONTH = LV_LAST
             EXCEPTIONS
                  DAY_IN_NO_DATE    = 1
                  OTHERS            = 2.
        IF SY-SUBRC = 0.
          LV_FIRST = '20040101'.                                "G9DK973032
    LAST MONTH
          S_LAST-SIGN = 'I'.
          S_LAST-OPTION = 'BT'.
          S_LAST-LOW = LV_FIRST.
          S_LAST-HIGH = LV_LAST.
          APPEND S_LAST.
    LAST MONTH AND CURRENT MONTH
          S_PERIOD-SIGN = 'I'.
          S_PERIOD-OPTION = 'BT'.
          S_PERIOD-LOW = LV_FIRST.
          S_PERIOD-HIGH = LV_CURRENT.
          APPEND S_PERIOD.
        ENDIF.
      ENDIF.
    ENDFORM.                    " F_INIT_PERIOD
    *&      Form  F_GET_CURRENT_REPORT_NUMBER
          Get current Seq. no. from YSDA_DOC_NUMBER
    FORM F_GET_CURRENT_REPORT_NUMBER.
      DATA: LV_RC LIKE SY-SUBRC.
      CHECK SY-BATCH = GC_X.
      DO 3 TIMES.
        PERFORM F_LOCK_OBJECT CHANGING LV_RC.
        IF LV_RC <> 0.
          PERFORM F_WAIT.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      IF LV_RC <> 0.
        PERFORM F_UNLOCK_OBJECT.
        PERFORM F_LOCK_OBJECT CHANGING LV_RC.
      ENDIF.
      SELECT SINGLE YY_PRINT_NO
        INTO GV_REP_NO
        FROM YSDA_DOC_NUMBER
    *-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
        where yy_plant  = P_WERKS
    *<-- End of G9DK9A09ND
       WHERE YY_PLANT IN S_WERKS
        AND YY_YEAR = P_YEAR
         AND YY_DOCUMENT_CODE = GC_MEXP.
    *--> Begin of G9DK959869 KXSAWAS 02/02/2004
      IF SY-BATCH = GC_X.
        GV_REP_NO = GV_REP_NO + 1.
      ELSE.
        GV_REP_NO = 0.
      ENDIF.
    *<-- End of G9DK959869
    ENDFORM.                    " F_GET_CURRENT_REPORT_NUMBER
    *&      Form  F_GET_COMPANY_CODE
          text
    -->  p1        text
    <--  p2        text
    FORM F_GET_COMPANY_CODE.
    CLEAR: it_t001k-bwkey.
    Validate input data against master table of SAP
    Validate company code  against T001k
      IF NOT P_BUKRS IS INITIAL.
        SELECT  T001K~BUKRS
                T001K~BWKEY
                T001W~WERKS
          INTO CORRESPONDING FIELDS OF TABLE IT_T001K
          FROM T001K
      INNER JOIN T001W ON T001W~BWKEY = T001K~BWKEY
          WHERE  BUKRS = P_BUKRS
          AND WERKS IN S_WERKS.
         APPEND IT_T001K.
         select t001kbukrs t001kbwkey t001w~werks
         into corresponding fields of table itab
            from t001w
                  inner join t001k
                      on t001kbwkey = t001wbwkey.
        LOOP AT IT_T001K.
       it_t001k-bwkey = it_t001w-werks.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " F_GET_COMPANY_CODE
    *&      Form  F_EXTRACT_RAW_DATA
          Extract entries from YSDA_EXP_PRTLOG
    FORM F_EXTRACT_RAW_DATA.
      SELECT YY_PLANT
             YY_HEADER_TYP
             YY_INTERNAL_NO
             YY_PRINT_DATE
             YY_PRINT_TIME
             YY_DOCUMENT_CODE
             YY_HEADER_TYP
             YY_DELIVERY
             YY_INVOICE_AMT
             YY_EX_RATE
             YY_CURRENCY
            YY_INTERNAL_NO                  "G9DK962238
             YY_EXTERNAL_NO
             YY_COMMODITY
             YY_REPORT_FLAG                                     "G9DK962077
        INTO corresponding fields of TABLE IT_RAW
        FROM YSDA_EXP_PRTLOG
      WHERE YY_PLANT IN S_WERKS
    **-->Begin of G9DK9A09ND -VSRKODA -09/07/2007
        where yy_plant  = s_werks
    **<-- End of G9DK9A09ND
        and  YY_PRINT_DATE IN S_PERIOD+
         AND YY_REPORT_FLAG <> 'X'                              "G9DK973032
         AND YY_HEADER_TYP <> 'T2L'                           "G9DK9A02DZ
         AND YY_ANNULATION <> 'X'.
    *If run by batch job
    *--> Begin of G9DK959869 KXSAWAS 02/02/2004
    *--- Comment out ---
    IF sy-batch EQ gc_x.
       IF NOT it_raw[] IS INITIAL.
         LOOP AT it_raw.
    **Update YY_REPORT_FLAG EQ 'X'
           UPDATE ysda_exp_prtlog SET yy_report_flag = gc_x
                         WHERE yy_plant  = p_werks
                         AND   yy_print_date = it_raw-print_date
                         AND   yy_print_time = it_raw-print_time
                         AND   yy_document_code = it_raw-document_code.
         ENDLOOP.
       ENDIF.
    ENDIF.
    *<-- End of G9DK959869
      LOOP AT IT_RAW.
        IT_RAW-HEADER_SHT = IT_RAW-HEADER_SHT+0(3).
        MODIFY IT_RAW.
      ENDLOOP.
      SORT IT_RAW BY WERKS HEADER_SHT INTERNAL_NO               "G9DK962271
      PRINT_DATE.                                               "G9DK962238
    ENDFORM.                    " F_EXTRACT_RAW_DATA
    *&      Form  F_PROCESS_DATA
          Extract all required data
    FORM F_PROCESS_DATA.
      PERFORM F_EXTRACT_DOC_FLOW.
      PERFORM F_EXTRACT_INCO_TERM.
      PERFORM F_EXTRACT_DELIVERY_DATA.
      PERFORM F_EXTRACT_INVOICE_DATA.
      PERFORM F_EXTRACT_EXPORT_DATA.
      PERFORM F_EXTRACT_HEADER_DATA.
      PERFORM F_EXTRACT_COMPANY.                                "G9DK959869
      PERFORM F_CLASSIFY_DATA.
    ENDFORM.                    " F_PROCESS_DATA
    *&      Form  F_EXTRACT_DOC_FLOW
          Extract Sale data
    FORM F_EXTRACT_DOC_FLOW.
      IF NOT IT_RAW[] IS INITIAL.
        SELECT VBELV
               VBTYP_N
               ERDAT
               ERZET
               VBELN
          INTO TABLE IT_DOC
          FROM VBFA
          FOR ALL ENTRIES IN IT_RAW
         WHERE VBELV = IT_RAW-DELIVERY
          AND ( VBTYP_N = 'M'
             OR VBTYP_N = '5' ).
        SELECT A~VBELN
               A~VBELV
               B~AUART
               B~KNUMV
               B~KALSM                                          "G9DK960368
               B~WAERK                                          "G9DK960368
               B~KNUMA                                          "G9DK960368
          INTO TABLE IT_SALES
          FROM VBFA AS A INNER JOIN VBAK AS B
            ON AVBELV = BVBELN
          FOR ALL ENTRIES IN IT_RAW
         WHERE A~VBELN = IT_RAW-DELIVERY
           AND A~VBTYP_N = GC_J.
      ENDIF.
      SORT IT_SALES BY VBELN VBELV.
      DELETE ADJACENT DUPLICATES FROM IT_SALES COMPARING ALL FIELDS.
      SORT IT_DOC BY VBELN ASCENDING
                     FKART ASCENDING
                     ERDAT DESCENDING
                     ERZET DESCENDING.
      DELETE ADJACENT DUPLICATES FROM IT_DOC COMPARING ALL FIELDS.
      IF NOT IT_SALES[] IS INITIAL.
        SELECT KNUMV
               KBETR
               WAERS                                            "G9DK960368
          INTO TABLE IT_KSCHL
          FROM KONV
          FOR ALL ENTRIES IN IT_SALES
         WHERE KNUMV = IT_SALES-KNUMV
           AND KSCHL = GC_GRWR.
      ENDIF.
      SORT IT_KSCHL BY KNUMV.
    ENDFORM.                    " F_EXTRACT_DOC_FLOW
    *&      Form  F_EXTRACT_INCO_TERM
          Extract inco term
    FORM F_EXTRACT_INCO_TERM.
      IF NOT IT_SALES[] IS INITIAL.
        SELECT VBELN
      

    What's wrong with F_GET_COMPANY_CODE ?  Below is similar code - try running this and seeing what you get:
    report zlocal_jc_t001w.
    tables:
      t001k,     "Valuation area
      t001w.     "Plants/Branches
    parameters:
      p_bukrs          like t001k-bukrs default '1000'.
    select-options:
      s_werks          for t001w-werks.
    start-of-selection.
      perform get_data.
    *&      Form  get_data
    form get_data.
      data:
        begin of gt_t001k occurs 10,
          bukrs             like t001k-bukrs,
          bwkey             like t001k-bwkey,
          werks             like t001w-werks,
        end of gt_t001k.
      select
        t001k~bukrs
        t001k~bwkey
        t001w~werks
        into corresponding fields of table gt_t001k
        from t001k as t001k
        inner join t001w as t001w on t001w~bwkey = t001k~bwkey
        where t001k~bukrs = p_bukrs
        and   t001w~werks in s_werks.
      loop at gt_t001k.
        write: /
          gt_t001k-bukrs,
          gt_t001k-bwkey,
          gt_t001k-werks.
      endloop.
    endform.                    "get_data
    As for links to locally defined database tables, that will depend on what the keys defined in SE11 are e.g. there will be a primary key plus relationships to other tables (for example "WERKS LIKE YSDA_EXP_PRTLOG-YY_PLANT" indicates YY_PLANT relates to T001W).
    Jonathan

  • Best report to check application and package deployment compliancy?

    I am looking for the best report to check application and package deployment compliancy.
    Preferably targeting a collection.
    tconners

    I'm recommending this one:
    Software Distribution - Application Monitoring folder -
    All application deployments (advanced)
    It allows you to select Collections and applications
    Kent Agerlund | My blogs: blog.coretech.dk/kea and
    SCUG.dk/ | Twitter:
    @Agerlund | Linkedin: Kent Agerlund |
    Mastering ConfigMgr 2012 The Fundamentals

  • Hi, my MacBook Pro cannot open Safari. nexpectedly while using the librooksbas.dylib plug-in" the report details the exception code as 'EXC_BAD_ACCESS (SIGSEGV)' and exception codes as: 'KERN_INVALID_ADDRESS at 0x0000000920

    Hi, my MacBook Pro cannot open Safari. It crashes and gives the message, ' Safari quit unexpectedly while using the librooksbas.dylib plug-in" the report details the exception code as 'EXC_BAD_ACCESS (SIGSEGV)' and exception codes as: 'KERN_INVALID_ADDRESS at 0x0000000920

    Remove "Rapport" by following the instructions on this page.
    Back up all data before making any changes.

  • T-code for cancelled Invoice and cancelled Excise Invoice

    Dear Guru,
    kindly let me know the T-code for cancelled Invoice and cancelled Excise Invoice.
    Wishes,
    Abhishek

    Hi Abhishek,
    I am not aware of any T-code through which you can see the cancelled invoice. I think either you have to go for development (SQVI)
    or
    Extract the list of your all billing document like billing document created from 01.01.2010 to 22.04.2010
    Now go to SE16 --> Table VBFA --> Give your billing document number in field "Preceding Doc." --> and in the field "Subs.doc.categ." --> choose entry "N     Invoice cancellation" --> system will show you all the entries for which cancellation billing document has been created.
    or
    Go to SE16 --> Table VBRK --> enter your billing document list --> In the field "Posting status" --> Choose  option "E      Billing Document Canceled"
    Hope it helps,
    Regards,
    MT

  • Best way to create tasks and assign to sharepoint groups

    Hi everyone, I have a custom list which contains newsletter info that is to be seen by around 400 groups (they are stores) and then I need them to mark each list item as 'completed'
    I have been trying to figure out the best way to do this and decided to keep the custom list and somehow link it to a task for each item in the list. We have nintex so was thinking of creating a workflow to create a separate task for each group (store) so
    they can mark it as completed.
    Is this the best way to go about it or am I completely off track?
    Basically all I need is a list which contains around 30 items and around 400 groups (stores) which contain users (store staff) to be able to mark items on the list as completed so it recognises that each store has completed each task.
    Thanks

    Hi  ,
    According to your description, you want to find the best way for creating tasks for 30 list items and assigning the task to around 400 groups.
    For the workflow, it is heavy  that  you need to create around 12000 (30*400) tasks .  In my opinion, the best way is to do with a custom timer job. For more information, you can refer to the
    blog:
    http://www.splessons.com/2013/12/create-a-timer-job-in-sharepoint-2013/
    Thanks,
    Eric
    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support,
    contact [email protected]
    Eric Tao
    TechNet Community Support

  • Best practices for cleaning up and upgrading

    Apologies in advance, as I know there is a wealth of info and ideas on this topic, but I'm looking for the best possible combination of simplicity and effectiveness and the community has done well by me in the past.
    Situation:  I have this old MacBook
    Model Name: MacBook
      Model Identifier: MacBook6,1
      Processor Name: Intel Core 2 Duo
      Processor Speed: 2.26 GHz
      Number of Processors: 1
      Total Number of Cores: 2
      L2 Cache: 3 MB
      Memory: 4 GB
      Bus Speed: 1.07 GHz
      Boot ROM Version: MB61.00C8.B00
      System Version: OS X 10.9.5 (13F34)
      Kernel Version: Darwin 13.4.0
    HD- Available: 6.22 GB
      Capacity: 249.2 GB
    Literally the only paid software that I have on here and need to keep is Microsoft Office.  I do not have the original install disk for this software.
    This machine is running very very slowly, and not much hard disk space left.  I'm not doing very well at cleaning up.
    I have brand new Time Machine backup and I have some pretty old Time Machine backups, pre Mavericks.
    I have a new 2TB external drive.
    I'm looking for the most effective way to speed this one up and make it as lean as possible and, if advisable, upgrade to Yosemite.
    Any recommendations?
    I'm willing to spend a little money if it can make a substantial difference.
    Thanks and apologies for length of post.
    RW

    Hi,
    First thanks for this.  This application has been really helpful.  I've deleted a lot of the easy stuff (music, pics, videos) and am now getting down to some of the stuff I'm less comfortable whacking without some guidance.  Here's an example.  I don't use the Mail application at all (use Gmail).  Here is what I see on OmniDisk Sweeper:
    https://www.dropbox.com/s/6iedkj46u4jaxbf/Screenshot%202014-11-08%2010.26.33.png ?dl=0
    I think the bulk of this is just messages from my gmail account, from a failed attempt to use Mail a bit years ago.  So can you help with at which point I can delete?  Hope question make sense.  You've helped a lot so far and I've freed up about 45 gb so far.
    Rob

  • What are the best apps to monitor tests and emails on childs phone

    what are the best apps to monitor tests and emails on childs phone?

    You could simply log into your child's email with the password that the two of you agree upon, and monitor the emails manually.  As for the texts, you could purchase a separate device, and use the child's Apple ID to monitor the iMessages.  For SMS/MMS, no way to monitor it.  You'll have to use the app called 'Random Parental Inspections'.

  • I participated in getting the free download of Mountain Lion for new Mac owners. It took me three days to finally get a code to do it and when I tried downloading it, the estimated time was 74 days 17 hours. Now an error occurred. What do I do?

    I participated in getting the free download of Mountain Lion for new Mac owners. It took me three days to finally get a code to do it and when I tried downloading it, the estimated time was 74 days 17 hours. Now an error occurred. What do I do? I am very frustrated and just want the great software to download in a resonalbe time!

    Take your Mac to a location with a fast, relaible Internet connection that will be all yours during the duration of the download.
    If you want to complain, PLEASE call Apple and do so.
    Internet only downloads of OS X is completely stupid, it assumes everyone has reliable Internet everywhere and /or no data caps.

  • How to get the table_name and its count(*) in a SQL

    Hi,
    Can anybody tell me how to write a sql to get the table_name and its count(*) in a SQL:
    Output should be:
    table_name count(*)
    XXX 261723
    YYY 3343
    Regards,
    G. Rajakumar.

    hello
    there r a lot ways
    i'll suggest u two of them
    1) the following dynamic sql procedure
    DECLARE
    TYPE array_type IS TABLE OF VARCHAR(30);
    TYPE cur_typ IS REF CURSOR;
    c1 cur_typ;
    count1 integer;
    tab_arr array_type;
    querystr varchar2(200);
    begin
    SELECT table_name bulk collect into tab_arr FROM sys.all_all_tables ;
    FOR I IN tab_arr.first..tab_arr.last LOOP
    DBMS_OUTPUT.PUT(TAB_ARR(I));
    querystr := 'select count(*) from ' ||TAB_ARR(I);
    open c1 for querystr;
    fetch c1 into count1;
    EXIT WHEN c1%NOTFOUND;
    dbms_output.put_line(count1);
    END LOOP;
    close c1;
    END;
    2) or use ANALYZE to analyze the tables and get the number of rows in the NUM_ROW column of DBA_TABLES view.
    if u still have any problem mail me at [email protected]
    shalini

  • Best Practice for Multiple iTunes and One Account?

    My wife and I share our account for our iPhone Applications and Songs in iTunes.
    Can someone point me to a topic that covers a best practice for multiple iTunes syncing?
    I travel a lot and keep my iPhone synced to my Macbook Pro while she uses the workstation at home to sync to. We keep the addresses and contacts and calendars synced through MobileMe, however, I'm trying to find the best way of pushing applications and songs I've bought over to the other PC so they're still around while I'm traveling for her to sync with.
    Thoughts?

    Hi Steve,
    Might be trying for solution for a long time, If i understood your question clear let me clarify you few points.
    You are trying to access the bex query which is designed with the exit's in the background based on the logic and trying to call the entire dimensions and key-figures in a single connection. Then you are trying to map those data in the charts.
    Steve, try to make more connections based upon the logic and split them. use the same query but split them by sales per customer group, sales per day, sales per week by making three different connections and try. You can merge the prompts from all connections.
    Hope this Helps!!!
    Sorry if i misunderstood your question.
    --SumanT

Maybe you are looking for

  • 9.0.115 problems

    When trying to instal KB923789 (flash player security) I get 3 messages: 1. Gen Warn: Te version of Windows (XPpro/SP2/IE7) you have installed does not match the update you are trying to install. 2. Gen Warn Flash: The version of Macromedia Flash you

  • How to view preview while rendering?

    Hey everyone, Newbie to  PSE 8. How do I see a preview while Elements is rendering video? I'm  used to other programs like Roxio Video Wave and Cyberlink Powerdirector  showing the movie as it's being rendered. Is there a way to turn this on in  Elem

  • How to display icon files in mac

    In JLabel how to add icon files with ext .ico from MAC OSX

  • Why cant i get java to work on windows xp and what can i do about it

    I have used java before on windows 98 and windows 2k and didnt have any problems. However, now im using win xp and it just doesnt work. When i use the java command from the command prompt nothing happns..sometimes an msdos windows pops open ans close

  • I am running OSX 10.7 and a shared computer shows up on my Finder list. How do I delete it?

    When I bought my Mac Air in 2012, I transferred all my windows data to my Mac Air after I installed Parallels. Windows has run perfectly since then.  However, why does the name of my old PC show up in my Shared list of computers on my Wi-Fi? Since it