2LIS_04_P_ARBPL documentation / calculation of MCAFVG KABRS, KBEAS & KRUES
Hello,
is there any documentation available how key figures in extractor 2LIS_04_P_ARBPL are calculated in general or does anyone know how the key figures KABRS, KBEAS & KRUES from structure MCAFVG are calculated? Or are them based on a certain table/field?
I can see in TA LBWE the structure like MCAFVG. But there is no corresponding table for this structure. In tables AFVC and AFVV where the operations and quantities/dates/values are stored these fields are not available.
Many thanks in advance for your help.
Kind regards
Chris
I think I've found the source of the key figures KABRS, KBEAS & KRUES from structure MCAFVG now.
It must be the fields KABRSOLL, KBEASOLL & KRUESOLL from table KBED (Capacity Requirements Records).
There is a relationship between table AFKO and KBED via field BEDID. In most of the cases extractor 2LIS_04_P_ARBPL is using the values of these fields. But there are some production orders where a BEDID exists with no corresponding entry in table KBED.
I think in this case the extractor is using the current duration and not the scheduled cap. requirements for the op. segment "setup", "processing" and "teardown".
Can anyone confirm that my understandig is correct?
Or is that behavior documented somewhere?
Kind regards,
Chris
Similar Messages
-
Hello all. I am fairly new to Java and having a problem setting the text in a JLabel. I am trying to create a calculator program and when the user clicks a button I want that number to appear in a JLabel at the top. I used output.setText("7"); but when I compiled it said <identifier> expected. I will paste the full code below and would appreciate any help. Also, is there a getText function with JLabel, because I need to get what is currently in the output field and concatenate it with the number pressed.
Thanks in advance for your help,
Jeremy
* Write a description of class calculator here.
* @author (Jeremy Kruer)
* @version (11/19/02)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class calculator extends JFrame
private JButton one, two, three, four, five, six, seven, eight, nine, zero, dec, eq, plus, minus, mult, div;
private JLabel output;
private Container container;
//set up GUI
public calculator()
//Create Title
super("Calculator");
//Set size and make visible
setSize( 400, 400 );
setVisible( true );
container = getContentPane();
container.setLayout( new FlowLayout() );
//set up output
output = new JLabel();
container.add( output );
//set up seven and register its event handler
seven = new JButton( " 7 " );
seven.addActionListener(
//anonymouse inner class
new ActionListener()
//add a seven to the output diplay when clicked
output.setText( "7" );
}//end anonymouse inner class
); //end call to addActionListener
container.add( seven );
//set up eight
eight = new JButton( " 8 " );
container.add( eight );
//set up nine
nine = new JButton( " 9 " );
container.add( nine );
//set up div
div = new JButton( " / " );
container.add( div );
//set up four
four = new JButton( " 4 " );
container.add( four );
//set up five
five = new JButton( " 5 " );
container.add( five );
//set up six
six = new JButton( " 6 " );
container.add( six );
//set up mult
mult = new JButton( " * " );
container.add( mult );
//set up one
one = new JButton( " 1 " );
container.add( one );
//set up two
two = new JButton( " 2 " );
container.add( two );
//set up three
three = new JButton( " 3 " );
container.add( three );
//set up minus
minus = new JButton( " - " );
container.add( minus );
//set up zero
zero = new JButton( " 0 " );
container.add( zero );
//set up dec
dec = new JButton( " . " );
container.add( dec );
//set up eq
eq = new JButton( " = " );
container.add( eq );
//set up plus
plus = new JButton( " +" );
container.add( plus );
//Set size and make visible
setSize( 220, 250 );
setVisible( true );
//execute application
public static void main( String args[] )
calculator application = new calculator();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}I played with the lauout a bit and added the actionListener:
you will see what you click on !!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class calcu extends JFrame implements ActionListener
private JButton one, two, three, four, five, six, seven, eight, nine, zero, dec, eq, plus, minus, mult, div;
private JLabel output;
public calcu()
super("Calculator");
JPanel container = new JPanel();
container.setLayout(new FlowLayout(FlowLayout.LEFT));
output = new JLabel("");
output.setBorder(new MatteBorder(2,2,2,2,Color.gray));
output.setPreferredSize(new Dimension(1,26));
getContentPane().setBackground(Color.white);
getContentPane().add("North",output);
getContentPane().add("Center",container);
//set up seven and register its event handler
seven = new JButton(" 7 ");
container.add(seven);
seven.addActionListener(this);
//set up eight
eight = new JButton(" 8 ");
container.add(eight);
eight.addActionListener(this);
//set up nine
nine = new JButton( " 9 " );
container.add( nine );
nine.addActionListener(this);
//set up div
div = new JButton( " / " );
container.add( div );
div.addActionListener(this);
//set up four
four = new JButton( " 4 " );
container.add( four );
four.addActionListener(this);
//set up five
five = new JButton( " 5 " );
container.add( five );
five.addActionListener(this);
//set up six
six = new JButton( " 6 " );
container.add( six );
six.addActionListener(this);
//set up mult
mult = new JButton( " * " );
container.add( mult );
mult.addActionListener(this);
//set up one
one = new JButton( " 1 " );
container.add( one );
one.addActionListener(this);
//set up two
two = new JButton( " 2 " );
container.add( two );
two.addActionListener(this);
//set up three
three = new JButton( " 3 " );
container.add( three );
three.addActionListener(this);
//set up minus
minus = new JButton( " - " );
container.add( minus );
minus.addActionListener(this);
//set up zero
zero = new JButton( " 0 " );
container.add( zero );
zero.addActionListener(this);
//set up dec
dec = new JButton( " . " );
container.add( dec );
dec.addActionListener(this);
//set up eq
eq = new JButton( " = " );
container.add( eq );
eq.addActionListener(this);
//set up plus
plus = new JButton( " +" );
container.add( plus );
plus.addActionListener(this);
//Set size and make visible
setSize(220,250);
setResizable(false);
setVisible( true );
public void actionPerformed(ActionEvent ae)
JButton but = (JButton)ae.getSource();
output.setText(but.getText());
//execute application
public static void main( String args[] )
calcu application = new calcu();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
} Noah -
Having probelm with JLabel and setText
I posted a message in Java Programming but I think it will be more appropriate here. I am trying to create a calculator so I want my JLabel(output) to display the number of the button that is clicked on. I used output.setText("7") but I get an error when compiling saying <identifier> expected. Any advice would be great. Also, is there a getText method in JLabel? I need to concatenate the current contents of JLabel and the value of the button pushed. For example:
output.setText( output.getText() + "7" );
Anyways, here is my code. I tried to make it indent so it is easier to read but it doesn't show up once I post it.
Thanks for you help.
* Write a description of class calculator here.
* @author (Jeremy Kruer)
* @version (11/19/02)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class calculator extends JFrame
private JButton one, two, three, four, five, six, seven, eight, nine, zero, dec, eq, plus, minus, mult, div;
private JLabel output;
private Container container;
//set up GUI
public calculator()
//Create Title
super("Calculator");
//Set size and make visible
setSize( 400, 400 );
setVisible( true );
container = getContentPane();
container.setLayout( new FlowLayout() );
//set up output
output = new JLabel();
container.add( output );
//set up seven and register its event handler
seven = new JButton( " 7 " );
seven.addActionListener(
//anonymouse inner class
new ActionListener()
//add a seven to the output diplay when clicked
output.setText( "7" );
}//end anonymouse inner class
); //end call to addActionListener
container.add( seven );
//set up eight
eight = new JButton( " 8 " );
container.add( eight );
//set up nine
nine = new JButton( " 9 " );
container.add( nine );
//set up div
div = new JButton( " / " );
container.add( div );
//set up four
four = new JButton( " 4 " );
container.add( four );
//set up five
five = new JButton( " 5 " );
container.add( five );
//set up six
six = new JButton( " 6 " );
container.add( six );
//set up mult
mult = new JButton( " * " );
container.add( mult );
//set up one
one = new JButton( " 1 " );
container.add( one );
//set up two
two = new JButton( " 2 " );
container.add( two );
//set up three
three = new JButton( " 3 " );
container.add( three );
//set up minus
minus = new JButton( " - " );
container.add( minus );
//set up zero
zero = new JButton( " 0 " );
container.add( zero );
//set up dec
dec = new JButton( " . " );
container.add( dec );
//set up eq
eq = new JButton( " = " );
container.add( eq );
//set up plus
plus = new JButton( " +" );
container.add( plus );
//Set size and make visible
setSize( 220, 250 );
setVisible( true );
//execute application
public static void main( String args[] )
calculator application = new calculator();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );// not tested but try it ...
1. put an empty string into the JLabel
declare
String labString = "";
(and declare the JLabel too)
2. initialise label - init() {
myLabel = new JLabel(labString)
3. activate
actionPerformed(ActionEvent evt) {
if (evt.getSource()==button#7) {
labString = getActionCommand();
myLabel.setText(labString);
validate();
Something like that anyway - it should work + if you 'play' with it, you can probably make it a bit more efficiently than the methods I've outlined here. -
How how is too hot for Core i7 3770?
For my Z77A-GD65 system build. Using HWMonitor to observe temps across each core an on the package.
At what point is "hot", "too hot".
With no overclocking, with my stock intel fan, I'm at 40C at idle. When Prime95 or any stress app is run, it gets into the 75-80C range. When does it get to be "too hot" where I should consider better cooling and heatsink solutions?Quote
When does it get to be "too hot" where I should consider better cooling and heatsink solutions?
By current Intel documentation calculations, it is 89C for a 3rd gen 77W CPU. Normally, I don't give answers that can be found by doing some self research, but currently as listed, TjMax is 105C. For years, heat has been an enemy to pc components, but in all fairness, the production quality and temperature tolerance has greatly improved beginning with 5 series chipsets, recent memory chips, and VGA's. Along with heat, voltages applied can also have a dramatic impact on longevity. That is why it is important to 'know the limits'! Components are built with limits by the manufacturer, unless proven otherwise and documented, a CPU at 70C will not suffer degradation any less than a CPU running at 88C (3rd Gen CPU). If the temperatures and voltages are within the manufacturers specifications, there is no need to fret about them.
Getting rid of that factory TIM on that stock CPU cooler and using a proper amount of AS5 or MX-2 might reduce that temperature by up to 10C. -
Issue in payslip calculation.
Hi Experts,
I am facing problem in payslip
new employees who joined in the middle of this months
1) DOJ 5.9.2011 in the slip only Basic calculation showing correctly.
2. DOJ 15.9.2011 in the slip only Basic Calculation showing correctly
In previous month payslip of new employees there is no issue in the calculation. but in this month salary slip except Basic all monthly component i e. HRA, Special .Allwn, Tran,Edu, CAR Allwn are showing wrong calculation .
Note: few days ago we I maintain PCR ZNP1 from INP1, for present days in payslip. is this problem come due to this?
Please guide me..
Regards,
RajIf you do a Payroll Simulation with the "Display Log" box checked, you will then be able to look at the partial period parameters calculated for that employee (function PARTT).
If you use t-code pe04, enter Payroll Operation AMT, and look at it's documentation > for 6 places operands > for 2nd Variant: Table Fields > for type T tables, you will find the link to the Partial Period Parameters, of which the following is only the first few lines:
Partial Period Parameter for the Partial Period (Operand Prefix T)
Object
Additional operation documentation
Explanation
1. Planned working time in accordance with employee's personal work
schedule with exact reference to basic pay period
KSOLL : Planned working time measured in calendar days
ASOLL : Planned working time measured in work days
SSOLL : Planned working time measured in working hours
2. Total working time in payroll period in line with employee's work
schedule with exact reference to basic pay period
KDIVI : Total working time measured in calendar days
ADIVI : Total working time measured in working days
... and there are many threads on this site and on the web relating to this issue. -
Beginning Balance and Ending Balance Calculation
Hi all,
I have got a critical requirement for my report.
I have to calculate Opening and Closing Balances for every month
Beginning balance amount of current month = Ending balance amount of previous month.
and Ending Balance = Beginning Balance + Transactions(data available)
My Beginning Balance amount initially will be loaded from Flat file.
For the first month I will go with a calculated Keyfigure and calculate my ending Balance.
Now, this ending balance of current month will be beginning balance of next month.
The problem is for the second month if i want ending balance, how to hold that data, as that is a calculation.
Secondly, if the data is for current period..that's fine, but if i have to see previous months data, how to get it??
Thanks,
Hima.Make a cell reference to the previous month in your query designer. I don't have any specific information available at this point, but I have done the exact same thing in the past and we could make it working using cell references. There's enough documentation available if you want to know the ins&outs of this.
-
Difference between FINT and F.24 for interest calculation
Hi all!
I am currently configuring the calculation of interest on arrears. To be more specific - an interest has to be calculated only on overdue items cleared with a payment. SAP advises to use F.24 transaction in this case. The problem is that F.24 doesn't produce a normal report where the clerks could see the invoices in a list (before actually posting the interest) - it produces the 'mail format' pages.
I wonder what FINT transaction is for? Can I use it for calculating the interest on arrears? In SAP I didn't find any good documentation on this.
Could you please help me by describing the main purpose of using the FINT? What is it for? Can it be used in my case?
Thank you very much in advance!This is probably not as detailed as you would like but FINT is the replacement for F.24. Both are still supported however there are several reporting advantages with FINT over F.24 specifically program RFINTITSHOW. FINT also has additional selection capabilities and generally is an improved interest calculationprogram over F.24. I can't off the top of my head think why they'd suggest to use F.24 now instead of FINT. FINT I think also uses Smartforms where F.24 uses SAPScript (and can probably be made to use Smartforms) .
Hope that helps somewhat. -
Interest calculation on secured loans
Hi guys,
I have a customer invoice at 1000 rs after that i have been paid to customer for 5000 rs. The difference amount of 4000 rs (5000 - 1000 ) we have considered as a secured loan. So how can i calculated the interest on the 4000 rs only.
Please let me know the configuration steps with documentation.
Thanks
RamHEllo!
In the report RFINTITAR, you use the interest indicator customizing:
IMG > Prepare Item Interest Calculation > Ref. Date
(table V_T056UX) > field Ref.
(FI Item Interest Calculation: Reference Date)
You have the possibility to define what You need to be considered as
incoming payment due date, choosing between:
1 Value Date (or Baseline Date for Net Payment)
2 Document Date
3 Posting Date
4 Payment Baseline Date
As you can use one interest indicator per customer/vendor you can use only of the dates is used. But, in this
program you can use the BADI FI_INT_CUS01. Please, check if you can meet your business requirements using the methods
of the BADI.
REgards,
REnan -
Interest calculation on overdue,credit balance & cash dicount
Hi gurus
we need to calculate the over due interest, interest on credit balance & cash discount on the customer balance thru system. What are the configuration settings required& also for reporting purpose what we need to do.Please explain in details
Thanks
shivajiTo be able to post cash discounts, you must define an account determination for cash discount taken and cash discount granted.
For cash discount taken, choose:
Financial Accounting ® Accounts Receivable and Accounts Payable ® Business transactions ® Outgoing payments ® Outgoing payments Global Settings ® Define accounts for cash discounts taken
For cash discount granted, choose:
Financial Accounting ® Accounts Receivable and Accounts Payable ® Business transactions ® Incoming payments ® Payments Receipt Global Settings ® Define accounts for cash discounts granted
Please refer to the R/3 library and the IMG documentation for more details.
You may also want to use payment terms suitable for you business processes to trigger the automatic calculation of cash discount amounts -
Interest Calculation on customer balance
Hi
I need to calculate interest on customer overdues (on net balance after deducting advance received from there).
There are three types of interest calculation:
1. Balance interest calculation
2. Item Interest Calculation
3. Arrears Interest
Please let me know which one i need to select for the same.Hi Deepak,
I will provide you some information about this matter:
Please, notice that the program RFINTITAR (tr. FINT) isn't used for balance interest calculation. It is used for customer overdue item interest calculation. Please check the documentation available for this program. I believe that this is the option that you should use.
In case of Special G/L transactions:
Check IMG- Financial Accounting (New)- Accounts Receivable and Account Payable- Business transactions-
Interest calculation - Prepare special G/L transaction interest calculation.
As described in the documentation of the customizing node, the assigning of new interest indicators according to the special G/L transaction is evaluated by balance interest calculation only.
Please see the documentation:
"In this step, you define an alternative interest indicator for special G/L transactions. The specifications only apply to the account balance interest calculation."
I hope that this answer your inquiry.
Best Regards,
Vanessa Barth. -
Interest calculation in Dunning Wizard
Hi All,
I have a question with regard to the calculation of Interest amount via Dunning wizard.
Let us say I have a dunning term that issues Dunning Letter 1, 30 days past the due date. Dunning Letter 2 is issued 30 days past the dunning letter 1. The interest to be charged is 10% per anum.
Let us say I have an invoice of $1000. 30 days past the due date when I run the dunning wizard, it would show an interest of 8.33. As SAP does not post the interest amount automatically in the form of a journal entry, we manually pass this journal entry for receivables of $8.33.
Next time, when I run the dunning wizard after 30 days of running the first dunning wizard, I will see that the date of last dunning run is updated. When I check the Interest amount, it will show me 16.67. This interest amount is a cumulative i.e 8.33 (last dunning run) and 8.33 of this run.
Now, if we pass a journal entry for 16.67, it will be wrong as I have already passed a previous journal entry for 8.33. Is there a way we can make the system count the interest days from the last dunning run to give me the incremental interest amount of $8.33. Currently the interest days are calculated from the due date of the invoice.
Is there a UDF that can be created in the dunning wizard and can have a formatted search assigned to it?
Thank you very much for your input.
Regards,
PayalHi Payal,
Please check the following information from the Dunning documentation and see if it is of any help regarding your issue :
The interest will be calculated as follows:
Open Sum * Annual Interest Rate * Number of Days Overdue / (Number of days in Year * 100)
o Open Sum u2013 This value will be calculated according to the calculation method defined in the previous window (Calculate Interest Value on Remaining Sum or Calculate Interest Value on Original Sum).
o Annual Interest Rate u2013 This value is taken from the Annual Interest Rate field in the Define Dunning Terms window.
o Days Overdue u2013 The number of days that passed from date of payment as defined in the Invoice to the day of running the Dunning Wizard (see explanation on the Dunning Wizard below).
If a month passed since the defined day of payment, and a value was entered into the field Number of Days in Month (for example 30 days), this value will be taken into account as follows:
1. If the number of days in the past month was more or
less than the number of days defined in Number of
Days in Month field (for example if 31 or 29 days have
passed and 30 days were defined for a month), then the
value defined for calculation of interest will be used (in
the example above, the value will be calculated
according to 30 days and not 29 days).
2. If the number of days in the past month is less than the
number of days defined in the Number of Days in Month
field (for example if 29 days passed and 30 days were
defined for a month), the value defined for calculation of
interest will be used (in the example above, the value
will be calculated according to 30 days and not
according to 29 days).
3. If a month has not yet passed from the day of payment
and the number of days overdue is less than the
SAP Business One Dunning System in Release 2004 A
January 2005 Page 11 of 29
number of days defined for that month (for example 14
days), the calculation will be done according to the
number of days overdue (14 days), and not number of
days in a month.
Check if this helps.
Regards,
Jitin
SAP Business One Forum Team -
Calculation of customer payment performance by profit center
I want to calculate customer payment performance by profit center it is a report.
Caluation clue.
<b>Performance is a measure of when the payment was made versus the due date calculated by the payment terms</b>.
i want the logic to be included in the following code.
REPORT
TABLE DECLARATIONS
TABLES: BFOD_A, "FI subsequent BA/PC adjustment: Customer items
BSID, "Open Items
BSAD, "Cleared Items
BKPF, "Docuemnt Header
KNA1, "Customer Master
CEPCT, "Texts for Profit Center Master Data
CEPC, "Profit center master data table
SKB1, "G/L account master
VBFA, "Sales Document Flow
VBAK. "Sales Document: Header Data
CONTROLS: TABAGING TYPE TABLEVIEW USING SCREEN 9000.
FIELD-SYMBOLS: <COLUMN>.
Internal tables followed by types
TYPES: BEGIN OF T_TOTAL,
WAERS LIKE COEP-TWAER,
DAYS01 LIKE COEP-WTGBTR,
DAYS02 LIKE COEP-WTGBTR,
DAYS03 LIKE COEP-WTGBTR,
DAYS04 LIKE COEP-WTGBTR,
DAYS05 LIKE COEP-WTGBTR,
TOTAL LIKE COEP-WTGBTR,
END OF T_TOTAL.
DATA: V_DISVARIANT TYPE DISVARIANT,
REF_CUSTOM TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
REF_ALV_ZRPT TYPE REF TO CL_GUI_ALV_GRID.
DATA: V_SAVE(1) TYPE C,
V_DEFAULT(1) TYPE C,
V_VARIANT TYPE DISVARIANT,
V_SORT TYPE LVC_S_SORT,
V_LAYOUT TYPE LVC_S_LAYO,
V_SAVE_TABIX LIKE SY-TABIX,
V_SAVE_TIME LIKE SY-UZEIT,
V_ALV_FIELDCAT TYPE LVC_S_FCAT,
V_SAVE_INDEX LIKE SY-TABIX,
V_ROW TYPE LVC_S_ROW,
V_ROWS TYPE LINE OF LVC_T_ROW.
DATA: BEGIN OF V_HDR,
CURKY(9) TYPE C,
CURR(20) TYPE C,
COL1(20) TYPE C,
COL2(20) TYPE C,
COL3(20) TYPE C,
COL4(20) TYPE C,
TOTAL(20) TYPE C,
END OF V_HDR.
DATA: BEGIN OF V_FIELD,
NAME(15) TYPE C,
VALUE(17) TYPE C,
END OF V_FIELD.
DATA: BEGIN OF I_BFOD_A OCCURS 0,
PRCTR LIKE BFOD_A-PRCTR,
KUNNR LIKE BFOD_A-KUNNR,
BUKRS LIKE BFOD_A-BUKRS,
GJAHR LIKE BFOD_A-GJAHR,
BELNR LIKE BFOD_A-BELNR,
BUZEI LIKE BFOD_A-BUZEI,
AUGDT LIKE BFOD_A-AUGDT,
HKONT LIKE BFOD_A-HKONT,
BUDAT LIKE BFOD_A-BUDAT,
SHKZG LIKE BFOD_A-SHKZG,
DMBTR LIKE BFOD_A-DMBTR,
DMBE2 LIKE BFOD_A-DMBE2,
END OF I_BFOD_A.
DATA: I_SET_VALUES LIKE SETVALUES OCCURS 0 WITH HEADER LINE,
I_SORT TYPE LVC_T_SORT,
I_ALV_FIELDCAT TYPE LVC_T_FCAT,
I_PRCTR_COCD TYPE FCINPCA001 OCCURS 0 WITH HEADER LINE,
I_BFODA_KUNNR LIKE I_BFOD_A OCCURS 0 WITH HEADER LINE,
Begin of changes for DEVK909110
I_REPORT TYPE ZFR0ARPR_S1 OCCURS 0 WITH HEADER LINE,
I_REPORT TYPE ZPSS_ARBYPC OCCURS 0 WITH HEADER LINE,
End of changes for DEVK909110
I_FAEDE LIKE FAEDE,
I_TOTAL TYPE T_TOTAL OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF I_BKPF OCCURS 0,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
BKTXT LIKE BKPF-BKTXT,
XBLNR LIKE BKPF-XBLNR,
HWAER LIKE BKPF-HWAER,
HWAE2 LIKE BKPF-HWAE2,
END OF I_BKPF.
*... combine BSAD and BSID
DATA: BEGIN OF I_BSYD OCCURS 0,
KUNNR LIKE BSID-KUNNR,
BUKRS LIKE BSID-BUKRS,
GJAHR LIKE BSID-GJAHR,
BELNR LIKE BSID-BELNR,
BUZEI LIKE BSID-BUZEI,
AUGDT LIKE BSID-AUGDT,
BLDAT LIKE BSID-BLDAT,
BUDAT LIKE BSID-BUDAT,
HKONT LIKE BSID-HKONT,
WAERS LIKE BSID-WAERS,
ZFBDT LIKE BSID-ZFBDT,
ZBD1T LIKE BSID-ZBD1T,
ZBD2T LIKE BSID-ZBD2T,
ZBD3T LIKE BSID-ZBD3T,
XBLNR LIKE BSID-XBLNR,
REBZG LIKE BSID-REBZG,
SHKZG LIKE BSID-SHKZG,
DMBTR LIKE BSID-DMBTR,
WRBTR LIKE BSID-WRBTR,
END OF I_BSYD.
DATA: BEGIN OF I_CEPC OCCURS 0,
PRCTR LIKE CEPC-PRCTR,
KHINR LIKE CEPC-KHINR,
END OF I_CEPC.
DATA: BEGIN OF I_CEPCT OCCURS 0,
PRCTR LIKE CEPCT-PRCTR,
MCTXT LIKE CEPCT-MCTXT,
END OF I_CEPCT.
DATA: BEGIN OF I_PRCTR OCCURS 0,
PRCTR LIKE BFOD_A-PRCTR,
END OF I_PRCTR.
DATA: BEGIN OF I_KNA1 OCCURS 0,
KUNNR LIKE KNA1-KUNNR,
NAME1 LIKE KNA1-NAME1,
END OF I_KNA1.
Working Variables Declarations
*... accumulators
DATA: V_BFOD_TXNAMT LIKE BSID-WRBTR, "transaction currency amt
V_FRCURR LIKE TCURR-FCURR, "local currency
V_TOCURR LIKE TCURR-FCURR, "local currency
V_LCURR LIKE T001-WAERS, "local currency
V_CUSTTOTUSD LIKE BFOD_A-DMBE2, "customer total grp curr
V_TOTAL LIKE BPPE-WTP03, "days total grp curr
V_CURRENT LIKE BPPE-WTP03, "days current grp curr
V_TOTAL_USD LIKE BPPE-WTP03, "days total grp curr
V_TOTAL_ROW LIKE BPPE-WTP03. "total of local curr/row
DATA: V_PRCTR LIKE CEPC-PRCTR, "profit center
V_SUBRC LIKE SY-SUBRC,
V_FLAG TYPE I,
V_DPAST TYPE I, "past due days working
V_GRAND TYPE C,
V_DIFF_COLOR TYPE C,
V_MSG(50) TYPE C,
V_SAVE_PCFN(128) TYPE C,
V_EXTENSION(4) TYPE C,
V_PREV_PRCTR LIKE CEPC-PRCTR,
V_POS LIKE SY-FDPOS,
V_SAVE_BUKRS LIKE BFOD_A-BUKRS,
V_SAVE_KHINR LIKE CEPC-KHINR,
V_PERC TYPE P DECIMALS 10,
V_ZBD1T LIKE BSID-ZBD1T,
V_ZFBDT LIKE BSID-ZFBDT,
V_GROUP_CLASS LIKE RGSBS-CLASS,
V_GROUP_NAME LIKE RGSBS-SETNR,
V_GROUP_TITLE LIKE RGSBS-TITLE,
V_SETID LIKE SETHIER-SETID,
V_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT',
V_CNT LIKE SY-TABIX,
V_PREV_BELNR LIKE BSID-BELNR,
V_REPORT1 LIKE I_REPORT,
V_REPORT LIKE I_REPORT,
V_TABIX LIKE SY-TABIX.
Constants
CONSTANTS:
C_0H(2) TYPE C VALUE '0H',
C_0106(4) TYPE C VALUE '0106',
C_SPACE(11) TYPE C VALUE ' ',
C_USD(3) TYPE C VALUE 'USD',
C_KBRC LIKE CEPC-KOKRS VALUE 'KBRC',
C_TXT(4) TYPE C VALUE '.txt',
C_XLS(4) TYPE C VALUE '.xls',
C_RTF(4) TYPE C VALUE '.rtf',
C_PERIOD(1) TYPE C VALUE '.',
C_TODATE LIKE CEPC-DATBI VALUE '99991231'.
RANGES: R_KUNNR FOR KNA1-KUNNR. "Customer
Selection Screen Parameters and Select-options
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_KHINR LIKE CEPC-KHINR.
SELECT-OPTIONS: S_PRCTR FOR CEPC-PRCTR,
S_KUNNR FOR KNA1-KUNNR,
S_BUKRS FOR BKPF-BUKRS,
S_HKONT FOR SKB1-SAKNR.
PARAMETERS: P_BUDAT LIKE BFOD_A-BUDAT OBLIGATORY.
SELECTION-SCREEN ULINE.
SELECT-OPTIONS: S_BELNR FOR BFOD_A-BELNR,
S_AUART FOR VBAK-AUART,
S_VTWEG FOR VBAK-VTWEG,
S_VBTYP FOR VBFA-VBTYP_V.
SELECTION-SCREEN ULINE.
PARAMETERS: P_AGEDY TYPE ZZAGEMULT DEFAULT '30' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
PARAMETERS: P_DSVAR LIKE DISVARIANT-VARIANT.
SELECTION-SCREEN END OF BLOCK B2.
class lcl_event_receiver: local class to handle event DOUBLE_CLICK
Definition:
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
MTH_PRINT_TOP_OF_PAGE
FOR EVENT PRINT_TOP_OF_PAGE OF CL_GUI_ALV_GRID.
METHODS:
MTH_PRINT_TOP_OF_LIST
FOR EVENT PRINT_TOP_OF_LIST OF CL_GUI_ALV_GRID.
PRIVATE SECTION.
ENDCLASS. "lcl_event_receiver DEFINITION
class lcl_event_receiver: local class to handle event DOUBLE_CLICK
Implementation:
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD MTH_PRINT_TOP_OF_PAGE.
CALL FUNCTION 'Z_CA_STD_HEADER'
EXPORTING
HEADING = SY-TITLE
P_REPID = SY-CPROG
LINE_WIDTH = SY-LINSZ.
ENDMETHOD. "MTH_PRINT_TOP_OF_PAGE
METHOD MTH_PRINT_TOP_OF_LIST.
CALL FUNCTION 'Z_CA_STD_HEADER'
EXPORTING
HEADING = SY-TITLE
P_REPID = SY-CPROG
LINE_WIDTH = SY-LINSZ.
CALL FUNCTION 'Z_CA_PRINT_SELECTION_OPTIONS'
EXPORTING
P_PGMN = SY-CPROG
P_SKIP = 'X'
P_NOTOP = 'X'.
NEW-PAGE.
ENDMETHOD. "MTH_PRINT_TOP_OF_LIST
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA: REF_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
Selection Screen Prompt values
At Selection Screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DSVAR.
DATA: LS_DISPLAY_VARIANT TYPE DISVARIANT.
Get the display variant
V_DISVARIANT-REPORT = SY-CPROG.
V_DISVARIANT-VARIANT = P_DSVAR.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = V_DISVARIANT
I_SAVE = 'A'
IMPORTING
ES_VARIANT = LS_DISPLAY_VARIANT
EXCEPTIONS
OTHERS = 3.
Load results to parameter
IF SY-SUBRC = 0 AND NOT LS_DISPLAY_VARIANT IS INITIAL.
P_DSVAR = LS_DISPLAY_VARIANT-VARIANT.
ENDIF.
*...performed when looking for values in fields
performs the drop down selection list
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_KHINR. "Profit center grp
PERFORM F_GET_S_KHINR.
Selection Screen validations
AT SELECTION-SCREEN.
IF P_KHINR IS INITIAL.
IF S_PRCTR[] IS INITIAL.
IF S_BUKRS[] IS INITIAL.
MESSAGE E000 WITH TEXT-300 TEXT-302.
ENDIF.
ENDIF.
ELSE.
IF S_PRCTR[] IS INITIAL.
PERFORM F_VALIDATE_KHINR.
ELSE.
*.. Error msg: Please enter either a Profit Center Group or a
profit center, but not both
MESSAGE E000 WITH TEXT-300 TEXT-301.
EXIT.
ENDIF.
ENDIF.
IF NOT S_AUART[] IS INITIAL.
MESSAGE E000 WITH TEXT-303.
ENDIF.
IF NOT S_VTWEG[] IS INITIAL.
MESSAGE E000 WITH TEXT-304.
ENDIF.
Event AT LINE-SELECTION
AT LINE-SELECTION.
CHECK SY-LSIND LE 1.
CHECK NOT I_REPORT-BELNR IS INITIAL.
SET PARAMETER ID 'BLN' FIELD I_REPORT-BELNR.
SET PARAMETER ID 'BUK' FIELD I_REPORT-BUKRS.
SET PARAMETER ID 'GJR' FIELD I_REPORT-GJAHR.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
CLEAR: I_REPORT-BELNR, I_REPORT-BUKRS, I_REPORT-GJAHR.
INITIALIZATION
INITIALIZATION.
START OF MAIN PROCESSING
START-OF-SELECTION.
Check aging days multiplier
IF P_AGEDY LE 0.
MESSAGE S000 WITH 'Aging Days Multiplier must be greater than zero'.
EXIT.
ENDIF.
Populate the s_prctr from a profit center group
IF NOT I_SET_VALUES[] IS INITIAL.
PERFORM F_POPULATE_PRCTR_FROM_PRCTRGRP.
ENDIF.
Build and validate prctr against cepc table
IF NOT S_PRCTR[] IS INITIAL.
PERFORM F_BUILD_I_CEPC_TABLE. "FILLS THE VALID PROFIT CTR TABLE
ENDIF.
Get base selections
PERFORM F_SELECT_DATA. "BUILD REF INTERNAL TABLES
Get additional fields and build reporting structure
PERFORM F_BUILD_I_REPORT. "BUILDS INTERNAL REPORTING TABLE
Generate ALV report
PERFORM F_WRITE_REPORT. "WRITES i_report AND RUNS CALCS
END-OF-SELECTION.
FREE: I_BFOD_A, I_KNA1, I_CEPC, I_CEPCT, I_REPORT.
Form F_DIS_MSG
FORM F_DIS_MSG USING VALUE(P_PERCENTAGE) VALUE(P_TEXT).
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = P_PERCENTAGE
TEXT = P_TEXT
EXCEPTIONS
OTHERS = 1.
ENDFORM. " F_DIS_MSG
Form F_GET_S_KHINR
Get prompt values for Profit Center Group
FORM F_GET_S_KHINR.
PERFORM F_DIS_MSG USING 100 'Get prompt values for Profit Ctr Group.'.
COMMIT WORK.
CALL FUNCTION 'K_GROUP_SELECT'
EXPORTING
BUTTONS = 'X'
CLASS = '0H '
CRUSER = '*'
FIELD_NAME = 'RPRCTR'
SEARCHFLD = 'KBRC'
SEARCHFLD_INPUT = ' '
SEARCHFLD_REQUIRED = 'X'
SET = '*'
START_COLUMN = 10
START_ROW = 5
TABLE = 'GLPCT'
TYPELIST = 'BS'
UPDUSER = '*'
IMPORTING
CLASS_NAME = V_GROUP_CLASS
SET_NAME = V_GROUP_NAME
SET_TITLE = V_GROUP_TITLE
EXCEPTIONS
NO_SET_PICKED = 1
OTHERS = 2.
IF SY-SUBRC = 0.
P_KHINR = V_GROUP_NAME.
ENDIF.
ENDFORM. " F_GET_S_KHINR
FORM F_VALIDATE_KHINR *
FORM F_VALIDATE_KHINR.
PERFORM F_DIS_MSG USING 100 'Validate Profit Center group.'.
COMMIT WORK.
CLEAR I_SET_VALUES.
REFRESH I_SET_VALUES.
CONCATENATE C_0106 C_KBRC P_KHINR INTO V_SETID.
CONDENSE V_SETID.
CALL FUNCTION 'G_SET_TREE_IMPORT'
EXPORTING
CLIENT = SY-MANDT
FIELDNAME = 'RPRCTR'
LANGU = SY-LANGU
SETID = V_SETID
TABNAME = 'GLPCT'
NO_TABLE_BUFFERING = 'X'
TABLES
SET_VALUES = I_SET_VALUES
EXCEPTIONS
SET_NOT_FOUND = 1
ILLEGAL_FIELD_REPLACEMENT = 2
ILLEGAL_TABLE_REPLACEMENT = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
E: Unable to find Profit Center Group & - please modify selection
MESSAGE E000 WITH TEXT-002 P_KHINR.
ENDIF.
IF I_SET_VALUES[] IS INITIAL.
MESSAGE E000 WITH P_KHINR TEXT-039.
ENDIF.
ENDFORM. " F_VALIDATE_KHINR
Form F_SELECT_DATA
FORM F_SELECT_DATA.
PERFORM F_DIS_MSG USING 100 'Retrieve info from SAP tables.'.
COMMIT WORK.
Build the BFOD_A internal table based on user selections
f i_cepc table is initial, it means derive all prctr under a co cd
IF S_PRCTR[] IS INITIAL.
PERFORM F_RETRIEVE_BFODA_BY_COMPANY.
ELSE.
PERFORM F_RETRIEVE_BFODA_BY_PRCTR.
ENDIF.
IF I_BFOD_A[] IS INITIAL.
*... No records fit selection criteria.
MESSAGE E000 WITH TEXT-H20.
ENDIF.
Get the text for profit center
SELECT SPRAS PRCTR DATBI KOKRS MCTXT FROM CEPCT
INTO CORRESPONDING FIELDS OF TABLE I_CEPCT
FOR ALL ENTRIES IN I_CEPC
WHERE SPRAS = SY-LANGU
AND PRCTR = I_CEPC-PRCTR.
Build an internal table of unique bfod keys for bsid and bsad
I_BFODA_KUNNR[] = I_BFOD_A[].
SORT I_BFODA_KUNNR BY KUNNR BUKRS GJAHR BELNR BUZEI.
DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING
KUNNR BUKRS GJAHR BELNR BUZEI.
Build BSID Internal table
SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR
BUZEI BUDAT HKONT BLDAT WAERS REBZG XBLNR SHKZG DMBTR
WRBTR ZFBDT ZBD1T ZBD2T ZBD3T
FROM BSID INTO CORRESPONDING FIELDS OF TABLE I_BSYD
FOR ALL ENTRIES IN I_BFODA_KUNNR
WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR
AND BUKRS EQ I_BFODA_KUNNR-BUKRS
AND GJAHR EQ I_BFODA_KUNNR-GJAHR
AND BELNR EQ I_BFODA_KUNNR-BELNR
AND BUZEI EQ I_BFODA_KUNNR-BUZEI.
Build BSAD internal table
SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR
BUZEI HKONT BUDAT BLDAT WAERS REBZG XBLNR SHKZG DMBTR WRBTR ZFBDT
ZBD1T ZBD2T ZBD3T
FROM BSAD APPENDING CORRESPONDING FIELDS OF TABLE I_BSYD
FOR ALL ENTRIES IN I_BFODA_KUNNR
WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR
AND BUKRS EQ I_BFODA_KUNNR-BUKRS
AND AUGDT GT P_BUDAT
AND GJAHR EQ I_BFODA_KUNNR-GJAHR
AND BELNR EQ I_BFODA_KUNNR-BELNR
AND BUZEI EQ I_BFODA_KUNNR-BUZEI.
IF NOT I_BSYD[] IS INITIAL.
Remove records based on selection criteria
DELETE I_BSYD WHERE
NOT BUDAT LE P_BUDAT OR
NOT HKONT IN S_HKONT.
ENDIF.
Acquire document headers
SELECT BUKRS BELNR GJAHR BKTXT XBLNR HWAER HWAE2 FROM BKPF
INTO TABLE I_BKPF
FOR ALL ENTRIES IN I_BSYD
WHERE BUKRS EQ I_BSYD-BUKRS
AND BELNR EQ I_BSYD-BELNR
AND GJAHR EQ I_BSYD-GJAHR.
Sort document lines
SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI ASCENDING.
SORT I_BKPF BY BUKRS BELNR GJAHR ASCENDING.
Create table of unique customers
SORT I_BFODA_KUNNR BY KUNNR.
DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING KUNNR.
Build customer table
SELECT KUNNR NAME1 FROM KNA1
INTO TABLE I_KNA1
FOR ALL ENTRIES IN I_BFODA_KUNNR
WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR.
Free memory space
FREE I_BFODA_KUNNR.
ENDFORM. " F_SELECT_DATA
Form F_BUILD_I_CEPC_TABLE
build the i_cepc internal table that would populate the
valid profit centers to processed.
FORM F_BUILD_I_CEPC_TABLE.
PERFORM F_DIS_MSG USING 100 'Build the Profit Center Ref Table.'.
COMMIT WORK.
Acquire CEPC table
IF I_PRCTR[] IS INITIAL.
SORT S_PRCTR.
SELECT PRCTR KHINR
FROM CEPC
INTO TABLE I_CEPC
WHERE PRCTR IN S_PRCTR.
Sort table
SORT I_CEPC BY PRCTR KHINR.
Remove duplicate values
DELETE ADJACENT DUPLICATES FROM I_CEPC COMPARING PRCTR.
I_PRCTR[] = I_CEPC[].
Sort table
SORT I_PRCTR BY PRCTR.
ELSE.
Sort table
SORT I_PRCTR BY PRCTR.
Acquire CEPC table
SELECT PRCTR KHINR
FROM CEPC
INTO TABLE I_CEPC
FOR ALL ENTRIES IN I_PRCTR
WHERE PRCTR = I_PRCTR-PRCTR.
SOrt table
SORT I_CEPC BY PRCTR KHINR.
ENDIF.
IF I_CEPC[] IS INITIAL.
MESSAGE E000 WITH TEXT-006.
ENDIF.
ENDFORM. " F_BUILD_i_CEPC_TABLE
Form F_BUILD_I_REPORT
Build the A/R report internal table from bfod_a, bsid and bsad
It is necessary to go to BSAD/BSID to get the document currency
not present in bfod_a.
FORM F_BUILD_I_REPORT.
PERFORM F_DIS_MSG USING 100 'Build the report information.'.
COMMIT WORK.
Sort all internal tables, this is essential for later processing
SORT I_BFOD_A BY KUNNR BUKRS GJAHR BELNR BUZEI .
SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.
SORT I_CEPC BY PRCTR KHINR.
LOOP AT I_BFOD_A.
New customer
AT NEW KUNNR.
READ TABLE I_KNA1 WITH KEY KUNNR = I_BFOD_A-KUNNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE I_KNA1-NAME1 TO I_REPORT-NAME1.
ENDIF.
ENDAT.
Acquire header fields
READ TABLE I_BKPF WITH KEY BUKRS = I_BFOD_A-BUKRS
BELNR = I_BFOD_A-BELNR
GJAHR = I_BFOD_A-GJAHR BINARY SEARCH.
IF SY-SUBRC NE 0.
CLEAR I_BKPF.
ENDIF.
Build base record
PERFORM F_MOVE_BASE_TO_REPORT.
Load profit center data
IF P_KHINR IS INITIAL.
IF V_PREV_PRCTR = I_BFOD_A-PRCTR.
I_REPORT-KHINR = I_CEPC-KHINR.
ELSE.
READ TABLE I_CEPC WITH KEY PRCTR = I_BFOD_A-PRCTR BINARY SEARCH.
IF SY-SUBRC = 0.
I_REPORT-KHINR = I_CEPC-KHINR.
ELSE.
CLEAR I_REPORT-KHINR.
ENDIF.
V_PREV_PRCTR = I_BFOD_A-PRCTR.
ENDIF.
ELSE.
I_REPORT-KHINR = P_KHINR.
ENDIF.
Reverse signs
IF I_REPORT-SHKZG = 'H'.
I_REPORT-DMBTR = I_REPORT-DMBTR * -1.
I_REPORT-DMBE2 = I_REPORT-DMBE2 * -1.
ENDIF.
Additional details
READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR
BUKRS = I_BFOD_A-BUKRS
GJAHR = I_BFOD_A-GJAHR
BELNR = I_BFOD_A-BELNR
BUZEI = I_BFOD_A-BUZEI BINARY SEARCH.
IF SY-SUBRC = 0.
PERFORM F_FORMAT_I_REPORT_FR_BSYD.
APPEND I_REPORT.
ENDIF.
ENDLOOP.
ENDFORM. " F_BUILD_I_REPORT
Form F_FORMAT_I_REPORT_FR_BSYD
Retrieve all the information needed for reporting from BSID.
If a document has a referencing invoice (REBZG), the payment terms
and the baseline date to be used will come from the referencing
invoice.
FORM F_FORMAT_I_REPORT_FR_BSYD.
*=> get the document currency amount from bsid
I_REPORT-BLDAT = I_BSYD-BLDAT.
I_REPORT-WAERS = I_BSYD-WAERS.
PERFORM F_CONVERT_CURRENCY_FR_2_AMTS USING I_REPORT-HWAER I_BSYD-WAERS
I_BSYD-DMBTR I_BSYD-WRBTR
I_BFOD_A-DMBTR
CHANGING V_BFOD_TXNAMT.
I_REPORT-WRBTR = V_BFOD_TXNAMT.
IF I_BSYD-SHKZG = 'H'.
I_REPORT-WRBTR = I_REPORT-WRBTR * -1.
ENDIF.
V_ZBD1T = I_BSYD-ZBD1T.
V_ZFBDT = I_BSYD-ZFBDT.
*=> determine reference document (referencing invoice)
CLEAR I_REPORT-SORT.
CASE I_BSYD-REBZG.
WHEN ' '.
I_REPORT-SORT = I_BFOD_A-BELNR.
WHEN 'V'.
I_REPORT-SORT = I_BSYD-XBLNR.
WHEN OTHERS.
I_REPORT-SORT = I_BSYD-REBZG.
PERFORM F_GET_DATEPAYTERM_FR_ORIGDOC.
ENDCASE.
CLEAR I_FAEDE.
I_FAEDE-SHKZG = I_BSYD-SHKZG.
I_FAEDE-KOART = 'D'.
I_FAEDE-ZFBDT = I_BSYD-ZFBDT.
I_FAEDE-ZBD1T = I_BSYD-ZBD1T.
I_FAEDE-ZBD2T = I_BSYD-ZBD2T.
I_FAEDE-ZBD3T = I_BSYD-ZBD3T.
I_FAEDE-REBZG = I_BSYD-REBZG.
I_FAEDE-BLDAT = I_BSYD-BLDAT.
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
I_FAEDE = I_FAEDE
IMPORTING
E_FAEDE = I_FAEDE
EXCEPTIONS
ACCOUNT_TYPE_NOT_SUPPORTED = 1
OTHERS = 2.
V_DPAST = P_BUDAT - I_FAEDE-NETDT.
IF V_DPAST < 0.
I_REPORT-DPAST = 0.
ELSE.
MOVE V_DPAST TO I_REPORT-DPAST.
ENDIF.
I_REPORT-ZBD1T = V_ZBD1T.
I_REPORT-NETDT = I_FAEDE-NETDT.
Update totals
PERFORM F_BUILD_TOTALS.
ENDFORM. " F_FORMAT_I_REPORT_FR_BSYD
Form F_GET_DATEPAYTERM_FR_ORIGDOC
FORM F_GET_DATEPAYTERM_FR_ORIGDOC.
In order to go back to the original document's payment terms and
baseline date, we neeed to resort bsid/bsad to a different sort
order b-coz only these 3 fields logically matched the orig doc
SORT I_BSYD BY KUNNR BUKRS BELNR.
READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR
BUKRS = I_BFOD_A-BUKRS
BELNR = I_REPORT-SORT BINARY SEARCH.
IF SY-SUBRC = 0.
V_ZBD1T = I_BSYD-ZBD1T. "payment term
V_ZFBDT = I_BSYD-ZFBDT. "baseline due date
ENDIF.
SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.
ENDFORM. " F_GET_DATEPAYTERM_FR_ORIGDOC
Form F_WRITE_REPORT
Write A/R report summarized by profit center.
Report will be build by profit center and sum all customers
then will sum past do for profit center and catagorized
will also sum by project / wbs element.
FORM F_WRITE_REPORT.
SORT I_REPORT BY PRCTR KUNNR SORT BLDAT BELNR DPAST DESCENDING.
CALL SCREEN 9000.
ENDFORM. " F_WRITE_REPORT
Form F_POPULATE_PRCTR_FROM_PRCTRGRP
FORM F_POPULATE_PRCTR_FROM_PRCTRGRP.
LOOP AT I_SET_VALUES.
IF I_SET_VALUES-TO = I_SET_VALUES-FROM.
I_PRCTR-PRCTR = I_SET_VALUES-TO.
COLLECT I_PRCTR.
S_PRCTR-SIGN = 'I'.
S_PRCTR-OPTION = 'EQ'.
S_PRCTR-LOW = I_SET_VALUES-TO.
COLLECT S_PRCTR.
ELSE.
MESSAGE E000 WITH 'System Error, contact programmer'
I_SET_VALUES-TO I_SET_VALUES-FROM.
ENDIF.
ENDLOOP.
ENDFORM. " F_POPULATE_PRCTR_FROM_PRCTRGRP
Form F_CONVERT_CURRENCY_FR_2_AMTS
This function module will ensure proper handling of decimals
and conversion of currency. This will give you the historical
exchange rate used.
BFOD_A does not have the trans curr amt so we will get it
using: ( bsid trans curr amt / bsid loc curr amt ) *
bfod_a loc currency amt
FORM F_CONVERT_CURRENCY_FR_2_AMTS USING V_FRCURR V_TOCURR
V_OFRAMT V_OTOAMT V_NFRAMT
CHANGING V_NTOAMT.
CALL FUNCTION 'Z_CONVERT_CURRENCY_FROM_2_AMTS'
EXPORTING
FROM_CURRENCY = V_FRCURR
TO_CURRENCY = V_TOCURR
OLD_FROM_AMOUNT = V_OFRAMT
OLD_TO_AMOUNT = V_OTOAMT
NEW_FROM_AMOUNT = V_NFRAMT
IMPORTING
NEW_TO_AMOUNT = V_NTOAMT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
MESSAGE E000 WITH TEXT-005.
ENDIF.
ENDFORM. " F_CONVERT_CURRENCY_FR_2_AMTS
Form F_RETRIEVE_BFODA_BY_COMPANY
FORM F_RETRIEVE_BFODA_BY_COMPANY.
Acquire BFOD_A table
SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT
SHKZG DMBTR DMBE2 FROM BFOD_A
INTO TABLE I_BFOD_A
WHERE BUKRS IN S_BUKRS.
IF I_BFOD_A[] IS INITIAL.
EXIT.
ELSE.
Remove records based on selection criteria
DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR
NOT BUDAT LE P_BUDAT OR
NOT HKONT IN S_HKONT OR
NOT BELNR IN S_BELNR OR
( NOT AUGDT IS INITIAL AND
NOT AUGDT > P_BUDAT ).
ENDIF.
Build selection option
LOOP AT I_BFOD_A.
I_PRCTR-PRCTR = I_BFOD_A-PRCTR.
COLLECT I_PRCTR.
S_PRCTR-SIGN = 'I'.
S_PRCTR-OPTION = 'EQ'.
S_PRCTR-LOW = I_BFOD_A-PRCTR.
COLLECT S_PRCTR.
ENDLOOP.
SORT S_PRCTR.
SORT I_PRCTR BY PRCTR.
PERFORM F_BUILD_I_CEPC_TABLE.
ENDFORM. " F_RETRIEVE_BFODA_BY_COMPANY
Form F_RETRIEVE_BFODA_BY_PRCTR
FORM F_RETRIEVE_BFODA_BY_PRCTR.
Acquire BFOD_A table
SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT
SHKZG DMBTR DMBE2 FROM BFOD_A
INTO TABLE I_BFOD_A
FOR ALL ENTRIES IN I_PRCTR
WHERE PRCTR = I_PRCTR-PRCTR AND
KUNNR IN S_KUNNR AND
BUKRS IN S_BUKRS.
IF I_BFOD_A[] IS INITIAL.
EXIT.
ELSE.
Remove records based on selection criteria
DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR
NOT BUKRS IN S_BUKRS OR
NOT BUDAT LE P_BUDAT OR
NOT HKONT IN S_HKONT OR
NOT BELNR IN S_BELNR OR
( NOT AUGDT IS INITIAL AND
NOT AUGDT > P_BUDAT ).
ENDIF.
ENDFORM. " F_RETRIEVE_BFODA_BY_PRCTR
Form F_MOVE_BASE_TO_REPORT
FORM F_MOVE_BASE_TO_REPORT.
I_REPORT-PRCTR = I_BFOD_A-PRCTR.
I_REPORT-KUNNR = I_BFOD_A-KUNNR.
I_REPORT-BELNR = I_BFOD_A-BELNR.
I_REPORT-BUKRS = I_BFOD_A-BUKRS.
I_REPORT-HKONT = I_BFOD_A-HKONT.
I_REPORT-AUGDT = I_BFOD_A-AUGDT.
I_REPORT-BUDAT = I_BFOD_A-BUDAT.
I_REPORT-GJAHR = I_BFOD_A-GJAHR.
I_REPORT-BUZEI = I_BFOD_A-BUZEI.
I_REPORT-SHKZG = I_BFOD_A-SHKZG.
I_REPORT-DMBTR = I_BFOD_A-DMBTR.
I_REPORT-DMBE2 = I_BFOD_A-DMBE2.
I_REPORT-HWAER = I_BKPF-HWAER.
I_REPORT-HWAE2 = I_BKPF-HWAE2.
I_REPORT-BKTXT = I_BKPF-BKTXT.
I_REPORT-XBLNR = I_BKPF-XBLNR.
ENDFORM. " F_MOVE_BASE_TO_REPORT
Module STATUS_9000 OUTPUT
text
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS '9000'.
SET TITLEBAR '900'.
Launch standard ALV grid
PERFORM F_CREATE_ALV_GRID_CONTROL.
PERFORM F_LOAD_COLUMN_HEADINGS.
ENDMODULE. " STATUS_9000 OUTPUT
Module USER_COMMAND_9000 INPUT
text
MODULE USER_COMMAND_9000 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT' OR 'CANC' OR 'BACK'.
CALL METHOD REF_CUSTOM->FREE.
SET SCREEN 0.
LEAVE SCREEN.
Begin of changes for Release 2 by HBE7890 - DEVK909110
WHEN 'PRIN'.
PERFORM PRINT_AGING_TOTALS.
End of changes.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
Form F_CREATE_ALV_GRID_CONTROL
text
FORM F_CREATE_ALV_GRID_CONTROL.
Set field catalog for ALV
PERFORM F_SET_FIELDCAT.
IF REF_CUSTOM IS INITIAL.
Create ALV container
CREATE OBJECT REF_CUSTOM
EXPORTING
CONTAINER_NAME = 'ZRPT_CONTAINER'.
Create ALV grid control
CREATE OBJECT REF_ALV_ZRPT
EXPORTING
I_PARENT = REF_CUSTOM.
Adjust look and feel
PERFORM F_CHANGE_SETTINGS.
Call the ALV Build
CALL METHOD REF_ALV_ZRPT->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = V_LAYOUT
IS_VARIANT = V_VARIANT
I_SAVE = V_SAVE
I_DEFAULT = V_DEFAULT
CHANGING
IT_SORT = I_SORT
IT_OUTTAB = I_REPORT[]
IT_FIELDCATALOG = I_ALV_FIELDCAT[].
Create print top of page
CREATE OBJECT REF_EVENT_RECEIVER.
SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_PAGE
FOR REF_ALV_ZRPT.
Create print top of page
CREATE OBJECT REF_EVENT_RECEIVER.
SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_LIST
FOR REF_ALV_ZRPT.
ENDIF.
ENDFORM. " F_CREATE_ALV_GRID_CONTROL
Form F_CHANGE_SETTINGS
text
FORM F_CHANGE_SETTINGS .
Set layout parameters
V_LAYOUT-GRID_TITLE = 'A/R by Profit Center'.
V_LAYOUT-SEL_MODE = 'A'.
V_LAYOUT-INFO_FNAME = 'LINECOLOR'.
V_LAYOUT-CWIDTH_OPT = 'X'.
V_LAYOUT-NO_MERGING = 'X'.
V_LAYOUT-NUMC_TOTAL = 'X'.
V_DEFAULT = 'X'.
V_SAVE = 'A'.
Set display variant
V_VARIANT-REPORT = SY-REPID.
IF P_DSVAR NE ''.
V_VARIANT-VARIANT = P_DSVAR.
ENDIF.
ENDFORM. " F_CHANGE_SETTINGS
Form F_SET_FIELDCAT
text
FORM F_SET_FIELDCAT .
Set field catalog for ALV
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZFR0ARPR_S1' "DEVK909110
I_STRUCTURE_NAME = 'ZPSS_ARBYPC' "DEVK909110
CHANGING
CT_FIELDCAT = I_ALV_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
Override any attributes
LOOP AT I_ALV_FIELDCAT INTO V_ALV_FIELDCAT.
IF V_ALV_FIELDCAT-FIELDNAME EQ 'NAME1'.
MOVE 'Customer Name' TO: V_ALV_FIELDCAT-REPTEXT,
V_ALV_FIELDCAT-SCRTEXT_L,
V_ALV_FIELDCAT-SCRTEXT_M,
V_ALV_FIELDCAT-SCRTEXT_S.
ENDIF.
IF V_ALV_FIELDCAT-FIELDNAME EQ 'SORT'.
MOVE 'Documentation' TO: V_ALV_FIELDCAT-REPTEXT,
V_ALV_FIELDCAT-SCRTEXT_L,
V_ALV_FIELDCAT-SCRTEXT_M.
MOVE 'DocRef' TO V_ALV_FIELDCAT-SCRTEXT_S.
ENDIF.
MODIFY I_ALV_FIELDCAT FROM V_ALV_FIELDCAT.
ENDLOOP.
ENDFORM. " F_SET_FIELDCAT
Form F_BUILD_TOTALS
text
FORM F_BUILD_TOTALS .
DATA: V_DAYS TYPE I,
V_INDEX(2) TYPE N.
CLEAR I_TOTAL.
Build total line
MOVE I_REPORT-HWAER TO I_TOTAL-WAERS.
MOVE I_REPORT-DMBTR TO I_TOTAL-TOTAL.
DO 5 TIMES.
V_DAYS = ( SY-INDEX - 1 ) * P_AGEDY.
V_INDEX = SY-INDEX.
IF I_REPORT-DPAST LE V_DAYS.
CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.
ASSIGN (V_FIELD-NAME) TO <COLUMN>.
<COLUMN> = I_REPORT-DMBTR.
EXIT.
ELSEIF SY-INDEX EQ 5.
CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.
ASSIGN (V_FIELD-NAME) TO <COLUMN>.
<COLUMN> = I_REPORT-DMBTR.
EXIT.
ENDIF.
ENDDO.
COLLECT I_TOTAL.
ENDFORM. " F_BUILD_TOTALS
CO-PA has all the information you need...
Profitability Analysis is that part of CO where operations will access its performance factors and profitability statements contain margins, standard cost variance, sales information, allocations and other related profit or loss data. This module helps analyze profitability of customers, markets and products at various levels of contribution margins. Profitability is measured down to the SD billing document line and is adjusted periodically against standard costs and other costs.
It has 2 methods of approach :
Costing based Profitability Analysis - This is primarily designed to let you analyze profits quickly for the purpose of sales management.
Account based Profitabilty Analysis - This type of Profitability Analysis enables you to reconcile cost and financial accounting at any time using accounts.
Guess, the second approach is what you are looking for... -
Creation of a PCR for calculation of LTA
Hi Experts,
I have an India Payroll requirement where i need to write a PCR with the below conditions:
1) The Employees would be eligible for the LTA from the very first month of their Service as per below conditions:
a) All active employees in a given month are eligible for LTA for that given month.
b) All employees joining the Organization on or before 15th of the month are eligible for LTA of that particular month.
c) All employees leaving the Organization on or after 15th of a particular month are eligible for LTA of that particular month.
2) Calculation:
Latest Basic Salary in the month of March *No of months worked in a particular financial year(step2)*LTA Percentage
For this i would need a wage type which i can use as a counter for the entire financial year.So what model wage types i can use to create a counter wage type which would get stored in CRT and can be used as a factor at the end of the financial year to calculate LTA.
Thanks & Regards,
Punam JhaHello Punam,
Please go through the documentation of payroll function INLTA in your system and then create your schema.
Best Regards,
Deepak.. -
Net Value of Entry Sheet Calculation
HI,
Please guide on how can sap system calculates the net value of entry sheet.
E.g : My services PO has discount
1. At the services PO under conditions, I just put the gross amt after the discounted amount = 2,907,448.28 with qty = 1 AU
2. At the services tab, I put in the the actual gross amt 3,060,472.07 and the discount condition 153,023.79-. So the net value total = 2,907,448.28 with quantity =1%
The following are my entry sheet :
1. 1,805,678.33 qty 0.640%
2. 912,020.49 qty 0.348%
When I enter the 3rd entry sheet the value becomes negative and system does not allow me to save the entry sheet. Is this because in the condition UoM is AU and in the services UoM %
3. -16 XXXX.XX qty 0.012%
Why this happens and how to correct them.
First please let me understand how the net value calculated or where could I obtain the documentationMitra Kamalan wrote:
HI,
>
> Please guide on how can sap system calculates the net value of entry sheet.
>
> E.g : My services PO has discount
> 1. At the services PO under conditions, I just put the gross amt after the discounted amount = 2,907,448.28 with qty = 1 AU
> 2. At the services tab, I put in the the actual gross amt 3,060,472.07 and the discount condition 153,023.79-. So the net value total = 2,907,448.28 with quantity =1%
> The following are my entry sheet :
> 1. 1,805,678.33 qty 0.640%
> 2. 912,020.49 qty 0.348%
>
> When I enter the 3rd entry sheet the value becomes negative and system does not allow me to save the entry sheet. Is this because in the condition UoM is AU and in the services UoM %
> 3. -16 XXXX.XX qty 0.012%
>
> Why this happens and how to correct them.
>
> First please let me understand how the net value calculated or where could I obtain the documentation
Hi ,
i have just checked the whole scenario and found that system is behaving correctly. the possible reason for value becomes negative could be that some entry sheet might have been done already against the PO or the tax code has been changed while posting sevice entry sheet.
The error is not related to UOM AU & %. Do check in PO history the total Qty for which Service Entry Sheet has been done & whether the value of SES matches with your calculations.
Rgds
Honey -
Preference calculation with batch management
Hi experts,
I am trying to find any documentation or manuals about how to set-up and use preference calculation in SAP-SD-FT or GTS based on batch management.
Does anyone of you know how to do it and use such kind of "standard"-SAP-solution or is customer-specific programming essential.
Any reply would be much appreciated.
Best regards,
CorinneHi Corinne,
Did you get anything for your requirement specific to Preference calculation with batch management. I am also looking for the same. let me know if you found something useful or if you created an enhancement to resolve this issue.
Regards,
Sumit
Maybe you are looking for
-
Can you transfer music from your iPod to a new desktop computer?
My old desktop (which contained my iTunes library) got a virus and crashed. I got a new computer. My question is: can i import my music from my iPod to my new desktop computer? I want to make sure I don't lose any of my music but I would like to keep
-
Hi ALL, We have uploaded data from Flat file to hierarchy using IDOC transfer method , data transfered successfully to hierarchy. The hierarchy contains following structure , SALES REGION----->> SALES OFFFICE - >>SALES REP ID . While Crea
-
I keep getting an error, it say ipod cannot be synced, the missing file is locked
i keep getting an error, it say ipod cannot be synced, the missing file is locked
-
How do I close apps on os 7?
Ever since getting upgraded to os 7, I can no longer double tap the button to show running apps and then close ones I am not using. This is draining my battery very quickly which is frustrating. Can anyone tell me how to close apps?
-
Converting m4a files for use with itunes
I have a ton of m4a files that I used with an old version of itunes, but the latest version doesn't play and won't let me import or add to my library. Please help.