Calculate octroi in INR in Import PO
Hi,
I want to calculate Octroi (condition type ZOCT) assigned in my purchase pricing procedure to be calculated in INR always... but instead it is calculating in Document currency as i have defined the condition as % of Base price... and the base price is in USD....
Please Help...
Jyotsna Loomba
Hi,
OCTROI needs to be converted if it is in different currency, you need to check the currency maintained for ZOCT condition type and use the following FM to convert it into INR,
Convert_to_local_currency, this needs the date, from currency & to currency as parameters, the date to be the PO date, from currency would be the document currency, to currency would always be 'INR',
Hope this helps,
Rgds,
Similar Messages
-
Calculate key figures are not important to reports
Hello Experts,
How can I delete a calculated key figure from the query when the change of report query is not accessible from the analyzer?
Thank youIf you can create a new workbook you can. Simpy right-click on "Key figures" in the BEx Analyzer, remove the specific C-KF from the displayed list of keyfigures and the save the Workbook. You should check if you have the authorization rights to save this new Workbook into existing roles, or just your Favourites.
Altering the Query is a bit more work though. -
How to calculate width of imported image
I use the code below to layout 12 imported images. The code works fine as long as the images have a consistent width. However, the widths have now changed and my layout is screwed up. To solve the problem I'd like to change my layout formula to place images according to thier widths. However, my problem is that I cannot access the widths of the imported images. So my question is: How can I calculate the width of each imported image?
for(var i:int=0; i<12;i++){
imageLoader = new Loader();
var url:String = "images/animal"+i+".png";
var urlReq:URLRequest = new URLRequest(url);
var sprite:Sprite=new Sprite;
imageLoader.load(urlReq);
imageLoader.x=70*i
imageLoader.y=100
sprite.addChild(imageLoader)
addChild(sprite);Thanks. That makes sense. What type of event do I need for my event handler? If I use:
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
Should I have:
public function imageLoaded(e:Event):void {
trace("Width="+e.contentLoaderInfo.??) -
India localization receipt error, import standard purchase order interface
Hi
I created PO using PO interface and then imported PO in Incomplete status. Now after applying taxes(India localization) i send it for approval and then tried creating receipt. at this point i got an error message which is about trigger JAI_RCV_RT_BRIUD_T1 and some routine and all.
After doing little diagnostic here and there, i found that If i create Manual PO and apply Taxes i.e. Open Purhcase Order(Localized) select line level click on "Taxes" and apply a Tax on it and precedence, just after "Rate" there is a field of Curr which is defaulted with INR.
In case of Import PO, at order localized form when I apply Tax, the field Curr is Null.
Now when I somehow put currency INR in imported PO(by making that field editable and taking INR from LOV) everything goes smooth.
So my doubt is, why INR is not coming by default at Tax screen at PO localized form when i create PO using interface.Hi
Do you have a copy of your insert statement?
regards -
Item Interest Calculation for partially cleared items
Hi
We need to do interest calculation on Customer Line Items. The T Code we are using is FINT. We have set an interest indicator for Item Interest Calculation, with Interest Calculation based on Items Cleared with Payments. The requirement is that Interest should be calculated on even partially cleared items. Suppose a customer invoice is generated on 1.1.2009 for INR 100000 and becomes due for payment on 30.1.2009. Now on 10.2.2009, a partial payment is recieved against this invoice for INR 30000. System should calculate interest on INR 30000 for 11 days. Now again on 20.2.2009, remaining payment of INR 70000 is recieved. In such a case, interest should be calculated on INR 70000 for 21 days @ 1.25% PM. In the current configuration, when we define that system should calculate interest on Open Items cleared with payments, system calculates interest on INR 100000 for 1.25% for 21 days. Pls suggest.
Regards
Sanil BhandariHi u can check all below steps with specific fields i thought it is working perfectly check it.
1. Define Interest Calculation Types
here u can enter int rate type as a "S" Balance interest calculation
2. Prepare Account Balance Interest Calculation
here u can enter int calculation frequency means monthly or quarterly etc. calander type G, select balance plu int check box
3. Define Reference Interest Rates
Here u can enter date currency
4. Define Time-Dependent Terms
here u can enter currency effective from date sequential number term (Debit interest: balance interest calc. or Credit interest: balance interest calc.) referance int rate enter before step what u r defined that one u can enter here.
5. Enter Interest Values
here u can enter interest rate for that referance int type
6. Prepare G/L Account Balance Interest Calculation
Here u can enter ur g/l accounts
0001 Interest received (int received a/c)
0002 Interest paid (int paid a/c)
0011 Pt vl.min.int.earned(int received a/c)
0012 Pst vl.min.int.paid(int paid a/c)
0013 Pst vl.dt.int.earned(int received a/c)
0014 Past val.dt.int.paid(int paid a/c)
0015 Calc.per.int.earned(int received a/c)
0016 Calc.period int.paid(int paid a/c)
1000 G/L account (earned)(Loan giving a/c)
2000 G/L account (paid) (Loan taking a/c)
after that u can post transaction execute ur transaction code i thought it is helpful for u
Regards,
Nauma. -
Currency vs Account group restriction for vendor master
Dear All,
Is it possible to restrict the user from using inr for Import vendors account group and other currencies for domestic vendor account group in standard????Hi,
Through authorization object F_LFA1_GRP (Vendor: Account Group Authorization ) field - KTOKK (Vendor account group) you can restrict user to create particular type vendor i.e Import Vendor or Domestic Vendor etc. Pls refer below screenshot...
As k your Basis user to restrict as per account group ....Through PFCG transaction..
Regards
Abhishek Tiwari -
This program is supposed to display the number of (years)iterations, the amount of principal (incrementing) and the final balance after the designated number of years. This is supposed to display in the text window. I think this program has a lot of problems. Can anyone give me any pointers? I have to remain with BreezySwing and I think I need to use either a for or while loop.
//PURPOSE: Calculate increase based on input
import javax.swing.*;
import BreezySwing.*;
public class mutualfund3 extends GBFrame {
// Declare variables for the window objects
private JLabel principalLabel;
private JLabel iRateLabel;
private JLabel yearsInLabel;
private DoubleField principalField;
private DoubleField iRateField;
private IntegerField yearsInField;
private JButton enterButton;
private JButton totalButton;
private JTextArea output;
// Define the other instance variables
private double totalprincipal;
private double totaliRate;
private int totalyearsIn;
// Constructor
public mutualfund3(){
// Define the table's header line
String header = Format.justify('r', "Initial principal", 15) +
Format.justify('r', "Interest Rate", 10) +
Format.justify('r', "Years In", 15) + "\n";
// Instantiate the window objects
principalLabel = addLabel ("Initial principal $" ,1,1,1,1);
iRateLabel = addLabel ("Interest Rate" ,1,2,1,1);
yearsInLabel = addLabel ("Years In Fund" ,1,3,1,1);
principalField = addDoubleField (0.00 ,2,1,1,1);
iRateField = addDoubleField (0.0 ,2,2,1,1);
yearsInField = addIntegerField(0 ,2,3,1,1);
totalButton = addButton ("Total Amount" ,3,1,1,1);
output = addTextArea ("Years Principal End Amount",4,1,3,4);
output.setEditable(false);
principalField.requestFocus();
// Initialize the totals to 0.
totalprincipal = 0;
totalyearsIn = 0;
totaliRate = 0;
public void buttonClicked (JButton buttonObj){
if (buttonObj == TotalButton){
processInputs();
principalField.requestFocus(); //Set cursor on focus
}else{
totalButton.setEnabled(false);
displayDashes();
//displayNumbers ("Totals", totalprincipal, totaliRate, totalyearsIn);
// Read the inputs, compute the formula, format and display the
// name, number years, principal, interest and total..
private void processInputs(){
// Declare the local variables
double principal; // Initial principal
double interest;
int years;
double endBalance=0;
double currentBalance=0;
//Read the user input
principal = principalField.getNumber();
interest = iRateField.getNumber();
years = yearsInField.getNumber();
for (years=0; years<=yearIn; years++);
// Calculate the total.
endBalance = currentBalance * ((1 + interest)/principal);
// Display the yearsIn, current Bal and endBalance
display (years, currentBalance, endBalance);
// Increment the totals
endBalance +=endBalance;
years +=years;
private void displayNumber (String str,currentBalance){
String numberline = Format.justify ('l', years,2);
Format.justify ('l', currentBalance, 9);
Format.justify ('l', + endBalance+, 9);
output.append (numberline);
public static void main (String[] args){
mutualfund3 theGUI = new mutualfund3();
theGUI.setSize (550, 525);
theGUI.setVisible (true);
}can't help with any of the BreezySwing stuff, but here's a simple program which does
what I think you're trying to do. It might give you some ideas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Testing extends JFrame
JTextArea ta = new JTextArea();
JTextField[] tf = new JTextField[3];
JLabel[] lbl = new JLabel[3];
public Testing()
setLocation(200,100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
String[] lblText = {"Principal; ","Rate (e.g.5.25): ","Term: "};
JPanel top = new JPanel(new GridLayout(3,2));
for(int x = 0; x < tf.length; x++)
lbl[x] = new JLabel(lblText[x],JLabel.RIGHT);
tf[x] = new JTextField(10);
top.add(lbl[x]);
top.add(tf[x]);
JPanel mid = new JPanel();
JScrollPane sp = new JScrollPane(ta);
sp.setPreferredSize(new Dimension(375,200));
mid.add(sp);
JPanel bottom = new JPanel();
JButton btn = new JButton("OK");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
display();}});
bottom.add(btn);
getContentPane().add(top,BorderLayout.NORTH);
getContentPane().add(mid,BorderLayout.CENTER);
getContentPane().add(bottom,BorderLayout.SOUTH);
pack();
public void display()
double principal = Double.parseDouble(tf[0].getText());
double rate = Double.parseDouble(tf[1].getText())/100;
int term = Integer.parseInt(tf[2].getText());
double interest = 0.0;
double totalInterest = 0.0;
java.text.DecimalFormat df = new java.text.DecimalFormat("0.00");
ta.setText("Years\tPrincipal\tInterest\tTotal Interest\n");
ta.append( "====\t=======\t======\t==========\n");
for(int x = 0; x <= term; x++)
ta.append("\n"+x+"\t"+df.format(principal)+"\t"+df.format(interest)+"\t"+df.format(totalInterest));
interest = principal*rate;
totalInterest += interest;
principal += interest;
public static void main(String[] args){new Testing().setVisible(true);}
} -
Customisation for PO Release (different Values for different Doc Types)
Dear Experts,
I need to configure for PO release procedure where in the Characteristics would be Plant (2 Plants), Doc Type (3 types - Standard PO, Imports PO & Capital PO) and Value (2 stage release: 0-100000 & >100000 INR for Std PO, 0-200000 & >200000 INR for Imports PO and 0-300000 & >300000 INR for Capital PO).
Please let me know where I shoud define the different Values for different Docs for the Release procedure to work properly.
Or let me know the entire procedure for achieving the same.
Regards,
MNPHi MNP,
You have to create different CLASSes in IMG with the possible combination of different characteristics,
EX. CLASS EKKO11 - Plant A, Doc type- Std PO, Value- 0-100000 & >100000 INR
CLASS EKKO22- Plant A, Doc type- Import PO, Value- 0-200000 & >200000 INR
CLASS EKKO33- Plant A, Doc type- Capital PO, Value- 0-300000 & >300000 INR and same for other plant
then assign these classes to the respective Release group.
regards,
Pravin -
Hi,
I have one problem.....I have craeted PO with few condition types.....Now i enetred value manually in fron of each condition type...
Now i saved the PO..
My problem is , the movement i am creating ainother PO, once i entered vendor and material all my previous entered value are coming by default...
There is no Condition record maintained for any condition type, i have alraedy checked it.
Please guide me , from where it is taking default previous data.
UtsavHi Priyanka,
My question is different:
I will again explain you:
I created Po with vendor x and material M porg P1:
Gross price =90 Inr
Freight= 120 inr
Octroi =30 inr
Sad = 200 Inr
I saved the Po...I got Po # 4500000009.
Now immediately when i am creating new po .i have given Vendor x , porg P1 and material M, Now in condition tab all my previous PO records are fetching by default i.e.:
Gross price =90 Inr
Freight= 120 inr
Octroi =30 inr
Sad = 200 Inr
Why it is coming default..
No condition record is maintained...
Utsav
Edited by: Utsav.agra on Jul 9, 2009 7:43 AM
Edited by: Utsav.agra on Jul 9, 2009 9:09 AM -
Ok so spent the last hour getting extremely confused. At the moment my game launches a GUI with textfieds and prints the info entered into other text fileds. What i need to do now is get the info from text5 and minus it from the info in text1. to create the variable runningTotal. However i have converted an int to a string to get number(running Total) in text 1, and an int into a string to get the number of peices picked into text5. Now i think i need to convert them to ints to be able to calculate them?
totally confused
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Game extends JFrame
public static void main (String [] args)
new Game();
Random generator = new Random();
int runningTotal = generator.nextInt(100);
String number = Integer.toString(runningTotal);
private JTextField text1;
private JButton button1;
private JButton button2;
private JTextField text2;
private JTextField text3;
private JButton button3;
private JTextField text4;
private JTextField text5;
public Game()
this.setSize(400,400);
this.setTitle("Nim");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel aPanel = new panel();
JLabel label2 = new JLabel("Enter your name,then press OK");
text2 = new JTextField(10);
aPanel.add(label2);
aPanel.add(text2);
this.add(aPanel);
this.add(aPanel);
ClickListener c1 = new ClickListener();
button1 = new JButton("OK");
button1.addActionListener(c1);
aPanel.add(button1);
this.add(aPanel);
JLabel label3 = new JLabel("Current Player");
text3 = new JTextField(10);
text3.setEditable(false);
aPanel.add(label3);
aPanel.add(text3);
this.add(aPanel);
this.add(aPanel);
JLabel label4 = new JLabel("Enter your pick,then press My Turn");
text4 = new JTextField(10);
aPanel.add(label4);
aPanel.add(text4);
text4.setText(""+0+"");
this.add(aPanel);
this.add(aPanel);
ClickListener c3 = new ClickListener();
button3 = new JButton("My Turn");
button3.addActionListener(c3);
aPanel.add(button3);
this.add(aPanel);
JLabel label5 = new JLabel("Your last pick was");
text5 = new JTextField(10);
text5.setEditable(false);
aPanel.add(label5);
aPanel.add(text5);
this.add(aPanel);
this.add(aPanel);
ClickListener c2 = new ClickListener();
button2 = new JButton("EXIT");
button2.addActionListener(c2);
aPanel.add(button2);
this.add(aPanel);
this.setVisible(true);
class panel extends JPanel
public panel()
JLabel label1 = new JLabel("Number of Pieces");
text1 = new JTextField(20);
text1.setText(number);
this.add(label1);
this.add(text1);
private class ClickListener
implements ActionListener
private int clickCount = 0;
public void actionPerformed (ActionEvent e)
String name = text2.getText();
if (e.getSource() == button1)
text3.setText(""+name+"");
int pick = Integer.parseInt(text4.getText());
// int number = Integer.parseInt(text1.getText());
//int
// int runningTotal = Integer.parseInt(text1.getText());
// runningTotal = (number - pick);
if (pick < 10)
if (e.getSource() == button3)
text5.setText(""+pick+"");
// text1.(runningTotal);
if (pick <= 0)
text5.setText("Pick a number");
if (e.getSource()== button2)
System.exit(0);
text2.requestFocus();
}Now ive set up the GUI and the user input i need to
think about how im going to get the computers turn in
there. The spec of the assignment says you have to
use inheritance so what i was going to do was make a
class called player and extend it to make a Computer
Opponent class called enemy. Is this the right way to
go about it? I have no idea what this game of yours does, or supposed to do, but a way to go is:
// Game.java
import javax.swing.*;
public class Game extends JFrame {
private Player human;
private Player computer;
public Game() {
human = new HumanPlayer();
computer = new ComputerPlayer();
public static void main(String[] args) {
new Game();
// Player.java
abstract class Player {
// HumanPlayer.java
public class HumanPlayer extends Player {
// ComputerPlayer.java
public class ComputerPlayer extends Player {
}And do some reading about inheritance:
Classes and Inheritance
http://java.sun.com/docs/books/tutorial/java/javaOO/
Writing Abstract Classes and Methods
http://java.sun.com/docs/books/tutorial/java/javaOO/abstract.html -
Dimension Formula versus Script Logic that runs on default
Hi Experts,
Which is better to use dimension formula or script logic that runs on default? We have a lot of dimension formulas and when noticed that it has a huge impact in the performance of our AppSet. When we try to remove them, the performance seems better. We we're thinking of transforming these dimension formulas into script logic which will run by default instead. Right now I'm hesitant with two things, 1.) Will there be improvement in performance if I all these formulas are run at default via script logic? 2.) The maintenance seems to be much more complex for the user if we use script logic.
Thanks,
MarvinHi Marvin,
Actually you pointed very well the advantage and disantavage regarding dimension formula.
Dimension formula are executed into run time which means that value are not calculated. Of course this will have an impact regarding performances.
Usually our recommendation is to use dimension formula just when yoiu have KPI's to calculate which will be very difficult to be implemented into SQL scrip logic or when you have very simple calculation like Account A = Account B+ Account C.
For other calculation we advice our customer to use script logic.
But attention:
Default formula should not become very heavy because you will arrive into other issue with performances.
When you will send data if default formula script will be heavy you will arrive into situation to wait may be minutes just to send one figure and of course this will be not acceptable for users.
So you have to use script logic but you have to run into batch mode (schedule package) that script logic.
Into default formula you have to keep just minimum (you have to calculate just figures which have importance for user imediat, real time).
Also you have to be aware that moving dimension formula into scrip logic actually your fact table will grow a lot because the number of records generated will be probably 3-4 times bigger than number of records from fact table with dimension formula.
Maintenance of script logic is more complex than dimension formula and you pointed very well this.
So it is a balance and I tried o provide you suggestions or best practice when you have to use dimesnion formula and you have to avoid dimension formula.
I hope this will help you to arrive to best combination for your application.
Kind Regards
Sorin Radulescu -
Hello,
When we create PO and with Taxcode "S1" , then system will show all the taxes in "Tax tab", Here we may saw "BASB condition type , What ever the base value of the PO is their, that wil copy in to BASB value, how is it possible. How the system will link that?
If suppose.
in Pricing PB00 = 1000
and ZMAT 2%= 20 ( Tool Amortization charges).
Business needs that they want all the excise values should calculate on 1020 INR, not on 1000 RS.
But, when we were created the PO, and used the tax code "S1", then system was only showing "BASB" value 1000 INR, it should show 1020,
why bcz all the excise related taxes were calculated based on "BASB" condition type.
Thanks and Regards
sapman manHi,
You need to check setting in calculation schema for condition types PB00 & ZMAT where all placed properly with a logic for calculation ---how total price will be(NET PRICE in PO) & specially check properties of ZMAT condition type.
Concept of tax in purchasing started with tax code which is in PO ( invoice tab in item details)where the tax code links calculation schema to tax calculation procedure.
The NET PRICE in PO is transferred to tax procedure as "Base amount" by maintaining(which is a base to calculate tax further) base price (BASB) with 362 routine in tax procedure (OBYZ).
As in you case you have Gross Pricing PB00 = 1000 and ZMAT 2%= 20 ( Tool Amortization charges) where 2% Tool Amortization charges is added to total cost of PO as NET PRICE. Keep ZMAT condition type(M/06) Plus/minus fields as A in controldata-1 segment. Do setting as for your specific requirement in calculation schema(M/08)
Steps-Couu2014Condition type--Cond Descri--- -
From -
TO
10----0PB00 Gross Price--
20----0 ZMAT -Tool Amortization charges -10--
30----0TOTAL1020--
Now create PO with tax code S1 and check how tax calculated with base price 1020 INR
Regards,
Biju K -
Hi everybody,
I'm trying to program and run the simplest of EJB 3.0/Client examples using NB 5.5/Enterprise Pack 200612... . I've got a stateless session bean that contains one method which is exposed to the client via the remote interface. I've also created an EJB client, that has a reference to said EJB. When I try to call a method of the SSB, I end up with a NullPointerException. This applies to both trying to start the client from within NB or the command line. Can someone provide a solution? All classes have been created using the NB wizards, yet I can't get this simple example to work. The tutorial, unfortunately doesn't provide an example for creating an EJB client using NB. All relevant sources are attached.
Thanks, Michael
package example;
import javax.ejb.Stateless;
@Stateless
public class CurrencyCalculatorBean implements CurrencyCalculatorRemote {
/** Creates a new instance of CurrencyCalculatorBean */
public CurrencyCalculatorBean() {
public double calculate(double amount, double exchangeRate) {
return amount * exchangeRate;
package example;
import javax.ejb.Remote;
@Remote
public interface CurrencyCalculatorRemote {
public double calculate(double amount, double exchangeRate);
import javax.ejb.EJB;
import example.CurrencyCalculatorRemote;
public class Client {
@EJB
private static CurrencyCalculatorRemote currencyCalculatorBean;
/** Creates a new instance of Client */
public Client() {
* @param args the command line arguments
public static void main(String[] args) {
System.out.println("Calling EJB");
System.out.println(currencyCalculatorBean.calculate(0, 0));
}This kind of client is a Java EE component called an "Application Client". It needs to be run
using an Application Client container, otherwise injection will not take place.
In the Java EE SDK / Glassfish, the command to run an Application Client is called "appclient".
I don't know what the GUI option within NetBeans is for invoking your client using the appclient
command. However, you can invoke it explicitly from the command-line.
There's an example here that shows the difference betweeen an Application Client and
a plain java client :
https://glassfish.dev.java.net/javaee5/ejb/examples/Sless.html
The build.xml shows how the Application Client is invoked.
--ken -
Hi team,
when i create purchase order in USD currency, i have created the Project & WBS elements in INR currency, budget profile currency is controlling area currency also INR and payment has been done inl INR. is there any impact in reports and where will get this type report in standard.
please suggest about this....Hi Siddu,
By default all the standard PS reports shows the values in Controlling Area Currency. In some line item reports like CJI3, CJI5 etc you have the option of selecting Object Currency or Transaction Currency along with Controlling area currency.
In your scenario all your PS reports or reports otherwise will show all the values in CO. Area currency which is INR. You can do postings in AUD, USD , EUR etc to your projects. This doesn't impact anything. The system will calculate the corresponding INR values for these postings based on rate types maintained in system by your FICO consultants whether M or P.
Hope it helps you..
Cheers
Sammar -
Break table into multiple tables
I have a table with 700000 records and I need this data for calculating a value in excel using one of the third-party add-ins and then import all the data back into Oracle table. Since excel can only hold about 65000 records, I will have to break the oracle table into about 11 excel files each holding about 65000 records and then run my function and then import the calculated data back into Oracle. My question is how do I split the oracle table into 11 tables with each having 65000 records. There is no unique field in the table.
Format of table is like this;
num1 num2 cdat
12 43
12 34
45 65
32 45
I will need to use excel and calculate cdat column and then import it back to excel with cdat column calculated.
num1 num2 cdat
12 43 232
12 34 543
45 65 343
32 45 244
Any tips to guide me would be helpful.No, I cannot do that because I have a third-party add-in that is installed in excel and it accesses its own proprietary database to peform some calculation and then gives the calculated number in excel. I cannot access this thirdparty database in oracle and I do not know the algorithm it uses to give me the desired number. The only option I have for now, is to get the data from oracle into excel, do my calculations and then import it back into oracle.
Maybe you are looking for
-
After installing iTunes 11.1, the disk permission goes wrong.
After installing iTunes 11.1, I use Disk Utility to repair disk permissions. It repaired some files in the iTunes.app. But I try to repair disk permission again and again. It shows the files is repaired again and again. I think the file's permission
-
Can I use my Powerbook G4 15" as an extra display with a new iMac?
-
Creating ImageIcon from .ICO files
Can i use an icon (.ICO) to create an Icon or an ImageIcon for a JButton? Thank you
-
How do i switch from an adjustment layer to a new layer ( Layer>New>Layer). Example: When i go from, say a curves adjustment layer to a new transparent layer to run a High Pass Filter. It comes up 'Unable as no pixels are selected'. The only way I kn
-
Right storage folder according to iOS guidelines?
Hi, I was wondering where is the best place to store a larger amount of data on iOS devices. Currently, I know that "File.applicationStorageDirectory" is no good since it will be backed up by iCloud. I was thinking about using "File.documentsDirector