Diferencia entre revisiones de «TTfvsDBClientFrameMasterClases»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Línea 31: Línea 31:


===Ubicación de los campos en el frame===
===Ubicación de los campos en el frame===
Cuando definimos los campos de una clase podemos definir en qué parte del frame se muestran, por ejemplo:
Cuando definimos los campos de una clase podemos definir en qué parte del frame se muestran:
20250603 0933 CAMPO FCUENTA.png
[[Archivo:20250603 0933 CAMPO FCUENTA.png|miniaturadeimagen|no|Campo FCUENTA en panel '''main'''.]]
[[Archivo:20250603 0933 CAMPO FCUENTA.png|miniaturadeimagen|no|Campo FCUENTA en panel '''main'''.]]
*'''Grupo''': cuando indicamos un texto para el grupo el sistema va a imprimir ese texto como título justo antes del campo (notar en la imagen de runtime). Este caso en particular tiene una etiqueta '''<BR>''' antes del título, eso indica '''BREAK''' y hace que el campo se inicie en el panel izquierdo.
*'''Panel''': indica en qué panel debe dibujarse el campo, ver [[DEV CLASES/CAMPOS#Panel]].
Por ejemplo, el campo FCUENTA:
*
*



Revisión del 14:42 3 jun 2025

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).
  • 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: los comprobantes del sistema tienen casi los mismos datos en este panel, pueden variar según si el comprobante valoriza o no o como en este caso agrega el campo Factura Crédito pero son todos muy parecidos.
  • 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.

Ubicación de los campos en el frame

Cuando definimos los campos de una clase podemos definir en qué parte del frame se muestran:

Campo FCUENTA en panel main.
  • Grupo: cuando indicamos un texto para el grupo el sistema va a imprimir ese texto como título justo antes del campo (notar en la imagen de runtime). Este caso en particular tiene una etiqueta
    antes del título, eso indica BREAK y hace que el campo se inicie en el panel izquierdo.
  • Panel: indica en qué panel debe dibujarse el campo, ver DEV CLASES/CAMPOS#Panel.

Por ejemplo, el campo FCUENTA:

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

Identidad

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