URGENT! Getting the correct data from field BET01 in Infotype 0008

Hello,
I am trying to read the logs (Long-term PCL4) for the field BET01, BET02...in infotype 8. When I get the data from the logs, the value that appears in BET01 seems to be different from the value present in PA0008.
Does this value depend on the wage types valuation? How is this value in the logs calculated? For the same amount present in pa0008-bet01 and for same wage type, i am seeing a different amount coming up from logs. Could anyone please help me with this to understand how the value in logs is being calculated?
Thank you very much !

If two users run the same select at the same time, they will ALWAYS come up with a duplicate doc code.
The standard way to insure a unique code is to use an Oracle sequence.
Otherwise, you could build your pl/sql into a stored procedure or package that inserts the new document code into the table before it passes it back to the user. This would prevent the second user from getting a duplicate, but would also stop user 2 from even getting a document code until user 1 did a commit.

Similar Messages

  • Not able to get the Qualification data from BAPI

    Hi all,
    I am using a BAPI (BAPI_JOBREQUIRE_GETLIST) to get the qualifiaction data for requirement profile. It's working fine earlier but I did not get the qualification data from this BAPI, although the data is there in DB against this requirement profile.
    Can someone suggest me why I am getting this issue. I have looked into SDN and in BAPI documentation and found as below:
    "You require authorization (structural authorization) to read the Requirements subprofile."
    I am having the same User ID as I had before (when I getting back the correct data), so I don't think it should be authorization issue.
    Can someone help me out in this issue please.
    Thanks,
    Sanket Sethi

    Hi Shiva,
    It does not going to these includes at all. Message comes out with successfully done. The BApi is calling RHPP_COMMON_QUALI_READ inside, but this will not return any data. But if will call any qualification object ID, this BAPI will come up with data.
    So the QP type LO profile will not come up with any kind of data, but if we pass the OTYPE as Q and pass any Qualification object ID then the data will be returned.
    Is there any relationship or some other thing is missing? Any idea.
    Thanks,
    Sanket Sethi

  • Hi, can you help?  My emails that I have received show the date received as either today, yesterday or July 28.  How can I get the correct date received?

    Hi, The emails that I have received show the date received as either today, yesterday or July 28.  How can I get the correct date received?

    That's very scary. They might do it, but I personally have never had Apple contact me re id's except on their site when signing in. I suggest you DO NOT respond until you have a phone conversation with Apple security. They can verify if they sent you the e-mail and why.
    While it's very possible it's true,again, I suggest you not respond until you speak to someone at Apple. I've often read here that when people sign in they are not allowed to because "someone else has used the id" type of statement.
    Also, you should be able to go to the app store and see what apps you have downloaded.
    Though it could have been a free app, have you checked to see if any were bought with your id account?
    I've gotten these types of e-mails from places like USPS and FedEx which look amazingly authentic and were from their website. I also received an odd e-mail from my cousin in Ireland last year that clearly was not from him. It was also sent to others in his family in Ireland. I e-mailed him that I only opened it because it had a .ie, but suggested he change... Days later I received mail from 'him' - same name, but at yahoo.com. 
    Again, I would call Apple. You can also report it at [email protected], but I would not settle for that given your situation. If nothing else, call Apple sales (sales depts. anywhere answer fast) and ask them to transfer you to security. Apple will not want anybody accessing their name, and while it's unlikely, it's not impossible that it is someone phishing.
    Hope this helps and can you let the support community know your results by posting on this thread when you're done? Thank you.
    Hope this helps.

  • Is there a way to get the correct order from the dependent types of a sche

    Hi ,
    I have a CT facing the following problem:
    When trying to built a SQL script to create all the object types within a schema using the DBMS_METADATA packages.
    Did insert in a table the names of the types that will be exported following a concrete order, next loop into the table and call the DBMS_METADATA package for each row.
    These type are depedent between them, there are some type attributes calling other types and here the issue
    First : try to generate the order by created column of dba_objects and when the generated SQL script is launched a lot of type appearing as incomplete state due to the order isn't correct.
    Second : try to insert the table ordering by object_id colums of dba_tables view, it appears incomplete types too.
    Currently want to insert the table using a recursive query with connect by against the dba_type_attrs starting with the rows when ATTR_TYPE_NAME is not null (the types that are called by other types), but this way has a issue dificult to resolve: the roots of hierarchy are the rows when ATTR_TYPE_NAME is not null and we've dependencies between roots nodes
    The question is is there a way to get the correct order from the dependent types of a schema?
    Platform: IBM SP AIX
    DB version: 9.2.0.7
    Any help will be appreciated .
    Thanks in advance.

    The xxx_dependencies view should give you the dependencies betwee nthe various types. I would look at something along the lines of:
    SELECT object_name, referenced_name
    FROM (SELECT o.object_name, d.referenced_name
          FROM user_objects o, user_dependencies d
          WHERE o.object_name = d.name(+) and
                o.object_type = d.type(+) and
                d.referenced_type(+) = 'TYPE' and
                o.object_type = 'TYPE')
    START WITH referenced_name IS NULL
    CONNECT BY PRIOR object_name = referenced_nameThe outer join between user_objects and user_dependencies is required to generate the names of types which are not dependent on other types, or do not have other types dependent on them.
    HTH
    John

  • Variant must get the current date from the system.

    Hi All,
    I really appreciate your help on below please;
    I need to create a variant and schedule a report program once a day.
    But variant must get the current date from the system (sy-datum).
    The program should run for the values in the variant in schedule job run;
    Can I do this using SAP variants (for Report Program) and schedule the job.
    Many thanks
    Iver

    Standard functionality.
    http://help.sap.com/saphelp_nw70/helpdata/en/c0/98039be58611d194cc00a0c94260a5/frameset.htm
    Thomas

  • "Could not get the audio data from the file" error

    Hi
    I get a lot of "Could not get the audio data from the file" errors when opening a project. Sometimes they crash Premiere Pro CC 7.01 (Mac). But if not Premiere works as usual, with the audio.
    I tried to convert the audio files (coming from Audition) from 32 to 16 bit. It worked while opening a project once, but not the following times.
    Where can it come from ?
    Edit: I also get this error when importing audio: "Error: Premiere Pro version 7.0 is not compatible with the Premiere Pro Plug-in version 5.7.4". Maybe it is connected.

    Got it! It was the Smartsound plugin making trouble. Got rid of it and no more errors.

  • The dates my photos were taken are now incorrect.  Any suggestions on how to get the correct dates back?

    The dates my photos were taken are not incorrect.  Any suggestions on how to get the correct dates back?

    Thank you Winston.  This works and I can adjust several photos at the same time.

  • How to get the correct value from check box

    hi guys,
    here is a program to read data from IKPF.
    with the user tick on the check box, the program will retrive
    corresponding records based on the inventory counted (zstat) status.
    however i don't get the correct output with the following selection.
    Please advise where is going wrong. Thank you.
    IF ph_ncnt = 'X'.
        v_zstat1 = SPACE.
      ENDIF.
      IF ph_pcnt = 'X'.
        v_zstat2 = 'A'.
      ENDIF.
      IF ph_acnt = 'X'.
        v_zstat3 = 'X'.
      ENDIF.
       select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       b~menge into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and ( a~zstat = v_zstat3 OR
            a~zstat = v_zstat2 OR
            a~zstat = v_zstat1 )
         and a~gjahr = p_gjahr.

    hi guys,
    i'll use the following to get the desire result. This is a bit "stupid" but at least it gives me the correct result.
      IF ph_ncnt = 'X'.
        v_zstat1 = SPACE.
      ENDIF.
      IF ph_pcnt = 'X'.
        v_zstat2 = 'A'.
      ENDIF.
      IF ph_acnt = 'X'.
        v_zstat3 = 'X'.
      ENDIF.
    IF ph_ncnt = SPACE AND ph_pcnt = SPACE
                         AND ph_acnt = SPACE.
         message I799(SA) with 'Which data to print?'.
         stop.
      ELSEIF ph_ncnt = 'X' AND ph_pcnt = 'X'
                           AND ph_acnt = 'X'.
       select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and a~gjahr = p_gjahr.
      ELSEIF ph_ncnt = 'X' AND ph_pcnt = 'X'.
       select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and ( a~zstat = v_zstat1 OR
            a~zstat = v_zstat2 )
         and a~gjahr = p_gjahr.
      ELSEIF ph_ncnt = 'X' AND ph_acnt = 'X'.
      select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and ( a~zstat = v_zstat1 OR
            a~zstat = v_zstat3 )
         and a~gjahr = p_gjahr.
      ELSEIF ph_pcnt = 'X' AND ph_acnt = 'X'.
      select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and ( a~zstat = v_zstat2 OR
            a~zstat = v_zstat3 )
         and a~gjahr = p_gjahr.
      ELSEIF ph_ncnt = 'X'.
      select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and a~zstat = v_zstat1
         and a~gjahr = p_gjahr.
      ELSEIF ph_pcnt = 'X'.
      select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and a~zstat = v_zstat2
         and a~gjahr = p_gjahr.
      ELSEIF ph_acnt = 'X'.
      select awerks bmatnr bcharg aiblnr bzeili agjahr a~gidat
       bmenge azstat into table t_data
       from ikpf as a
       inner join iseg as b
       on aiblnr = biblnr
       and agjahr = bgjahr
       where a~werks in s_werks
         and a~lgort in s_lgort
         and a~gidat in s_gidat
         and a~zldat in s_zldat
         and a~zstat = v_zstat3
         and a~gjahr = p_gjahr.
      ENDIF.

  • How can I get the image data from Clipboard with LV

    Anybody knows How can get the image data after pressd "print screen button" with LV?
    I want to program a software which can save a image as a bmp or jpeg etc, and the image data is from pressed print screen button. 
    How to get it out from clipboard. I am trapping about. thanks in advance.
    Try to make everything Automatic

    You can have a look at Rolf Kalbermatter's post here (give him stars) or, if you're using scripting, you can use the Application class Get Clipboard Image method.
    Try to take over the world!

  • How can i get the correct text from the url which has the mulitp-languages?

    hi, all
    i built a application and deployed it on sun application server 8.1. when i request a url which include some multi-languages (for example http://xxx.com/servlet?value=XXX. the 'XXX' may be simply chinese. ), i got the ??? instead of the correct text. how can i do it? in tomcat server, i can set the URIEncoding=GBK to get the correct code in server.xml. how can i do it in sun app server?
    thanks.

    Ok, it is unclear on what is happening here.
    Are you saying that when the webclient gets the data that it is not honoring the quote characters? Or the processing of the data buffer is causing issues?
    This is what I see the of your example text which is trying to be parse out:
    <a onmouseover="EnterContent('ToolTip','תווית על בגד: &rsquo;&rsquo;תן לאישה לכבס. זה תפקידה&rsquo;&rsquo;','<u><span style=color:#000099;>כתב: Spook בתאריך: 08.03.15 שעה: 22:11</span></u><br>מחאת טוויטר קמה בעקבות תוויות שוביניסטיות שהדפיסה חברת אופנה באינדונזיה לפיהן תפקיד הכביסה מוטל על האישה. החברה התנצלה אך כנראה רק עשתה רק יותר נזק לע...'); Activate();">";
    It appears to me that the  escapes `&rsquo;` does not have matching `&ldquo;` anywhere within the tooltip. So it appears that the page properly places left quotes in when processing the page, but the raw html has broken text.
    Hence a garbage in, garbage out situation.
    William Wegerson (www.OmegaCoder.Com)

  • How to get the complete data from Webdynpro using a RFC

    hi guys,
    A form is created in the webdynpro, when that pdf form is called the user have to provide the key field ie the employee number in the form and then when he press the 'go' button a rfc is called and it gives all the details of the employee in the form. Then the user have to input some fields in the form and he have press the submit button. My problem is here, when the user is going to press the submit button that form will be converted to a stream (binary) of data and it is sent to one of the import parameter used in the RFC.
    I have created a RFC and created a import parameter of data type XSTRING, since i want to see what exactly R3 is receiving from web dynpro i am writing this contant in the sever as a text file. When i saw that text file i cant see the complete data.
    And when i searched in R3 the capacity of xstring is 1024 CHAR, so i dont know how to capture the entire data from webdynpro into my R3.
    I give the code what i worte please tell me am i missing anything in my code, or is there any data type which can hold more than 500kb of data which is coming from webdynpro.
    FUNCTION ZSEND_MAIL_ATTACHMENT.
    ""Local Interface:
    *"  IMPORTING
    *"     VALUE(OUT_PLACE_LEVEL) TYPE  XSTRING OPTIONAL
    *"     VALUE(BIN_DATA) TYPE  INDX_CLUST OPTIONAL
    *"  TABLES
    *"      IT_MESSAGE STRUCTURE  SOLISTI1
    Data Declaration
      DATA: gd_cnt TYPE i,
          gd_sent_all(1) TYPE c,
          gd_error TYPE sy-subrc,
          tab_lines LIKE sy-tabix.
    Structure Declaration
      DATA : BEGIN OF it_file OCCURS 0,
              row(255),
             END OF it_file.
      DATA : BEGIN OF i_split OCCURS 0,
      row(50),
      END OF i_split.
    Internal Table Declaration
      data : it_receivers like table of SOMLRECI1 with header line."occurs 0.
      DATA : objbin LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE. "sOLIX
      DATA : it_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.
      data : wa_receiver like table of SOMLRECI1 with header line.
      data : it_receiver like table of SOMLRECI1 with header line.
      data : v_bin_data like SOLISTI1 occurs 0 with header line.
      DATA : gd_doc_data LIKE sodocchgi1 OCCURS 0 WITH HEADER LINE.
    *data bin_data1 like table of solix with header line.
      REFRESH : objbin, it_packing_list, it_receivers, wa_receiver.
      CLEAR   : objbin, it_packing_list, wa_receiver, it_receivers.
      DATA V_SUBJECT(255) VALUE 'HI'.
      gd_doc_data-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( it_message ).
      gd_doc_data-obj_langu = sy-langu.
      gd_doc_data-obj_name = 'SENDFILE'.
      gd_doc_data-obj_descr = v_subject.
      gd_doc_data-sensitivty = 'O'.
      APPEND GD_DOC_DATA.
    Appending The Internal Table it_packing_list
      it_packing_list-head_start = 1.
      it_packing_list-head_num = 0.
      it_packing_list-body_start = 1.
      it_packing_list-doc_type = 'RAW'.
      it_packing_list-body_num = tab_lines.
      APPEND it_packing_list.
    *CALL FUNCTION 'GUI_UPLOAD'
    *EXPORTING
    *filename = V_FILE_PATH
    *filetype = 'BIN'
    *TABLES
    *data_tab = BIN_DATA.
      move bin_data to v_bin_data.
      append v_bin_data.
    *move soli to bin_data.
      LOOP AT V_BIN_DATA into objbin.
    MOVE v_bin_data TO objbin-line.
        APPEND objbin.
      ENDLOOP.
      CLEAR it_packing_list.
      DESCRIBE TABLE objbin LINES tab_lines.
      it_packing_list-transf_bin = 'X'.
      it_packing_list-head_start = 1.
      it_packing_list-head_num = 1.
      it_packing_list-body_start = 1.
      it_packing_list-doc_type = 'PDF'.
      it_packing_list-body_num = tab_lines.
      it_packing_list-doc_size = tab_lines * 255.
      APPEND it_packing_list.
    data file(255) value '/tmp/bali.txt'.
    *Appending The Internal Table it_receivers
    close dataset '/tmp/bali.txt'.
    open dataset '/tmp/bali.txt' for output in text mode encoding default.
    if sy-subrc = 0.
    loop at objbin.
    transfer objbin to '/tmp/bali.txt'.
    endloop.
    else.
    write 'hi'.
    close dataset '/tmp/bali.txt'.
    endif.
      it_receiver-receiver = '[email protected]'.
      it_receiver-rec_type = 'U'.
      it_receiver-com_type = 'INT'.
    APPEND wa_receiver.
    move wa_receiver[] to it_receiver[].
      append it_receiver.
    *Move wa_receiver[] to it_receivers[].
    Clear it_receivers.
    if i_OUT_PLACE_LEVEL NE 0.
    loop at it_receivers into wa_receiver.
       loop at it_receivers into wa_receiver.
    **Function Module To Post The Message To Externa Mail
         CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
           EXPORTING
             document_data              = gd_doc_data
             put_in_outbox              = 'X'
             commit_work                = 'X'
           TABLES
             packing_list               = it_packing_list
             CONTENTS_TXT               = objbin
             receivers                  = it_receivers
           EXCEPTIONS
             too_many_receivers         = 1
             document_not_sent          = 2
             document_type_not_exist    = 3
             operation_no_authorization = 4
             parameter_error            = 5
             x_error                    = 6
             enqueue_error              = 7
             OTHERS                     = 8.
         clear wa_receiver.
    ENDFUNCTION.

    You have to convert your long string to a table of shorter strings.
    There may be other ways, but one possibility is to use a loop to process you string.
    while (there is something left)
       put the next e.g. 1024 characters in a new row of your table
    endwhile
    If you need to reconstruct your string from the table, don't use simple concatenation since it will remove blanks at the end of lines. Believe me (from experience) sooner or later this will happen.
    Instead you need to either set the subsections of your long string, or insert from the end of your table and keep shifting the contents (probably less efficient) right

  • How to get the forecast data from SCM into BW

    Hello,
    Is there a table or Function module in SCM F&R  that can be used  to transfer the forecast data from SCM F&R into BW? I dont see any Business content datasources that has the forecast data.
    I would like to get the future forecast data. For ex, if there is a forecast for a material and Site for the next 52 weeks, I would like to retrieve
    the same from SCM. I dont see any business content. The closest would be 0FRE_ANA_WEEKLY_1. But it has only the past data, not the future data.
    Thanks,
    SBS.

    Hi,
    You would follow the same process as you would for getting data from a R3 system to BW, i.e generate datsources on the APO side and then set the extraction to flow from APO to BW. On the BW side, you'll need a source system for the APO, replicate datsources, set up update and transfer rules in the infosource and then load data to the data targets.
    Cheers,
    Kedar

  • Is it possible to view/get the table data from a dump file

    I have dmp files generated using expdp on oracle 11g..
    expdp_schemas_18MAY2013_1.dmp
    expdp_schemas_18MAY2013_2.dmp
    expdp_schemas_18MAY2013_3.dmp
    Can I use a parameter file given below to get the table data in to the sql file or impdp the only option to load the table data in to database.
    vi test1.par
    USERID="/ as sysdba"
    DIRECTORY=DATA
    dumpfile=expdp_schemas_18MAY2013%S.dmp
    SCHEMAS=USER1,USER2
    LOGFILE=user_dump_data.log
    SQLFILE=user_dump_data.sql
    and impdp parfile=test1.par.

    Hi,
    To explain more about my situation.
    Target database has the dump files, where as the source database (cloud) doesn't have access to the target database.
    However, I can request the target DB DBA team to run the par files and provide me the output like a SQL file which I can take and run it in my source database.
    I got the metadata the same way, but is there any way I could get the data from the dump files on the target DB without actually accessing it? My question might sound weird, but please let me know.
    <
    1. export from the source into a dumpfile. You can do this on the source database and then copy the file over to your local database or you can do this from a local database if you have a database link defined on the local database that points to the source database.  In the second case, your dumpfile will be created on your local database.
    >
    How can i access the dump using the database link?

  • Cannot get the correct data type in Oracle JDBC

    Dear ALL:
    I used JDBC ResultSetMetaData to get the column data type for Oracle Database. I created a table including 2 columns AAA, which is NUMBER type, BBB which is FLOAT type.
    However, I found a problem that either NUMBER or FLOAT data types are reported as NUMBER type in JDBC.
    IN SQL 2000, it is okay. SMALLINT, INT, TINYINT, etc..can be reported correctly.
    Can anybody tell me that what's wrong here? I will be very appreciated.

    hi,
    i guess its a bug which is fixed with 10i.
    Elango.

  • Get the Encoder Data from NI Robotics Starter Kit 1.0

    I want to make a perfect 90 degree turn using the encoder Data from Robotics Starter Kit 1.0. Now I am doing it giving the angular velocity and controlling the time. But, the problem is, it's not perfect all the time. It is not repeatable. So, I want to use the encoder Data to turn it 90 degrees perfectly. So, How could I get the Quadrate Encoder Data from the motors (What VI should be used?). 

    Hey Mashfique,
    Sorry for the delayed response. I believe that with the Robotics Starter Kit 1.0 you aren't actually suppose to worry about which of the FPGA I/O correspond to which sensor because the Robotics VIs abstract that for you by design. Here's a link that you might find interesting that describes how to communicate with the FPGA to steer a robot using either the Servo's angular position or velocity:
    http://zone.ni.com/reference/en-XX/help/372983D-01​/lvrobogsm/robo_skit_programming/#skit_steering
    In the above link for example, they mention using the Write Sensor Servo Angle VI to set the angle that you want to rotate the Servo to.
    Regards,
    Ryan

Maybe you are looking for

  • How to install oracle on ubuntu 8.04 server amd64

    i have a question. is it possible to install on Ubuntu 8.04 amd64 server any oracle server? my purpose is to make a database with oracle on any other computer that runs on my ubuntu server. i followed few tutorials and everytime i got this error: Hit

  • External Toshiba drive won't work on Mac after using on PC

    My Toshiba External USB drive stopped working on my Mac air after I downloaded some files on a PC. It worked numerous times on the PC and then I brought it back home to use on Mac. Now, it won't show up on finder but can be found on Disk utility. I c

  • Will Final Cut X use Intel Quick Sync technology?

    Will Final Cut X use the Intel Quick Sync technology available on SandyBridge and future processes to speed up transcoding operations? What about if there is a discrete GPU in the system? http://www.anandtech.com/show/4083/the-sandy-bridge-review-int

  • Logic Crashing??

    Have Logic Express 9, every time I open Kontakt, I get an error  "There is not enough free memory to continue working with this project..." and it crashes.  I just upgraded my RAM, so I know for a fact that it's not an issue.  Read some forums about

  • Mail for Exchange sub folders, any plans?

    Does any one know if there are any plans to bring out sub folder support in mail for exchange. I think this is almost a complete show stopper as current versions of exchange are designed to work with sub folders and the rules written for those sub fo