TTfvsDBClientFrameMasterClases

De Pragma Wiki
Ir a la navegación Ir a la búsqueda

Descripción

El frame TTfvsDBClientFrameMasterClases (Implementa ficha de clases) implementa un frame para editar las clases que hemos definido en Clases. Este frame va a crear lo necesario para editar el registro solicitado, y si esa clase tiene detalles va a crearlos también.

Según lo documentado en DEV ETIQUETAS/FRAME EDICION este frame correspondería a la instancia 2.

Imagen del frame en diseño

En diseño el frame se ve de la siguiente manera:

Frame en diseño.

Sus partes son:

  • Panel superior: normalmente usado con controles de edición en formato de ficha, puede tener hasta dos paneles (el izquierdo y el derecho).
  • Área para detalles: se crean las pestañas para los detalles de la clase master (si los hubiere), el control en este panel es un TPageControl que permite agregar esas pestañas.
  • Panel de comentarios: normalmente contiene el control de edición de comentarios, pero puede tener otros controles de edición.
  • Panel de totales: normalmente muestra los totales del comprobante.

Finalmente, abajo a derecha están los botones de aplicar y de cancelar.

El botón Button1 debe ignorarse, se usó para una prueba y no fue eliminado, no es visible en runtime.

Imagen del frame en runtime

En runtime se ve de la siguiente manera (el ejemplo es de una factura de compras de la BD pCatalogo):

Frame en runtime.

Sus partes son (notar que el panel superior se abre en dos, el izquierdo y el derecho):

  • Panel superior, izquierda: este panel es muy parecido para todos los comprobantes, pueden variar según si el comprobante valoriza o no o como en este caso agrega el campo Factura Crédito.
  • Panel superior, derecha: contiene los datos del proveedor y de la factura presentada
  • Detalle de artículos: contiene una grilla (instancia 1) del detalle de la factura, desde aquí se accede a la instancia 2 de esa misma tabla.
  • Otros datos en otra pestaña: agrega otra pestaña para guardar otros datos.
  • Panel de comentarios: agrega dos controles de edición al estándar de comentarios.
  • Panel de totales: muestra los totales del comprobante.

Panel desarrolla este tema.

Ubicación de los campos en el frame

En Panel se describe cómo hacer para ubicar un campo en algún panel en particular.

Campo FCUENTA en panel main.

El campo FCUENTA se ubica en panel main pero como tiene el comando BREAK se muestra en el panel a derecha.

Campo FRECUPEROIVA en el panel comentarios.

El campo FRECUPEROIVA se ubica en panel comentarios.

Declaración

const
  TTAplicarText = 'Aplicar';
  TTCancelarText = 'Cancelar';

