<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://clarionwiki.com.ar/index.php?action=history&amp;feed=atom&amp;title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion</id>
	<title>Guia de las mejores prácticas de Clarion - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://clarionwiki.com.ar/index.php?action=history&amp;feed=atom&amp;title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion"/>
	<link rel="alternate" type="text/html" href="https://clarionwiki.com.ar/index.php?title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion&amp;action=history"/>
	<updated>2026-06-24T22:24:02Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://clarionwiki.com.ar/index.php?title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion&amp;diff=96&amp;oldid=prev</id>
		<title>Jorge Brugger en 11:26 25 ago 2017</title>
		<link rel="alternate" type="text/html" href="https://clarionwiki.com.ar/index.php?title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion&amp;diff=96&amp;oldid=prev"/>
		<updated>2017-08-25T11:26:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisión del 11:26 25 ago 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l92&quot;&gt;Línea 92:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 92:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      !El registro existe&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      !El registro existe&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ELSE&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ELSE&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      !El registro no &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;extite&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      !El registro no &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;existe&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   END&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   END&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jorge Brugger</name></author>
	</entry>
	<entry>
		<id>https://clarionwiki.com.ar/index.php?title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion&amp;diff=8&amp;oldid=prev</id>
		<title>Jorge Brugger: Página creada con «(Por Cristian Olsen)  &#039;&#039;&#039;Tipos de Campos&#039;&#039;&#039;  Acordarse siempre que lo que define el almacenamiento es la opción Characters, la opción Picture es solo como se va a mostrar...»</title>
		<link rel="alternate" type="text/html" href="https://clarionwiki.com.ar/index.php?title=Guia_de_las_mejores_pr%C3%A1cticas_de_Clarion&amp;diff=8&amp;oldid=prev"/>
		<updated>2012-07-04T17:12:17Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «(Por Cristian Olsen)  &amp;#039;&amp;#039;&amp;#039;Tipos de Campos&amp;#039;&amp;#039;&amp;#039;  Acordarse siempre que lo que define el almacenamiento es la opción Characters, la opción Picture es solo como se va a mostrar...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(Por Cristian Olsen)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tipos de Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Acordarse siempre que lo que define el almacenamiento es la opción&lt;br /&gt;
