TprxCmpCABECERA
Introducción
El objeto TprxCmpCABECERA (Funcionalidad genérica para cabeceras de comprobantes) implementa funcionalidad genérica para cabeceras de comprobantes.
Los ancestros que representan cabeceras de comprobantes son:
- La clase cmpCABECERA_pragma_XTD.
- La clase cmpCABECERA.
Identidad
- Ancestro: TprxADODataSetMaster
- Carpeta: C:\DevelopPrx\classes
- Archivo: prxCmpCABECERA.pas
Declaración
type TprxCmpCABECERA = class(TprxADODataSetMaster) private FListaFamilias: TStringList; FListaTipos: TStringList; FTags_Familia: TStringList; FEstadoNuevo: String; FCodigoNuevo: String; FQueryNumeracion: TprxADOQuery; FTipoCambio: String; protected FFamilia_Codigo: String; FFamilia_Descripcion: String; FFamilia_Circuito: String; FFamilia_SignoOpuesto: Boolean; FFamilia_PeriodoAbierto: String; FFamilia_UsaValuacion: Boolean; FFamilia_EditaFechaValuacion: Boolean; FFamilia_MuestraTotal: Boolean; FFamilia_MuestraPanelTotal: Boolean; FFamilia_Edita_cmpTotal: Boolean; FFamilia_cmpTotal_tab_first: Boolean; FFamilia_MuestraMoneda: Boolean; FFamilia_TablaCabecera: String; FFamilia_CampoTotal: String; FFamilia_CampoTotalLocal: String; FFamilia_CampoFecha: String; FFamilia_GuionSeparador: Boolean; FFamilia_CalculaImpuestos: String; FcmpCodigo_Name: String; FcmpUsuario_Name: String; FcmpFamilia_Name: String; FcmpTipo_Name: String; FcmpTipo_Descripcion_Name: String; FcmpPuntoEmision_Name: String; FcmpPuntoEmision_Descripcion_Name: String; FcmpLetra_Name: String; FcmpNumero_Name: String; FcmpFecha_Name: String; FcmpEstado_Name: String; FcmpTS_Name: String; FcmpMoneda_Name: String; FcmpTipoCambio_Name: String; FcmpFechaValuacion_Name: String; FcmpCotizacion_Name: String; FcmpTotal_Name: String; FcmpTotal_Local_Name: String; FcmpComentarios_Name: String; FcmpReferencia_Name: String; FcmpReferenciaFecha_Name: String; FcmpValidacionReferencia: String; FcmpValidacionReferenciaLetras: String; procedure Set_cmpCodigo_Value(aValue: String); virtual; function Get_cmpCodigo_Value: String; virtual; procedure Set_cmpUsuario_Value(aValue: String); virtual; function Get_cmpUsuario_Value: String; virtual; procedure Set_cmpFamilia_Value(aValue: String); virtual; function Get_cmpFamilia_Value: String; virtual; procedure Set_cmpTipo_Value(aValue: String); virtual; function Get_cmpTipo_Value: String; virtual; procedure Set_cmpPuntoEmision_Value(aValue: String); virtual; function Get_cmpPuntoEmision_Value: String; virtual; procedure Set_cmpLetra_Value(aValue: String); virtual; function Get_cmpLetra_Value: String; virtual; procedure Set_cmpNumero_Value(aValue: Integer); virtual; function Get_cmpNumero_Value: Integer; virtual; procedure Set_cmpFecha_Value(aValue: TDatetime); virtual; function Get_cmpFecha_Value: TDatetime; virtual; procedure Set_cmpEstado_Value(aValue: String); virtual; function Get_cmpEstado_Value: String; virtual; procedure Set_cmpTS_Value(aValue: String); function Get_cmpTS_Value: String; procedure Set_cmpMoneda_Value(aValue: String); function Get_cmpMoneda_Value: String; procedure Set_cmpTipoCambio_Value(aValue: String); function Get_cmpTipoCambio_Value: String; procedure Set_cmpFechaValuacion_Value(aValue: TDatetime); function Get_cmpFechaValuacion_Value: TDatetime; procedure Set_cmpCotizacion_Value(aValue: Double); function Get_cmpCotizacion_Value: Double; procedure Set_cmpTotal_Value(aValue: Double); function Get_cmpTotal_Value: Double; procedure Set_cmpComentarios_Value(aValue: String); function Get_cmpComentarios_Value: String; procedure Set_cmpReferencia_Value(aValue: String); function Get_cmpReferencia_Value: String; procedure DefaultValuesAssign; override; procedure SetTableName(aValue: String); override; function CodigoComprobante(aFamilia: String; aTipo: String; aPuntoEmision: String; aLetra: String; aNumero: Integer): String; function TomarUltimoNumeroEnUso(aPermiteFechaAnterior: Boolean; var aFechaAnterior: TDateTime): Integer; function AsignarNumero: Boolean; function AsignarEstado(aComprobante: String; aEstado: String): Boolean; function Referencia_Habilita: Boolean; function Referencia_Valida: Boolean; function Referencia_ValidarFormato(aFieldName: String; aValue: String; var aErrMsg: String): Boolean; function Referencia_ValidarExistencia(var aErrMsg: String; aAutImp: Boolean): Boolean; function RemitoCombustible_ValidarExistencia(var aErrMsg: String; aAutImp: Boolean): Boolean; property ListaFamilias: TStringList read FListaFamilias write FListaFamilias; property ListaTipos: TStringList read FListaTipos write FListaTipos; property QueryNumeracion: TprxADOQuery read FQueryNumeracion write FQueryNumeracion; property TipoCambio: String read FTipoCambio; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Loaded; override; function ModoAnulacion: String; function ModoImpresion_Automatica: Boolean; property Tags_Familia: TStringList read FTags_Familia write FTags_Familia; property cmpCodigo_Value: String read Get_cmpCodigo_Value write Set_cmpCodigo_Value; property cmpUsuario_Value: String read Get_cmpUsuario_Value write Set_cmpUsuario_Value; property cmpFamilia_Value: String read Get_cmpFamilia_Value write Set_cmpFamilia_Value; property cmpTipo_Value: String read Get_cmpTipo_Value write Set_cmpTipo_Value; property cmpPuntoEmision_Value: String read Get_cmpPuntoEmision_Value write Set_cmpPuntoEmision_Value; property cmpLetra_Value: String read Get_cmpLetra_Value write Set_cmpLetra_Value; property cmpNumero_Value: Integer read Get_cmpNumero_Value write Set_cmpNumero_Value; property cmpFecha_Value: TDatetime read Get_cmpFecha_Value write Set_cmpFecha_Value; property cmpEstado_Value: String read Get_cmpEstado_Value write Set_cmpEstado_Value; property cmpTS_Value: String read Get_cmpTS_Value write Set_cmpTS_Value; property cmpMoneda_Value: String read Get_cmpMoneda_Value write Set_cmpMoneda_Value; property cmpTipoCambio_Value: String read Get_cmpTipoCambio_Value write Set_cmpTipoCambio_Value; property cmpFechaValuacion_Value: TDatetime read Get_cmpFechaValuacion_Value write Set_cmpFechaValuacion_Value; property cmpCotizacion_Value: Double read Get_cmpCotizacion_Value write Set_cmpCotizacion_Value; property cmpTotal_Value: Double read Get_cmpTotal_Value write Set_cmpTotal_Value; property cmpComentarios_Value: String read Get_cmpComentarios_Value write Set_cmpComentarios_Value; property cmpReferencia_Value: String read Get_cmpReferencia_Value write Set_cmpReferencia_Value; function ImprimirComprobanteXtd: Boolean; function ImprimirComprobanteXtd_Registrado: Boolean; function AsignarComprobante_Registrado: Boolean; function EstadoAprobacion: String; function CanInsertXtd: Boolean; override; function PuedeRegistrar(var aMsg: String; aOP: String): Boolean; virtual; function PuedeEliminar(var aMsg: String): Boolean; virtual; function ReabrirComprobanteVerificar: Boolean; function ReabrirComprobante: Boolean; virtual; procedure GetPopupOptions(Sender: TprxPopupMenu); override; procedure OnEnterFieldXtd(Sender: TObject; aFieldName: String; aFieldValue: Variant); override; function OnExitFieldXtd(Sender: TObject; aFieldName: String; aFieldValue: Variant; aErrMsg: String): Boolean; override; procedure InsertXtd(Sender: TObject); override; procedure EditXtd(Sender: TObject); override; procedure CancelXtd(Sender: TObject); override; function RequeryXtd: Boolean; override; function UpdateBatchXtd(AffectRecords: TAffectRecords = arAll): Boolean; override; procedure DeleteAndPostXtd(Sender: TObject); function EliminarComprobante(Sender: TObject): Boolean; function EliminarComprobanteXtd(Sender: TObject): Boolean; procedure Totalizar(aMode: String); virtual; function Subtotal: Double; property Familia_Codigo: String read FFamilia_Codigo; property Familia_Descripcion: String read FFamilia_Descripcion; property Familia_Circuito: String read FFamilia_Circuito; property Familia_SignoOpuesto: Boolean read FFamilia_SignoOpuesto; property Familia_PeriodoAbierto: String read FFamilia_PeriodoAbierto; property Familia_UsaValuacion: Boolean read FFamilia_UsaValuacion; property Familia_EditaFechaValuacion: Boolean read FFamilia_EditaFechaValuacion; property Familia_MuestraTotal: Boolean read FFamilia_MuestraTotal; property Familia_MuestraPanelTotal: Boolean read FFamilia_MuestraPanelTotal; property Familia_Edita_cmpTotal: Boolean read FFamilia_Edita_cmpTotal; property Familia_cmpTotal_tab_first: Boolean read FFamilia_cmpTotal_tab_first write FFamilia_cmpTotal_tab_first; property Familia_MuestraMoneda: Boolean read FFamilia_MuestraMoneda; property Familia_TablaCabecera: String read FFamilia_TablaCabecera; property Familia_CampoTotal: String read FFamilia_CampoTotal; property Familia_CampoTotalLocal: String read FFamilia_CampoTotalLocal; property Familia_CampoFecha: String read FFamilia_CampoFecha; property Familia_GuionSeparador: Boolean read FFamilia_GuionSeparador; property Familia_CalculaImpuestos: String read FFamilia_CalculaImpuestos; property cmpCodigo_Name: String read FcmpCodigo_Name; property cmpUsuario_Name: String read FcmpUsuario_Name; property cmpFamilia_Name: String read FcmpFamilia_Name; property cmpTipo_Name: String read FcmpTipo_Name; property cmpTipo_Descripcion_Name: String read FcmpTipo_Descripcion_Name; property cmpPuntoEmision_Name: String read FcmpPuntoEmision_Name; property cmpPuntoEmision_Descripcion_Name: String read FcmpPuntoEmision_Descripcion_Name; property cmpLetra_Name: String read FcmpLetra_Name; property cmpNumero_Name: String read FcmpNumero_Name; property cmpFecha_Name: String read FcmpFecha_Name; property cmpEstado_Name: String read FcmpEstado_Name; property cmpTS_Name: String read FcmpTS_Name; property cmpMoneda_Name: String read FcmpMoneda_Name; property cmpTipoCambio_Name: String read FcmpTipoCambio_Name; property cmpFechaValuacion_Name: String read FcmpFechaValuacion_Name; property cmpCotizacion_Name: String read FcmpCotizacion_Name; property cmpTotal_Name: String read FcmpTotal_Name; property cmpTotal_Local_Name: String read FcmpTotal_Local_Name; property cmpComentarios_Name: String read FcmpComentarios_Name; property cmpReferencia_Name: String read FcmpReferencia_Name; property cmpReferenciaFecha_Name: String read FcmpReferenciaFecha_Name; property cmpValidacionReferencia: String read FcmpValidacionReferencia write FcmpValidacionReferencia; property cmpValidacionReferenciaLetras: String read FcmpValidacionReferenciaLetras write FcmpValidacionReferenciaLetras; property xxEstadoNuevo: String read FEstadoNuevo write FEstadoNuevo; property CodigoNuevo: String read FCodigoNuevo; published end;
Propiedades de nombres de campos
Este mismo componente sirve para las derivadas de cmpCABECERA_pragma_XTD o cmpCABECERA, ambas clases implementan campos con nombres ligeramente distintos.
La clase TcmpCABECERA_pragma_XTD_implemented inicializa las propiedades según los campos defindos en cmpCABECERA_pragma_XTD y usa nombres de campo en mayúsculas y cono prefijo la letra F..
La clase TprxCmpCABECERA inicializa las propiedades según los campos definidos en la clase cmpCABECERA usa campos en minúsculas sin la F.
Para no tener que escribir dos componentes con nombres de campos distintos, estos nombres se asignan a las siguientes variables del componente y se usan en el código:
Orden | Variable en el dataset | Campo en cmpCABECERA_pragma_XTD | Campo en cmpCABECERA |
---|---|---|---|
1 | FcmpCodigo_Name: String | FCMPCODIGO | cmpCodigo |
2 | FcmpUsuario_Name: String | FCMPUSUARIO | cmpUsuario |
3 | FcmpFamilia_Name: String | FCMPFAMILIA | cmpFamilia |
4 | FcmpTipo_Name: String | FCMPTIPO | cmpTipo |
5 | FcmpTipo_Descripcion_Name: String | No tiene campo | No tiene campo |
6 | FcmpPuntoEmision_Name: String | FCMPPUNTOVENTA | cmpPuntoEmision |
7 | FcmpPuntoEmision_Descripcion_Name: String | No tiene campo | No tiene campo |
8 | FcmpLetra_Name: String | FCMPLETRA | cmpLetra |
9 | FcmpNumero_Name: String | FCMPNUMERO | cmpNumero |
10 | FcmpFecha_Name: String | FCMPFECHA | cmpFecha |
11 | FcmpEstado_Name: String | FCMPESTADO | cmpEstado |
12 | FcmpTS_Name: String | No existe el campo | cmpTS |
13 | FcmpMoneda_Name: String | FCMPMONEDA | cmpMoneda |
14 | FcmpTipoCambio_Name: String | NA | cmpTipoCambio |
15 | FcmpFechaValuacion_Name: String | FCMPFECHAVALUACION | cmpFechaValuacion |
16 | FcmpCotizacion_Name: String | FCMPCOTIZACION | cmpCotizacion |
17 | FcmpTotal_Name: String | FCMPTOTAL | cmpTotal |
18 | FcmpTotal_Local_Name: String | FCMPTOTAL_LOCAL | cmpTotal_Local |
19 | FcmpComentarios_Name: String | FCMPCOMENTARIOS | cmpComentarios |
20 | FcmpReferencia_Name: String | FREFERENCIA | Referencia |
21 | FcmpReferenciaFecha_Name: String | FREFERENCIAFECHA | ReferenciaFecha |
Por ejemplo, la variable FcmpCodigo_Name se define como protected:
protected FcmpCodigo_Name: String;
Y luego en public:
public property cmpCodigo_Name: String read FcmpCodigo_Name;
En la clase TprxCmpCABECERA se inicializa como:
FcmpCodigo_Name := 'cmpCodigo';
Y en TcmpCABECERA_pragma_XTD_implemented (que deriva de TprxCmpCABECERA) se inicializa como:
FcmpCodigo_Name := 'FCMPCODIGO';
Implementación
procedure SetTableName(aValue: String)
Al setearse el nombre de la tabla a la que corresponde el comprobante, este procedimiento ejecuta un SQL para traer las definiciones de COMPROBANTES/FAMILIAS del comprobante:
SELECT FFAMILIA = COMPROBANTEFAMILIA.FCODIGO , COMPROBANTEFAMILIA.FDESCRIPCION , COMPROBANTEFAMILIA.FPERIODOABIERTO , COMPROBANTEFAMILIA.FUSAVALUACION , COMPROBANTEFAMILIA.FEDITAFECHAVALUACION , COMPROBANTEFAMILIA.FMUESTRATOTAL , COMPROBANTEFAMILIA.FMUESTRAMONEDA , COMPROBANTEFAMILIA.FGUIONSEPARADOR , COMPROBANTEFAMILIA_TABLA.FTABLA , COMPROBANTEFAMILIA_TABLA.FCAMPO_TOTAL , COMPROBANTEFAMILIA_TABLA.FCAMPO_TOTAL_LOCAL , COMPROBANTEFAMILIA_TABLA.FCAMPO_FECHA , COMPROBANTEFAMILIA.FEDITATOTAL , FEDITATOTAL_TAG = CASE WHEN COMPROBANTEFAMILIA.FEDITATOTAL_TAG = 'tab_first' THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END FROM COMPROBANTEFAMILIA_TABLA INNER JOIN COMPROBANTEFAMILIA ON COMPROBANTEFAMILIA.FCODIGO = COMPROBANTEFAMILIA_TABLA.FFAMILIA WHERE COMPROBANTEFAMILIA_TABLA.FTABLA = (argumento)
Ese resultado se asigna a las propiedades que comienzan con FFamilia_.
function ModoAnulacion: String
Trae el modo de anulación de la tabla desde COMPROBANTES/TIPOS.
function ModoImpresion_Automatica: Boolean
Trae el modo de impresión de la tabla desde COMPROBANTES/TIPOS.
function CanInsertXtd: Boolean
Esta función primero ejecuta el código de su ancestro, y luego verifica si el usuario tiene permiso para agregar este tipo de comprobante.
function PuedeRegistrar(var aMsg: String; aOP: String): Boolean
Si la fecha del comprobante está habilitada dentro de las fechas del COMPROBANTES/PERIODOS que le corresponde retorna True, sino retorna False.
function PuedeEliminar(var aMsg: String): Boolean
Verifica si el comprobante activo puede ser eliminado:
- Verifica si el usuario tiene permiso para eliminar.
- Verifica con el auxiliar TpAUX_CLASE_POST_CONDICION_unit.
function TprxCmpCABECERA.ReabrirComprobanteVerificar: Boolean
Verifica si el comprobante puede ser reabierto (ver Estados de un comprobante).