martes, 7 de junio de 2011

Controlar desde un formulario hijo a uno padre

Lo que haremos es actualizar un grid que se encuentra en el formulario padre (formulario llamador) desde un formulario hijo (formulario llamado).
Para nuestro ejemplo, vamos a trabajar con el formulario VendInvoiceJournal.
  1. En la tabla VendInvoiceJour creamos el campo PRB_Actualiza (extended: name).
  2. Creamos el botón PRB_Pase en el formulario VendInvoiceJournal (VendInvoiceJournal/Designs/Design/Tab/Overview/OverviewButtonGroup/PRB_Pase).
  3. Creamos la tabla temporal PRB_TablaPase.
  4. Creamos el formulario PRB_PaseActualiza
  5. Creamos el metodo clicked() en el boton PRB_Pase del formulario VendInvoiceJournal.
  6. Agregamos el siguiente código:
    void clicked() { Args args; FormRun formRun; ; super(); args = new Args(formstr(PRB_PaseActualiza)); args.record(vendinvoicejour); formRun = classFactory.formRunClass(args); formRun.init(); formRun.run(); formRun.wait(); vendInvoiceJour_ds.research(); }
  7. Creamos el metodo clicked() en el botón Button del formulario PRB_PaseActualiza
  8. Agreganos el siguiente codigo:
    void clicked()
    { vendinvoicejour vij; vendinvoicejour xxx; super(); vij = element.args().record(); update_recordset xxx setting PRB_Actualiza = DataSource1_PRB_Actualiza.text() where xxx.LedgerVoucher == DataSource1_LedgerVoucher.text(); element.close(); }
  9. Hacemos pruebas:
    a. Abrimos el formulario VendInvoiceJournal (Proveedores/Consultas/Diarios/Facturas) y seleccionamos una linea


    b. Hacemos click en el botón creado “llamada formulario” y nos abre el formulario creado PRB_PaseActualiza

    c. Ponemos data en el campo Actualiza. Ej. Alonso
    d. Presionamos el botón Actualizar. Se cierra el formulario y actualiza el grid del formulario padre. 
Saludos.

domingo, 5 de junio de 2011

Ingresar direccion del proveedor mediante excel desde un JOB

Hola, les dejo como podemos ingresar direcciones de un proveedor en forma masiva desde un job mediante un excel.
  1. El excel debe tener las columnas codigo del proveedor y direccion, con la informacion correspondiente.
Creamos el JOB

static void ActualizaDireccion(Args _args)
{
    container                 conSheets;
    ExcelImportADO      xlImport;
    SysDataExcelCOM   dataExcelCom;
    Filename                  strFlename;
    accountnum             id;
   
str                 direccion;   
    vendtable           vend;   
    dirpartytable      dir;   
   
address             addre;   
    int i = 0;
    ;

    strFilename = "C:\\Users\\PC\\Desktop\\direccion.xls";
    xlImport    = new ExcelImportADO(strFilename);

    try
    {
        // abriendo solo la primera hoja de excel       if(!xlImport.openFile())
            throw error(strfmt("Error opening Excel file «%1»", strFilename));

                while(!xlImport.eof())//previo
                {
                    id              =       xlImport.getFieldValue(1);
                    direccion       =       xlImport.getFieldValue(2);

                    while select vend
                        where vend.AccountNum == id
                    {
                        while select dir
                            where dir.PartyId == vend.PartyId
                        {
                             if(!address::find(2303,dir.RecId,addresstype::None).AddrRecId)
                            {
                                addre.AddrTableId = 2303; //vendtable
                                addre.AddrRecId   = dir.RecId;
                                addre.Street      = direccion;
                                addre.Address     = direccion;
                                addre.insert();
                                i++;
                                   }
                         
}
        }

      xlImport.moveNext();

  }

  xlImport.finalize();

info("direcciones: " + num2str(i,3,2,1,1));

}
catch(Exception::Error)
{
     info("error");
     xlImport.finalize();
}
}

  1. Ejecutar el JOB.
Con esto se podria ver otras funcionalidades como modificacion, eliminacion de direcciones, ademas de hacer pruebas de como hacerlo para clientes (me imagino que es similar).

Saludos.