Backround for Matrix-cell

Hello,
I have a question concerning the System Matrix 38.
Is it possible to set a backround color of a particular cell of an UDF?
Thank you in advanced for your time.
Best Regards
Vural

Hi Verner,
thanks for your answer.
I think it would cause problems with performance if I do it in that way, because I have to do it for all UDFs from type Price, Sum and Quantity. The reason why I want to remark some cells is, that up to SBO 2007A the UDFs which has a type of price or Sum or Quantity are always shown a 0.00... when you  type in 0. Before in SBO 2004A the field where empty when the value was 0.
In this case if you have now e.g. 100 positions in a matrix, then and you have in some field only 0.0000 and in some you have 0.0001 or 0.0009 e.g. then you have always to look very carefully. I want to help the user that he can directly see the empty (value=0) field.
Perhaps somebody has different idea how I could do this? Perhaps its also only a setting ..
Regards
Vural

Similar Messages

  • Spaces required in an expression for matrix cell

    Hi, 
    I have Kishore, Srikanth and Hemanth in a matrix cell which are getting displayed. 
    I want 5 spaces before only the name of Hemanth and rest should be the same without spaces neither before the name nor after the name. 
    all are getting displayed by the expression =Fields!Metric.Value
    please help

    use an expression for that
    =IIF(Fields!Metric.Value = "Hemanth",Spaces(5) + Fields!Metric.Value,Fields!Metric.Value)
    Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs

  • Matrix Report - REP-1813:Object object name too large to fit in matrix cell

    I had this problem when running a matrix report. The report details are as follow :
    Query : select department,work,salary from sal;
    matrix row field : department
    matrix column field : work
    matrix cell field : salary
    data inserted into table sal :
    department : 10
    work : clerk
    salary : 1000
    I had created the same record for 60 times. Meaning there are 60 records(with same data) in the table. When I run the report, I got the error. But, if I deleted some records, it worked fine.
    In fact, I had already changed the 'Vertical Elasticity' property for all repeating frames to 'Variable'.
    Could somebody please help me to solve this. It is urgent. Thanks in advance.

    Hi,
    Your problem is bacause the innermost fame which is printing salary per row&column is printed 60 times. (because the job & dep are same for all 60 records). You get this error when the inner most frame grows to next page. Try this with setting the max no.of records per page to some 38 or 30 depending on page size. You will get it without error.
    Regards,
    Chandra

  • Populating a matrix cell with data selected from a picker

    Dear All,
    I am new to SAP Bussiness one, please let me know how to get the selected data from a picker in to a matrix cell. I have warehouse code and warehouse name in the picker. I want the user selected warehouse code in the matrix cell
    Below is my code But I am not getting the selected code in the matrix cell
    I am adding the datasource as below
    oUserDataSource = oForm.DataSources.UserDataSources.Add("UDCFL", SAPbouiCOM.BoDataType.dt_SHORT_TEXT)
    Then I am adding the choose  list  as below
    Private Sub AddChooseFromList()
            Try
                Dim oCFLs As SAPbouiCOM.ChooseFromListCollection
                Dim oCons As SAPbouiCOM.Conditions
                Dim oCon As SAPbouiCOM.Condition
                oCFLs = oForm.ChooseFromLists
                Dim oCFL As SAPbouiCOM.ChooseFromList
                Dim oCFLCreationParams As SAPbouiCOM.ChooseFromListCreationParams
                oCFLCreationParams = SBO_Application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_ChooseFromListCreationParams)
                ' Adding 2 CFL, one for the button and one for the edit text.
                oCFLCreationParams.MultiSelection = False
                oCFLCreationParams.ObjectType = "64"
                oCFLCreationParams.UniqueID = "CFL1"
                oCFL = oCFLs.Add(oCFLCreationParams)                
            Catch
                MsgBox(Err.Description)
            End Try
        End Sub
    *Then I am binding the data as below to the matrix column*
    oColumn = oColumns.Item("colToWhs")
            oColumn.DataBind.SetBound(True, "", "UDCFL")
            oColumn.ChooseFromListUID = "CFL1"
    Then in the event i have added the  below code.
                        Dim oDataTable As SAPbouiCOM.DataTable
                        oDataTable = oCFLEvento.SelectedObjects
                        Dim val As String
                        Try
                            val = oDataTable.GetValue(0, 0)
                        Catch ex As Exception
                        End Try
                        oForm.DataSources.UserDataSources.Item("UDCFL").Value = val
                       End If
    But the code is not getting populated in the matrix cell. Please let me know at the earliest
    Thanx in Advance

    sOLVED

  • How to achieve matrix cell value of systems forms matrix ?

    Hi,
    When user types data in perticular cell of matrix in system Form , i want to achieve that data.
    How can i achieve that data ?
    Do any one have some sample code plz. fwd it.
    Regards,
    Ganesh

    Hi Makarand,
    This should do the trick.
    <b>Code (C#):</b>
    public override void Handle_ItemEvent(string FormUID, ref ItemEvent pVal, out bool BubblesEvent)
      /* Switch by eventtype */
      switch(pVal.EventType)
        case BoEventTypes.et_VALIDATE:
          /* Get a matrix object */
          Matrix oMatrix = (Matrix)SBO_Application.Forms.Item(FormUID).Items.Item("MY_MATRIX_ID").Specific;
          /* Get a EditText object for the matrix cell */
          EditText oEdit = (EditText)oMatrix.Columns.Item("COLUMN_ID").Cells.Item("ROW_NUMBER").Specific;
          /* Get the value from the object */
          string sValue = oEdit.Value;
          /* Do other things you like ;) */
          break;
    Hope it helps,
    Rowdy

  • Multiple colours in matrix cell based on condition.

    Hi All,
    I have a requirement to fill the different colours in one Matrix cell based on the conditions. there are seven conditions if one of these condition fulfil then one colour. if two condition full fill then two different color in same matrix cell if three conditions
    full fill then three different color in same cell .....
    Thanks in advance.
    Zaim Raza.
    http://zaimraza.wordpress.com/

    Hi Raza,
    Yes, my above Switch expressions works in such a way as mentioned your sample screen.
    But only thing is you need to modify the expression as per your requirements.
    For Example:
    Take Month and Year wise Sales amount shown as below:
    The Expression would be like below(Not Tested)
    =Switch
    Fields!Salesamount.Value=100,"Orange",
    Fields!Salesamount.Value=200,"Aqua",
    Fields!Salesamount.Value=300,"Blue",
    Fields!Salesamount.Value=400,"Tomato",
    Fields!Salesamount.Value=500,"DarkViolet",
    Fields!Salesamount.Value=600,"Red",
    Fields!Salesamount.Value=700,"Blue"
    So, in a single cell "Year-2001"you will get all 7 colors.
    Please let me know still you need any info.
    bala krishna

  • Product Order for Matrix Reports [Certification Question]

    [ My Situation ]
    I'm having difficulty understanding the use of a property: a cell's Product Order property, used in Matrix reports by the main cells. Basically, I can't figure out what it does.
    [ What I Think a Matrix Report Is ]
    I understand the matrix report concept like so:
    A matrix report consists of 3 basic components: A category Row, a category Column, and Cells.
    The Row is the result of a query such as "SELECT DISTINCT dept_no FROM emp".
    The Column is like the Row such as "SELECT DISTINCT gender FROM emp".
    A Cell is a summary that coresponds to the queries that formed the Row and the Column, such as:
    SELECT AVG(salary)
    FROM emp
    GROUP BY dept_no, gender
    HAVING dept_no = 10 AND gender = "Female";
    The example above would produce a report where you could see whether males and females tended to have different salaries for various departments.
    [ I Know How the Data Model Works ]
    I understand the Data Model for a matrix report, where the summary fields go, etc.
    [ What I Think Product Order Does ]
    I don't understand what Product Order does for the Cells of a matrix report. It's a list of combinations of the groups in the matrix group from the Data Model. I think it translates to the order of the columns in a query's ORDER BY clause.
    If I reverse the order in which the groups appear in Product Order, I get different results. If my understanding of a matrix report and the Product Order property is correct, the order shouldn't matter.
    What am I misunderstanding?
    Thanks in advance for your help.

    from the online help:
    Description The Product Order property is the order in which
    groups are evaluated in the cross product for a summary.
    Product Order also defines the frequency of a summary, formula,
    or placeholder in a cross product group. That is, the summary,
    formula, or placeholder has one value for each combination of
    values of the groups in its Product Order. Product Order is
    used only for columns owned by cross-product groups. Because a
    cross product relates multiple groups, the groups in the cross
    product could be evaluated in any one of many different orders.
    Therefore, when creating a summary for a cross product, you must
    use Product Order to specify for Report Builder which group
    should be evaluated first, which second, and so on. You must
    also use Product Order to specify the frequency of a summary,
    formula, or placeholder within the cross product.
    Values A valid group combination.
    Applies to summary, formula, and placeholder columns
    Required/Optional required, if the column is a summary or
    formula column belonging to a cross product group.
    regards,
    the oracle reports team --pw                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Event on matrix cell

    Hi,
    i am creating a form similar to the purchase order form of B1. As in the PO form of B1, when i do tab on the matrix cell of the item code, i want to load the item-master details. To do this, i need to know which event is fired when i do tab in the matrix cell.
    Does anybody know about the event fired...or anything else regarding the issue...
    Help urgently required,
    Thanks....

    Hi Arpit,
    The most efficient way to do this is to bind a Formatted Search to the colum. Not do this capturing events, it's very slow, and a hassle to program.
    1) Create (Tools > Queries >Query manager) a user defined query:
       <i>SELECT ItemName FROM OITM WHERE ItemCode = $[$MyMatrix.MyColumWithItemCode.0]</i>
    2) Save the query
    3) Open your own form, click the columncell where you want to show the ItemName, press ALTSHFTF2
    4) Tick the 3th radio button <i>Search by Saved Query</i>
    5) Double click the input field and select the query saved at step 2
    6) Tick the box auto refresh and select in the drop down box your ItemCode column.
    Now every time the focus is lost from the ItemCode column, the itemname is displayed in the other column. You can also do this for other values, fields etc.
    Those steps I've described can also be done by code. (for a automatic installation or so) See the DI-API help; FormattedSearches and UserQueries objects.
    Hope it helps,
    Rowdy

  • Find row Index of edited matrix cell

    Hai,
    I have designed a matrix which shows some value. The user is allowed to edit the values in Matrix cell. I want to update the edited value in no object table.Is there any way to find out the row indexes of edited cell of matrix.
    If so, How to achieve this?
    Thanks in Advance.

    Using the validate is the same as any other itemevent: C:\Program Files\SAP\SAP Business One SDK\Samples\COM UI\CSharp\02.CatchingEvents
    The event will be raised when a user exits a field but in this case I don't think it's what you need.
    You should:
    1. Put a button on your form,
    2. when the user clicks it, loop through the matrix
    3. Check the Titles, and if they are different to what is in the No Object UDT, do step 4
    4. Update the table.
    These are important SDK concepts and you should invest some time in learning how to use both the Matrix Object and the UserTables object. The SDK helpfile provides sample codes.
    For example, the following method can be used to update a record in a UDT
    Private Sub Add_Data_Click()
        Dim oUserTable As SAPbobsCOM.UserTable
        Set oUserTable = oCompany.UserTables.Item("NoObjectTableName")
        oUserTable.GetByKey ("CodeOfValueInNoObjectTable")
        'Set default, mandatory fields
        oUserTable.Name = "Title"
        'Set user field
        oUserTable.UserFields.Fields.Item("U_AdditionalUDF").Value = "1"
        ret = oUserTable.Update
        If ret <> 0 Then
            oCompany.GetLastError ret, Str
            MsgBox Str
        Else
            MsgBox "Value to field: '" & oUserTable.UserFields.Fields.Item("U_AlbUDF").Name & "' was updated successfuly to " & oUserTable.TableName & " Table"
        End If
    End Sub
    I do not have the time to write up a full routine for this, but this information should be enough to get you started. Also check the SDK samples C:\Program Files\SAP\SAP Business One SDK\Samples\COM UI\CSharp\06.UseMatrix
    Edit: To answer your intial question, there is no indicator on the matrix object which shows which rows are edited - you have to implement a logic that checks this yourself.
    e.g. you could use the validate event to store the row number (pVal.Row) in a List that you can then use later after the user clicks the button.

  • Display Color for sigle  CELL in ALV report

    Hi all,
    I have one doubt is it possible to make a particular cell as read color in ALV.
    Ex: I have one field which shows amount in my ALV report,My requirement is that when ever the amount is less then 'ZERO', I have to show that particular cell in read color.
    Regards
    Anil Kumar.N

    hi,
    here code for coloring a perticular cell
    TYPE-POOLS:slis.
    TABLES:mara,
           makt,
           marc.
    DATA:BEGIN OF itab OCCURS 0,
          matnr LIKE mara-matnr,
          maktx LIKE makt-maktx,
          werks LIKE marc-werks,
          mtart LIKE mara-mtart,
          matkl LIKE mara-matkl,
          meins LIKE mara-meins,
          ntgew LIKE mara-ntgew,
         rowcolor(4) TYPE c,
          cellcolors TYPE lvc_t_scol,
         END OF itab.
    DATA:t_fcat TYPE slis_t_fieldcat_alv,
         t_eve TYPE slis_t_event.
    DATA : st_layout TYPE slis_layout_alv.
    SELECTION-SCREEN:BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS:mat FOR mara-matnr.  " no intervals no-extension.
    *PARAMETERS:mat LIKE mara-matnr.
    SELECTION-SCREEN:END OF BLOCK blk1.
    INITIALIZATION.
      PERFORM build_cata USING t_fcat.
      PERFORM build_event.
    START-OF-SELECTION.
      PERFORM data_retrieval.
      PERFORM display_data.
    *&      Form  build_cata
          text
         -->TEMP_FCAT  text
    FORM build_cata USING temp_fcat TYPE slis_t_fieldcat_alv.
      sy-tvar0 = sy-uname.
      WRITE sy-datum TO sy-tvar1.
      DATA:wa_fcat TYPE slis_fieldcat_alv.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'MATNR'.
      wa_fcat-seltext_m = 'Material'.
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'MAKTX'.
      wa_fcat-seltext_m = 'Description'.
      wa_fcat-fix_column = 'x'.
      wa_fcat-key = 'X'.                                     "To color a column
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'WERKS'.
      wa_fcat-seltext_m = 'Plant'.
      wa_fcat-key = ' '.
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'MTART'.
      wa_fcat-seltext_m = 'Type'.
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'MATKL'.
      wa_fcat-seltext_m = 'Group'.
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'MEINS'.
      wa_fcat-seltext_m = 'Measurement Unit'.
      APPEND wa_fcat TO temp_fcat.
      wa_fcat-tabname = 'ITAB'.
      wa_fcat-fieldname = 'NTGEW'.
      wa_fcat-seltext_m = 'Net Value'.
      APPEND wa_fcat TO temp_fcat.
    ENDFORM.                    "build_cata
    *&      Form  build_event
          text
    FORM build_event.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type     = 0
        IMPORTING
          et_events       = t_eve
        EXCEPTIONS
          list_type_wrong = 1
          OTHERS          = 2.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    "build_event
    *&      Form  data_retrieval
          text
    FORM data_retrieval.
      SELECT maramatnr  maramtart maramatkl marameins mara~ntgew
       maktmaktx  marcwerks
      INTO CORRESPONDING FIELDS OF TABLE itab
      FROM mara INNER JOIN makt ON
      maramatnr = maktmatnr
      INNER JOIN marc ON
      maramatnr = marcmatnr
      WHERE mara~matnr IN mat.
      SORT itab BY matnr.
      DELETE ADJACENT DUPLICATES FROM itab.
    ENDFORM.                    "data_retrieval
    *&      Form  display_data
          text
    FORM display_data.
    *******************************For setting Cell Color*******************************************
      DATA ls_cellcolor TYPE lvc_s_scol .
      st_layout-coltab_fieldname = 'CELLCOLORS'.
      READ TABLE itab INDEX 5 .
      ls_cellcolor-fname = 'MATNR' .
      ls_cellcolor-color-col = '1' .
      ls_cellcolor-color-int = '1' .
      APPEND ls_cellcolor TO itab-cellcolors .
      MODIFY itab INDEX 5 .
    st_layout-colwidth_optimize = 'X'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = 'ZALV_DS'
          is_layout          = st_layout
          i_save             = 'A'
          it_fieldcat        = t_fcat
          it_events          = t_eve
        TABLES
          t_outtab           = itab
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    "display_data
    Please reward if useful...

  • Rep-1813:object r_supp_name too large to fix in matrix cell.

    hi all,
    im getting an issue while running orale report.
    i used layout model as matrix.
    im getting error as:
    rep-1813:object r_supp_name too large to fix in matrix cell.
    r_supp_name is repeating frame of supplier_name field.
    i had already set maximum number of records but still my issue not solved.
    im unable to rectify it anyone please help me.
    thanks,

    Dear,
    I am facing the same problem my question is that you resolve your issue about REP-1813 or still pending if solved kindly share with us.
    Regards,
    K.J.J.C

  • I am having trouble getting a numbers spreadsheet to hold different formats in the same column.  A column with a date formatted heading will not convert to $ for the cells below.   Any suggestions would help.

    I am having trouble getting a numbers spreadsheet to hold different formats in the same column.  A column with a date formatted heading will not convert to $ for the cells below.   Any suggestions would help.

    Hi Wayne,
    Thank you for this response.  I have tried this but when I start enterring $ amounts some, such as $6.00, go in OK others such as $4.00 appear as a date ie 4 Oct 12.  
    Kind regards
    Paul

  • BubbleChecker  show  false  for matrix on  AfterChooseFromList event

    Hi expert,
    i have UDO form with a text field and matrix .Added CFL in both field  .Bubblechecker tools  show
    true for text  field and false(error)  for matrix column .please  help why bubblechecker tools  show false only for matrix CFL.
    [B1Listener(BoEventTypes.et_CHOOSE_FROM_LIST, false, new string[] {
                        "SBOeConnectUDO"})]
            public virtual void OnAfterChooseFromList(ItemEvent pVal)
                bool ActionSuccess = pVal.ActionSuccess;
                Form form = B1Connections.theAppl.Forms.Item(pVal.FormUID);
                // ADD YOUR ACTION CODE HERE ...
                EditText ET_itmcd = (EditText)form.Items.Item("ET_itmcd").Specific;
                IChooseFromListEvent oCFLEvent = (IChooseFromListEvent)pVal;
                if (oCFLEvent.BeforeAction == false && oCFLEvent.SelectedObjects != null)
    //for text field
    DataTable oDataTable = null;
                            oDataTable = oCFLEvent.SelectedObjects;
                            DBDataSource oDBDataSource = null;
                            oDBDataSource = form.DataSources.DBDataSources.Item("OITB");
                            oDBDataSource.SetValue("ItmsGrpNam", pVal.Row, System.Convert.ToString(oDataTable.GetValue(1, 0)));
    ///for matrix code
    if (oCFLEvent.ChooseFromListUID == "CFL_web")
                        try
                            Matrix oMatrix_web = (Matrix)form.Items.Item("mtx1").Specific;
                            DBDataSource oDBDataSource = (DBDataSource)form.DataSources.DBDataSources.Item("@Table1");
                            DataTable oDataTable = null;
                            oDataTable = oCFLEvent.SelectedObjects;
                            if (form.Mode == BoFormMode.fm_ADD_MODE | form.Mode == BoFormMode.fm_OK_MODE | form.Mode == BoFormMode.fm_UPDATE_MODE)
                                if (pVal.Row == oMatrix_web.RowCount)
                                    oDBDataSource.SetValue("LineId", oDBDataSource.Size - 1, null);
                                    oDBDataSource.SetValue("U_SitCd", oDBDataSource.Size - 1, null);
                                    oDBDataSource.SetValue("U_SitNam", oDBDataSource.Size - 1, null);
                                    oDBDataSource.InsertRecord(oDBDataSource.Size - 1);
                            oDBDataSource.SetValue("U_SitCd", pVal.Row - 1, System.Convert.ToString(oDataTable.GetValue("U_Code", 0)));
                            oDBDataSource.SetValue("U_SitNam", pVal.Row - 1, System.Convert.ToString(oDataTable.GetValue("U_Name", 0)));
                            oMatrix_web.LoadFromDataSource();
                        catch (Exception ex)
                            B1Connections.theAppl.SetStatusBarMessage(ex.Message, BoMessageTime.bmt_Medium, false);

    It's already a reported issue: Resize of grid controls
    A fix is due to be made in PL07 according to the note references in that thread: https://websmp130.sap-ag.de/sap/support/notes/1610013
    Also I think you got hit by a network issue and posted the thread twice

  • How can i apply different color for each cell in jlist component?

    hi guys i need your help and sorry if my english is very bad..guys how can i apply different colors for each cell in jlist component? for example for the first cell i want to apply color blue, for the second cell i want red, etc... i need your answer guys tnx..
    Edited by: ryrene on Mar 21, 2010 12:13 AM

    ryrene wrote:
    hi guys i need your help and sorry if my english is very bad.
    ..guys how can i apply different colors for each cell in jlist component? for example for the first cell i want to apply color blue, for the second cell i want red, etc... i need your answer guys tnx..I'll see your tnx, and raise you dve bmbrs & nplm.

  • Is there an app for blocking cell calls

    Is there an app for blocking cell calls?

    There is not.  Look to your right under "More Like This" for related discussions.

