13
Summary Symptom This note deals with frequently asked questions about validation and substitution maintenance. Solution I. Creating, activating and transporting validations and substitutions 1. Which transactions are required to use validation or substitution functions? GGB0 Validation Maintenance GGB1 Substitution Maintenance GCVZ Rule Maintenance GGB4 Select action for validation/substitution, for example, activation of application areas, message usage or substituted fields GCX2 Definition of Includes for User Exits OB28 Activation of FI validations OBBH Activation of FI substitutions OBBZ Activation of cost of sales accounting substitution (in the FI area) OKC7 Activation of CO validations OKC9 Activation of CO substitutions GCT9 Transport: Validations GCT0 Transport: Substitutions 2. What must I take into account when using the formula editor? a) Validation GGB0 If you create the first validation for a callup point, for example 'Financial ccounting - document header', you must define a message class. This is then valid for ALL validations for this callup point. Not all fields can be used for validations for certain callup points, for example 'Complete document in FI'. This is because there are several rows and it is not clear on which row the check is to be carried out. You can only use numeric fields here. (Note 413956) You should use a user exit if you need more checks on this callup point.

GGB0

Embed Size (px)

Citation preview

Page 1: GGB0

Summary

Symptom

This note deals with frequently asked questions about validation and substitution maintenance.

Solution

I. Creating, activating and transporting validations and substitutions

1. Which transactions are required to use validation or substitution functions?

      GGB0     Validation Maintenance      GGB1     Substitution Maintenance      GCVZ     Rule Maintenance      GGB4     Select action for validation/substitution, for example, activation of application areas, message usage or substituted fields      GCX2     Definition of Includes for User Exits

      OB28     Activation of FI validations      OBBH     Activation of FI substitutions      OBBZ     Activation of cost of sales accounting substitution (in the FI area)      OKC7     Activation of CO validations      OKC9     Activation of CO substitutions

      GCT9     Transport: Validations      GCT0     Transport: Substitutions

2. What must I take into account when using the formula editor?a) Validation GGB0

If you create the first validation for a callup point, for example 'Financial ccounting - document header', you must define a message class. This is then valid for ALL validations for this callup point.

Not all fields can be used for validations for certain callup points, for example 'Complete document in FI'. This is because there are several rows and it is not clear on which row the check is to be carried out. You can only use numeric fields here. (Note 413956)You should use a user exit if you need more checks on this callup point.

b) Substitution GGB1

If you create a substitution, for example "Financial accounting - document line item", only certain fields are authorized for the substitution. This is because it may lead to problems with the documents or inconsistencies between different applications.It is possible to release more fields for substitution. However, this can be critical, as serious problems can occur as a result.This is why you should regard the following change as a modification (Note 170183):The table GB01 contains information about which table fields can or cannot be substituted

Page 2: GGB0

for which callup point.A field can be substituted if you change the field BEXCLUDE to ' '.

For example: 'Complete document' callup point in FIAs standard, no field is released for substitution for this callup point. You can see this in the following entries:

BOOLCLASS CLASSTYPE    BCLTAB       BCLFIELD      BEXCLUDE  015         S          BKPF            *            X  015         S          BSEG            *            X

BOOLCLASS - Specifies the Boolean class. This is determined in the application area and callup point in each case, for example:                  008 - Document header (FI)                  009 - Line item (FI)                  015 - Complete document (FI)                  016 - Cost of sales accounting                  100 - Document header (CO)CLASSTYPE - Specifies if the field can be used for validations (B), substitutions (S) or both (A).BCLTAB    - Table that is usedBLCFIELD - Field of this tableBEXCLUDE - Can be used ' ' or cannot be used 'X'.

As mentioned above, you should regard this change as a modification. Problems that occur as a result of this change cannot be handled in 'standard' support.

3. What must I take into account when activating validations or substitutions?

You can activate validations and substitutions in two ways.Activation level:  1 - Active            2 - Active, except during 'batch input' processing

Because the activation in financial accounting (FI) is company code-specific, you should activate the validations or substitutions in both company codes in the case of cross-company code transactions.

