The problem we need to solve:
- In this particular field on the interface file, we want to show the work order, if the work order has been defined.
- BUT, if it has not been defined, we want to use the distribution code.
- UNLESS the transaction is for a BURDEN posting, then we need to replace the last four characters of the work order with a constant 8299.
A pseudo-code interpretation could look like this:
decode (WORK_ORDER, <--- Check the Work Order null , DISTR_CODE <--- If it is NULL (not provided) then use the Distribution Code , <--- otherwise (not a paired set of values for the DECODE ... decode (GL_ACCOUNT_CODE, <--- Check the GL ACCOUNT CODE 'D-BURDEN EXP', <--- If it is the code used for Burden then ... substr(WORK_ORDER,1, <--- Get the Work Order from the first character to where the ‘/’ is in WORK_ORDER) ||'/8299', <--- Concatenate the constant value WORK_ORDER) <--- Otherwise just use the WORK ORDER )
We see that these pieces are available in the GL BUFFER:
- WORK_ORDER 523 for 50 chars.
- DISTR_CODE 51 for 50 chars.
- GL_ACCOUNT_CODE 101 for 16 chars.
We will want to remove trailing blanks and so we can replace them as follows
WORK_ORDER | rtrim(substr(~,523,50)) |
DISTR_CODE | trim(substr(~,51,50)) |
GL_ACCOUNT_CODE | rtrim(substr(~,101,16)) |
Now we can replace the pseudo code with the real derivations:
decode (rtrim(substr(~,523,50)), null,rtrim(substr(~,51,50)) , decode (substr(~,101,12), 'D-BURDEN EXP', substr(rtrim(substr(~,523,50)),1, instr(substr(~,523,50),'/')-1) || '/8299', rtrim(substr(~,523,50))) )