Maybe you are looking for

  • Problem installing Creative Suite CS4, major help needed

    Basically I need help asap because I uninstalled my previous versions of PS etc to install this and work has to be done. I installed the "Adobe Creative Suite 4 Master Collection" yesterday without problems, but then something happened to my machine

  • Informatica 9.0.1:- Table or view does not exist, error occured at recurive

    Hello every one, I am new to this field, I am getting error when I run my workflow in other folder, It is giving table or view does not exist, And I understood that the target table is not present, Actual table present is ws_twfs_olb_project_ds but i

  • What would happen if remove containers in UPS connection

    We are using SP2013 on-premise. Currently our farm have setup UPS connection to entire domain. Hence, some non-users account like other system's service accounts have been sync and user profiles have been generated. I think it is not a good security

  • ABAP Help for customer exit

    Hi All, I need help with ABAP code for customer exit for formula variable. I have ZVKDATE as formula var from customer exit. user enters date in ZVKEYDT(this is selection type var). I have the below code, I debugged it the l_var_range-low get the dat

  • N8 Bad Design When Speaking at the Phone

    If you are speaking with somebody the touch-screen is still started. So you are able in this way TO PUT YOU ACTIVE CALL ON HOLD WITH YOUR FACE. Come on NOKIA this is BASIC!!!