4. What must I take into account when transporting validations or substitutions?

Usually, only table entries are transported when validations or substitutions are transported. The generated source code should not be transported, as this can cause problems. After the import into the target system, the source code is generated automatically when you start the report RGUGBR00 is started.

If you want to delete a validation/substitution, and do not want to do this in each system individually, proceed as described in Note 840981.

II. Using user exits in validations or substitutions

Page 3: GGB0

1. Where can I maintain user exits for validations and substitutions?

The exits for validations and substitutions are stored in an include of your choice.The following includes are delivered as examples by default:         RGGBR000 Val/Sub: Exits for rules         RGGBS000 Val/Sub: Exits for substitutionsYou should copy these into the customer namespace, for example ZGGBR000.The length of the name you choose should not exceed 8 characters. This is because the name is also generated in the source code, and it may exceed a certain line length.You can also create a separate include for each client, which can improve performance.

In transaction GCX2, you should then define where your include is used. To do this, enter the name of your include as a FORM pool in the relevant application area.

2. How should I create a user exit?

Define your user exit in the FORM routine GET_EXIT_TITLES with the correct exit type (EXITS-PARAM). You can use the existing sample entries as a template for this.

The exit types required in the FORM routine GET_EXIT_TITLES are organized as follows:

C_EXIT_PARAM_NONE   No parameter

Apart from the return value (B_TRUE or B_FALSE), you do not need any parameters for the validation. If you do not want to substitute a field, use this parameter in the substitution (select "Only exit").

However, you must then use a TABLE statement in the FORM pool (not in the actual form) to identify the relevant structure.

C_EXIT_PARAM_FIELD A Field is transferred as a parameter

You only use this type in the substitution. Exactly one field is substituted. Enter user exits of this type in the substitution maintenance instead of assigning a constant value.

C_EXIT_PARAM_CLASS  A complete type is transferred as a parameter

Matrix validations/substitutions ("Only exit"). This exit type can only be used for callup points with complete documents, for example in FI and LC. You cannot use this exit type for any other callup points. The transferred type contains all information about a class. An example is the use of the document header and all corresponding line items in the FI area.

In the FORM routine GET_EXIT_TITLES, change the fields NAME and TEXT of the internal table EXITS to the values you want.

Use one of the sample routines as a template and copy these to the names you selected. You can now implement the functions you want in this FORM routine.

Page 4: GGB0

After you have finished creating the user exit, you can use it in your validations or substitutions.

3. What must I take into account when implementing the user exit?

No dialog boxes, warning messages, information or error messages must be issued in an exit, and a "COMMIT WORK" must not be rejected. This would, for example, interrupt the batch processing or cause problems with the documents to be posted. If you find a serious error in the field contents in the exit, send a termination message (A or X), which will ensure that the transaction is terminated.

Do not use any ABAP commands that cause you to leave the exit directly, for example 'LEAVE (TO) SCREEN ...', 'SUBMIT <REPORT> ...', 'CALL TRANSACTION ...' or a call of the F4 help.

In an exit, use only structure fields that belong to the Boolean class of the calling substitution, validation or rule. The other structure fields are not filled or are not filled properly for the callup point of the calls of the substitution, validation or rule.

You may make changes to field contents in a substitution exit only if this field can be substituted in the Boolean class. You can display these fields by choosing "Add entry" in the substitution maintenance.

In the includes of the substitution exits, you must not use the commands MODIFY, INSERT or DELETE in the internally used structures such as BSEG or BKPF. These structures are interpreted internally as database tables because they are defined by a TABLES statement. As a result, the system writes, deletes or changes database records if you use the commands mentioned above. This can cause serious inconsistencies and problems in the document processing.

If you want to change field contents in the exit type C_EXIT_PARAM_CLASS, you should make the changes in the internal table BOOL_DATA (for example BOLL_DATA-BSEG).

III. Problem analysis

1. What must I take into account before I analyze the problem?

Before you analyze a problem with validations/substitutions, make sure that the generated source code is up to date. You can use the report RGUGBR00 to do this.Call this report in transaction SE38. You see the following selection screen:

