Diferencia entre revisiones de «TprxCmpCABECERA»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Línea 377: Línea 377:
Verifica si el comprobante activo puede ser eliminado:
Verifica si el comprobante activo puede ser eliminado:
*Verifica si el usuario tiene permiso para eliminar.
*Verifica si el usuario tiene permiso para eliminar.
*Verifica con el auxiliar [[pAUX_CLASE_POST_CONDICION_unit]].
*Verifica con el auxiliar [[TpAUX_CLASE_POST_CONDICION_unit]].

Revisión del 16:23 19 may 2025

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

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: