Diferencia entre revisiones de «TTfvsDBClientFrameCmpCabecera»
(Página creada con «=Descripción= El frame '''TTfvsDBClientFrameCmpCabecera''' (Implementa cabecera de comprobantes) implementa el panel superior usado por todos los comprobantes. Contiene los controles de edición necesarios para todos los comprobantes. =Identidad= Category:MANUAL/PROGRAMADOR Category:CONTROLES/FRAMES *Ancestro: TTfvsDBClientFrameScrollBox *Carpeta: C:\DevelopPrx\frames *Archivo: fvsDBClientFrameCmpCabecera.pas =Ejemplo de definici…») |
Sin resumen de edición |
||
(No se muestran 4 ediciones intermedias del mismo usuario) | |||
Línea 11: | Línea 11: | ||
=Ejemplo de definición= | =Ejemplo de definición= | ||
===Frame en diseño=== | ===Frame en diseño=== | ||
En diseño el frame se ve así, los controles se acomodan durante la ejecución de la aplicación: | |||
[[Archivo:20250603 1516 FRAME CMPCABECERA DISEÑO.png|miniaturadeimagen|no|Frame para comprobantes en diseño.]] | [[Archivo:20250603 1516 FRAME CMPCABECERA DISEÑO.png|miniaturadeimagen|no|Frame para comprobantes en diseño.]] | ||
Define los campos para: | Define los campos para: | ||
*Código de comprobante. | *Código de comprobante. | ||
*Tipo según | *Tipo según [[COMPROBANTES/TIPOS]]. | ||
*Punto de emisión según [[COMPROBANTES/PUNTOSEMISION]]. | *Punto de emisión según [[COMPROBANTES/PUNTOSEMISION]]. | ||
*Fecha de emisión. | *Fecha de emisión. | ||
Línea 20: | Línea 21: | ||
*Estado (ver [[:Category:COMPROBANTES#Estados de un comprobante|Estados de un comprobante). | *Estado (ver [[:Category:COMPROBANTES#Estados de un comprobante|Estados de un comprobante). | ||
===Frame en runtime=== | |||
Al ejecutarse, el frame adquiere otro aspecto como se ve en la cabecera de órdenes de compra: | |||
[[Archivo:20250603 1526 FRAME CMPCABECERA RUNTIME.png|miniaturadeimagen|no|Frame para comprobantes en runtime.]] | |||
En el recuadro vemos los campos según el diseño, en el panel a la derecha podemos ver los campos que la orden de compra agrega. separando ambos paneles está el splitter. | |||
===Definición del frame=== | |||
No es necesario definir este frame durante el diseño de las clases ya que es la opción por defecto para todas las clases derivadas de: | |||
*cmpCABECERA_pragma_XTD. | |||
*cmpCABECERA. | |||
Ver [[TprxCmpCABECERA]]. | |||
=Declaración= | |||
<pre> | |||
type | |||
TTfvsDBClientFrameCmpCabecera = class(TTfvsDBClientFrameScrollBox) | |||
Panel_cmpCodigo: TPanel; | |||
Panel_cmpTipo: TPanel; | |||
Panel_cmpPuntoEmision: TPanel; | |||
Panel_cmpFecha: TPanel; | |||
Panel_cmpValuacion: TPanel; | |||
Panel_cmpEstado: TPanel; | |||
StaticText1: TStaticText; | |||
StaticText2: TStaticText; | |||
StaticText3: TStaticText; | |||
StaticText4: TStaticText; | |||
StaticText5: TStaticText; | |||
StaticText6: TStaticText; | |||
prxDBEdit_cmpCodigo: TprxDBEdit; | |||
prxDBEdit_cmpTipo: TprxDBEdit; | |||
prxDBEditcmpTipo_Descripcion: TprxDBEdit; | |||
prxDBEdit_cmpPuntoEmision: TprxDBEdit; | |||
prxDBEdit_cmpPuntoEmision_Descripcion: TprxDBEdit; | |||
prxDBEdit_cmpFecha: TprxDBEditDateTime; | |||
prxDBEdit_cmpMoneda: TprxDBEdit; | |||
prxDBEdit_cmpFechaValuacion: TprxDBEditDateTime; | |||
prxDBEdit_cmpCotizacion: TprxDBEdit; | |||
prxDBEdit_cmpUsuario: TprxDBEdit; | |||
Panel5: TPanel; | |||
prxSpeedButton_cmpFechaValuacion: TprxSpeedButton; | |||
prxSpeedButton_cmpTipo: TprxSpeedButton; | |||
prxSpeedButton_cmpPuntoEmision: TprxSpeedButton; | |||
prxSpeedButton_cmpFecha: TprxSpeedButton; | |||
prxDBEdit_cmpEstado: TprxDBEdit; | |||
procedure DBNavigator1NavigatorClick(Sender: TDBNavigator; aButton: TNavigateBtn; aX, aY: Integer; var aHandled: Boolean); | |||
procedure SpeedButton_cmppFecha_GetPopupOptions(Sender: TComponent; aPopupMenu: TprxPopupMenu); | |||
procedure prxSpeedButton_cmpTipoClick(Sender: TObject); | |||
procedure prxSpeedButton_cmpPuntoEmisionClick(Sender: TObject); | |||
procedure prxSpeedButton_cmpFechaClick(Sender: TObject); | |||
private | |||
FComprobanteTipo: TTfvsDBClientFrameCmpCabecera_Tipo; | |||
protected | |||
procedure SetDataSet(aValue: TprxADODataSetEdit); override; | |||
property ComprobanteTipo: TTfvsDBClientFrameCmpCabecera_Tipo read FComprobanteTipo write FComprobanteTipo; | |||
public | |||
constructor Create(AOwner: TComponent); override; | |||
destructor Destroy; override; | |||
procedure OnFrameShow(Sender: TObject); override; | |||
procedure ClassShow_BuildFrame(Sender: TObject); override; | |||
function ClassShow_AgregarTablaMaster(aTabla: String): Boolean; override; | |||
function ClassShow_AgregarControles: Boolean; override; | |||
function ClassShow_Activate(aActivateDataSet: Boolean): Boolean; override; | |||
procedure ClassShow_CloseFrame(Sender: TObject); override; | |||
procedure OnExecute_INSERT(var aHandled: Boolean); override; | |||
procedure OnExecute_EDIT(var aHandled: Boolean); override; | |||
procedure OnExecute_POST(var aHandled: Boolean); override; | |||
procedure OnExecute_CANCEL(var aHandled: Boolean); override; | |||
procedure OnExecute_DELETE(var aHandled: Boolean); override; | |||
procedure OnExecute_REFRESH(var aHandled: Boolean); override; | |||
end; | |||
</pre> | |||
=Implementación= | |||
===procedure SetDataSet(aValue: TprxADODataSetEdit)=== | |||
Asocia el dataset a los controles del frame. | |||
===procedure DBNavigator1NavigatorClick(Sender: TDBNavigator; aButton: TNavigateBtn; aX, aY: Integer; var aHandled: Boolean)=== | |||
Recibe los clicks del navegador: | |||
*nbEdit es la edición y llama a OnExecute_EDIT. | |||
*nbPost es el posteo de los cambios al dataset, llama a OnExecute_POST. | |||
*nbDelete es la eliminación de un registro, llama a OnExecute_DELETE. | |||
===function ClassShow_AgregarControles: Boolean=== | |||
Ajusta los controles al tamaño y posición del frame. | |||
===function ClassShow_Activate(aActivateDataSet: Boolean): Boolean=== | |||
Al activarse el frame verifica si debe insertar o editar conj: | |||
<pre> | |||
if ClassShow.DataSetState = dsInsert then | |||
begin | |||
// Si hay que ponerlo en inserción... | |||
= | if DataSet.CanInsertXtd then | ||
DataSet.InsertXtd(Self); | |||
end | |||
else | |||
if ClassShow.DataSetState = dsEdit then | |||
begin | |||
// Si hay que ponerlo en edición... | |||
if DataSet.RecordCount > 0 then | |||
begin | |||
if DataSet.CanEditXtd then | |||
DataSet.EditXtd(Self) | |||
end; | |||
end; | |||
</pre> | |||
===procedure OnExecute_EDIT(var aHandled: Boolean)=== | |||
Al picar el botón de editar en el navegadro verifica si el comprobante puede ser editado: | |||
*Se encuentra en estado abierto. | |||
*Puede ser reabierto por el usuario. | |||
===procedure OnExecute_POST(var aHandled: Boolean)=== | |||
Guarda los cambios al comprobante, abre el form donde podemos elegir en qué estado se graba el comprobante. | |||
=Uso= | |||
===Definición del frame=== | ===Definición del frame=== | ||
El frame se usa para todas las clases derivadas de: | |||
*cmpCABECERA_pragma_XTD. | |||
*cmpCABECERA. | |||
Ver [[TprxCmpCABECERA]]. |
Revisión actual - 20:39 3 jun 2025
Descripción
El frame TTfvsDBClientFrameCmpCabecera (Implementa cabecera de comprobantes) implementa el panel superior usado por todos los comprobantes. Contiene los controles de edición necesarios para todos los comprobantes.
Identidad
- Ancestro: TTfvsDBClientFrameScrollBox
- Carpeta: C:\DevelopPrx\frames
- Archivo: fvsDBClientFrameCmpCabecera.pas
Ejemplo de definición
Frame en diseño
En diseño el frame se ve así, los controles se acomodan durante la ejecución de la aplicación:

Define los campos para:
- Código de comprobante.
- Tipo según COMPROBANTES/TIPOS.
- Punto de emisión según COMPROBANTES/PUNTOSEMISION.
- Fecha de emisión.
- Datos de valuación: moneda, fecha de valuación y cotización.
- Estado (ver [[:Category:COMPROBANTES#Estados de un comprobante|Estados de un comprobante).
Frame en runtime
Al ejecutarse, el frame adquiere otro aspecto como se ve en la cabecera de órdenes de compra:

En el recuadro vemos los campos según el diseño, en el panel a la derecha podemos ver los campos que la orden de compra agrega. separando ambos paneles está el splitter.
Definición del frame
No es necesario definir este frame durante el diseño de las clases ya que es la opción por defecto para todas las clases derivadas de:
- cmpCABECERA_pragma_XTD.
- cmpCABECERA.
Ver TprxCmpCABECERA.
Declaración
type TTfvsDBClientFrameCmpCabecera = class(TTfvsDBClientFrameScrollBox) Panel_cmpCodigo: TPanel; Panel_cmpTipo: TPanel; Panel_cmpPuntoEmision: TPanel; Panel_cmpFecha: TPanel; Panel_cmpValuacion: TPanel; Panel_cmpEstado: TPanel; StaticText1: TStaticText; StaticText2: TStaticText; StaticText3: TStaticText; StaticText4: TStaticText; StaticText5: TStaticText; StaticText6: TStaticText; prxDBEdit_cmpCodigo: TprxDBEdit; prxDBEdit_cmpTipo: TprxDBEdit; prxDBEditcmpTipo_Descripcion: TprxDBEdit; prxDBEdit_cmpPuntoEmision: TprxDBEdit; prxDBEdit_cmpPuntoEmision_Descripcion: TprxDBEdit; prxDBEdit_cmpFecha: TprxDBEditDateTime; prxDBEdit_cmpMoneda: TprxDBEdit; prxDBEdit_cmpFechaValuacion: TprxDBEditDateTime; prxDBEdit_cmpCotizacion: TprxDBEdit; prxDBEdit_cmpUsuario: TprxDBEdit; Panel5: TPanel; prxSpeedButton_cmpFechaValuacion: TprxSpeedButton; prxSpeedButton_cmpTipo: TprxSpeedButton; prxSpeedButton_cmpPuntoEmision: TprxSpeedButton; prxSpeedButton_cmpFecha: TprxSpeedButton; prxDBEdit_cmpEstado: TprxDBEdit; procedure DBNavigator1NavigatorClick(Sender: TDBNavigator; aButton: TNavigateBtn; aX, aY: Integer; var aHandled: Boolean); procedure SpeedButton_cmppFecha_GetPopupOptions(Sender: TComponent; aPopupMenu: TprxPopupMenu); procedure prxSpeedButton_cmpTipoClick(Sender: TObject); procedure prxSpeedButton_cmpPuntoEmisionClick(Sender: TObject); procedure prxSpeedButton_cmpFechaClick(Sender: TObject); private FComprobanteTipo: TTfvsDBClientFrameCmpCabecera_Tipo; protected procedure SetDataSet(aValue: TprxADODataSetEdit); override; property ComprobanteTipo: TTfvsDBClientFrameCmpCabecera_Tipo read FComprobanteTipo write FComprobanteTipo; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure OnFrameShow(Sender: TObject); override; procedure ClassShow_BuildFrame(Sender: TObject); override; function ClassShow_AgregarTablaMaster(aTabla: String): Boolean; override; function ClassShow_AgregarControles: Boolean; override; function ClassShow_Activate(aActivateDataSet: Boolean): Boolean; override; procedure ClassShow_CloseFrame(Sender: TObject); override; procedure OnExecute_INSERT(var aHandled: Boolean); override; procedure OnExecute_EDIT(var aHandled: Boolean); override; procedure OnExecute_POST(var aHandled: Boolean); override; procedure OnExecute_CANCEL(var aHandled: Boolean); override; procedure OnExecute_DELETE(var aHandled: Boolean); override; procedure OnExecute_REFRESH(var aHandled: Boolean); override; end;
Implementación
procedure SetDataSet(aValue: TprxADODataSetEdit)
Asocia el dataset a los controles del frame.
Recibe los clicks del navegador:
- nbEdit es la edición y llama a OnExecute_EDIT.
- nbPost es el posteo de los cambios al dataset, llama a OnExecute_POST.
- nbDelete es la eliminación de un registro, llama a OnExecute_DELETE.
function ClassShow_AgregarControles: Boolean
Ajusta los controles al tamaño y posición del frame.
function ClassShow_Activate(aActivateDataSet: Boolean): Boolean
Al activarse el frame verifica si debe insertar o editar conj:
if ClassShow.DataSetState = dsInsert then begin // Si hay que ponerlo en inserción... if DataSet.CanInsertXtd then DataSet.InsertXtd(Self); end else if ClassShow.DataSetState = dsEdit then begin // Si hay que ponerlo en edición... if DataSet.RecordCount > 0 then begin if DataSet.CanEditXtd then DataSet.EditXtd(Self) end; end;
procedure OnExecute_EDIT(var aHandled: Boolean)
Al picar el botón de editar en el navegadro verifica si el comprobante puede ser editado:
- Se encuentra en estado abierto.
- Puede ser reabierto por el usuario.
procedure OnExecute_POST(var aHandled: Boolean)
Guarda los cambios al comprobante, abre el form donde podemos elegir en qué estado se graba el comprobante.
Uso
Definición del frame
El frame se usa para todas las clases derivadas de:
- cmpCABECERA_pragma_XTD.
- cmpCABECERA.
Ver TprxCmpCABECERA.