Application area             '    'Application callup point   '    '

' ' Regenerate main program' ' Generate table file' ' Generate rules' ' Generate validations' ' Generate substitutions' ' Generate sets

Page 5: GGB0

' ' Generate rule use' ' ' Generate validation use' ' ' Generate substitution usage' ' ' Generate substitution export routines' ' Generate substitution routines in all clients' ' ' Generate trace program calls

Now update the source code for the application area and application callup point in which the validation or substitution was created.To do this, enter the application area, for example FI, and the application callup point (0003/complete document), and set all indicators except for 'Generate substitution routine in all clients' and 'Generate trace program calls'. Then execute the report.

The source code is now at its current status.

2. How can the validation and substitution trace be used?a) Validation trace

You created and activated a validation.You can now activate the trace, for example in transaction GGBO. To do this, select the validation and choose 'Extras -> Activate trace'.Example:You created an FI validation for the callup point 'Line item'. To test the validation, call transaction FB01, for example. The trace is displayed as soon as the validation has run. You can now see different things in the trace, for example the values contained in the fields of the various structures. From this, you can see whether additional checks are required, or what the cause of a problem is.

b) Substitution trace

Activate the trace in the same way as you activate validations.Example:You created a substitution in the same way as you activated the trace for the validation described above. The trace for substitutions has an additional function, in that you can view the field contents before and after the substitution. There, problems can be reproduced in the same way.

3. How can I use the Debugger to analyze a problem?a) Basic information

All includes for validations and substitutions are created in this form: GBTmmaa0.mm stands for the two-digit client key.   You can use the function module G_CLIENT_ENCODE to convert a three-digit client (>099) to a two-digit client, for example, client 100 --> AA                client 800 --> TQAA stands for the application area, for example FI --> Financial Accounting                                        CO --> Cost Accounting   You will find this abbreviation in the maintenance transaction.   Therefore, GBTAAFI0 is the include in client 100 for FI validations and substitutions.

b) Structure of the includes and FORM routines for validations and substitutions and tips on how to debug

Page 6: GGB0

The includes listed above are structured as follows (sample include in FI, Client 800):

INCLUDE GBTTQFIA.      " RulesINCLUDE GBTTQFIB.      " SubstitutionsINCLUDE GBTTQFIC.      " Substitution conditionsINCLUDE GBTTQFID.      " ValidationsINCLUDE GBTTQFIE.      " Validation conditionsINCLUDE GBTTQFIF.      " Validation checksINCLUDE GBTTQFII.      " Application rulesINCLUDE GBTTQFIJ.      " Subst. export routinesINCLUDE GBTTQFIM.      " Trace/simulationINCLUDE GBTTQFIS.      " Subst. import routines

c) The form routines for validations have the following sample structure (sample validation with the name VAL01):

FORM VAL_VAL01.  G_BFOUND = B_TRUE.  DATA:  COND  LIKE D_BOOL,         CHECK LIKE D_BOOL,         NVALSEVEREST LIKE SY-SUBRC VALUE -1.

  G_STEP = '001'.  PERFORM VALCOND_1VAL01##001                  CHANGING                  COND.

   IF COND = B_TRUE .     PERFORM VALCHCK_2VAL01##001                  CHANGING                  CHECK.

      IF CHECK = B_FALSE .        PERFORM MESSAGE_OUTPUT                  USING                  " ...message parameter                  CHANGING                  NVALSEVEREST.      ENDIF.    ENDIF.ENDFORM.                                              " VAL_VAL01

The statement G_STEP = '001' indicates the step that is executed.The prerequisite of the step is defined in the FORM routine VALCOND_..., and the FORM routine VALCHCK_... checks the validation step.

To analyze this step, you should create breakpoints on these two PERFORM statements and also on the code line 'IF CHECK = FALSE'. This allows you to determine whether your prerequisite or the check is causing the problem, for example if a field that is to be checked does not contain the value that you expect.

d) The FORM routines for substitutions have the following sample structure (sample substitution with the name SUB01):

Page 7: GGB0

