DLLS más rápidas al migrar a versiones 7 y 8

Por Jordi Escolà. Dtor. Departamento de Programación

Una de las principales ventajas de migrar a versiones 7 y 8 es disponer de DLLS más rápidas. Con las DLLS externas que podemos añadir en el fichero DLLS en cada versión, se añaden nuevos conceptos que nos permiten añadir más funcionalidad, o mejorar la funcionalidad, implementada en versiones anteriores.

En este documento veremos el segundo caso: los cambios que tenemos que realizar en una DLL (realizada en V5 o V6) para que en V7 o V8 sea más optima.

Cada vez que se creaba un albarán se necesitaban unos 10-15 segundos adicionales para gestionar la DLL; con los cambios que proponemos reducimos este tiempo en 1 segundo.

Empezamos pues con la explicación del ejemplo:  Tenemos una DLL implementada para V5 o V6, donde al crear un albarán de venta, dependiendo del usuario que realiza un albarán, se carga automáticamente la serie, el almacén y el representante del usuario.

Disponemos de una tabla donde para cada usuario se detalla su serie, su almacén y su representante.

Tenemos implementados los métodos ANTESDEGUARDARDOCUMENTO, DESPUESDEGUARDARDOCUMENTO y REPINTAR

“procedure DESPUESDEGUARDARDOCUMENTO(Documento:string, IdDoc: Double);
…..
IF DOCUMENTO='AV' AND not EXISTEDOCUMENTO THEN
BEGIN
// en el metodo ANTESDEGUARDARDOCUMENTO calculamos la variable EXISTEDOCUMENTO
// de forma que sólo realizamos los cambios en cuando estamos en una ALTA
Usuario := quotedstr(naxEnlace.usuario);
ObtenerValoresUsuario (usario, serie, almacen, representante)
BoaAlbaran := CoAlbaran.Create;

BoaAlbaran.Iniciar;
boaAlbaran.Modifica( iddoc,false);
BoaAlbaran.AsStringCab['SERIE'] :=serie;
BoaAlbaran.AsStringCab['NUMDOC'] :='';
BoaAlbaran.AsStringCab['CODALM'] := almacen;
BoaAlbaran.AsStringCab['CODREP'] := representante;
BoaAlbaran.Anade;
END;
…..
End;
function REPINTAR( Tabla): boolean;
begin
result := (Tabla = 'CABEALBV');
end;

Con el método DESPUESDEGUARDARDOCUMENTO, después de guardar el albarán, via NAX editamos de nuevo el albarán y dependiendo del usuario cambiamos los valores serie, almacén y representante, además el numero del albarán lo vaciamos para que se genere nueva numeración según la serie indicada.

Con el método REPINTAR provocamos un refresh de los datos del albarán, de forma que el usuario ve automáticamente los valores anteriormente modificados.

Todo este proceso tarda de 10 a 15 segundos.

Cambios a realizar en la DLL para reducir el tiempo de respuesta a 1 segundo:

Implementamos el método ANTESDEGUARDARDOCUMENTOV2 y eliminamos los métodos DESPUESDEGUARDARDOCUMENTO y REPINTAR

function ANTESDEGUARDARDOCUMENTOV2( Documento:string, IdDoc: Double; var Cabecera: Variant; var Lineas: OleVariant; Estado:integer): boolean; stdcall;
var Data: TDataSetObject;
begin
if (Documento='AV') and (estado = 0) then
begin
// solo realizamos el cambio si estamos en una ALTA -> estado = 0, esta variable ya no la
// tenemos que calcular como antes en el método ANTESDEGUARDARDOCUMENTO
Data := TDatasetObject.Create(Cabecera);
// la estructura Data se define en la unit RowObject.pas, que adjunta con este documento
try
Usuario := quotedstr(naxEnlace.usuario);
ObtenerValoresUsuario (usario, serie, almacen, representante)
Data.Rows[0].FieldByName('SERIE').AsString := serie;
Data.Rows[0].FieldByName('NUMDOC').Asstring :=’’;
Data.Rows[0].FieldByName('CODALM').AsString := almacen;
Data.Rows[0].FieldByName('CODREP').AsString := representante;
Data.ApplyTo(Cabecera);
except
on E: Exception do
ShowException(E, nil);
end;
finally
Data.Free;
end;
end;
end;

En resumen, con este cambio obtenemos dos ventajas muy importantes:
1.- Mejorar en 14 segundos un proceso que puede ser muy repetitivo a lo largo de un día.
2.- Eliminar código de programa en la DLL, así su mantenimiento para futuros cambios es más sencillo.

Publicado el abril 13, 2010 en Migraciones, Nuevas versiones y etiquetado en , , . Guarda el enlace permanente. Deja un comentario.

Deja un comentario