Characters, la opción Picture es solo como se va a mostrar&lt;br /&gt;
&lt;br /&gt;
Clarion	Que se puede almacenar&lt;br /&gt;
*Byte		(de 1 a 99)&lt;br /&gt;
*Short		(de 1 a 9,999)&lt;br /&gt;
*Long		(de 1 a 999,999,999)&lt;br /&gt;
*Decimal	(de 1 a 9,999,999,999,999,999,999,999,999,999,999)&lt;br /&gt;
*String	(de 1 a 4 Mega-Bytes)&lt;br /&gt;
&lt;br /&gt;
Para guardar hasta 99,999.99 se define un campo del tipo Decimal con un character de 7 decimal 2 picture @N9.2&lt;br /&gt;
&lt;br /&gt;
Para campos alfanuméricos grandes se puede usar CSTRING pero en characters hay que poner uno más del que se quiere almacenar&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pictures para Fecha y Hora&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*@D6	DD/MM/YYYY&lt;br /&gt;
*@D17  Fecha corta según formato Windows&lt;br /&gt;
*@D18  Fecha larga según formato Windows&lt;br /&gt;
*@T1	HH:MM&lt;br /&gt;
*@T4	HH:MM:SS&lt;br /&gt;
*@T7	Hora corta según formato de Windows&lt;br /&gt;
*@T8	Hora larga según formato de Windows&lt;br /&gt;
&lt;br /&gt;
Para todos los pictures si se especifica B esto hará que cuando el campo es cero se muestre blanco (@D6B), otros ejemplos comunes son&lt;br /&gt;
&lt;br /&gt;
*@N10	&amp;lt;&amp;lt;,&amp;lt;&amp;lt;&amp;lt;,&amp;lt;&amp;lt;&amp;lt;#		Ejemplo de CUIT &lt;br /&gt;
*@N_10	 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;#		Decimal 11 Picture @P##-########-#P&lt;br /&gt;
*@N010	 ##########		los guiones nunca son almacenados&lt;br /&gt;
&lt;br /&gt;
Para el ingreso de datos la forma mas sencilla es la siguiente&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Campos&lt;br /&gt;
!Entry Mode&lt;br /&gt;
|- &lt;br /&gt;
|Numéricos&lt;br /&gt;
|Insert&lt;br /&gt;
|- &lt;br /&gt;
|Fecha&lt;br /&gt;
|Overwrite&lt;br /&gt;
|- &lt;br /&gt;
|String&lt;br /&gt;
|Overwrite&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Relación tipos de campos entre Clarion y MS-SQL Server&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!CLARION&lt;br /&gt;
!MS-SQL SERVER&lt;br /&gt;
|- &lt;br /&gt;
|Byte&lt;br /&gt;
|Bit (de 0 a 1)&lt;br /&gt;
|- &lt;br /&gt;
|Byte&lt;br /&gt;
|Tinyint (de 1 a 99)		&lt;br /&gt;
|- &lt;br /&gt;
|Short&lt;br /&gt;
|SmallInt (de 1 a 9,999)&lt;br /&gt;
|- &lt;br /&gt;
|Long&lt;br /&gt;
|Int (de 1 a 999,999,999)&lt;br /&gt;
|- &lt;br /&gt;
|Decimal&lt;br /&gt;
|Decimal (999.99 se define como: (pres 5 esc 2)&lt;br /&gt;
|- &lt;br /&gt;
|String&lt;br /&gt;
|Char&lt;br /&gt;
|- &lt;br /&gt;
|CString&lt;br /&gt;
|VarChar&lt;br /&gt;
|- &lt;br /&gt;
|Date&lt;br /&gt;
|DateTime (Fecha y Hora)&lt;br /&gt;
|- &lt;br /&gt;
|Time&lt;br /&gt;
|DateTime (Fecha y Hora)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Para un buen funcionamiento de las aplicaciones todos los índices deben ser Únicos y los campos se deben definir sin el atributo NULL&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Manejo de Tablas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Acceso a un registro&lt;br /&gt;
  CLEAR(TBL:RECORD)&lt;br /&gt;
  TBL:CAMPO = XXXXX&lt;br /&gt;
  IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN&lt;br /&gt;
     !El registro existe&lt;br /&gt;
  ELSE&lt;br /&gt;
     !El registro no extite&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Insertar un registro&lt;br /&gt;
  CLEAR(TBL:RECORD)&lt;br /&gt;
  TBL:CAMPO = XXXXX&lt;br /&gt;
  IF Access:TABLA.Insert() &amp;lt;&amp;gt; LEVEL:BENIGN&lt;br /&gt;
     ! Error al crear el registro&lt;br /&gt;
&lt;br /&gt;
Cambiar un registro&lt;br /&gt;
  CLEAR(TBL:RECORD)&lt;br /&gt;
  TBL:CAMPO = XXXXX&lt;br /&gt;
  IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN&lt;br /&gt;
     TBL:CAMPO = XXXXX&lt;br /&gt;
     IF Access:TABLA.Update() &amp;lt;&amp;gt; LEVEL:BENIGN&lt;br /&gt;
        !Error al actualizar el registro&lt;br /&gt;
     END&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Borrar un registro&lt;br /&gt;
  CLEAR(TBL:RECORD)&lt;br /&gt;
  TBL:CAMPO = XXXXX&lt;br /&gt;
  IF Access:TABLA.Fetch(TBL:CLAVE) = LEVEL:BENIGN&lt;br /&gt;
     Access:TABLA.DeleteRecord() !Alternativa 1&lt;br /&gt;
     Relate:TABLA.Delete(0) !Alternativa 2&lt;br /&gt;
     Delete(TABLA) !Alternativa 3&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
Lectura secuencial&lt;br /&gt;
  CLEAR(TBL:RECORD)&lt;br /&gt;
  TBL:CAMPO = XXXXX&lt;br /&gt;
  SET(TBL:CLAVE,TBL:CLAVE)&lt;br /&gt;
  LOOP Until Access:TABLA.Next() OR TBL:CAMPO &amp;lt;&amp;gt; XXXXX&lt;br /&gt;
     !!!!&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Igualar los registros de dos tablas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
   TB1:RECORD :=: TB2:RECORD  :=: es una igualación en profundidad&lt;br /&gt;
   Esta instrucción iguala solo los campos que se llamen igual en ambas tablas independientemente de la posición de cada uno de ellos&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Antes de abrir la ventana como saber si en el Form estoy en modo ADD-CHANGE-DELETE-VIEW&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Window Manager - Init - Open the window (PR-8000)&lt;br /&gt;
&lt;br /&gt;
  IF SELF.Request = InsertRecord&lt;br /&gt;
  IF SELF.Request = ChangeRecord&lt;br /&gt;
  IF SELF.Request = ViewRecord&lt;br /&gt;
  IF SELF.Request = DeleteRecord&lt;br /&gt;
  La última instrucción solo es valida siempre que el Form muestre el registro a borrar &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agregar código antes que el Form realice el ADD-CHANGE-DELETE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Window Manager - TakeCompleted (PR-5000)&lt;br /&gt;
&lt;br /&gt;
  IF SELF.Request = InsertRecord&lt;br /&gt;
  IF SELF.Request = ChangeRecord&lt;br /&gt;
  IF SELF.Request = DeleteRecord &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agregar código después que el Form realizo el ADD-CHANGE-DELETE exitosamente&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Window Manager - TakeCompleted (PR-5001)&lt;br /&gt;
&lt;br /&gt;
  IF ReturnValue = Level:Benign&lt;br /&gt;
     IF SELF.Request = InsertRecord&lt;br /&gt;
     IF SELF.Request = ChangeRecord&lt;br /&gt;
     IF SELF.Request = DeleteRecord &lt;br /&gt;
  La última instrucción solo es valida siempre que el Form muestre el registro a borrar&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como salir un procedimiento antes de abrir la window&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  RETURN Level:Fatal&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Donde colocar código para hacer una validación en un campo en un procedimiento del tipo Form&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Control Events – Accepted – Generated Code (PR-7000)&lt;br /&gt;
&lt;br /&gt;
  IF Condicion&lt;br /&gt;
     BEEP	&lt;br /&gt;
     MESSAGE(&amp;#039;Texto del Error&amp;#039;,&amp;#039;Texto de la Ventana’,&amp;amp;|&lt;br /&gt;
           ICON:Exclamation,BUTTON:Cancel,BUTTON:Cancel,1)&lt;br /&gt;
     SELECT(?)&lt;br /&gt;
     CYCLE&lt;br /&gt;
  END   &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Si quiero tomar control de los botones del cuadro de mensajes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  CASE MESSAGE(&amp;#039;Texto del mensaje’,’Texto de la Ventana’,&amp;amp;|&lt;br /&gt;
              ICON:Question,BUTTON:Yes+BUTTON:No,BUTTON:No,1)&lt;br /&gt;
     OF BUTTON:No&lt;br /&gt;
        SELECT(?)&lt;br /&gt;
        CYCLE&lt;br /&gt;
     OF BUTTON:Yes&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como forzar la validación de un campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Control Events – Selected – Generated Code (PR-4000)&lt;br /&gt;
&lt;br /&gt;
  ?CAMPO{PROP:Touched} = TRUE&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como saber en la validación de un campo si se esta pasando cuando se presiono el botón OK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  IF NOT ThisWindow{PROP:AcceptAll} o &lt;br /&gt;
  IF NOT (Nombre de Ventana){PROP:AcceptAll}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como saber si luego de que un control del tipo Field LookUp que accedió a un browse para validar se le dio Select&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  IF GlobalResponse = RequestCompleted&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como colocar código en un Browse para cada registro leído&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Objects – Browse on Tabla – SetQueueRecord (PR-2500)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como filtrar un Browse antes de mostrarlo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Se puede hacer por record filter &lt;br /&gt;
Si es mas complejo se puede hacer en &lt;br /&gt;
&lt;br /&gt;
Local Object – Browse on Table – InitSort (PR-10000)&lt;br /&gt;
&lt;br /&gt;
  IF Condicion = 1&lt;br /&gt;
     BRW1.SetFilter(&amp;#039;(TCON:CVP_B &amp;lt;&amp;gt; 0)&amp;#039;)&lt;br /&gt;
     BRW1.ApplyFilter()&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como filtrar un registro en un Browse o Reporte antes que se muestre&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Objects – Browse on Tabla – ValidateRecord (PR-4500)&lt;br /&gt;
&lt;br /&gt;
  IF Condition THEN RETURN Record:Filtered;END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como controlar desde un Browse justo antes de llamar a un Form&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Object – Browse on Table – Ask(Byte Request) (PR-4999)&lt;br /&gt;
&lt;br /&gt;
  IF Request = InsertRecord&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como abrir una tabla en modo exclusivo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Colocar la tabla en OTHER TABLE&lt;br /&gt;
&lt;br /&gt;
Window Manager - Init – Open Files (PR-7501)&lt;br /&gt;
&lt;br /&gt;
  Relate:TABLA.Close&lt;br /&gt;
  Access:TABLA.SetOpenMode(12h);Relate:TABLA.Open&lt;br /&gt;
  Relate:TABLA.Close&lt;br /&gt;
&lt;br /&gt;
O También abrir la tabla en modo exclusivo&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como ordenar una tabla para luego imprimirla en ese orden en un reporte&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
OpenReport – Code (PR-5000)&lt;br /&gt;
&lt;br /&gt;
  ThisReport.SetOrder(&amp;#039;TBL:CAMPO1&amp;#039;,TBL:CAMPO2’,’-TBL:CAMPO3’)&lt;br /&gt;
  ThisReport.ApplyOrder()&lt;br /&gt;
&lt;br /&gt;
CAMPO1 Y 2 en orden ascendente CAMPO3 en orden descendente&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como filtrar una tabla para luego imprimirla sin esos registros en un reporte&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
OpenReport – Code (PR-5000)&lt;br /&gt;
&lt;br /&gt;
  ThisReport.SetFilter(&amp;#039;TBL:CAMPO1 = XXXX’)&lt;br /&gt;
  ThisReport.ApplyFilter()&lt;br /&gt;
&lt;br /&gt;
Tanto para el Order como para el Filter los campos a utilizar si no están pintados en el reporte tienen que estar definidos como HOT FIELDS&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como manejar un Browse con una clave compuesta por más de un campo e ir refrescándolo por cada cambio en esos campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Clave de la Tabla&lt;br /&gt;
*Empresa&lt;br /&gt;
*Cliente&lt;br /&gt;
*Fecha&lt;br /&gt;
&lt;br /&gt;
Colocar en Range Limit siempre el último campo de la clave que se quiere limitar, en este caso Cliente&lt;br /&gt;
&lt;br /&gt;
Si se cambia la Empresa colocar&lt;br /&gt;
  TBL:Empresa = GLO:Empresa&lt;br /&gt;
  BRW1.AddRange(TBL:Empresa)&lt;br /&gt;
  BRW1.ApplyRange()&lt;br /&gt;
  ThisWindow.Reset(True)&lt;br /&gt;
&lt;br /&gt;
Si se cambia el Cliente colocar&lt;br /&gt;
  TBL:Cliente = GLO:Cliente&lt;br /&gt;
  BRW1.AddRange(TBL:Cliente)&lt;br /&gt;
  BRW1.ApplyRange()&lt;br /&gt;
  ThisWindow.Reset(True)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como refrescar un Browse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  SETCURSOR(CURSOR:WAIT)&lt;br /&gt;
  BRW1.ResetFromFile()&lt;br /&gt;
  BRW1.ResetFromBuffer()&lt;br /&gt;
  ThisWindow.Reset(True)&lt;br /&gt;
  SETCURSOR&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como ordenar un Browse antes de abrir la ventana&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Objects – Browse on Tabla – InitSort (PR-10000)&lt;br /&gt;
&lt;br /&gt;
  BRW1.SetOrder(&amp;#039;TBL:CAMPO&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como agregar otro ítem al PopUp menú de ABM del browse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Agregar un botón debajo de los estándar ADD-CHANGE-DELETE con atributo Hide&lt;br /&gt;
&lt;br /&gt;
Window Manager - Init – Prepare Alert Key (PR-9001)&lt;br /&gt;
&lt;br /&gt;
  BRW1.PopUp.AddItemMimic(&amp;#039;Texto&amp;#039;,?Boton)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como borro un boton de update en ABM del browse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Window Manager - Init – Open the Window (PR-8000)&lt;br /&gt;
&lt;br /&gt;
  BRW4.DeleteControl = 0&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Como pararse en un browse de entrada en distintas partes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Window Manager - Init - (PR-9000)&lt;br /&gt;
&lt;br /&gt;
  POST(Event:ScrollUp,?Browse)		! subir un registro&lt;br /&gt;
  POST(Event:ScrollDown,?Browse)	! descer un registro&lt;br /&gt;
  POST(EVENT:ScrollTop,?Browse)		! primer registro&lt;br /&gt;
  POST(EVENT:ScrollBottom,?Browse)	! ultimo registro&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Para apretar un botón desde la lógica&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  POST(EVENT:ACCEPTED,?Boton)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colas en memoria (Queue)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Para recorrer toda una cola&lt;br /&gt;
&lt;br /&gt;
  LOOP Q# = 1 TO RECORDS(COLA) BY 1;GET(COLA,Q#)&lt;br /&gt;
    !Codigo&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  GET(COLA,CAMPO)	Busca un registro (El campo a buscar tiene que ser de la cola previamente igualado)&lt;br /&gt;
  ADD(COLA)		Inserta un registro&lt;br /&gt;
  PUT(COLA)		Modifica un registro&lt;br /&gt;
  DELETE(COLA)	Borra un registro&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bloquear una Tabla&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  AUX:TABLA_UseLogOut = Relate:A_STOPRO.UseLogOut&lt;br /&gt;
  Relate:TABLA.UseLogout = FALSE&lt;br /&gt;
  LOOP;LOGOUT(1,TABLA);UNTIL ERRORCODE() = 0&lt;br /&gt;
    !Mi código&lt;br /&gt;
  COMMIT&lt;br /&gt;
  Relate:TABLA.UseLogOut = AUX:TABLA_UseLogOut&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Validación de campos en Browse EIP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Object – EIP Manager for browse using ?Browse:1 – Take Completed (BYTE Force) (PR-4999)&lt;br /&gt;
&lt;br /&gt;
  IF BRW1.Q.TBL:CAMPO &amp;lt;&amp;gt; 1&lt;br /&gt;
     Return&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Poner disable un campo del EIP por una condición&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Object – EIP Manager for browse using ?Browse:1 – GetEdit (PR-5001)&lt;br /&gt;
&lt;br /&gt;
  IF SELF.Req = ChangeRecord AND Self.Column = 1 AND TBL:MARCA &amp;lt;&amp;gt; &amp;#039;E&amp;#039;&lt;br /&gt;
     ReturnValue = FALSE&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agregar código antes que el EIP realice el ADD-CHANGE-DELETE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Local Object – EIP Manager for browse using ?Browse:1 – TakeCompleted Force (PR-4999)&lt;br /&gt;
&lt;br /&gt;
   IF SELF.Request = InsertRecord&lt;br /&gt;
   IF SELF.Request = ChangeRecord&lt;br /&gt;
   IF SELF.Request = DeleteRecord&lt;br /&gt;
      BRW1.Q.COU:DESCRIPTION = CLIP(UPPER(BRW1.Q.COU:DESCRIPTION))&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agregar código después que el EIP realice el ADD-CHANGE-DELETE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Local Object – EIP Manager for browse using ?Browse:1 – TakeCompleted (PR-5001)&lt;br /&gt;
&lt;br /&gt;
IF ReturnValue = Level:Benign&lt;br /&gt;
   IF SELF.Request = InsertRecord&lt;br /&gt;
   IF SELF.Request = ChangeRecord&lt;br /&gt;
   IF SELF.Request = DeleteRecord&lt;/div&gt;</summary>
		<author><name>Jorge Brugger</name></author>
	</entry>
</feed>