FORM SUB_SUB01.  G_BFOUND = B_TRUE.  DATA:  COND  LIKE D_BOOL.  G_CLASSID = '009'.  G_SUBST_PERFORMED = B_FALSE.

  IF G_TAB_FLAG-BSEG <> B_TRUE .    PERFORM READ_MASTER_DATA               USING               'BSEG'               G_BFOUND.     IF  G_BFOUND = B_FALSE .       MESSAGE E083 WITH  'BSEG'.     ENDIF.  ENDIF.

  G_STEP = '001'.  PERFORM SUBCON_3SUB01##001               CHANGING               COND.

  IF COND = B_TRUE .    BSEG-SGTXT = 'This is a Test'.     " Text    G_SUBST_PERFORMED = B_TRUE.  ENDIF.ENDFORM.                                              " SUB_SUB01

As mentioned above for validations, 'G_STEP = '001' indicates the step, and the prerequisite of the substitution is defined in FORM routine SUBCON_....  The actual substitution is performed by the statements in the structure IF COND = B_TRUE --> ENDIF. These statements vary depending on the type of substitution created (field allocation, constant value, user exit).

In the substitutions, you should also set a breakpoint for the PERFORM on the prerequisite and the statement 'IF COND = B_TRUE'.

4. Function modules that call validations and substitutions

Validations - Function module G_VSR_VALIDATION_CALLThe different structures/tables, the name of the validation, callup point and application area are assigned to this function module.Substitutions - Function module G_VSR_SUBSTITUTION_CALLThe parameters transferred to validations are also transferred to this function module. However, this function module also returns the structures or tables that contain the changed values.

You could set a breakpoint to analyze both function modules. By doing this, you can see which data was transferred, which data the validation or substitution receives, and which values are returned.

5. What must I take into account when using the set?

Page 8: GGB0

When sets are used in validations or substitutions, the system generates source code from the values in the sets.Performance problems can occur if a set is of a certain size, since the generated source code causes longer runtimes.This can also cause a runtime error.

To reduce the size of the source code of the sets used, proceed as follows:

Use a smaller set in the validation, substitution or rule. To do this, group single values in the set into intervals (for example, instead of the single values 0001, 0002 and 0003, use the interval 0001 - 0003).

instead of "<value> IN SET" use the rule "( <value> IN SET1 OR <value> IN SET2 )", where SET1 and SET2 together include the values from SET (for example, subhierarchies at the highest hierarchy level).

The simplest way to determine the number of single values or intervals in a set hierarchy is to execute the program RGSEX000.Enter the name of the set and execute the program. All contained sets and values/intervals are listed and the sequence number of the entries is contained in the first column.

6. Why does a validation or substitution work in the development system, but not work in another system after a transport?

You should make sure that validations and substitutions are activated in the target system. You can also use the report RGUGBR00 to regenerate the source code again.

There could be another cause in substitutions:You try to substitute a field that is not released by SAP as standard. To substitute a field, you have adjusted the table GB01 in your development system. However, this table was not adjusted in the target system. The generated source code is correct and the value was changed in the substitution, but the change was not returned to the calling application using the export routines.

Summary

Symptom

A substitution has been defined but nothing is substituted when posting.

Other terms

Substitution exit, user exit, GGB1, OBBH, FB01, MR01, MR1M, PERFORM_PARAMETER_TOO_SHORT, MRHR, MRHG, MR21, MIRO

Reason and Prerequisites

Note:If you use a substitution exit, make sure that only fields are replaced and that no side effects occur. For example, you must not trigger any error message, since this would interfere with the SAP program control. You have to issue your error messages in validation. In substitution and validation, error messages of category W, I are always only generated for the manual

Page 9: GGB0

entry in FI and for the invoice verification MR01. For postings from other application components (for example, from SD (VF01) or from the logistics invoice verification (MR1M)), error messages of category W, I are ignored.

Possible causes are:

