How to extract the customer's list

Hi,
Please help me how to extract the list of customers (sold-to-party) for whom email id is not maintained in contact person's details.
Waiting for ur replies..
Thanks in advance.
Regards,
Rahul

Hi,
You can select the data from KNVK..
Get the customers..
Then use the personnel numbers KNVK-PRSNR
to get the email address from the table ADR6..
If there is no value in the ADR6-SMTP_ADDR ..Then the email address is not maintained..
Thanks,
Naren

Similar Messages

  • How to cleanup the "custom" genre list

    The genre custom list is very large and has many in there that I don't use or want. Is there a way to remove some of these?
    Thanks!

    I'm afraid you are misinterpreting the list. Custom is at the top and when you click on it it allows you to type in a genre of your own making. Unless you have made some custom genres all of the genres on the list you are seeing are the default ones. I have read few methods for removing entries from the list but they all involve editing preference files which I wouldn't recommend unless you are very sure of what you are doing.

  • How to Extract the Freq List, Cycles per Freq and Samples per Cycles of sweep waveform

    How to Extract the Freq List, Cycles per Freq and Samples per Cycles of sweep waveform
    I want to extract the freqency distribution, cycles per freqency, and samples per cylce of swept waveform, in order to output the same of swept waveform with I have acquired by NI DAQ card, tks!
    owen wan
    Attachments:
    Untitled 1.vi ‏2333 KB

    Look inside the palette called Signal Processing - Waveform measurements.  There are a lot of functions here that you can use to get the information you desire.  For instance, the Extract Tones function will output an array of clusters, with each cluster element giving the frequency, amplitude, and phase of the signal component.  Go through the entire arry to see each frequency component of the complex waveform.
    Also, in the Waveforms palette there is the Get Waveform Components function that will give you t0, dt, and Y components of the waveform.  1/dt should give you the sample rate.  See attached VI.
    - tbob
    Inventor of the WORM Global
    Attachments:
    WfmInfo.vi ‏4658 KB

  • How to create the custom infotypes in Campus Management

    Hi,
    Please help me how to create the custom infotypes in campus management.
    Thanks,
    Lakshmi.

    Hi,
    Steps to create a HR Infotype:
    1) Go to Transaction PM01.
    2) Enter the custom Infotype number which you want to create (Should be a 4 digit number, start with 9).
    3) Select the 'Employee Infotype' radio button.
    4) Select the 'PS Structure Infotype'.
    5) Click on Create... A separate table maintenance window appears...
    6) Create a PS structure with all the fields you want on the Infotype
    7) Save and Activate the PS structure
    8) Go back to the initial screen of PM01.
    9) Click on 'All' push button. It takes a few moments.
    10) Click on 'Technical Characteristics'. Infotype list screen appears
    11) Click on 'Change'(pencil) button
    12) Select your Infotype and click on 'Detail' (magnifying glass) button
    13) Give 'T591A' as subtype table
    14) Give 'T591S' as subtype txt tab
    15) Give your subtype field as subtype field
    16) Save and come back to PM01 initial screen
    17) Click on 'Infotype Characteristics' ... Infotype list screen appears
    18) Click on 'Change' (pencil) button
    19) Click on 'New Entries'
    20) Enter your Infotype number and short text
    21) Here we have to set different Infotype Characteristics as per the requirement. (Better open another session with some standard Infotype's infotype characteristics screen and use as the reference to fill yours)
    22) Save your entries.
    23) Now the Infotype is created and ready to use.
    24) If you want to change the layout of the Infotype as per your requirement...
    25) In the PM01 initial screen...Select 'Screen' radio button and give 2000 as the screen name, then click on edit.
    26) In the next screen.. Select 'Layout Editor' and click 'Change'.
    27) Screen default layout appears...here you can design/modify the screen..change the attributes of the fields..etc.
    28) Save and activate. (Don't forget to 'Activate at every level)
    Subtype Creation :
    Transaction PM01 Goto Subtype Characteristics. Click on Append and then subtype. Enter the name and description of subtype on screen.
    Then goto technical Characteristics and maintain the details of subtype there. I.e name of subtype i.e. component name defined in PSnnnn. Subtype table is T591A.
    Subty.text tab is T591S and time const tab is T591A.
    See:
    http://help.sap.com/saphelp_46c/helpdata/en/4f/d5268a575e11d189270000e8322f96/content.htm
    HR related site:
    http://www.sapdevelopment.co.uk/hr/hrhome.htm
    Enhancement of Infotype
    Check the following
    http://help.sap.com/printdocu/core/Print46c/en/data/pdf/PAXX/PYINT_INFOTYP.pdf
    Infotype Enhancement overview screen
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/60a7586d-edd9-2910-68a8-8204303835a1
    Cheers,
    vasavi.
    kindly reward if helpful.

  • How to extract the column width in ALv report if its executed in background

    I am executing an ALV report in background , in front end i am getting data properly, in back end for some columns some of the digits are missing.For example if PO no is of 10 digits it will display only 8 becos column size is like that , how to extract coulmns in back ground.
    I have executed in background and checked the spool and  for some of the columns width is not sufficient to display comeplete data so please suggest how to extract the columns sizes if executed inj background for an ALV

    Hi Deepthi,
    you can try with the above mentioned suggestions ,if its worked its fine ,
    If not use Docking container instead of custom container, For ALV in back ground jobs, its suggest to use docking container instead of custom container , below you can find the declaration for docking container and code to use docking and custom container in your program for fore and back ground.
    or you can use docking container alone for both operations.
    Data : G_DOCK1 TYPE REF TO CL_GUI_DOCKING_CONTAINER,
    IF CCON IS INITIAL. (ccon is container name )
    *Check whether the program is run in batch or foreground
        IF CL_GUI_ALV_GRID=>OFFLINE( ) IS INITIAL.
    *Run in foreground
          CREATE OBJECT CCON
            EXPORTING
              CONTAINER_NAME = 'CON1'.
        CREATE OBJECT GRID1
            EXPORTING
              I_PARENT = parent_1.
    ELSE.
    *Run in background
          CREATE OBJECT GRID1
            EXPORTING
              I_PARENT = G_DOCK1.
        ENDIF.
      ENDIF.
    B&R,
    Saravana.S

  • How to extract the audio of a zip file? if it helps I'm trying to add this album zip to my library

    how to extract the audio of a zip file? if it helps I'm trying to add this album zip to my library

    Let's say you have a zipped audio collection (audio.zip) containing mp3 files. And you are at a Terminal prompt.
    List the files in the zip archive
    unzip -l audio.zip (that is ell)
    Extract all mp3 audio files into a new home directory folder called mymusic
    unzip -d ~/mymusic audio.zip \*.mp3
    Variations of the above will depend the zip contents, and internal structure. If the zipped audio collection was gzipped, or someone used rar on it, then the extraction process will be different.

  • How to map a custom enum list to a custom form property in an extended incident class

    Hi,
    I'm struggeling to understand how to map a custom enum list to a custom form property in an extended incident class.
    Here's what i want to have happen:
    I am going to publish a request offering on my SMPortal for allowing users to submit basic IT incidents. I want the form to include "Whom does this problem affect" (answers(This is the custom enum list): Me, Multiple Users, Whole department or Whole
    company), "What is the problem about", "Description" and "Attachments".
    Here's what i've done:
    In the authoring tool i created a MP for the custom enum list and put only the list in it. I sealed the MP and imported it.
    I created another unsealed MP called TST.Incident.Library for storing incident library customizations and extended the incident class to add an extension class i called ClassExtension_Affected scope with a custom property i called AffectedScope. Then i am trying
    to set the datatype of this property to "list". In the "select a list" dialog i cannot chose my previously sealed MP with the custom enum list in it. Why?
    - Do i need to scratch the sealed MP and put the custom enum list in the latter TST.Incident.Library MP instead?
    - If so, can i do that and keep this MP unsealed, or will i get an error on import saying "Unsealed management packs should not contain type definitions"
    - Should i create one sealed MP for both the custom enum list and the extension class + custom property?

    Hi,
    Authoring Tool simply isn't informed about your list. Open the sealed management pack where you define the root of the list in the Authoring Tool and in the same time open TST.Incident.Library. You will have two opened MPs in the Authoring
    Tool and be able to add a custom list for your custom field.
    Cheers,
    Marat
    Site: www.scutils.com  Twitter:
      LinkedIn:
      Facebook:

  • How to download the custom Tables to xls from the system?

    Hi
    How to download the custom Tables to xls from the system?
    Vijay

    Hi,
    Goto SE11, in the table name field give Z*, and click on display. You will get the list of Z tables.
    Regards,
    Prabu

  • How to extract the Fast Formula Body through database?

    Hi All
    The Oracle fast formulas are stored in the ff_formulas_f table under the column formula_text having the datatype long. I want to extract the formula text through back end. When I use the statement, Select formula_text from ff_formulas_f, I am getting only the first line.
    How to extract the full formula text?
    Regards
    Rahman

    Here's a unix shell script to do it for you based on the info given by the other posters.
    #!/bin/sh
    if \[ "$1" == "" \]; then
    echo Syntax: $0 FAST_FORMULA_NAME
    exit 1
    fi
    ffname=`echo $1|tr \[:lower:\] \[:upper:\]`; export ffname
    sqlplus -silent $ORAUSER/$ORAPASSWD <<END
    set define off serveroutput on format wrapped linesize 512 pagesize 0 feedback off verify off heading off echo off pause off long 100000
    column formula_text format a512;
    select formula_text from ff_formulas_f where formula_name = '$ffname';
    exit;
    END
    Also this will list the formula names given a substring:
    #!/bin/sh
    if \[ "$1" == "" \]; then
    echo Syntax: $0 FAST_FORMULA_NAME
    exit 1
    fi
    ffname=`echo $1|tr \[:lower:\] \[:upper:\]`; export ffname
    sqlplus -silent $ORAUSER/$ORAPASSWD <<END
    set define off serveroutput on format wrapped linesize 512 pagesize 0 feedback off verify off heading off echo off pause off long 5000
    select formula_name from ff_formulas_f where formula_name like '%$ffname%';
    exit;
    END

  • How to extract the details of the stored procedures in the database?

    Dear all,
    How to extract the details of them?
    Bst Rgds,
    Edward

    Hi Wa-Man Edward Chan,
    Following is the PLSQL Block Which Will Give Package, Procedure, Function Source
    set verify off
    undefine which_object;
    undefine which_line;
    declare
    Shows lines with context of:
    VIEW
    FUNCTION
    PROCEDURE
    TRIGGER
    PACKAGE SPECIFICATION
    PACKAGE BODY
    The script uses to temporary tables ERROR_TABLE_TEMP and ERROR_CLOB_TEMP created with:
    CREATE GLOBAL TEMPORARY TABLE ERROR_TABLE_TEMP(line number, text varchar2(4000));
    CREATE GLOBAL TEMPORARY TABLE ERROR_CLOB_TEMP(TEXT CLOB);
    v_offset number:= 5; -- Controls how many lines before and after the line in focus are to be shown
    v_obj_name varchar2(100);
    v_obj_type varchar2(100);
    v_obj_type_new varchar2(100);
    v_obj_line number;
    v_counter number := 0;
    v_text varchar2(32767);
    v_subtext varchar2(1000);
    v_from number;
    v_len number;
    v_marker varchar2(10);
    v_found number;
    v_line_from number;
    v_line_to number;
    v_long_text clob;
    procedure ins_line (p_text in varchar2) is
    begin
    v_counter := v_counter + 1;
    insert into error_table_temp(line,text)
    values (v_counter,p_text);
    end;
    begin
    delete error_table_temp;
    select ltrim(rtrim(upper('&which_object'))), nvl(to_number('&which_line'),0)
    into v_obj_name, v_obj_line
    from dual;
    begin
    select decode(object_type,'PACKAGE','PACKAGE BODY',object_type)
    into v_obj_type
    from user_objects
    where object_name = v_obj_name
    and nvl(v_obj_line,0) > 0
    and rownum = 1;
    exception when no_data_found then
    ins_line('ERROR: Object/line not found');
    return;
    end;
    ins_line(v_obj_name||' ('||v_obj_type||')');
    if v_obj_type in ('PACKAGE BODY','PACKAGE','FUNCTION','PROCEDURE') then
    v_obj_type_new := v_obj_type;
    ins_line('----------------------- PROGRAM LISTING -------------------------');
    for code in (select trim(text) text, lpad(line,4,' ')||' '||decode(line,v_obj_line,'>>>>> ',' ') marker, type
    from user_source
    where name = v_obj_name
    and line between v_obj_line-v_offset and v_obj_line+v_offset
    order by decode(type,v_obj_type,1,2),line) loop
    if v_obj_type_new != code.type then
    ins_line(null);
    v_obj_type_new := code.type;
    v_counter := -100000; -- In order to show specification before body
    ins_line(v_obj_name||' ('||v_obj_type_new||')');
    ins_line('----------------------- PROGRAM LISTING -------------------------');
    end if;
    ins_line(code.marker||code.text);
    end loop;
    elsif v_obj_type = 'VIEW' then
    select text
    into v_text
    from user_views
    where view_name = v_obj_name;
    v_line_from := v_obj_line-v_offset;
    v_line_to := v_obj_line+v_offset;
    v_obj_line := v_obj_line -1;
    ins_line('------------------------------- PROGRAM LISTING -------------------------------');
    for i in v_line_from..v_line_to loop
    begin
    if i = v_obj_line then
    v_marker := '>>>>> ';
    else
    v_marker := ' ';
    end if;
    if i = 0 then
    v_from := 0;
    v_len := instr(v_text,chr(10));
    else
    v_from := instr(v_text,chr(10),1,i);
    v_len := instr(v_text,chr(10),1,i+1) - v_from;
    end if;
    v_subtext := substr(v_text,v_from+1,v_len-1);
    if v_len > 0 then
    ins_line(lpad(to_char(i+1),4,' ')||' '||v_marker||v_subtext);
    end if;
    exception when others then
    null;
    end;
    end loop;
    elsif v_obj_type = 'TRIGGER' then
    ins_line('----------------------- PROGRAM LISTING -------------------------');
    delete error_clob_temp;
    execute immediate 'insert into error_clob_temp (text) '||
    'select to_lob(trigger_body) '||
    'from user_triggers ' ||
    'where trigger_name = '''||v_obj_name||'''';
    select text
    into v_long_text
    from error_clob_temp;
    v_obj_line := v_obj_line-1;
    v_line_from := v_obj_line-v_offset;
    v_line_to := v_obj_line+v_offset;
    for i in v_line_from..v_line_to loop
    begin
    if i = v_obj_line then
    v_marker := '>>>>> ';
    else
    v_marker := ' ';
    end if;
    if i = 0 then
    v_from := 0;
    v_len := dbms_lob.instr(v_long_text,chr(10));
    else
    v_from := dbms_lob.instr(v_long_text,chr(10),1,i);
    v_len := dbms_lob.instr(v_long_text,chr(10),1,i+1) - v_from;
    end if;
    v_subtext := dbms_lob.substr(v_long_text,v_len-1,v_from+1);
    if v_len > 0 then
    ins_line(lpad(to_char(i+1),4,' ')||' '||v_marker||v_subtext);
    end if;
    exception when others then
    null;
    end;
    end loop;
    end if;
    if v_counter = 0 then
    ins_line('*********** NO CODE FOUND ***********');
    else
    ins_line(null);
    end if;
    exception when others then
    ins_line('*********** ERROR: NOT POSSIBLE TO SHOW THE CODE ***********');
    ins_line(' FEJL: '||sqlerrm);
    end;
    set linesize 4000
    set heading off
    set feedback off
    set verify on
    select text
    from error_table_temp
    order by line;
    set linesize 80
    set heading on
    set feedback on
    Prashant

  • How to extract the cobol files into owb

    Hi
    How to extract the cobol files in owb,I am using OWB9.2.
    Ex:I am having 2 records DCEC4000100 9159000050C those values are 5 bytes 'RAVI and 6 bytes '15000'.
    Using contorl file i am trying to load these into Oracle,But i am not able into insert these records into Oracle.
    Can any tell me how to handle this kind of situation?
    Regards,
    Rupak

    Good morning Ashok,
    Your data is in a SQL*Loader supported datatype, so basically it should not be a problem.
    Have you checked the Database Utilities guide (for Oracle9i for instance: http://www.lc.leidenuniv.nl/awcourse/oracle/server.920/a96652/toc.htm) on how to handle this?
    I'll also repeat my previous question, have you ever been able to load data into the database using SQL*Loader (either using ASCII values or any other datatype)?
    For the OWB part, have you read "Importing Data Definitions" (typically chapter 4)? More specifically, "Specifying Field Properties" in "About Flat File Sources and Targets"?
    In "SQL*Loader Properties" it says the following:
    Type Describes the data type of the field for the SQL*Loader. You can use the Flat
    File Sample Wizard to import the following data types: CHAR, DATE, DECIMAL
    EXTERNAL, FLOAT EXTERNAL, INTEGER EXTERNAL, ZONED , AND ZONED
    EXTERNAL. For complete information on SQL*Loader field and data types, refer to
    Oracle9i Utilities. Currently, only portable datatypes are supported.
    If you check the database utitlities guide (chapter 6 Field List Reference) and look for "SQL*Loader Datatypes", you'll find (packed) decimal under the Nonportable Datatypes. This implies that OWB does not support it.
    This does not mean you can't use SQL*Loader, you'll only have to define everything separate from OWB and call it separately as well.
    Good luck, Patrick

  • AXIS2 - how to extract the response from OElement

    i implemented web services using the bottom to top method, i succed to
    deploy the webservice (embeded in axis.war) into tomcat.
    i generate also all stuf (skeleton, stub....), i have also a Junit test wich call the stub (this is the client of the webservice)
    when the execution finished, i have an OMElement, i would like to know how to extract the arraylist of Project object fromwithin the OMElement
    here is the code :
    public void testgetProjects() throws java.lang.Exception {          
              ProjectServiceImplStub stub = new ProjectServiceImplStub();
              // the default implementation should point to the right endpoint
              GetProjects getProjects24 = (GetProjects) getTestObject(GetProjects.class);
              getProjects24.setLogin("root");
              getProjects24.setSchema("autoprod");
              GetProjectsResponse projectsResponse = stub.getProjects(getProjects24);
              OMElement element = projectsResponse.get_return();
              //TODO extract list of Project object from element
              assertNotNull(projectsResponse);
         }thank you for your help

    You have to separate columns using comma as shown above.Hmm, no, you don't have to. You can also import into Excel from a fixed field length file.
    Just think about CHAR field which data includes a coma. This would just mess the Excel doc. So in these cases, it's a bit more tricky if you want to use CSV... you have to enclose CHAR data into " or '
    Regards,
    Yoann.

  • How to use the custom control ?

    Hi Friends,
    plz help to use of  custom control in screen painter ?
    and how to use the custom control ?
    Thanking you.
    Regards,
    Subash.

    HI,
    Screen Elements
    A screen can contain a wide variety of elements, either for displaying field contents, or for allowing the user to interact with the program (for example, filling out input fields or choosing pushbutton functions). You use the Screen Painter to arrange elements on the screen.
    You can use the following elements:
    ·        Text fields
    Display elements, which cannot be changed either by the user or by the ABAP program.
    ·        Input/output fields and templates
    Used to display data from the ABAP program or for entering data on the screen. Linked to screen fields.
    ·        Dropdown list boxes
    Special input/output fields that allow users to choose one entry from a fixed list of possible entries.
    ·        Checkbox elements
    Special input/output fields that the user can either select (value ‘X’) or deselect (value SPACE). Checkbox elements can be linked with function codes.
    ·        Radio button elements
    Special input/output fields that are combined into groups. Within a radio button group, only a single button can be selected at any one time. When the user selects one button, all of the others are automatically deselected. Radio button elements can be linked with function codes.
    ·        Pushbuttons
    Elements on the screen that trigger the PAI event of the screen flow logic when chosen by the user. There is a function code attached to each pushbutton, which is passed to the ABAP program when it is chosen.
    ·        Frame
    Pure display elements that group together elements on the screen, such as radio button groups.
    ·        Subscreens
    Area on the screen in which you can place another screen.
    ·        Table controls
    Tabular input/output fields.
    ·        Tabstrip controls
    Areas on the screen in which you can switch between various pages.
    ·        Custom Controls
    Areas on the screen in which you can display controls. Controls are software components of the presentation server.
    ·        Status icons
    Display elements, indicating the status of the application program.
    ·        OK field
    Every screen has a twenty-character OK_CODE field (also known as the function code field) that is not displayed directly on the screen. User actions that trigger the PAI event also place the corresponding function code into this field, from where it is passed to the ABAP program. You can also use the command field in the standard toolbar to enter the OK field. To be able to use the OK field, you need to assign a name to it.
    All screen elements have a set of attributes, some of which are set automatically, others of which have to be specified in the Screen Painter. They determine things such as the layout of the screen elements on the screen. You can set the attributes of screen elements in the Screen Painter - either for a single element, or using the element list, which lists all of the elements belonging to the current screen. Some of the attributes that you set statically in the Screen Painter can be overwritten dynamically in the ABAP program.
    with regards,
    sowjanyagosala

  • How to change the drop down list "Category" in the Risk page (PWA 2013)

    Hello,
    How to change the drop down list "Category" in the Risk page of a Project Site. I need to change the list of elements.
    Thanks

    Hi Robert,
    You actually cannot edit the current template.
    The process is as follow: 
    create a brand new project site from the existing template,
    edit the site configuration (list, column, webparts, image, logo, theme...),
    save it as a template,
    associate it to an EPT.
    See reference below:
    http://blogs.msdn.com/b/brismith/archive/2010/03/15/customizing-the-project-site-in-project-server-2010.aspx
    Hope this helps,
    Guillaume Rouyre, MBA, MCP, MCTS |

  • How to create the custom table?

    Hi, how to create the custom table and how to integrate the table with defferent R/3?
    my requiremnt is i have to create the two tables and those i have to integrate with the existed R/3 and using those R/3 i have to update my custom tables .....can give me some idea?
    Tks
    DPk

    how to create the custom table
    There are two approach in creating a table.
    1. Bottom-up approach
    2. Top-down approach.
    Both are valid and you can choose which approach is suitable for you. I always use the bottom-up approach. Here are the steps to create the tables with this approach.
    1. SE11 will take you to the DDIC and enter the name of the new table to be created. Let us say Zname. Click create.
    2. Enter the short discription of the table and enter the field of the table. If it is primary key and you have to check the box.
    3. Enter the data element and double click it, you will be asked to save and will take you to data element discription page. Enter the short discription of the data element and enter the information of domain like the length of field and type of field.
    4. If you wanted to use the existing domain then its fine, or else, you have to create one. Enter the domain name in the data element page and double click it. Page will ask to save and jump to domain creation page.
    5. In the domain page, you have to save the information which you have already given in the data elements page and check it. Before going to data element page, you have to activate the domain.
    6. Go to data element page and save, check and activate.
    7. Go to main table page and save, check, and activate.
    8. Also, you have to save the technical settings of the table.
    The table is now ready for operation. You can use it in your program or you can use it to enter information.
    Check table: It is the table which will have all the information about the Foreign keys which are the primary keys in the check table.
    It can be created by creating the foreign key from the main table. Click foreign key in the main table and it will take you to a page which will ask for table name and field to which foreign key relation has to be associated. Enter the information and you can create the check table automatically.
    SM30 is used for maintenance of the table, that is to realease the errors occured during the creation of the table.
    how to integrate the table with defferent R/3
    Transport the Table to the another server/client/qas/prd
    Kanagaraja L

Maybe you are looking for

  • JDBC-ODBC

    Hi, I'm using JDBC-ODBC bridge to access and query my Excel file. This part of my code:      Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );      c = java.sql.DriverManager.getConnection( "jdbc:odbc:qa-list", "", "" );      stmnt = c.createStatement

  • GETTING NOT ASSIGNED WHILE EXECUTING THE QUERY

    Hi Experts, i have one query on 0sd_c03, while i am executing this query i am getting 'notassingned' in some keyfigures like "width,length,grade,grade series,quality". but i have the data in datatarget. what is the problem,what is the solution for th

  • How to add scroll bars to a panel

    Hi Can anyone plz tell me how to add a scroll bar to a panel created within a JFrame Regards ats

  • How do I get the latest version of iTunes?

    I was just given my uncle's old Mac (Mac OS X, version 10.4.11). I have already transferred my music from my old PC to this computer via flashdrive. But when I tried to sync my ipod shuffle in iTunes a message came up and told me my iPod could not sy

  • Why does Firefox keep me logged into websites after closing and reopening the browser?

    As of today, Firefox has been behaving differently. Namely, when I close Firefox and reopen, I am still logged in to email and other sites. I have all of my privacy settings checked, such as clear history, offline data, form history, etc etc so that