Solicitud de compra DI-API DataGridview - SAP B1

Buen Dia compañeros estoy creando mi primer formulario SDK pero tengo un inconveniente con la creación de solicitud de compra, hasta donde he avanzado si me funciona llenando todos los campos por textbox, pero he visto casos que se solicitan varios Items por lo que llenarlos de textbox no seria ideal, como podria trabajarlo mediante Datagridview para las Lineas?

Adjunto mi codigo actual

       private void btnGrabar_Click(object sender, EventArgs e)
        {


            myReq = (SAPbobsCOM.Documents)Globals.myCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPurchaseRequest);


            //CABECERA

            myReq.DocDate = dtpFechaContabilizacion.Value;
            myReq.DocDueDate = dtpValidoHasta.Value;
            myReq.TaxDate = dtpFechaDocumento.Value;
            myReq.RequriedDate = dtpFechaNecesaria.Value;
            myReq.Comments = txtComentarios.Text;



            //LINEAS
            myReq.Lines.ItemCode = txtItemCode1.Text;
            myReq.Lines.WarehouseCode = txtAlmacen1.Text;
            myReq.Lines.Quantity = double.Parse(txtCant1.Text.ToString());
            myReq.Lines.Price = 100; 
            myReq.Lines.ProjectCode = txtProyecto1.Text;
            myReq.Lines.CostingCode = txtUnNegocio1.Text;
            myReq.Lines.CostingCode2 = txtAreNegocio1.Text;
            myReq.Lines.CostingCode3 = txtSectores1.Text;
            myReq.Lines.CostingCode4 = txtZonGeografica1.Text;
            myReq.Lines.TaxCode = "IGV";
            myReq.Lines.UserFields.Fields.Item("U_EXP_CAPITU").Value = txtCapitulo1.Text;

            myReq.Lines.Add(); //LINEA 2

            myReq.Lines.ItemCode = txtItemCode2.Text;
            myReq.Lines.WarehouseCode = txtAlmacen2.Text;
            myReq.Lines.Quantity = double.Parse(txtCant1.Text.ToString());
            myReq.Lines.Price = 500;
            myReq.Lines.ProjectCode = txtProyecto2.Text;
            myReq.Lines.CostingCode = txtUnNegocio2.Text;
            myReq.Lines.CostingCode2 = txtAreNegocio2.Text;
            myReq.Lines.CostingCode3 = txtSectores2.Text;
            myReq.Lines.CostingCode4 = txtZonGeografica2.Text;
            myReq.Lines.TaxCode = "IGV";
            myReq.Lines.UserFields.Fields.Item("U_EXP_CAPITU").Value = txtCapitulo2.Text;


            error = myReq.Add();
            if (error != 0)
            {
                MessageBox.Show("Error al crear Requerimiento." + Globals.myCompany.GetLastErrorDescription());
            }
            else
            {
                MessageBox.Show("Requerimiento Creado con Exito");
            }
          

        }

Gracias de antemano.
Alberto Vera

Buenas compañero, podes usar DataGridView sin problemas y lo recorres con un foreach en el proceso de creacion de tu registro.
Al final de cada una de las lineas deberas agregar el siguiente codigo

myReq.Lines.Add();

Gracias @Dark_katt , tendrás un ejemplo como podría hacerlo?

Esto seria un ejemplo para entrada de mercancias, mi datagridview esta asociada a un dataset el cual recorro al momento de realizar el alta del registro.

El mismo esquema deberias seguir

foreach (DataRow dr in ds.Tables["articulos"].Rows)
                {
                    Entrada.Lines.SetCurrentLine(0);
                    Entrada.Lines.ItemCode = dr["CodArticulo"].ToString();
                    Entrada.Lines.Quantity = double.Parse(dr["peso"].ToString());
                    Entrada.Lines.UoMEntry = 2;
                    Entrada.Lines.TaxCode = "IVA_5";
                    Entrada.Lines.PriceAfterVAT = double.Parse(dr["precio"].ToString());
                    Entrada.Lines.WarehouseCode = "PROD";
                    Entrada.Lines.Currency = cmbMoneda.SelectedValue.ToString();

                    if (double.Parse(dr["peso"].ToString()) > 0)
                    {
                        Entrada.Lines.BatchNumbers.SetCurrentLine(0);
                        Entrada.Lines.BatchNumbers.InternalSerialNumber = codlote;
                        Entrada.Lines.BatchNumbers.BatchNumber = codlote;
                        Entrada.Lines.BatchNumbers.Quantity = double.Parse(dr["peso"].ToString());
                        Entrada.Lines.BatchNumbers.AddmisionDate = dtpFecha.Value;
                        Entrada.Lines.BatchNumbers.UserFields.Fields.Item("U_nroreg").Value = dr["NroRegistro"].ToString();                        

                        Entrada.Lines.BatchNumbers.Add();
                    };

                    Entrada.Lines.Add();
                };

Gracias Amigo, lo he hecho así pero se guarda la linea que tenga seleccionada, y si lleno 3 lineas se guardan 4 lineas

            var j = 0;
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
  
                myReq.Lines.SetCurrentLine(j);
                myReq.Lines.ItemCode = dataGridView1.CurrentRow.Cells[0].Value.ToString();
                myReq.Lines.WarehouseCode = dataGridView1.CurrentRow.Cells[1].Value.ToString();
                myReq.Lines.Quantity = double.Parse(dataGridView1.CurrentRow.Cells[2].Value.ToString());

                myReq.Lines.Add();
                j++;

            };

Lo que pasa es que estas tomando las lineas de tu datagridview, y generalmente una de ellas esta en blanco, deberias validar eso

Lo ideal es que lo leas del DATASET.

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.