1. The requirement specified as a prerequisite has not been met for the posting.2. The substitution was not activated in Customizing (Transaction OBBH) or it is not activated for batch input.3. Not all the values are available yet for callup point 1 and 2 for the substitution or validation in Transactions MR01, MRHR, MRHG, MR21, etc. (all with program SAPFMM08R). You should therefore use callup point 3 for the validation in these transactions. The values for callup point 1 and 2 are already available in the logisitics invoice verification (MR1M).4. A substitution for reversal postings (FB08, F.80) was defined. No substitution for callup point 1 - 3 takes place in FI for reversals, because the reversal document must resemble the document to be posted (except the exchanged debits and credits).5. An attempt was made to use a substitution exit to substitute a field which has not been released for substitution. When defining a substitution, you will find the fields that can be substituted under the "Extras -> Fields for substitution" menu option.6. A customer-defined field ZFELD was included in table BSEG. Such fields are not substituted during postings (from other modules) via the FI/CO interface. You must enhance the coding block so that ZFELD is substituted.

The substitution callup points available with Release 3.0 are primarily intended not as an input help, but above all to allow costumer-specific fields to be supplied with values without program modifications. So that, if possible, all values for standard fields are available here, the substitution callup point is only after the checks in the standard system. After the substitution no further check is carried out. Only those standard fields are released for substitution which meet the following requirements:

1. Values are not critical for further processing and are not validated against other tables.2. Substitution is carried out for all documents that are posted.

Therefore only relatively few fields can be substituted for callup points 1 (document header) and 2 (line item). At callup point 3 (complete document), no field has currently been released since substitution is not possible for all transactions by which documents are posted (for example MR1M, VF01, MB01 or all postings via the FI/CO interface).Please also refer to Note 386896.Fields of the coding block can be set at callup point 1 via the substitution in CO (Transaction OKC9).

Solution

You can carry out a substitution for some fields. If invalid values are substituted in this case, you may receive the wrong function or error messages in standard programs. However, these errors are not particularly critical. You can currently release the following fields for substitution:BSEG-FIPOS, BSEG-HBKID, BSEG-MSCHL, BSEG-MANSP, BSEG-MADAT, BSEG-MANST, BSEG-MABER, BSEG-RSTGR, BSEG-ZLSPR

Page 10: GGB0

Formally, this is a modification. Therefore, you can also change entries in the table via SAP transports with a release upgrade (refer to Note 0391309).If you release fields other than the ones listed for substitution, then you must take responsibility for all the consequences!Important: At callup point 2 (BOOLCLASS = 009) NO fields must be released for substitution from the document header. Otherwise, the system generates a short dump (PERFORM_PARAMETER_TOO_SHORT).

In addition to accounts and amounts, the following fields, for example, are critical and must not be substituted:           GSBER: this could lead to inconsistencies with modules AM, CO and MM, since the business area is also used in these modules.

To make, for example, the BSEG-MABER field substitutable for callup point 2, proceed as follows:

1. Table entry in GB01

              With an ABAP/4 program, change the entry: BOOLCLASS CLASSTYPE BCLTAB     BCLFIELD   BEXCLUDE009       S         BSEG       MABER      X

              in table GB01 to the entry: BOOLCLASS CLASSTYPE BCLTAB     BCLFIELD   BEXCLUDE009       S         BSEG       MABER

              That is, the BEXCLUDE field must be set to space. There is no view for maintaining GB01.

              Note:

              BOOLCLASS = 008 at callup point 1. At callup point 3, a corresponding entry with BOOLCLASS = 015 must be inserted. In addition, the entry BOOLCLASS CLASSTYPE BCLTAB     BCLFIELD   BEXCLUDE015       S         BSEG       *          X

              must be deleted for the BSEG fields (the same applies to BKPF fields). For callup point 3, you can of course also release all fields for substitution which have already been released for callup point 1 or 2. At callup point 3, substitution is only carried out if the document is posted in FI (with program SAPMF05A or SAPF110S) or in MM invoice verification (with program SAPMM08R). When posting via the FI/CO interface, for example, with direct input (RFBIBL00 Mode 'D' or transfer billing document with Transaction VF01) no substitution is carried out.

2. Generation

              Using program RGUGBR00, regenerate the programs for the substitution in the current client. Parameter: "FI" application area, select the "Generate substitution export routines" checkbox (next to last checkbox).