hola estimados,
tengo un formulario el cual esta con automanaged = true y bueno los datos se actualizand, eliminan y agregan casi automáticamente.
Tengo una grilla que es el de los métodos de pagos, el cual obtiene un valor y actualiza el campo pymcode del OCRD, cuando actualizo esto hago que el caption de mi button se ponga en update, pero apenas lo presiona actualiza y se cierra…
Cómo puedo actualizar el formulario con nuevos valores una vez actualizado. o hay un evento, que puedo manejar en código, que ocurre después de que se completa el evento de actualización?
muchas gracias!
Hola
Cuando quieras cambiar el “Estado” del form, debes hacerlo cambiando la propiedad “Mode” del formulario, es decir es vez de cambiar el caption del button, debes modificar el Mode del Form, esto asignara el caption del boton “1” (“Crear”,“Actualizar”,“OK”) de acuerdo al modo seleccionado (fm_UPDATE_MODE, fm_ADD_MODE,fm_OK_MODE,fm_FIND_MODE, ect).
oForm.Mode = SAPbouiCOM.BoFormMode.fm_UPDATE_MODE; // Coloca en Modo Actualizar y Cambia el caption del boton de forma automatica
Saludos
3 Me gusta
Hola Gabriel, feliz año ejeje, si entiendo eso, como me habias dicho anteriomente utilizo el automanaged, entonces solo cambio los captiony ya he logrado entender ya mucho el funcionamiento de eventos y tambien de las grillas en sap, ahora logro hacer la busqueda, luego actualizar la grilla, pero al momento de colocar actualizar se cierra la ventana, si guarda pero quiero que se refresque y quede como ok, pero con los datos nuevos, ya que se cierra el form.
abro el form y veo como esta la grilla por defecto (el metodo de pago que ya posee)
le cambio el metodo de cambio por defecto, y el boton como ves se ponen en update
luego de presiono el boton , se cierra el form.
diciendo que si se actualizo, y en efecto lo hizo, pero no me deja mantener el form con el cambio de datos, entonces ese es mi dilema, pensaba que podria ser con un item event
(Application.SBO_Application.ActivateMenuItem(“1289”); //Previous data record
Application.SBO_Application.ActivateMenuItem(“1288”); //Following data record)o solo seria un cambio de form?
que piensas?
muchas gracias!
Me parece que algo estas haciendo en el Evento ClickBefore o ClickAfter del button para que eso ocurra, pero deberas colocar el codigo para determinar las posibles causas porque no es el comportamiento normal de un Form.
1 me gusta
bueno tengo mi boton con clickafter, el cual tiene un case como tu me recomendaste con los caption, y para poder llenar la grilla en el case find: voy un método que hace esto:
public void grBusVlr () {
SAPbobsCOM.Recordset oRecordset1 = ((SAPbobsCOM.Recordset)(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)));
oitem = oForm.Items.Item("grdpy");
oGrid = ((SAPbouiCOM.Grid)(oitem.Specific));
string vlGrilla = null;
string Sql10 = "select t0.PayMethCod as 'grcode',t1.Cardcode as 'cod' from OPYM as t0 left join ocrd as t1 on t0.PayMethCod= t1.pymcode where t1.cardcode='" + EditText0.Value.ToString() + "'";
oRecordset1.DoQuery(Sql10);
string Extraerdequery10 = oRecordset1.Fields.Item("grcode").Value.ToString();
vlGrilla = Extraerdequery10;
oForm.DataSources.DataTables.Item("grPagdt");
oForm.DataSources.DataTables.Item(0).ExecuteQuery("SELECT distinct t0.PayMethCod AS 'Código',t0.Descript as' Descripción',t0.Active as 'Activo' from OPYM as t0 left join ocrd as t1 on t0.PayMethCod= t1.pymcode where t0.type='O' ");
//oGrid.DataTable = oForm.DataSources.DataTables.Item("grPagdt2");
oGrid.Columns.Item("Activo").Type = SAPbouiCOM.BoGridColumnType.gct_CheckBox;
//para agregar el link buton a la grilla
oGrid.Columns.Item("Código").Type = SAPbouiCOM.BoGridColumnType.gct_EditText;
SAPbouiCOM.EditTextColumn oEdit = (SAPbouiCOM.EditTextColumn)oGrid.Columns.Item("Código");
oEdit.LinkedObjectType = "147";
//oCBC.ValidValues.Add(oRec.Fields.Item(0).Value.ToString(), oRec.Fields.Item(1).Value.ToString());
//algo parecido a lo que hace el boto de fijar metodo, lo hago aca para que el viejaSel no sea -1 y pueda sacar la linea en negrita
//string valor = (string)oGrid.DataTable.GetValue("Código", 2); esto es para saber lo que lleva una linea en especifico
for (int iRows = 0; iRows <= oGrid.Rows.Count - 1; iRows++)
{
if ((string)oGrid.DataTable.GetValue("Código", iRows) == vlGrilla)
{
if (viejaSel != -1)
oGrid.CommonSetting.SetRowFontStyle(viejaSel, SAPbouiCOM.BoFontStyle.fs_Plain);
oGrid.CommonSetting.SetRowFontStyle(iRows + 1, SAPbouiCOM.BoFontStyle.fs_Bold);
viejaSel = iRows + 1;
}
}
}
mas que nada primero para que me re dibuje la grilla y ponga la linea ne negrita.
el boton que fija el metodo estandar despues de que hace la actualizacion, es decir hay un cambio le cambio el caption a ok.
int viejaSel = -1;
String sValorGrid;
public void Button2_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent )
{
BubbleEvent = true;
try
{
if (oGrid.Rows.SelectedRows.Count > 0) //VERIFICA QUE EXISTA UN ROW SELECCIONADO
{
if (viejaSel != -1)
oGrid.CommonSetting.SetRowFontStyle(viejaSel, SAPbouiCOM.BoFontStyle.fs_Plain);
int nSelecRow = (oGrid.Rows.SelectedRows.Item(0, SAPbouiCOM.BoOrderType.ot_RowOrder));
viejaSel = nSelecRow + 1;
//oApp.SetStatusBarMessage("El dato es " + oldSelection + nSelecRow);
//seleccion el row y se destaca en negrita
oGrid.CommonSetting.SetRowFontStyle(nSelecRow + 1, SAPbouiCOM.BoFontStyle.fs_Bold);
sValorGrid = Convert.ToString(oGrid.DataTable.GetValue("Código", nSelecRow));
// Button0.Caption = "Update";
if (Button0.Caption=="OK"){
Button0.Caption ="Update";
}
}
}
catch (Exception)
{
oApp.SetStatusBarMessage("Error en el boton: " + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, true);
}
}
para que así se vaya al case ok, estoy redirigiendo lo mal?
igual intenteba con
goto caption ""
pero de la misma manera sale.
Gabriel y cuanto tengo el case
case "OK":
break;```
como puedo hacer que vuelva a cargar el mismo carcode que se acaba de actualizar?, es decir cuando haya una actualización, vuelva a cargar la información pero con la actualización, pienso que eso seria la mejor solución no?
Deberia ver todo el codigo, con lo que colocas no es suficiente, si puedes pasar un fork o link de GitHub con el form, seria excelente.
Saludos.
1 me gusta
estimado aca va el link
form1
saludos,
Hola ,
mas que nada te quería volver a consultar este tema, ya que he terminado varias cosas en el proyecto pero este aun me queda pendiente esto de los formularios, como te decía anteriormente cuando se guarda o actualiza tengo unos problema que por ejemplo ya que guarda le doy el modo oForm.Mode = SAPbouiCOM.BoFormMode.fm_ADD_MODE
, pero me da un error como que se inserta dos veces, osea inserta el datos maestro de socio de negocios pero después inmediatamente dice que este código ya existe.
y con respecto a actualizar, es similar pero en vez de darme un error el formulario se sale, es decir se cierra el form, puede ser como uso el case se va al break y este se cierra.
ya puse el código en donde me dijiste pero acá va al menos los case que tengo en el botón.
si pudieran darme alguna idea seria genial muchas gracias.
private void Button0_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
{
BubbleEvent = true;
SAPbouiCOM.Form oForm = oApp.Forms.ActiveForm;
SAPbobsCOM.BusinessPartners sboBP = (SAPbobsCOM.BusinessPartners)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners);
switch (Button0.Caption)
{
case "Añadir":
// oForm = (SAPbouiCOM.Form)oApp.Forms.ActiveForm;
sboBP.CardCode = EditText0.Value.ToString();
sboBP.CardName = EditText1.Value.ToString();
sboBP.FederalTaxID = EditText2.Value.ToString();
sboBP.CardType = SAPbobsCOM.BoCardTypes.cSupplier;
sboBP.CardForeignName = EditText3.Value.ToString();
sboBP.Address = EditText4.Value.ToString();
sboBP.City = EditText5.Value.ToString();
sboBP.ZipCode = EditText6.Value.ToString();
sboBP.County = EditText8.Value.ToString();
sboBP.Phone1 = EditText9.Value.ToString();
sboBP.Phone2 = EditText10.Value.ToString();
sboBP.Fax = EditText11.Value.ToString();
sboBP.EmailAddress = EditText12.Value.ToString();
sboBP.Country = ComboBox2.Value.ToString();
//creo esta variable y tomo el valor seleccionado, ya que al convetirlo a string da problemas con los espacios
string vlSelec = ComboBox0.Selected.Value;
sboBP.PayTermsGrpCode = Convert.ToInt16(vlSelec);
sboBP.HouseBankCountry = ComboBox4.Value.ToString();
sboBP.HouseBank = ComboBox1.Value.ToString();
sboBP.HouseBankAccount = ComboBox3.Value.ToString();
sboBP.HouseBankBranch = EditText18.Value.ToString();
//el evneto 0 tiene que ir con el metodo que trrae el default, y con eso deberia funcionar, debes fijarte que se deselcciones si (negrita)
//PeymentMethodCode y BPPaymentMethods , deben ir juntos ya que sap te pide un valor por defecto, que se guardan en la ocrd y crd2
if (EventoCambio == 0)
{
grBusVlr();
sboBP.PeymentMethodCode = vlGrilla;
sboBP.BPPaymentMethods.PaymentMethodCode = vlGrilla;
}
else
{
//grBusVlr();
sboBP.PeymentMethodCode = sValorGrid;
sboBP.BPPaymentMethods.PaymentMethodCode = sValorGrid;
EventoCambio = 0;
}
sboBP.FreeText = EditText19.Value.ToString();
//sboBP.Add();
int iRetVal = sboBP.Add();
// cuando viene un 1 significa que viene con error
if (iRetVal != 0)
{
//eso muestra el ultimo error al usuario en la barra de abajo de sap
oApp.SetStatusBarMessage("Error creando al Colaborador: " + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, true);
}
else
{
oApp.SetStatusBarMessage("Registro exitoso: " + sboBP.CardCode, SAPbouiCOM.BoMessageTime.bmt_Medium, false);
//Application.SBO_Application.ActivateMenuItem("1288");
oForm.Mode = SAPbouiCOM.BoFormMode.fm_ADD_MODE;
//Button0.Caption = "Añadir";
BubbleEvent = false;
}
break;
case "Actualizar":
if (sboBP.GetByKey(EditText0.Value.ToString()))
{
sboBP.CardName = EditText1.Value.ToString();
sboBP.FederalTaxID = EditText2.Value.ToString();
sboBP.CardType = SAPbobsCOM.BoCardTypes.cSupplier;
sboBP.CardForeignName = EditText3.Value.ToString();
sboBP.Address = EditText4.Value.ToString();
sboBP.City = EditText5.Value.ToString();
sboBP.ZipCode = EditText6.Value.ToString();
sboBP.County = EditText8.Value.ToString();
sboBP.Phone1 = EditText9.Value.ToString();
sboBP.Phone2 = EditText10.Value.ToString();
sboBP.Fax = EditText11.Value.ToString();
sboBP.EmailAddress = EditText12.Value.ToString();
sboBP.Country = ComboBox2.Value.ToString();
//creo esta variable y tomo el valor seleccionado, ya que al convetirlo a string da problemas con los espacios
string vlSelec1 = ComboBox0.Selected.Value;
sboBP.PayTermsGrpCode = Convert.ToInt16(vlSelec1);
sboBP.HouseBankCountry = ComboBox4.Value.ToString();
sboBP.HouseBank = ComboBox1.Value.ToString();
sboBP.HouseBankAccount = ComboBox3.Value.ToString();
sboBP.HouseBankBranch = EditText18.Value.ToString();
if (EventoCambio == 0)
{
grBusVlr();
sboBP.PeymentMethodCode = vlGrilla;
sboBP.BPPaymentMethods.PaymentMethodCode = vlGrilla;
}
else
{
sboBP.PeymentMethodCode = sValorGrid;
sboBP.BPPaymentMethods.PaymentMethodCode = sValorGrid;
EventoCambio = 0;
}
sboBP.FreeText = EditText19.Value.ToString();
int x = sboBP.Update();
if (x != 0)
{
//eso muestra el ultimo error al usuario en la barra de abajo de sap
oApp.SetStatusBarMessage("Error actualizando al Colaborador: " + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, true);
}
else
{
oApp.SetStatusBarMessage("Actualización exitosa de : " + EditText0.Value.ToString(), SAPbouiCOM.BoMessageTime.bmt_Medium, false);
//Application.SBO_Application.ActivateMenuItem("1288");
////goto case "OK";
//Button2.Caption = "OK";
oForm.Mode = SAPbouiCOM.BoFormMode.fm_OK_MODE;
}
}
break;
gracias.
El problema es que esta con automanage el formulario, entonces insertaba dos veces, mas que nada deje todos los campos con su datasources y alias correspondientes, y saque el onclick del botón y asi funciona perfectamente.
saludos,
1 me gusta