Actualizar dos form a la vez c#

csharp
Etiquetas: #<Tag:0x00007fb8e1697c28>

#1

buenas tardes expertos,
les tengo una consulta ya puedo lograr lo de tener multiples form al mismo tiempo, el problema ahora es el siguente:
Por ejemplo si abro dos veces la ventana, y quiero ingresar un nuevo dato en el row 15, actualizo, despues de eso escribo en la misma row 15 pero del otro form y escribo lo mismo, y tambien se actualiza, como podria hacer que se guarde en un form y después el otro ya reconozca que esta en la base de datos y lo que ingrese se verifique y si no existe se guarde en la row siguente?

   string Extraerdequery1;
        private void Button0_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
        {
            BubbleEvent = true;
            oUserTable = oCompany.UserTables.Item("SUPRASECCIONESCOL");
            if (oForm.Mode.Equals(SAPbouiCOM.BoFormMode.fm_OK_MODE) || (Grid0.Rows.SelectedRows.Count == 0))
            {


                Button0.Caption = "OK";

            }

            else
            {
                SAPbobsCOM.Recordset oRec = (SAPbobsCOM.Recordset)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
                oRec.DoQuery("SELECT U_CodigoSS AS 'Código' FROM  [@SUPRASECCIONESCOL");

                oRec.MoveFirst();
                while (!oRec.EoF)
                {

                    Extraerdequery1 = oRec.Fields.Item("Código").Value.ToString();


                    oRec.MoveNext();

                }

                //if (Grid2.Rows.SelectedRows.Count > 0)   //VERIFICA QUE EXISTA UN ROW SELECCIONADO
                //{


                int nRow = Grid0.Rows.SelectedRows.Item(0, SAPbouiCOM.BoOrderType.ot_RowOrder);
                oApp.SendKeys("({TAB})");//aca aplico tabular para que tome el campo para actualizar




                //Grid2.Rows.SelectedRows.Equals(nRow);
                String sValorGrid = Convert.ToString(Grid0.DataTable.GetValue("Código", nRow));

                // Grid2.Columns.Item("CODE").Click();
                //bool num = (Grid2.Rows.SelectedRows.Count > 0);
                if (oUserTable.GetByKey(sValorGrid.ToString())) // Esto devuelve true si existe el registro
                {

                    //

                    string nom = (string)(Grid0.DataTable.GetValue("Nombre", nRow));




                    // oCompany.StartTransaction();
                    oUserTable.Code = sValorGrid;
                    oUserTable.Name = sValorGrid;
                    oUserTable.UserFields.Fields.Item("U_CodigoSS").Value = sValorGrid;
                    oUserTable.UserFields.Fields.Item("U_NombreSS").Value = nom;


                    int i = oUserTable.Update();

                    if (i != 0)
                    {
                        oApp.SetStatusBarMessage("Error" + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, false);

                    }
                    else
                    {
                        oApp.SetStatusBarMessage("Exito en la Actualización", SAPbouiCOM.BoMessageTime.bmt_Medium, false);

                        oForm.Mode = SAPbouiCOM.BoFormMode.fm_OK_MODE;
                        oForm.DataSources.DataTables.Item(0).ExecuteQuery("SELECT U_CodigoSS AS 'Código',U_NombreSS AS 'Nombre' FROM  [@SUPRASECCIONESCOL]");
                        Grid0.DataTable = oForm.DataSources.DataTables.Item("DTSPSEC");

                        Grid0.DataTable.Rows.Add(1);
                        for (int j = 1; j <= this.Grid0.DataTable.Rows.Count; j += 1)
                        {

                            if (j < this.Grid0.DataTable.Rows.Count)
                            {

                                Grid0.Rows.SelectedRows.Add(j);
                            }

                        }

                        RowNumberGrid(Grid0);
                        BubbleEvent = false;

                    }


                }


                     //si no existe el dato, lo agregara
                else
                {


                    //   Button0.Caption = "Agregar";
                    //   oUserTable = oCompany.UserTables.Item("EDICIONESCOL");
                    int nRow2 = Grid0.Rows.SelectedRows.Item(0, SAPbouiCOM.BoOrderType.ot_RowOrder);
                    String sValorGrid2 = Convert.ToString(Grid0.DataTable.GetValue("Código", nRow2));
                    //string nNOM2 = (string)Grid2.DataTable.GetValue("NOM", nRow2);
                    // string cod2 = (string)(Grid2.DataTable.GetValue("Código", nRow2));
                    string nom2 = (string)(Grid0.DataTable.GetValue("Nombre", nRow2));


                    oUserTable.Code = sValorGrid2;
                    oUserTable.Name = sValorGrid2;
                    oUserTable.UserFields.Fields.Item("U_CodigoSS").Value = sValorGrid2;
                    oUserTable.UserFields.Fields.Item("U_NombreSS").Value = nom2;

                    int j = oUserTable.Add();

                    if (j != 0)
                    {
                        oApp.SetStatusBarMessage("Error" + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, false);

                    }
                    else
                    {
                        oApp.SetStatusBarMessage("Exito en la inserción", SAPbouiCOM.BoMessageTime.bmt_Medium, false);

                        oForm.Mode = SAPbouiCOM.BoFormMode.fm_OK_MODE;

                        Grid0.DataTable.Rows.Add(1);

                        oForm.DataSources.DataTables.Item(0).ExecuteQuery("SELECT U_CodigoSS AS 'Código',U_NombreSS AS 'Nombre' FROM  [@SUPRASECCIONESCOL]");
                        Grid0.DataTable = oForm.DataSources.DataTables.Item("DTSPSEC");

                        for (int i = 1; i <= this.Grid0.DataTable.Rows.Count; i += 1)
                        {

                            if (i < this.Grid0.DataTable.Rows.Count)
                            {

                                Grid0.Rows.SelectedRows.Add(i);
                            }

                        }

                        RowNumberGrid(Grid0);
                        BubbleEvent = false;



                    }
                }

            }

        }

muchas gracias


#2

Hola :upside_down_face:!

Si te fijas, cuando creas una tabla (UDT) sap crea automaticamente los campos Key (Code y LineId si es de tipo detalle).
En este caso la tabla de usuario “SUPRASECCIONESCOL”, contiene el campo ‘U_CodigoSS’ que NO ES KEY, el campo clave real es ‘Code’, por lo que cada vez que actualizas, SAP genera y registra automaticamente un nuevo Code para cada entrada sin importar que se repitan los demas campos ('U_CodigoSS y demas).

Por lo tanto, antes de registrar un item (en el codigo del Button0_ClickBefore), debes verificar y validar que no exista en la BD un registro con el mismo U_CodigoSS de ser afirmativo debes colocar la instruccion BubbleEvent = false; para que no prosiga con el proceso de registro.

Saludos :vulcan_salute:


#4

Si, segun veo, tienes 2 opciones:

  • Continuar con la misma estructura que tienes y en el evento Button0_ClickBefore validar cuando oForm.Mode = SAPbouiCOM.BoFormMode.fm_UPDATE_MODE y hacer un select para verificar que el campo U_CodigoSS no exista en la DB, de ser afirmativo, aplicar BubbleEvent = false;.
  • Como bien comentaste, se puede sustituir el campo U_CodigoSS por el campo Code de la UDT y asi SAP gestionara automaticamente la validacion de este dato, evitando duplicados.

Saludos :vulcan_salute:


#5

Gracias Gabriel,como siempre mas claro que el agua!, saludos!


#6

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.