To understand mailing address printing in Purchase Order Print (R43500) one main Business Function B4305231 - F0116GetMailingAddressFormatLang (Formatted Address - Language) has to be understood. This business function is cloned based on BSFN B0100021- FormattedAddress (Formatted Addresses Source File). Refer to <Document 1157643.1> E1: 40: Labeling/Formatting Mailing Address in EnterpriseOne to have better understanding on how B4305231 (F0116GetMailingAddressFormatLang, F0116 Get Mailing Address Format - Langauge) returns output based on a certain value determined.
Note:
Currently B0100021 is for printing Print Invoice (R42565)
Whereas B4305231 is to be used in printing Purchase Order Print (R43500)
In R42565 State will be written as UDC (00/S) code itself, but State Description will be printed in R43500 supposed that SAR 8768743 (or relevant) is in place
What are the report variables in printing Purchase Order?
Currently below report variable can be printed through R43500 (Print Purchase Order),
Column
Report Variable
Column
Report Variable
Shipped From
Sold To
Ship To
Ship To
RV Sold To Address Line 1
RV Ship To Address Line 1
RV Sold To Address Line 2
RV Ship To Address Line 2
RV Sold To Address Line 3
RV Ship To Address Line 3
RV Sold To Address Line 4
RV Ship To Address Line 4
RV Sold To Address Line 5
RV Ship To Address Line 5
RV Sold To Address Line 6
RV Ship To Address Line 6
RV Sold To Address Line 7
RV Ship To Address Line 7
Note: Report Variables written above is to show relationship with various variables to be handled in below routine
Pre-process Mailing Address
Formatted Address can be acquired either through F4006 (Order Address Information) or through F0116 (Address By Date). In printing Purchase Order, data from F4006/F0116 will be used before it calls B4305231. Unlike Print Invoice in Sales Order, Salutation, Attention is not to be utilized as only BSFN 0100067 has routine to print out these information. For further detail, please refer <Document 1173464.1> E1: BSFN: Information on Business Function B0100067-Formatted Address With Who's Who
In case you need to override Shipped From and Ship To mailing address for a specific order you have to override it through Purchase Order Header > (Form Exit) Order Addresses by specifying Address Type either Supplier (F4006.ANTY ='1') or Ship To (F4006.ANTY ='2')
Only two ANTY (Type- Address Number) are used in Procurement module, whereas in Sales, below types can be used,
1 Sold-to Address Number (Sales Orders) Supplier Address Number (Purchase Orders)
2 Ship-to Address Number
5 Deliver To
6 Forward To
7 Invoice To
Note:
Actual code and description in UDC (40|AN) may be different from actual implementation
New definition may not take effect as all the codes are hard coded through event rule of R42565 and BSFN B4006
B4305231 has additional parameter szLanguagePreference_LNGP which is Language preference for a specific Supplier (F4301.AN8). F0101.LNGP will be assigned to describe a specific State and Country Description
Then there are two different way to print out address one is based on order level (overridden) data from F4006 and the other one is based on F0116. For both cases, the way it calls B4305231 - F0116GetMailingAddressFormatLang (Formatted Address - Language) are same.
When F4006 is populated per specific Purchase Order how it prints output value?
Get it through B4006 - GetOrderAddress (F4006 Get Order Address) which returns MLNM, ADD1, ADD2, ADD3, ADD4, ADDZ, CTY1, COUN, ADDS and CTR
Assign it and let B4305231 return formatted data
1st., Get Order Address
F4006 Get Order Address (B4006 - GetOrderAddress) BC Document (Order No, Invoice, etc.) (F4301)(DOCO) -> BF mnDocumentNumber BC Order Type (F4301)(DCTO) -> BF szDocumentType BC Order Company (Order Number) (F4301)(KCOO) -> BF szDocumentCompany "1" -> BF cAddressNumberType /* To indicate Supplier Number */ RV Sold To (#1) <- BF szMailingName RV Sold To Address Line 1 (#2) <- BF szAddressLine1 RV Sold To Address Line 2 (#3) <- BF szAddressLine2 RV Sold To Address Line 3 (#4) <- BF szAddressLine3 RV Sold To Address Line 4 (#5) <- BF szAddressLine4 VA sec_ADDZ_PostalCode (#6) <- BF szPostalCode VA sec_CTY1_City (#7) <- BF szCity VA sec_COUN_County (#8) <- BF szCounty VA sec_ADDS_State (#9) <- BF szState VA sec_CTR_Country (#10) <- BF szCountry
2nd., Mailing Address Format
F0116 Get Mailing Address Format - Langauge (B4305231 - F0116GetMailingAddressFormatLang) RV Sold To (#1) <> BF szNameMailing_MLNM RV Sold To Address Line 1 (#2) <> BF szAddressLine1_ADD1 RV Sold To Address Line 2 (#3) <> BF szAddressLine2_ADD2 RV Sold To Address Line 3 (#4) <> BF szAddressLine3_ADD3 RV Sold To Address Line 4 (#5) <> BF szAddressLine4_ADD4 RV Sold To Address Line 5 <> BF szAddressLine5_ADD5 RV Sold To Address Line 6 <> BF szAddressLine6_ADD6 RV Sold To Address Line 7 <> BF szAddressLine7_ADD7 VA sec_CTY1_City (#7) -> BF szCity_CTY1 VA sec_ADDS_State (#9) -> BF szState_ADDS VA sec_ADDZ_PostalCode (#6) -> BF szZipCodePostal_ADDZ VA sec_CTR_Country (#10) -> BF szCountry_CTR VA sec_COUN_County (#8) -> BF szCountyAddress_COUN VA rpt_szLanguagePreference_LNGP -> BF szLanguagePreference_LNGP -> BF mnAddressNumber_AN8
Note: Same routine will be used when in printing Ship To. In this case, only difference is F4006.ANTY which is to be '2 - Ship To'
When F4006 is NOT populated how it prints output value?
Get MLNM, ADD1, ADD2, ADD3, ADD4, ADDZ, CTY1, COUN, ADDS and CTR through table I/O from F0111 - Address Book - Who's Who and F0116 - Address By Date
Assign it and let B4305231 return formatted data
Get Mailing Name from F0111.MLNM through BSFN B0100031 - GetMailingName (F0111 Get Mailing Name)
Get column values of ADD1, ADD2, ADD3, ADD4, ADDZ, CTY1, COUN, ADDS and CTR from F0116. To get the latest address information it compares F0116.EFTB (Date - Beginning Effective) with F4301.TRDJ (Date - Order/Transaction), then retrieve the latest data (F0116.EFTB should not be greater than Order Date but most recent one)
Note: F0009.EFS (Date Effective Addresses 0/1): Through Address Book Constants (P0000) Mailing Address can be maintained per effective date. At once you turn on this parameter, F0101.EFTB (Date - Beginning Effective) is to be populated which can retrieve data from Address By Date (F0116) based on this date
Detail Routine:
1st., To get mailing name from F0111:
F0111 Get Mailing Name
BC Address Number (F4301)(AN8) -> BF mnAddressNumber
VA rpt_szSoldToNameMailing_MLNM (#1 F0111.MLNM) <- BF szNameMailing
2nd., To get most recent mailing address from F0116:
F0116.Select
BC Address Number (F4301)(AN8) = TK Address Number
F0116.Fetch Next
BC Address Number (F4301)(AN8) <- TK Address Number
VA evt_Temp_ADD1 (#2 F0116.ADD1) <- TK Address Line 1
VA evt_Temp_ADD2 (#3 F0116.ADD2) <- TK Address Line 2
VA evt_Temp_ADD3 (#4 F0116.ADD3) <- TK Address Line 3
VA evt_Temp_ADD4 (#5 F0116.ADD4) <- TK Address Line 4
VA evt_Temp_ADDZ (#6 F0116.ADDZ) <- TK Postal Code
VA evt_Temp_CTY1 (#7 F0116.CTY1) <- TK City
VA sec_COUN_County (#8 F0116.COUN) <- TK County
VA evt_Temp_ADDS (#9 F0116.ADDS) <- TK State
VA sec_CTR_Country (#10 F0116.CTR) <- TK Country
3rd., Assign variables (temporary repository - change of sequence and so on)
VA rpt_szSoldToAddressLine1_TAD1 = VA evt_Temp_ADD1 (#2)
VA rpt_szSoldToAddressLine2_TAD1 = VA evt_Temp_ADD2 (#3)
VA rpt_szSoldToAddressLine3_TAD1 = VA evt_Temp_ADD3 (#4)
VA rpt_szSoldToAddressLine4_TAD1 = VA evt_Temp_ADD4 (#5)
VA sec_CTY1_City = VA evt_Temp_CTY1 (#7)
VA sec_ADDS_State = VA evt_Temp_ADDS (#9)
VA sec_ADDZ_PostalCode = VA evt_Temp_ADDZ (#6)
4th., Format output based on information given (#1 through #10):
F0116 Get Mailing Address Format - Langauge
VA rpt_szSoldToNameMailing_MLNM (#1) <> BF szNameMailing_MLNM
VA rpt_szSoldToAddressLine1_TAD1 (#2) <> BF szAddressLine1_ADD1
VA rpt_szSoldToAddressLine2_TAD1 (#3) <> BF szAddressLine2_ADD2
VA rpt_szSoldToAddressLine3_TAD1 (#4) <> BF szAddressLine3_ADD3
VA rpt_szSoldToAddressLine4_TAD1 (#5) <> BF szAddressLine4_ADD4
VA rpt_szSoldToAddressLine5_TAD1 <> BF szAddressLine5_ADD5
VA rpt_szSoldToAddressLine6_TAD1 <> BF szAddressLine6_ADD6
VA rpt_szSoldToAddressLine7_TAD1 <> BF szAddressLine7_ADD7
VA sec_CTY1_City (#7) -> BF szCity_CTY1
VA sec_ADDS_State (#9) -> BF szState_ADDS
VA sec_ADDZ_PostalCode (#6) -> BF szZipCodePostal_ADDZ
VA sec_CTR_Country (#10) -> BF szCountry_CTR
VA sec_COUN_County (#8) -> BF szCountyAddress_COUN
VA rpt_szLanguagePreference_LNGP -> BF szLanguagePreference_LNGP
BC Address Number (F4301)(AN8) -> BF mnAddressNumber_AN8
5th., Assign value to output variable to print it out
RV Sold To = VA rpt_szSoldToNameMailing_MLNM
RV Sold To Address Line 1 = VA rpt_szSoldToAddressLine1_TAD1
RV Sold To Address Line 2 = VA rpt_szSoldToAddressLine2_TAD1
RV Sold To Address Line 3 = VA rpt_szSoldToAddressLine3_TAD1
RV Sold To Address Line 4 = VA rpt_szSoldToAddressLine4_TAD1
RV Sold To Address Line 5 = VA rpt_szSoldToAddressLine5_TAD1
RV Sold To Address Line 6 = VA rpt_szSoldToAddressLine6_TAD1
RV Sold To Address Line 7 = VA rpt_szSoldToAddressLine7_TAD1
Note:
The way it gets Ship To Address are identical the routines of Sold To (or Supplier)
From above routine C and E can be skipped not to create too many variables