type
  TTfvsDBClientFrameMasterClases = class(TTfvsDBClientFrame)
    PanelBASE: TPanel;
    PanelCABECERA: TPanel;
    PanelPIE: TPanel;
    SplitterCENTRAL: TSplitter;
    PopupMenu1: TPopupMenu;
    PanelCENTRAL: TPanel;
    SplitterPIE: TSplitter;
    PageControlDETALLES: TPageControl;
    PanelBOTONES_PIE: TPanel;
    ButtonAPLICAR: TButton;
    ButtonCANCELAR: TButton;
    StatusBar1: TStatusBar;
    PanelPIE_Comentarios: TPanel;
    Splitter_PanelPIE_Vertical: TSplitter;
    PanelPIE_Totales: TPanel;
    Panel5: TPanel;
    Panel1: TPanel;
    prxScrollBox_Comentarios: TprxScrollBox;
    prxScrollBox_Totales: TprxScrollBox;
    Button1: TButton;
    Action_INSERT_Master: TAction;
    Action_EDIT_Master: TAction;
    Action_POST_Master: TAction;
    Action_CANCEL_Master: TAction;
    Action_DELETE_Master: TAction;
    Action_INSERT_Detail: TAction;
    Action_EDIT_Detail: TAction;
    Action_POST_Detail: TAction;
    Action_CANCEL_Detail: TAction;
    Action_DELETE_Detail: TAction;
    Label_wflFIRMASX: TLabel;
    procedure prxADODataSetEdit1ppOnShowFieldHint(Sender: TprxADODataSet; aCampo, aAtributo: String; aEnteros, aDecimales: Integer; aRequerido: Boolean; aIndicaciones: String; aConstraint: String);
    procedure Button1Click(Sender: TObject);
    procedure PageControlDETALLESChange(Sender: TObject);
    procedure OnExecute_INSERT_Master(Sender: TObject);
    procedure OnExecute_EDIT_Master(Sender: TObject);
    procedure OnExecute_POST_Master(Sender: TObject);
    procedure OnExecute_CANCEL_Master(Sender: TObject);
    procedure OnExecute_DELETE_Master(Sender: TObject);
    procedure OnExecute_REFRESH_Master(Sender: TObject);
    procedure OnExecute_INSERT_Detail(Sender: TObject);
    procedure OnExecute_EDIT_Detail(Sender: TObject);
    procedure OnExecute_DELETE_Detail(Sender: TObject);
    procedure OnExecute_POST_Detail(Sender: TObject);
  private
    FUsaPanelCENTRAL: Boolean;
    FUsaPanelPIE: Boolean;
    FUsaPanelPIE_Totales: Boolean;

    FPanelCABECERA_ClassShow_Frame: TTfvsFrame;
  protected
    procedure   SetDataSet(aValue: TprxADODataSetEdit); override;
    procedure   FieldMessage(var Message: TprxADODataSetMessage); message MSG_PRXADODATASETMESSAGE;

    procedure   UsaPanelCENTRALSet(aValue: Boolean);
    function    UsaPanelCENTRALGet: Boolean;

    procedure   UsaPanelPIESet(aValue: Boolean);
    function    UsaPanelPIEGet: Boolean;

    procedure   UsaPanelPIE_Totales_Set(aValue: Boolean);
    function    UsaPanelPIE_Totales_Get: Boolean;

    procedure   ClassShow_BuildFrame_ArmaTab_Especial(aTabName: String);

    procedure   ClassShow_BuildFrame_PanelesAlPie(aPanelName: String; aScrollBox: TprxScrollBox);

    function    OnExecute_Detail_Select_Frame(var aFrame: TTfvsDBClientFrame): Boolean;

    property    UsaPanelCENTRAL: Boolean read UsaPanelCENTRALGet write UsaPanelCENTRALSet;
    property    UsaPanelPIE: Boolean read UsaPanelPIEGet write UsaPanelPIESet;
    property    UsaPanelPIE_Totales: Boolean read UsaPanelPIE_Totales_Get write UsaPanelPIE_Totales_Set;

    property    PanelCABECERA_ClassShow_Frame: TTfvsFrame read FPanelCABECERA_ClassShow_Frame write FPanelCABECERA_ClassShow_Frame;
  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;
  end;

Implementación

procedure ClassShow_BuildFrame(Sender: TObject)

Si algún campo usa el panel tab_first entonces lo agrega al PageControl.

Verifica si la clase tiene detalles usando un SQL similar a:

SELECT
prxclases.Codigo
, prxclases.Descripcion
, prxclases.DetalleCodigo
, prxclases.DetalleVisual
, prxclases.RestriccionCascada
, Instancia = pTAGS_FRAME_VISTA.FINSTANCIA
, Frame = pTAGS_FRAME_VISTA.FFRAME
, FrameS = pTAGS_FRAME_VISTA.FFRAMES
, FrameArgs = pTAGS_FRAME_VISTA.FFRAMEARGS
, prxclases.TS
, Next_FrameInstance = next_instance.FINSTANCIA
, Next_FrameName = next_instance.FFRAME
, Next_SubframeName = next_instance.FFRAMES
, Next_EditMode = prxclases.DetalleVisual
FROM
prxclases
, pTAGS_FRAME_VISTA
LEFT OUTER JOIN pTAGS_FRAME_VISTA next_instance ON
next_instance.FCLASE = pTAGS_FRAME_VISTA.FCLASE
AND next_instance.FINSTANCIA > pTAGS_FRAME_VISTA.FINSTANCIA
WHERE
prxclases.DetalleCodigo = 'FCCAB'
AND prxclases.DetalleVisual = 'detail'
AND prxclases.Abstracta = 0
AND pTAGS_FRAME_VISTA.FCLASE = prxclases.Codigo
AND pTAGS_FRAME_VISTA.FINSTANCIA =
(
SELECT MIN(I.FINSTANCIA) FROM pTAGS_FRAME_VISTA I WHERE
I.FCLASE = pTAGS_FRAME_VISTA.FCLASE
)
AND NOT EXISTS
(
SELECT * FROM pVISIBLES_PERFILV WHERE
pVISIBLES_PERFILV.FCLASE = prxclases.Codigo
AND pVISIBLES_PERFILV.FCAMPO IS NULL
)
ORDER BY
prxclases.TS
, pTAGS_FRAME_VISTA.FINSTANCIA

Si tiene detalles los crea en el PageControl.

Si algún campo usa el panel tab_last entonces lo agrega al PageControl.

Identidad

  • Ancestro: TTfvsDBClientFrame
  • Carpeta: C:\DevelopPrx\frames
  • Archivo: fvsDBClientFrameMasterClases.pas