(1049,'== Developing ==\n*[[Developing]]\n*[[Pendientes|Requirements]]\n*[[SpanexDraw|Spanex:Draw]]\n*[[Spanex:Estructuras]]\n\n== Gestión Retail Aberturas (Spanex) ==\n*[[GRA: Relaciones]]\n*[[GRA: Releases]]\n*[[GRA: PreciosABT]]\n\n=== Gestión de Magnitudes ===\n\n==== Definiciones ====\n*Coeficiente: Por defecto, el valor es 1. Si necesita sumar al valor original, el coeficiente tiene que tener la parte entera al menos en 1. En el caso de magnitudes no estándar, los valores del precio del producto puede estar incluido en el mismo, por lo que hay que verificar en este caso los valores que se ingresen en la [[TABLA:precios]]\n*Offset: Por defecto, el valor es 0\n\n==== Atributos de Productos/Elementos ====\n* M2 = Metro Cuadrado\nPrecio Unitario = Precio determinado por tipo de cliente * (((((Ancho + OffsetAncho)*Coeficiente Ancho) * ((Alto + OffsetAlto)*Coeficiente Alto))/100000) * Coeficiente Elemento)\n\n* ML = Metro Lineal\n<Del>Precio Unitario = Precio determinado por tipo de cliente * (((((Ancho + OffsetAncho) * 2 * Coeficiente Ancho) + ((Alto + OffsetAlto) * 2 * Coeficiente Alto)) / 1000) * Coeficiente Elemento).</Del>\n\n* MG = Magnitud Galarza\nPrecio Unitario = Precio determinado por tipo de cliente * ((((Alto + OffsetAlto) * CoeficienteAlto) + (Ancho + OffsetAncho) * CoeficienteAncho)) / 1000) * Coeficiente Elemento)\n\n* UN = Unidad\nPrecio Unitario = Precio determinado por tipo de cliente * Coeficiente Elemento\n\n=== Triggers ===\n<small>\n{| class=\"wikitable\"\n| <center>\'\'\'Trigger\'\'\'</center>\n| <center>\'\'\'Event\'\'\'</center>\n| <center>\'\'\'Table\'\'\'</center>\n| <center>\'\'\'Statement\'\'\'</center>\n| <center>\'\'\'Timing\'\'\'</center>\n\n\n|-\n| Alta_Productos\n| INSERT\n| productos\n| <pre>BEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios (`precios`.`Lista`, \n                  `precios`.`ProductoID`, \n                  `precios`.`PrecioProd00`,\n                  `precios`.`PrecioProd01`, \n                  `precios`.`PrecioProd02`, \n                  `precios`.`PrecioProd03`)\n           VALUES(vLista, vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (`composicion`.`ProductoID`,\n                     `composicion`.`ElementoID`,\n                     `composicion`.`ValorElemento`,\n                     `composicion`.`ElementoPM`)\n           VALUES(vProductoID,vProductoID,1, 1);\nEND</pre>\n| BEFORE\n\n|-\n| Baja_Productos\n| DELETE\n| productos\n| <pre>BEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = OLD.ProductoID;\n    DELETE FROM precios WHERE ProductoID=OLD.ProductoID AND Lista=vLista;\n    DELETE FROM composicion WHERE ProductoID=OLD.ProductoID OR ElementoID=OLD.ProductoID;\nEND</pre>\n| AFTER\n\n|-\n| AltaTransaccion\n| INSERT\n| transacciones\n| <pre>BEGIN\n   SET   NEW.TransaccFecha = CURDATE(),\n      NEW.TransaccHora = CURTIME();\nEND</pre>\n| BEFORE\n\n|-\n| Baja_Presupuesto\n| DELETE\n| vidquoten1\n| <pre>BEGIN\n    DELETE FROM vidquoten2\n    WHERE vidquoten2.VidQuoteID=OLD.VidQuoteID;\n    DELETE FROM vidquoten3\n    WHERE vidquoten3.VidQuoteID=OLD.VidQuoteID;\n  END</pre>\n| AFTER\n\n|-\n| Baja_Item_Presupuesto\n| DELETE\n| vidquoten2\n| <pre>\'BEGIN\n    DELETE FROM vidquoten3\n    WHERE vidquoten3.VidQuoteID=OLD.VidQuoteID AND\n     vidquoten3.VidQuoteItem=OLD.VidQuoteItem;\n  END\'</pre>\n| AFTER\n\n|-\n| Baja_Elemento_Presupuesto\n| DELETE\n| vidquoten3\n| <pre>BEGIN\n   DELETE FROM vidquoten4\n    WHERE    vidquoten4.VidQuoteID=OLD.VidQuoteID AND\n         vidquoten4.VidQuoteItem=OLD.VidQuoteItem AND\n         vidquoten4.VidQuoteElementoID=OLD.VidQuoteElementoID;\nEND</pre>\n| AFTER\n|}\n</small>\n\n=== Reportes ===\n<small>\n</small>\n\n=== Procedimientos ===\n<small>\n</small>\n\n=== Instalacion .odb ===\n*Copiar el documento .odb\n*Cambiar el usuario de la base de datos\n*Cambiar la constante [[oCheckEstadoLicencia]] a True\n*Grabar documento .odb\n*Cambiar a nivel de Sistema Operativo a ReadOnly\n\n=== Documentación de Usuario ===\n[[WikiUserSpanex]]\n=== Soporte-Bitacora ===\n*[[:Category:TKT|SpanexSupport -> Pendientes]]\n*[[:Category:TKTOut|SpanexSupport -> Finalizados]]','utf-8'),(1050,'== Lanzador ==\nAlta\n\n== Composición ==\n* [[TABLA:precios]]\n\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Alta_Precio`\nBEFORE INSERT ON `fzggestion`.`precios`\nFOR EACH ROW\nBEGIN\n	SET\n	NEW.FechaEvento = CURDATE(),\n	NEW.HoraEvento = CURTIME(),\n	NEW.UserEvento	= USER();\nEND$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1051,'[[Category:TRIG]]\n== Lanzador ==\nAlta\n== Composición ==\n* [[TABLA:precios]]\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Alta_Precio`\nBEFORE INSERT ON `fzggestion`.`precios`\nFOR EACH ROW\nBEGIN\n	SET\n	NEW.FechaEvento = CURDATE(),\n	NEW.HoraEvento = CURTIME(),\n	NEW.UserEvento	= USER();\nEND$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1052,'===Estructuras de Trabajo===\n*[[:Category:TABLAS|Tablas]]\n**[[:Category:TRIG|Triggers]]\n*[[:Category:VISTAS|Vistas]]\n*[[:Category:FORM|Formularios]]\n*[[:Category:MACROS|Macros]]\n*[[:Category:RPRT|Informes]]\n*[[:Category:PROC|Procedimientos]]\n*[[:Category:LIBR|Bibliotecas]]\n*[[Estructuras SQL|CódigoSQL]]','utf-8'),(1053,'Lista de Triggers Activos','utf-8'),(1054,'[[Category:TRIG]]\n== Lanzador ==\nUpdate\n== Composición ==\n*[[TABLA:precios]]\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Actualiza_Precio`\nBEFORE UPDATE ON `fzggestion`.`precios`\nFOR EACH ROW\nBEGIN\n	SET\n	NEW.FechaEvento = CURDATE(),\n	NEW.HoraEvento = CURTIME(),\n	NEW.UserEvento	= USER();\nEND$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1055,'http://ayuda.cloudoffice.com.ar/index.php?title=<pagina>&action=edit\n==Tablas, Vistas==\n<pre>\n[[Category:TABLAS]]\n[[Category:VISTAS]]\n== Descripción ==\n== Composición ==\n== Estructura ==\n< pre>\n< /pre>\n== SQL ==\n< pre>\n< /pre>\n== Bitácora ==\n== Uso ==\n== URL ==\n</pre>\n==Triggers==\n[[Category:TRIG]]\n== Lanzador ==\n== Composición ==\n== SQL ==\n< pre>\n< /pre>\n== Bitácora ==\n== Uso ==\n\n==Formularios==\n<pre>\n[[Category:FORM]]\n== Descripción ==\n== Composición ==\n== Estructura ==\n== Código Relacionado ==\n== Bitácora ==\n== Uso ==\n</pre>\n\n==Macros, Procedimientos, Funciones==\n<pre>\n[[Category:MACRO]]\n[[Category:PROC]]\n== Descripción ==\n== Biblioteca ==\n== Composición ==\n== Código ==\n< small>< pre>\n< /pre>< /small>\n== Bitácora ==\n== Uso ==\n</pre>\n\n==SqlCode==\n<pre>\n< small>< pre>\n< /pre>< /small>\n</pre>\n==Iconos Layout==\n*File:warning-icon-hi.png|20px [[File:warning-icon-hi.png|20px]]\n*File:checked.png|20px [[File:checked.png|20px]]\n==Tickets Soporte==\n<pre>\n[[Category:TKT]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' \n*\'\'\'Fecha:\'\'\' \n*\'\'\'Soporte:\'\'\' \n=====Incidente=====\n=====WorkAround=====\n=====Resolución=====\n=====Estado=====\n=====Observaciones=====\n</pre>','utf-8'),(1056,'http://ayuda.cloudoffice.com.ar/index.php?title=<pagina>&action=edit\n==Tablas, Vistas==\n<pre>\n[[Category:TABLAS]]\n[[Category:VISTAS]]\n== Descripción ==\n== Composición ==\n== Estructura ==\n< pre>\n< /pre>\n== SQL ==\n< pre>\n< /pre>\n== Bitácora ==\n== Uso ==\n== URL ==\n</pre>\n==Triggers==\n<pre>\n[[Category:TRIG]]\n== Lanzador ==\n== Composición ==\n== SQL ==\n< pre>\n< /pre>\n== Bitácora ==\n== Uso ==\n</pre>\n==Formularios==\n<pre>\n[[Category:FORM]]\n== Descripción ==\n== Composición ==\n== Estructura ==\n== Código Relacionado ==\n== Bitácora ==\n== Uso ==\n</pre>\n\n==Macros, Procedimientos, Funciones==\n<pre>\n[[Category:MACRO]]\n[[Category:PROC]]\n== Descripción ==\n== Biblioteca ==\n== Composición ==\n== Código ==\n< small>< pre>\n< /pre>< /small>\n== Bitácora ==\n== Uso ==\n</pre>\n\n==SqlCode==\n<pre>\n< small>< pre>\n< /pre>< /small>\n</pre>\n==Iconos Layout==\n*File:warning-icon-hi.png|20px [[File:warning-icon-hi.png|20px]]\n*File:checked.png|20px [[File:checked.png|20px]]\n==Tickets Soporte==\n<pre>\n[[Category:TKT]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' \n*\'\'\'Fecha:\'\'\' \n*\'\'\'Soporte:\'\'\' \n=====Incidente=====\n=====WorkAround=====\n=====Resolución=====\n=====Estado=====\n=====Observaciones=====\n</pre>','utf-8'),(1057,'[[Category:TRIG]]\n== Lanzador ==\nAlta\n== Composición ==\n*[[TABLA:precios]]\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Alta_Precio`\nBEFORE INSERT ON `fzggestion`.`precios`\nFOR EACH ROW\nBEGIN\n	SET\n	NEW.FechaEvento = CURDATE(),\n	NEW.HoraEvento = CURTIME(),\n	NEW.UserEvento	= USER();\nEND$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1058,'== Lanzador ==\nInsert\n\n== Composición ==\n* [[TABLA:productos]]\n* [[TABLA:precios]]\n* [[TABLA:composicion]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vProductoID CHAR(8);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios ( \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (\n			`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\nEND$$\n</pre>\n\n== Bitácora ==\n*20120608\n**Limpieza de esquema anterior de gestión de precios\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios (`precios`.`Lista`, \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vLista, vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\n</pre>\n\n== Uso ==\n*[[FORM:Productos]]\n*[[FORM:CopiaComposicion]]\n\n== URL ==','utf-8'),(1059,'== Lanzador ==\nDelete\n\n== Composición ==\n*[[TABLA:precios]]\n*[[TABLA:composicion]]\n== SQL ==\n<pre>\nCREATE TRIGGER `fzggestion`.`Baja_Productos`\nAFTER DELETE ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DELETE FROM precios WHERE ProductoID=OLD.ProductoID;\n    DELETE FROM composicion WHERE ProductoID=OLD.ProductoID OR ElementoID=OLD.ProductoID;\nEND$$\n</pre>\n== Bitácora ==\n*20120608\n**Limpieza de esquema anterior de gestión de precios \n<pre>\nCREATE\nTRIGGER `fzggestion`.`Baja_Productos`\nAFTER DELETE ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = OLD.ProductoID;\n    DELETE FROM precios WHERE ProductoID=OLD.ProductoID AND Lista=vLista;\n    DELETE FROM composicion WHERE ProductoID=OLD.ProductoID OR ElementoID=OLD.ProductoID;\nEND$$\'\'Texto en cursiva\'\'\n</pre>\n== Uso ==\n== URL ==','utf-8'),(1060,'[[Category:TRIG]]\n== Lanzador ==\nDelete\n== Composición ==\n*[[TABLA:precios]]\n*[[TABLA:composicion]]\n== SQL ==\n<pre>\nCREATE TRIGGER `fzggestion`.`Baja_Productos`\nAFTER DELETE ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DELETE FROM precios WHERE ProductoID=OLD.ProductoID;\n    DELETE FROM composicion WHERE ProductoID=OLD.ProductoID OR ElementoID=OLD.ProductoID;\nEND$$\n</pre>\n== Bitácora ==\n*20120608\n**Limpieza de esquema anterior de gestión de precios \n<pre>\nCREATE\nTRIGGER `fzggestion`.`Baja_Productos`\nAFTER DELETE ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = OLD.ProductoID;\n    DELETE FROM precios WHERE ProductoID=OLD.ProductoID AND Lista=vLista;\n    DELETE FROM composicion WHERE ProductoID=OLD.ProductoID OR ElementoID=OLD.ProductoID;\nEND$$\'\'Texto en cursiva\'\'\n</pre>\n== Uso ==\n== URL ==','utf-8'),(1061,'[[Category:TRIG]]\n== Lanzador ==\nInsert\n== Composición ==\n* [[TABLA:productos]]\n* [[TABLA:precios]]\n* [[TABLA:composicion]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vProductoID CHAR(8);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios ( \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (\n			`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\nEND$$\n</pre>\n\n== Bitácora ==\n*20120608\n**Limpieza de esquema anterior de gestión de precios\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios (`precios`.`Lista`, \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vLista, vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\n</pre>\n\n== Uso ==\n*[[FORM:Productos]]\n*[[FORM:CopiaComposicion]]\n\n== URL ==','utf-8'),(1062,'#REDIRECCIÓN [[TRIG:productos.Baja Producto]]','utf-8'),(1063,'[[Category:TABLAS]]\n== Descripción ==\nProductos Activos\n== Estructura ==\n<pre>\nProductoID	char(8) PK \nCategoriaID	char(4) \nDescripcion	char(80) \nProveedorID	char(4) \nReposicion	int(3) \nMagnitud	char(4) \nCoefP00P01	decimal(6,4) \nCoefP00P02	decimal(6,4) \nCoefP00P03	decimal(6,4) \nProductoPID	varchar(15) \nInsumoIMG	mediumblob \n</pre>\n== Triggers ==\n* Alta: [[TRIG:productos.Alta_Producto]]\n* Baja: [[TRIG:productos.Baja_Producto]]\n== Bitácora ==\n== Uso ==\n== URL ==','utf-8'),(1064,'[[Category:TABLAS]]\n== Descripción ==\nTabla de Precios\n== SQL ==\n<pre>\nCREATE TABLE `precios` (\n  `Lista` int(11) NOT NULL,\n  `ProductoID` char(8) NOT NULL,\n  `PrecioProd00` decimal(12,2) DEFAULT NULL,\n  `PrecioProd01` decimal(12,2) DEFAULT NULL,\n  `PrecioProd02` decimal(12,2) DEFAULT NULL,\n  `PrecioProd03` decimal(12,2) DEFAULT NULL,\n  `FechaEvento` date DEFAULT NULL,\n  `HoraEvento` time DEFAULT NULL,\n  `UserEvento` varchar(20) DEFAULT NULL,\n  PRIMARY KEY (`Lista`,`ProductoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n</pre>\n\n== Bitácora ==\n== Uso ==\n== Triggers ==\n*Insert:[[TRIG:precios.AltaPrecio]]\n*Update:[[TRIG:precios.ActualizaPrecio]]','utf-8'),(1065,'[[Category:TRIG]]\n== Lanzador ==\nInsert\n== Composición ==\n* [[TABLA:productos]]\n* [[TABLA:precios]]\n* [[TABLA:composicion]]\n== SQL ==\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vProductoID CHAR(8);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios ( \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (\n			`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\nEND$$\n</pre>\n== Bitácora ==\n*20120608\n**Limpieza de esquema anterior de gestión de precios\n<pre>\nCREATE TRIGGER `fzggestion`.`Alta_Productos`\nBEFORE INSERT ON `fzggestion`.`productos`\nFOR EACH ROW\nBEGIN\n    DECLARE vLista INT(5);\n    DECLARE vProductoID CHAR(8);\n    SET vLista = (SELECT Lista FROM listavigente);\n    SET vProductoID = NEW.ProductoID;\n    INSERT INTO precios (`precios`.`Lista`, \n			`precios`.`ProductoID`, \n			`precios`.`PrecioProd00`,\n			`precios`.`PrecioProd01`, \n			`precios`.`PrecioProd02`, \n			`precios`.`PrecioProd03`)\n			VALUES\n			(vLista, vProductoID, 0, 0, 0, 0);\n    INSERT INTO composicion (`composicion`.`ProductoID`,\n			`composicion`.`ElementoID`,\n			`composicion`.`ValorElemento`,\n			`composicion`.`ElementoPM`)\n			VALUES\n			(vProductoID,vProductoID,1, 1);\n</pre>\n== Uso ==\n*[[FORM:Productos]]\n*[[FORM:CopiaComposicion]]\n== URL ==','utf-8'),(1066,'#REDIRECCIÓN [[TRIG:productos.Alta Producto]]','utf-8'),(1067,'[[Category:TABLAS]]\n== Descripción ==\nProductos Activos\n== Estructura ==\n<pre>\nProductoID	char(8) PK \nCategoriaID	char(4) \nDescripcion	char(80) \nProveedorID	char(4) \nReposicion	int(3) \nMagnitud	char(4) \nCoefP00P01	decimal(6,4) \nCoefP00P02	decimal(6,4) \nCoefP00P03	decimal(6,4) \nProductoPID	varchar(15) \nInsumoIMG	mediumblob \n</pre>\n== Triggers ==\n*Insert:[[TRIG:productos.Alta_Producto]]\n*Delete:[[TRIG:productos.Baja_Producto]]\n\n== Bitácora ==\n== Uso ==\n== URL ==','utf-8'),(1068,'[[Category:TABLAS]]\n== Descripción ==\nProductos Activos\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `productos` (\n  `ProductoGen` char(8) DEFAULT NULL,\n  `ProductoDflt` int(1) DEFAULT NULL,\n  `ProductoID` char(8) NOT NULL,\n  `CategoriaID` char(4) NOT NULL,\n  `Descripcion` char(80) NOT NULL,\n  `ProveedorID` char(4) NOT NULL,\n  `Reposicion` int(3) DEFAULT NULL,\n  `Magnitud` char(4) NOT NULL,\n  `MagnitudIN` char(2) DEFAULT NULL,\n  `CoefP00P01` decimal(6,4) DEFAULT NULL,\n  `CoefP00P02` decimal(6,4) DEFAULT NULL,\n  `CoefP00P03` decimal(6,4) DEFAULT NULL,\n  `ProductoPID` varchar(15) DEFAULT NULL,\n  `InsumoIMG` mediumblob,\n  `MagCmpX` int(5) DEFAULT NULL,\n  `MagCmpY` int(5) DEFAULT NULL,\n  `MagCmpZ` int(5) DEFAULT NULL,\n  `MagCmpW` int(5) DEFAULT NULL,\n  `Presentacion` varchar(45) DEFAULT NULL,\n  `ProductoProy` int(1) DEFAULT \'0\',\n  PRIMARY KEY (`ProductoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n</pre>\n\n== Triggers ==\n*Insert:[[TRIG:productos.Alta_Producto]]\n*Delete:[[TRIG:productos.Baja_Producto]]\n\n== Bitácora ==\n== Uso ==\n== URL ==','utf-8'),(1069,'[[Category:TABLAS]]\n== Descripción ==\nEsquema de Cabecera de Registración de Presupuesto\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `vidquoten1` (\n  `VidQuoteID` int(11) NOT NULL AUTO_INCREMENT,\n  `VidQuoteObra` char(20) DEFAULT NULL,\n  `VidQuoteCliente` char(8) DEFAULT NULL,\n  `VidQuoteFecha` date DEFAULT NULL,\n  `VidQuoteFechaEst` date DEFAULT NULL,\n  `VidQuoteEstado` char(1) DEFAULT \'0\',\n  `VidQuoteACom` char(4) DEFAULT NULL,\n  `VidQuoteMedCheck` char(1) DEFAULT \'0\',\n  PRIMARY KEY (`VidQuoteID`)\n) ENGINE=MyISAM AUTO_INCREMENT=191 DEFAULT CHARSET=latin1$$\n</pre>\n== Triggers ==\n*Delete:[[TRIG:vidquoten1.Baja_Presupuesto]]\n== Bitácora ==\n*20121026\n**Alta de esta documentación\n**Modificación de la estructura. Agregado de control de NOTNULL para los atributos de Cliente y Agente Comercial\n<pre>\nALTER TABLE `fzggestion`.`vidquoten1` \nCHANGE COLUMN `VidQuoteCliente` `VidQuoteCliente` CHAR(8) NOT NULL  ,\nCHANGE COLUMN `VidQuoteACom` `VidQuoteACom` CHAR(4) NOT NULL  ;\n</pre>\n== Uso ==\n*[[FORM:Presupuesto]]\n*[[RPRT:Presupuesto]]\n== URL ==','utf-8'),(1070,'[[Category:TRIG]]\n== Lanzador ==\nDelete\n== Composición ==\n*[[TABLA:vidquoten1]]\n*[[TABLA:vidquoten2]]\n*[[TABLA:vidquoten3]]\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Presupuesto`\nAFTER DELETE ON `fzggestion`.`vidquoten1`\nFOR EACH ROW\nBEGIN\n    DELETE FROM vidquoten2\n    WHERE vidquoten2.VidQuoteID=OLD.VidQuoteID;\n    DELETE FROM vidquoten3\n    WHERE vidquoten3.VidQuoteID=OLD.VidQuoteID;\n  END\n$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1071,'[[Category:TABLAS]]\n== Descripción ==\nContainer del Detalle de Productos de Presupuestos. Se relaciona al resto de las tablas de registraciones de Presupuestos de la siguiente manera:\n[[File:Esquema.Tablas.Presupuesto.jpg|200px]]\n\nsiendo los atributos de relación con el nivel superior con VidQuoteID, mientras que hacia el nivel inferior con VidQuoteID+VidQuoteItem+VidQuoteProdID\n\n== Composición ==\n[[#Triggers]]\n\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `vidquoten2` (\n  `VidQuoteID` int(11) NOT NULL,\n  `VidQuoteLPre` int(1) DEFAULT NULL,\n  `VidQuoteItem` int(11) NOT NULL AUTO_INCREMENT,\n  `VidQuotePredID` char(8) DEFAULT NULL,\n  `VidQuoteProdID` char(8) DEFAULT NULL,\n  `VidQuoteProdCantidad` int(5) DEFAULT NULL,\n  `VidQuoteAncho` int(5) DEFAULT NULL,\n  `VidQuoteAlto` int(5) DEFAULT NULL,\n  `VidQuotePrecio` decimal(10,2) DEFAULT NULL,\n  `VidQuoteDetalle` varchar(100) DEFAULT NULL,\n  PRIMARY KEY (`VidQuoteID`,`VidQuoteItem`)\n) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Actualiza_Item_Presupuesto`\nBEFORE UPDATE ON `fzggestion`.`vidquoten2`\nFOR EACH ROW\nBEGIN\n    -- --------------------------------------------------------\n    -- Changes on Price, change previous other attributes\n    -- --------------------------------------------------------\n    IF OLD.VidQuotePrecio = NEW.VidQuotePrecio THEN\n        SELECT VidQuoteCliente,VidQuoteACom INTO @Cliente,@AComercial FROM vidquoten1 WHERE vidquoten1.VidQuoteID = OLD.VidQuoteID;\n        SELECT CoeficienteAC INTO @CoeficienteAC from acomerciales WHERE acomerciales.Abreviatura = @AComercial;\n        SELECT CoeficienteAC,ListaPrecio INTO @CoeficienteCL,@Lista from clientes WHERE clientes.ClienteID = @Cliente;\n        CASE\n        WHEN NEW.VidQuoteProdID <> OLD.VidQuoteProdID THEN\n            -- --------------------------------------------------------\n            -- Changes on ProdID, change previous other attributes\n            -- --------------------------------------------------------\n            DELETE\n                FROM vidquoten3\n                WHERE\n                    vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                    vidquoten3.VidQuoteItem = OLD.VidQuoteItem;\n            CALL AltaItemPresupuesto(\n                OLD.VidQuoteID,\n                @Lista,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdID,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @CoeficienteCL*@CoeficienteAC);\n        WHEN NEW.VidQuoteProdCantidad <> OLD.VidQuoteProdCantidad OR\n             NEW.VidQuoteAncho <> OLD.VidQuoteAncho OR\n             NEW.VidQuoteAlto <> OLD.VidQuoteAlto THEN\n            -- --------------------------------------------------------\n            -- Suppose Changes other attributes\n            -- --------------------------------------------------------\n            CALL ActualizaItemPresupuesto(\n                OLD.VidQuoteID,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @Lista,\n                @CoeficienteCL*@CoeficienteAC);\n        ELSE\n                SET @fly = NULL;\n        END CASE;\n        SET NEW.VidQuotePrecio = \n            (SELECT SUM(VidQuotePrecioP) AS VidQuotePrecioP\n            FROM\n                vidquoten3\n            WHERE\n                vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                vidquoten3.VidQuoteItem = OLD.VidQuoteItem\n            GROUP BY\n                VidQuoteID,VidQuoteItem);\n    END IF;\nEND\n$$\n</pre>\n== Triggers ==\n*Delete:[[TRIG:vidquoten2.]]\n</pre>\n\n== Bitácora ==\n== Uso ==\n[[FORM:Presupuesto]]\n== URL ==','utf-8'),(1072,'[[Category:TABLAS]]\n== Descripción ==\nContainer del Detalle de Productos de Presupuestos. Se relaciona al resto de las tablas de registraciones de Presupuestos de la siguiente manera:\n[[File:Esquema.Tablas.Presupuesto.jpg|200px]]\n\nsiendo los atributos de relación con el nivel superior con VidQuoteID, mientras que hacia el nivel inferior con VidQuoteID+VidQuoteItem+VidQuoteProdID\n\n== Composición ==\n[[#Triggers]]\n\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `vidquoten2` (\n  `VidQuoteID` int(11) NOT NULL,\n  `VidQuoteLPre` int(1) DEFAULT NULL,\n  `VidQuoteItem` int(11) NOT NULL AUTO_INCREMENT,\n  `VidQuotePredID` char(8) DEFAULT NULL,\n  `VidQuoteProdID` char(8) DEFAULT NULL,\n  `VidQuoteProdCantidad` int(5) DEFAULT NULL,\n  `VidQuoteAncho` int(5) DEFAULT NULL,\n  `VidQuoteAlto` int(5) DEFAULT NULL,\n  `VidQuotePrecio` decimal(10,2) DEFAULT NULL,\n  `VidQuoteDetalle` varchar(100) DEFAULT NULL,\n  PRIMARY KEY (`VidQuoteID`,`VidQuoteItem`)\n) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Actualiza_Item_Presupuesto`\nBEFORE UPDATE ON `fzggestion`.`vidquoten2`\nFOR EACH ROW\nBEGIN\n    -- --------------------------------------------------------\n    -- Changes on Price, change previous other attributes\n    -- --------------------------------------------------------\n    IF OLD.VidQuotePrecio = NEW.VidQuotePrecio THEN\n        SELECT VidQuoteCliente,VidQuoteACom INTO @Cliente,@AComercial FROM vidquoten1 WHERE vidquoten1.VidQuoteID = OLD.VidQuoteID;\n        SELECT CoeficienteAC INTO @CoeficienteAC from acomerciales WHERE acomerciales.Abreviatura = @AComercial;\n        SELECT CoeficienteAC,ListaPrecio INTO @CoeficienteCL,@Lista from clientes WHERE clientes.ClienteID = @Cliente;\n        CASE\n        WHEN NEW.VidQuoteProdID <> OLD.VidQuoteProdID THEN\n            -- --------------------------------------------------------\n            -- Changes on ProdID, change previous other attributes\n            -- --------------------------------------------------------\n            DELETE\n                FROM vidquoten3\n                WHERE\n                    vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                    vidquoten3.VidQuoteItem = OLD.VidQuoteItem;\n            CALL AltaItemPresupuesto(\n                OLD.VidQuoteID,\n                @Lista,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdID,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @CoeficienteCL*@CoeficienteAC);\n        WHEN NEW.VidQuoteProdCantidad <> OLD.VidQuoteProdCantidad OR\n             NEW.VidQuoteAncho <> OLD.VidQuoteAncho OR\n             NEW.VidQuoteAlto <> OLD.VidQuoteAlto THEN\n            -- --------------------------------------------------------\n            -- Suppose Changes other attributes\n            -- --------------------------------------------------------\n            CALL ActualizaItemPresupuesto(\n                OLD.VidQuoteID,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @Lista,\n                @CoeficienteCL*@CoeficienteAC);\n        ELSE\n                SET @fly = NULL;\n        END CASE;\n        SET NEW.VidQuotePrecio = \n            (SELECT SUM(VidQuotePrecioP) AS VidQuotePrecioP\n            FROM\n                vidquoten3\n            WHERE\n                vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                vidquoten3.VidQuoteItem = OLD.VidQuoteItem\n            GROUP BY\n                VidQuoteID,VidQuoteItem);\n    END IF;\nEND\n$$\n</pre>\n== Triggers ==\n*Delete:[[TRIG:vidquoten2.Baja_Item_Presupuesto]]\n</pre>\n\n== Bitácora ==\n== Uso ==\n[[FORM:Presupuesto]]\n== URL ==','utf-8'),(1073,'[[Category:TRIG]]\n== Lanzador ==\nDelete\n== Composición ==\n[[TABLA:vidquoten2]]\n[[TABLA:vidquoten3]]\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Item_Presupuesto`\nAFTER DELETE ON `fzggestion`.`vidquoten2`\nFOR EACH ROW\nBEGIN\n    DELETE FROM vidquoten3\n    WHERE vidquoten3.VidQuoteID=OLD.VidQuoteID AND\n	  vidquoten3.VidQuoteItem=OLD.VidQuoteItem;\n  END\n$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1074,'[[Category:TRIG]]\n== Lanzador ==\nDelete\n== Composición ==\n*[[TABLA:vidquoten2]]\n*[[TABLA:vidquoten3]]\n\n== SQL ==\n<pre>\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Item_Presupuesto`\nAFTER DELETE ON `fzggestion`.`vidquoten2`\nFOR EACH ROW\nBEGIN\n    DELETE FROM vidquoten3\n    WHERE vidquoten3.VidQuoteID=OLD.VidQuoteID AND\n	  vidquoten3.VidQuoteItem=OLD.VidQuoteItem;\n  END\n$$\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1075,'[[Category:TABLAS]]\n== Descripción ==\nContainer del Detalle de Productos de Presupuestos. Se relaciona al resto de las tablas de registraciones de Presupuestos de la siguiente manera:\n[[File:Esquema.Tablas.Presupuesto.jpg|200px]]\n\nsiendo los atributos de relación con el nivel superior con VidQuoteID, mientras que hacia el nivel inferior con VidQuoteID+VidQuoteItem+VidQuoteProdID\n\n== Composición ==\n[[#Triggers]]\n\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `vidquoten2` (\n  `VidQuoteID` int(11) NOT NULL,\n  `VidQuoteLPre` int(1) DEFAULT NULL,\n  `VidQuoteItem` int(11) NOT NULL AUTO_INCREMENT,\n  `VidQuotePredID` char(8) DEFAULT NULL,\n  `VidQuoteProdID` char(8) DEFAULT NULL,\n  `VidQuoteProdCantidad` int(5) DEFAULT NULL,\n  `VidQuoteAncho` int(5) DEFAULT NULL,\n  `VidQuoteAlto` int(5) DEFAULT NULL,\n  `VidQuotePrecio` decimal(10,2) DEFAULT NULL,\n  `VidQuoteDetalle` varchar(100) DEFAULT NULL,\n  PRIMARY KEY (`VidQuoteID`,`VidQuoteItem`)\n) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Actualiza_Item_Presupuesto`\nBEFORE UPDATE ON `fzggestion`.`vidquoten2`\nFOR EACH ROW\nBEGIN\n    -- --------------------------------------------------------\n    -- Changes on Price, change previous other attributes\n    -- --------------------------------------------------------\n    IF OLD.VidQuotePrecio = NEW.VidQuotePrecio THEN\n        SELECT VidQuoteCliente,VidQuoteACom INTO @Cliente,@AComercial FROM vidquoten1 WHERE vidquoten1.VidQuoteID = OLD.VidQuoteID;\n        SELECT CoeficienteAC INTO @CoeficienteAC from acomerciales WHERE acomerciales.Abreviatura = @AComercial;\n        SELECT CoeficienteAC,ListaPrecio INTO @CoeficienteCL,@Lista from clientes WHERE clientes.ClienteID = @Cliente;\n        CASE\n        WHEN NEW.VidQuoteProdID <> OLD.VidQuoteProdID THEN\n            -- --------------------------------------------------------\n            -- Changes on ProdID, change previous other attributes\n            -- --------------------------------------------------------\n            DELETE\n                FROM vidquoten3\n                WHERE\n                    vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                    vidquoten3.VidQuoteItem = OLD.VidQuoteItem;\n            CALL AltaItemPresupuesto(\n                OLD.VidQuoteID,\n                @Lista,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdID,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @CoeficienteCL*@CoeficienteAC);\n        WHEN NEW.VidQuoteProdCantidad <> OLD.VidQuoteProdCantidad OR\n             NEW.VidQuoteAncho <> OLD.VidQuoteAncho OR\n             NEW.VidQuoteAlto <> OLD.VidQuoteAlto THEN\n            -- --------------------------------------------------------\n            -- Suppose Changes other attributes\n            -- --------------------------------------------------------\n            CALL ActualizaItemPresupuesto(\n                OLD.VidQuoteID,\n                OLD.VidQuoteItem,\n                NEW.VidQuoteProdCantidad,\n                NEW.VidQuoteAncho,\n                NEW.VidQuoteAlto,\n                @Lista,\n                @CoeficienteCL*@CoeficienteAC);\n        ELSE\n                SET @fly = NULL;\n        END CASE;\n        SET NEW.VidQuotePrecio = \n            (SELECT SUM(VidQuotePrecioP) AS VidQuotePrecioP\n            FROM\n                vidquoten3\n            WHERE\n                vidquoten3.VidQuoteID = OLD.VidQuoteID AND\n                vidquoten3.VidQuoteItem = OLD.VidQuoteItem\n            GROUP BY\n                VidQuoteID,VidQuoteItem);\n    END IF;\nEND\n$$\n</pre>\n== Triggers ==\n*Delete:[[TRIG:vidquoten2.Baja_Item_Presupuesto]]\n\n== Bitácora ==\n== Uso ==\n[[FORM:Presupuesto]]\n== URL ==','utf-8'),(1076,'== Developing ==\n*[[Developing]]\n*[[Pendientes|Requirements]]\n*[[SpanexDraw|Spanex:Draw]]\n*[[Spanex:Estructuras]]\n\n== Gestión Retail Aberturas (Spanex) ==\n*[[GRA: Relaciones]]\n*[[GRA: Releases]]\n*[[GRA: PreciosABT]]\n\n=== Gestión de Magnitudes ===\n\n==== Definiciones ====\n*Coeficiente: Por defecto, el valor es 1. Si necesita sumar al valor original, el coeficiente tiene que tener la parte entera al menos en 1. En el caso de magnitudes no estándar, los valores del precio del producto puede estar incluido en el mismo, por lo que hay que verificar en este caso los valores que se ingresen en la [[TABLA:precios]]\n*Offset: Por defecto, el valor es 0\n\n==== Atributos de Productos/Elementos ====\n* M2 = Metro Cuadrado\nPrecio Unitario = Precio determinado por tipo de cliente * (((((Ancho + OffsetAncho)*Coeficiente Ancho) * ((Alto + OffsetAlto)*Coeficiente Alto))/100000) * Coeficiente Elemento)\n\n* ML = Metro Lineal\n<Del>Precio Unitario = Precio determinado por tipo de cliente * (((((Ancho + OffsetAncho) * 2 * Coeficiente Ancho) + ((Alto + OffsetAlto) * 2 * Coeficiente Alto)) / 1000) * Coeficiente Elemento).</Del>\n\n* MG = Magnitud Galarza\nPrecio Unitario = Precio determinado por tipo de cliente * ((((Alto + OffsetAlto) * CoeficienteAlto) + (Ancho + OffsetAncho) * CoeficienteAncho)) / 1000) * Coeficiente Elemento)\n\n* UN = Unidad\nPrecio Unitario = Precio determinado por tipo de cliente * Coeficiente Elemento\n\n=== Reportes ===\n<small>\n</small>\n\n=== Procedimientos ===\n<small>\n</small>\n\n=== Instalacion .odb ===\n*Copiar el documento .odb\n*Cambiar el usuario de la base de datos\n*Cambiar la constante [[oCheckEstadoLicencia]] a True\n*Grabar documento .odb\n*Cambiar a nivel de Sistema Operativo a ReadOnly\n\n=== Documentación de Usuario ===\n[[WikiUserSpanex]]\n=== Soporte-Bitacora ===\n*[[:Category:TKT|SpanexSupport -> Pendientes]]\n*[[:Category:TKTOut|SpanexSupport -> Finalizados]]','utf-8'),(1077,'Gestión Retail Industria\n\n== Spalnex Gestion ==\nSpanex es una aplicación orientada a satisfacer la demanda de soporte a la gestión de productos y servicios de terminación del mercado de la construcción civil. Esta gestión toma forma de una serie de módulos que articulan los diferentes procesos de gestión administrativa y los concernientes a los propios de producción.\n\nBasado y diseñado en herramientas de código abierto, la aplicación desde su concepción, tiene el claro objetivo que la misma un engranaje eficiente en la cadena de maximización del retorno de la inversión.\n\nConsta de módulos que permiten desde la definición de componentes de productos y servicios hasta el control de la producción de los mismos.\nExisten 2 entidades principales con las que se trabaja dentro de la aplicación, a saber:\n\n* Productos\n* Contactos\n\nDentro del concepto de \'\'\'Productos\'\'\' quedan incluidos todos aquellos elementos que puede conformar un producto terminado, un modelo o un conjunto de elementos a comercializar como así también, aquellos que puedan ser comercializados por si solos.\nDentro del concepto de \'\'\'Contactos\'\'\' quedan incluidos todas aquellas personas físicas o jurídicas que sean objeto de alguna operación dentro de la aplicación.\n\nLa versión actual no incluye la gestión gráfica del armado de los elementos, sin que esto sea un impedimento para poder generar productos comercializables.\n\nPara profundizar en los conceptos, se detallan a continuación algunos subesquemas que son de importancia dentro de la aplicación.\n\n=== Gestión de Productos ===\nEn la gestión de productos se engloban una serie de procesos necesarios para mantener la integridad y el normal desenvolvimiento de los módulos de la aplicación. Aquí se han definido en forma individual (obviamente interrelacionadas entre si) varias entidades a saber:\n\nNota: a lo largo de esta ayuda, se podrán observar algunos gráficos conceptuales que tienen como algunas figuras que significan\n\n[[Archivo:FZG.DOCS.Procesos.Ayuda.jpg|center|Vista Conceptual del Proceso]]\n\nDenominamos productos a todos los Productos Terminados y/o Materias Primas que lo componen. Dentro de esta estructura de información incluye la información referida a las magnitudes de control del producto y los coeficientes de precios a aplicar sobre precios de costo del producto para la venta y la imagen del producto, en el caso que exista\n\n[[Archivo:FZG.DOCS.Procesos.Productos.jpg|center|Vista Conceptual del Proceso]]\n\nSe observará más adelante que el concepto de producto es amplio y que incluye subproductos, parámetros de subproductos, precios, composiciones diferenciadas y otros elementos que permiten tener un mantener un portfolio de productos muy variada. Para esto se subdivide los productos en:\n\n*Productos PPD: (Propiamente Dicho. A partir de aquí, \"Productos\"\n*Precios: Precios de los productos\n*Composiciones: Conformación de conjuntos de productos o elementos para conformar otros productos comercializables. Se incluyen aquellos aspectos de control de forma, y categoría de producto. Es necesario aclarar que dada la versatilidad de la aplicación, puede incluirse dentro de un producto compuesto, otros subproductos o elementos tales como Mano de Obra, Colocación, Transporte, etc.\n\n==== Productos ====\nAl tiempo del ingreso de la información de producto, y a efectos de mantener la integridad de las estructuras de información, una vez finalizado el ingreso de la información de ese producto, al almacenarse, también genera en forma automática registraciones dentro de las estructuras de precios y de composición, con los valores de precios en 0 y un registro de composición con los valores de coeficientes asociados en 0\n\nEs importante diferenciar los coeficientes indicados dentro de la estructura de producto y los indicados dentro de la estructura de composición. Dada la facilidad de integración de \"productos\" o \"kits\" con diferentes \"componentes\" o \"elementos\", un elemento dentro de un producto puede tener valores diferentes a el mismo elemento aplicado para otro producto. En el caso de productos como las aberturas, probablemente las dimensiones reales de los interiores de una ventana sean diferentes a las de otro modelo de ventana aunque estas ventanas en si tengan la misma dimensión. En el caso que se desee precisión de costos, estos coeficientes y valores serán de suma importancia.\n==== Conceptos Asociados ====\n[[CONCEPTO:Magnitud|Magnitudes]]\n\n==== Precios ====\nSe refiere a la lista de precios. \nDebe existir una registración de precios por cada producto activo. Si el ingreso del producto se realiza dentro de los procesos normales, esta registración debiera existir.\nPor cada registración existen, a la fecha, 4 tipos de precios diferentes. Normalmente, El precio \"0\" está indicado como Precio de Costo\". El resto (3 definidos en el release 20120328) puede ser aplicado a discreción del usuario. Nuestra sugerencia es dividir la política comercial en 3 tipos de clientes. La asignación del tipo de cliente se realiza dentro del Mantenimiento de Contactos.\n\n[[Archivo:FZG.DOCS.Procesos.Precios.jpg|center|Vista Conceptual del Proceso]]\n\nLos valores de cada uno de los precios por Tipo de Cliente pueden automatizarse a través de los coeficientes de Precios establecidos dentro del esquema de datos de Producto.\n\nExisten a la fecha 5 procesos que afectan directamente este concepto:\n\n*Cambio Masivo: Aplica un coeficiente de actualización a todos los tipos de precios de acuerdo a un filtro de producto dado.\n*Masivo Coeficientes Actualización: Permite modificar los coeficientes de actualización de acuerdo al \"Precio 0\" en forma masiva de acuerdo a un filtro de producto dado.\n*Precios General: Permite modificar los valores de precios (no coeficientes) por producto individual.\n*Precios Tabular Normal: Permite modificar los valores de precios por producto en un formato tabular.\n*Precios Tabular por Proceso: Permite modificar los valores de precios por conjunto de productos, aplicando en forma selectiva el coeficiente a utilizar.\n\n==== Composición ====\nEsta estructura de información alberga una matriz de Producto-Elemento/Componente de Producto. Esta esquema permite definir los elementos componentes de un producto sean estos básicos (necesarios) o optativos.\n\n[[Archivo:FZG.DOCS.Procesos.Composicion.jpg|center|Vista Conceptual del Proceso]]\n\nUn simple ejemplo de esta definición es el siguiente:\n\n<small>\n{| class=\"wikitable\"\n|+\n!Producto\n!Componentes\n!Necesario\n|-\n|Ventana Corrediza \"XXXXX\"\n|Marco Línea \"XXXXX\"<br/>Vidrio Incoloro 4mm<br/>Vidrio Templado Opaco<br/>Accesorios Línea \"XXXXX\"<br/>Instalación Ventana Corrediza \"XXXXXX\"\n|align=\"center\" |Si<br/>No<br/>No<br/>Si<br/>Si\n|-\n|}\n</small>\n\nEn el ejemplo precedente, observamos una abertura con sus componentes y con la posibilidad de definir entre 2 opciones con que tipo de interior se podrá presupuestar.\n\nEste esquema permite mantener variable la definición de productos de acuerdo a los precios individuales de cada elemento.\n\nDebido a que de este esquema partirá el cálculo de los precios, por defecto, al ingresar un nuevo producto, en forma automática se agregará un registro de componente (mínimo) con los datos del Elemento igual al Producto. Esto no debe modificarse a menos que quiera establecer un producto compuesto, en cuyo caso, solo será necesario contar con un producto básico.\n\n==== Proveedores ====\nSe refiere a los códigos de proveedores. Inicialmente se utiliza para diferencias los productos de acuerdo a su procedencia y para facilitar el proceso de cambio de precios, siendo estos códigos los atributos de diferenciación entre materias primas similares.\n\n=== Presupuestos ===\n----\nEste módulo permite gestionar presupuestaciones para clientes de forma amena y precisa, dependiendo su amplia flexibilidad de cuales hayan sido los datos ingresados en la conformación de los productos.\n\nEs posible \n\n\n==== Presupuestos ====\n\nEste proceso permite la gestión de propuestas de venta para todo tipo de clientes. Cuenta con un diseño que permite una visualización integral de los productos y procesos que intervienen en la conformación de esta propuesta de venta. Las acciones posibles dentro de este proceso son:\n\n*Propuestas\n**Alta\n***Propuestas de Ventas\n***Rápida de Clientes\n**Modificación\n***Productos\n***Cantidades\n***Dimensiones\n***Inclusiones\n***Actualización de Precios\n**Consulta\n***Consulta Registro secuencial\n***Consulta por Filtros\n**Activación\n**Impresión\n**Envío por circuito de correo electrónico\n**Copia de Presupuestos\n\n===== Características =====\n====== Diseño ======\nLa pantalla de presentación de este proceso presenta las siguientes elementos:\n\n* \'\'\'Cabecera\'\'\': Son los datos principales del formulario.\n** \'\'\'Datos de Cliente\'\'\': Es la información del contacto \"Cliente\" seleccionado que impacta en forma directa sobre la cotización de los productos dentro de la propuesta\n* \'\'\'Productos\'\'\': Se detallan todos los productos que formarán parte del presupuesto\n* \'\'\'Composición\'\'\': Se detalla todos los elementos que conforma un producto y sus adicionales.\n** \'\'\'Detalle Composición\'\'\': Es la información de los elementos componentes de cada producto presupuestado que impactan en forma directa sobre la cotización de ese elemento dentro del producto seleccionado dentro de la propuesta.\n\n[[Archivo:FZG.DOCS.Procesos.Presupuesto.jpg|center|Vista Conceptual del Proceso]]\n\n\'\'\'Cabecera\'\'\': Se destaca la inclusión de los datos del cliente y la asignación de un agente de venta del presupuesto. Es importante la definición de los datos del cliente ingresado dado que dependiendo de la tipificación del mismo varariá en forma directa los precios a aplicar en los presupuestos. Últimamente, se a agregado la información de Agente Comercial que corresponde a quién es responsable del presupuesto y gestor del cumplimiento del ingreso de toda la información necesaria tanto para el cálculo presupuestario sino también para su posterior fabricación en caso de ser aprobado.\n\n[[Archivo:FZG.DOCS.Pantalla.Presupuesto.jpg|center|Vista Conceptual del Proceso]]\n\n\'\'\'Detalle Presupuesto\'\'\': Se detallan los datos mínimos de Productos necesarios para la confección del presupuesto. Estos datos son: Cantidad, Producto (Código y/o Descripción), Ancho/Largo y finalmente Alto. Para los casos de productos definidos con Magnitud igual a Unidad (UN), solo tomará la información indicada en el campo de Cantidad.\n\nAl tiempo del ingreso de la información de Productos, en forma automática se completará la sección de \'\'\'Detalle Producto\'\'\'. Esta sección es la que permitirá agregar los adicionales definidos en su oportunidad para completar el producto mencionado. Cabe aclarar, que solo se podrán agregar o eliminar lo elementos del Detalle de Producto que no formen parte del [[Esquema Básico de un Producto]]. A su vez, si los Elementos de los Productos ingresados tuviesen Parámetros adicionales a especificar, se agregarán en forma automática dentro de la 4º sección del formulario.\n\nDentro del detalle del producto se observan los siguientes datos:\n* Elemento: Código del elemento que forma parte del Producto\n* Descripción Elemento: Descripción del elemento que forma parte del Producto\n* Precio Unitario: Precio por Unidad de Magnitud del Producto de acuerdo a las condiciones del presupuesto (Tipo de Cliente, magnitud especificada, etc.)\n* Precio: Precio del Elemento de acuerdo a las condiciones del presupuesto y las cantidades especificadas.\n* Detalle: Indicador para incluir la Descripción del Elemento dentro de la Descripción impresa del Presupuesto al Cliente.\n\nEsta sección del formulario presenta las siguientes características:\n* Es indistinto el ingreso por Código de Elemento o por la Descripción del mismo.\n* Los campos de Código de Elemento y Descripción del Elemento poseen un botón de ayuda contextual. Solo se desplegarán los valores tanto de Código de Elemento como de Descripción de Elemento indicados dentro de la Composición de Producto.\n\nAdemás, como se mencionó anteriormente, existe una 4º Sección de \'\'\'Parámetros Adicionales\'\'\' que pueden afectar a un Presupuesto. En este caso, se detallan los valores distintos a las medidas generales que afectan al presupuesto y su posterior diseño o colocación.\nEn esta sección pueden incluirse cualquier valor y depende de lo ingresado dentro de la tabla de [[Valores Adicionales de Productos]] (Ver [[Mantenimiento de Datos Auxiliares]])\n\nLas características definidas de este formulario son las siguientes:\n* El esquema de información posee 4 grupos de datos ya comentados.\n* Los grupos de datos son independientes excepto al tiempo de ejecución de este mismo formulario y en las acciones de ingreso de información de cada grupo.\n** El alta de un Producto en el Detalle Presupuesto presupone el ingreso en forma automática de al menos una registración en el Detalle Producto.\n** El alta de un Producto se referencia a el Producto en si y su composición si la misma tiene más de un Elemento asociado.\n\n==== Presupuesto: Aprobación ====\nA los efectos futuros de gestión de fábrica y de cobranzas, cada elemento aprobado no podrá ser modificado.\n\n==== Presupuesto: Aprobados ====\nConsulta de Presupuestos Aprobados a la fecha.\n\n=== Gestión de Valores ===\n----\nUna de las características de la aplicación es que puede hacer un seguimiento de los valores afectados dentro del proceso de gestion de comercialización, sin que esto reemplaze las formas y comprobantes fiscales, siendo de exclusivo uso interno de la empresa.\n\nEsta gestión se divide en\n\n*Cheques\n*Pagos\n*Cobranzas\n\nTodos estos procesos sirven como \'\'hoja de trabajo\'\' para las registraciones legales y/o fiscales correspondientes y \'\'\'no es objetivo de la presente aplicación reemplazar las mismas\'\'\'.\n\n==== Cheques ====\nRepresenta la registración de cheques de terceros entregados en parte de pago. Los mismos son incorporados por medio del proceso de cobranza y pueden ser endosados en el proceso de Pagos.\n\nEste proceso solo es de consulta y sirve para tener control de los valores registrados y disponibles.\n\n==== Cobranzas ====\nRepresenta la registración de las cobranzas\n\n==== Pagos ====\nRepresenta la registración de las pagos de proveedores/gastos generales. Posee la característica de asociar formas de pago para un mejor control de los valores destinados a tal efecto.\nLos atributos definidos para esta registración son:\n*# de la Transaccion\n*Fecha de la Transaccion\n*Fecha Valor del Pago\n*Forma de Pago: En este caso, las formas habilitadas hasta el momento son las siguientes\n**CHT - Cheque de Terceros: Cheques de Terceros aptos para Endosar. \n**OPP - Orden de Pago Proveedores: Cheques propios o cualquier otro documento ejecutable a entregar\n**EFO - Efectivo Caja Chica\n*Proveedor / Razon Social\n*Tipo de Documento Origen: El documento que origina la obligación de pago\n**OC - Orden de Compra\n**FC - Factura\n*NºDocumento\n*Importe\n*Detalle: Permite el ingreso del detalle del pago o la factura para su clara identificación.\n*Imagen Documento Origen: Este proceso permite adosar la imagen del documento para su fácil visualización en caso de ser requerido\n\nEn la pantalla correspondiente, se despliegan 3 grandes bloques de información:\n*Filtro General: para la visualización de las registraciones de pago efectuadas\n*Pagos: para la visualiación en detalle de las registraciones de pago efectuadas\n*Documento Asociado: En esta ventana se desplegarán diferentes tipo de controles asociados a la forma de pago seleccionada o elegida para la registración de pago\nEn el caso de indicar como forma de pago el código \"CHT - Cheque de Terceros, a la derecha de la registración se desplegará la ventana de documentos asociado es en la que se emarcarán todos los cheques existentes disponibles para su endoso. Para seleccionar los mismos, pulse sobre la grilla de visualización de los documentos.\nEn el caso de indicar como forma de pago el código \"OPP - Orden de Pago Proveedores, a la derecha de la registración se desplegará la ventana con la posibilidad de inscribir el documento emitido.\nEn el caso de indicar como forma de pago el código \"EFO\" se no se habilitará la ventana de Documento asociado, solo quedando habilitados los atributos arriba indicados.\n\n== Generalidades ==\n\nEsta versión de la aplicación se encuentra desarrollada bajo un ambiente propicio para la gestión de tareas generales de oficina. Este esquema permite gestionar la información en forma clara y sencilla mientras se tenga conocimiento de la estructura de información de la aplicación.\n\nComo ya se encuentra indicado, la gestión de datos se encuentra basada en la definición de formularios que permiten en general el ingreso y mantenimiento de la información volcada dentro de la base de datos de la aplicación.\n\nMuchos de los formularios ya tienen incorporada dentro del mismo una facilidad de filtro simple, que atañe a los Productos, Categoría o Proveedor de los mismos, pero también es posible realizar búsquedas de mayor precisión con el entorno donde se ha desarrollado la aplicación\n\nEstos formularios, en su gran mayoría a menos que se especifique lo contrario, permiten gestionar el ingreso modificación y eliminación de documentos o registraciones ingresadas en la aplicación.\n\nEl otro elemento que es posible ejecutar dentro de los formularios es la de consulta y consulta parcial. Para esto último en necesario indicar cuales van a ser los atributos por los cuales esos datos van a estar desplegados. A nivel del usuario, la definición de la consulta parcial consiste en presentar el mismo formulario pero en blanco para poder indicar, campo por campo cuales van a ser los datos que servirá de atributo de selección de la visualización.\n\nPara el caso particular de los campos de texto que desconozcamos parte del criterio, el mismo puede ser reemplazado por la siguiente sintaxis:\n<small><pre>\nLIKE %<cadena de caracteres que respondan a la búsqueda>%\n</pre></small>\n\nComo se indica en el párrafo anterior, es imprescindible anteponer el prefijo \"LIKE\" antes a la cadena de caracteres. Se observa también que a ambos lados de la cadena de caracteres se sitúa el signo de porcentaje (%). Este signo tiene la función de comodín. Las siguientes cadenas sirven de ejemplo:\n<small><pre>\nLIKE Ventana%\n</pre></small>\nIndicará que ese criterio de búsqueda será para todos los elementos que comiencen con la palabra \"Ventana\".\n<small><pre>\nLIKE %Vidrio%\n</pre></small>\nIndicará que ese criterio de búsqueda será para todos los elementos que tengan en cualquier posición dentro del campo seleccionado la palabra \"Ventana\".\n\n== Referencia Rápida ==\n===Productos===\n====¿Que sucede cuando se ingresa un nuevo Producto?====\nEl ingreso de un nuevo Producto se utiliza cada vez que exista un producto o elemento componente de un producto para indicar los elementos mínimos de identificación de ese Producto o \"Materia Prima\" (denominado \"Elemento\"). Además, en forma automática se generan registraciones tanto en las tablas de Precios como en la de Composición, marcando en esta última el atributo de Elemento Primario para asociarlo en el caso que se coloque como elemento único dentro de una presupuestación.\n===Composicion===\n===Modulos===\n====¿Que es un Módulo?====\nEs un conjunto de productos o elementos que componen un módulo o modelo de producto. Generalmente se aplica para productos o partes de un proyecto de construcción.\n====¿Quién genera un nuevo módulo?====\nEl usuario con capacidades de diseño de productos.\n\n===Bocetos===\n====¿Que es un Boceto?====\nUn Boceto es un Módulo al que se le pueden aplicar modificaciones que respondan a un proyecto determinado. Estas modificaciones están restringidas de acuerdo a lo definido dentro del módulo.\n====¿Quién puede crear un boceto?====\nGeneralmente los bocetos se preparan a partir de nuevos proyectos definidos. Sería necesario el acceso a los procesos de Modulos para generarlo y luego si puede ser modificado de acuerdo a las restricciones definidas dentro de esos mismos procesos.\n====¿Que operaciones puedo hacer sobre un boceto?====\nExisten algunas restricciones a tener en cuenta cuando se confecciona un boceto:\n*Si bien un boceto puede generarse a partir de un módulo, una vez que a partir del boceto se genera un Producto, el boceto queda bloqueado (no puede modificarse ni eliminarse) y tiene una relación unívoca con el producto.\n*Mientras que el boceto no haya generado un producto nuevo, el mismo puede ser modificado.\n*El boceto puede copiarse en otro boceto\n*El boceto puede ser chequeado en su composición en relación a las dimensiones del vano a través de su definición dentro del módulo (correspondencia de subconjuntos de elementos.\n\n===Precios===\n===Contactos===\n====¿A que se refiere el Mantenimiento de Contactos?====\nLa aplicación define como Contacto a toda persona física o jurídica que tenga relevancia dentro del proceso. Esto significa que tanto los Clientes, Proveedores, Agentes Comerciales y otras personas, deben figurar dentro de esta Entidad. La diferenciación de cada uno de ellos se encuentra en la asignación las diferentes categorías desplegadas en el formulario correspondiente.\n\n===Presupuestos===\n====¿Que sucede cuando elimino un presupuesto?====\nSe eliminan todas las registraciones asociadas (productos y elementos asociados al producto.\n====¿Que sucede cuando elimino un producto de un presupuesto?====\nSe eliminan todas las registraciones asociadas (de elementos componentes de ese producto en ese presupuesto, que pueden variar en cada presupuesto).\n====¿Que sucede cuando modifico las dimensiones de un producto en un presupuesto?====\nSe actualizan los precios en ese presupuesto con la última lista de precios vigente de todos los elementos asociados a las magnitudes del producto modificado.\n====¿Que sucede cuando modifico las cantidades de un producto en un presupuesto?====\nDe la misma manera cuando se modifican las magnitudes, se actualizan los precios en ese presupuesto con la última lista de precios vigente de todos los elementos asociados a las magnitudes del producto modificado.\n====¿Que sucede cuando modifico un producto (Código de Producto o Descripción indistintamente)?====\nSe procede a eliminar las registraciones existentes del producto modificado y se agregan los elementos asociados a ese producto con el precio actualizado de acuerdo a la lista de precios vigente.\n====¿Se puede recuperar un presupuesto eliminado?====\nNo. En el caso que se haya pulsado por error la tecla de eliminación, existe una pregunta de seguridad antes de eliminar físicamente la registración del presupuesto.\n====¿Que sucede cuando ingreso un producto en un presupuesto?====\nLa aplicación automáticamente ingresa como elementos básicos aquellos que hayan sido señalados como básicos dentro del esquema de Composición de Producto. Si el Producto tiene otros elementos asociados pero no están definidos como básicos, es posible ingresarlos debajo de los básicos. En este caso en particular, solo estará permitido ingresar aquellos productos asociados en la composición previa y no otros Productos/Elementos.\n====¿Que significa Aprobar un Presupuesto?====\nEs el proceso que permite \"fijar\" un prespuesto y que no pueda ser modificado.\n====¿Porque no puedo enviar por correo electrónico un presupuesto?====\nProbablemente no esté incorporado el dato de Correo Electrónico Principal dentro de Contactos. Proceda a mantener actualizada la información de Contactos.\n\n===Valores===\n\n== Glosario ==\n{|\n! Concepto\n! Definición\n|-\n|\'\'Formularios\'\'\n|Los formularios ofrecen un método o rutina para el ingreso controlado de datos. En si, un formulario consiste en un conjunto de elementos o controles que mantiene un dato.\n|-\n| \'\'Base de Datos\'\'\n| Conjunto de componentes de información. Puede contener estructuras de datos como así también rutinas y funciones asociadas a las estructuras de datos\n|-\n| \'\'Tabla\'\'\n| Conjunto de datos referentes una entidad de información. Puede ser representada como una planilla de 2 dimensiones con registraciones y atributos comunes de esa entidad de información.\n|-\n| \'\'Entidad\'\'\n| Conjunto de datos referentes que conforman una unidad cuyos atributos la diferencian de otras unidades registrales. La conformación de una entidad se puede dar basada en solo una tabla o un conjunto de ellas.\n|-\n|}','utf-8'),(1078,'El concepto de Magnitud está relacionado con la forma de cálculo de un producto al tiempo de una cotización. Generalmente se encuentra asociado a otros atributos/conceptos en el momento del cálculo:\n*[[ATRIB:productos.OffSetAncho]]: Valor a adicionar a la dimensión dada por el Ancho\n*[[ATRIB:productos.OffSetAlto]]: Valor a adicionar a la dimensión dada por el Alto\n*[[ATRIB:productos.CoefAncho]]: Valor a multiplicar a la dimensión dada por el Ancho\n*[[ATRIB:productos.CoefAlto]]: Valor a multiplicar a la dimensión dada por el Alto\n*[[ATRIB:productos.ValorElemento]]: Valor a multiplicar al resultado de aplicar la magnitud y es diferente de 1 (uno) cuando se pretende duplicar o eliminar o \"atravesar\" el valor de un producto\n\nEste concepto, en resumen, indica cuales van a ser los parámetros a tener en cuenta y como va a ser la forma de calcular el precio del producto.\nLos valores posibles al momento son los siguientes (los elementos del algoritmo llevan el prefijo \'p\' de \"parámetro\"):\n\n\'\'\'M2:Metro Cuadrado\'\'\'\n\"Alto por Ancho\"\n((((pAlto+pOffsetVanoAlto) * pCoefVanoAlto) * ((pAncho+pOffsetVanoAncho) * pCoefVanoAncho))/1000000) *	pValorElemento * pPrecioProd;\n\'\'\'PR:Perímetro\'\'\'\n\"Suma de los lados\"\n((((pAlto+pOffsetVanoAlto) * 2 * pCoefVanoAlto) + ((pAncho+pOffsetVanoAncho) * 2 * pCoefVanoAncho)) / 1000 ) * pValorElemento * pPrecioProd;\n\'\'\'ML:Metro Lineal\'\'\'\n\"Largo del producto\"\n(((pAncho+pOffsetVanoAncho) * pCoefVanoAncho) / 1000 ) * pValorElemento * pPrecioProd;\n\'\'\'AN:Solo el Ancho indicado\'\'\'\n\"Ancho del Producto solo cuando tiene que propagarse en caso de composición\"\n(((pAncho+pOffsetVanoAncho) * pCoefVanoAncho) / 1000 ) * pValorElemento * pPrecioProd;\n\'\'\'AL:Solo el Alto indicado\'\'\'\n\"Ancho del Producto solo cuando tiene que propagarse en caso de composición\"\n(((pAlto+pOffsetVanoAlto) * pCoefVanoAlto) / 1000 ) * pValorElemento * pPrecioProd;\n\'\'\'MG:Magnitud Galarza\'\'\'\n\"Valor del algoritmo resultante de aplicar el valor del peso del producto, generalmente aluminio por la medida estándar 1000x1000\"\n((((pAlto+pOffsetVanoAlto)*pCoefVanoAlto) + ((pAncho+pOffsetVanoAncho)*pCoefVanoAncho))/1000) * pValorElemento * pPrecioProd;\n\'\'\'UN:Unidades\'\'\'\n\"Precio por cantidad\"\npValorElemento * pPrecioProd;','utf-8'),(1079,'El concepto de Magnitud está relacionado con la forma de cálculo de un producto al tiempo de una cotización. Generalmente se encuentra asociado a otros atributos/conceptos en el momento del cálculo:\n*[[ATRIB:productos.OffSetAncho]]: Valor a adicionar a la dimensión dada por el Ancho\n*[[ATRIB:productos.OffSetAlto]]: Valor a adicionar a la dimensión dada por el Alto\n*[[ATRIB:productos.CoefAncho]]: Valor a multiplicar a la dimensión dada por el Ancho\n*[[ATRIB:productos.CoefAlto]]: Valor a multiplicar a la dimensión dada por el Alto\n*[[ATRIB:productos.ValorElemento]]: Valor a multiplicar al resultado de aplicar la magnitud y es diferente de 1 (uno) cuando se pretende duplicar o eliminar o \"atravesar\" el valor de un producto\n\nEste concepto, en resumen, indica cuales van a ser los parámetros a tener en cuenta y como va a ser la forma de calcular el precio del producto.\nLos valores posibles al momento son los siguientes (los elementos del algoritmo llevan el prefijo \'p\' de \"parámetro\"):\n\n*\'\'\'M2:Metro Cuadrado\'\'\'\n\"Alto por Ancho\"\n((((pAlto+pOffsetVanoAlto) * pCoefVanoAlto) * ((pAncho+pOffsetVanoAncho) * pCoefVanoAncho))/1000000) *	pValorElemento * pPrecioProd;\n*\'\'\'PR:Perímetro\'\'\'\n\"Suma de los lados\"\n((((pAlto+pOffsetVanoAlto) * 2 * pCoefVanoAlto) + ((pAncho+pOffsetVanoAncho) * 2 * pCoefVanoAncho)) / 1000 ) * pValorElemento * pPrecioProd;\n*\'\'\'ML:Metro Lineal\'\'\'\n\"Largo del producto\"\n(((pAncho+pOffsetVanoAncho) * pCoefVanoAncho) / 1000 ) * pValorElemento * pPrecioProd;\n*\'\'\'AN:Solo el Ancho indicado\'\'\'\n\"Ancho del Producto solo cuando tiene que propagarse en caso de composición\"\n(((pAncho+pOffsetVanoAncho) * pCoefVanoAncho) / 1000 ) * pValorElemento * pPrecioProd;\n*\'\'\'AL:Solo el Alto indicado\'\'\'\n\"Ancho del Producto solo cuando tiene que propagarse en caso de composición\"\n(((pAlto+pOffsetVanoAlto) * pCoefVanoAlto) / 1000 ) * pValorElemento * pPrecioProd;\n*\'\'\'MG:Magnitud Galarza\'\'\'\n\"Valor del algoritmo resultante de aplicar el valor del peso del producto, generalmente aluminio por la medida estándar 1000x1000\"\n((((pAlto+pOffsetVanoAlto)*pCoefVanoAlto) + ((pAncho+pOffsetVanoAncho)*pCoefVanoAncho))/1000) * pValorElemento * pPrecioProd;\n*\'\'\'UN:Unidades\'\'\'\n\"Precio por cantidad\"\npValorElemento * pPrecioProd;','utf-8'),(1080,'== Developing ==\n*[[Developing]]\n*[[Pendientes|Requirements]]\n*[[SpanexDraw|Spanex:Draw]]\n*[[Spanex:Estructuras]]\n\n== Gestión Retail Aberturas (Spanex) ==\n*[[GRA: Relaciones]]\n*[[GRA: Releases]]\n*[[GRA: PreciosABT]]\n\n=== Reportes ===\n<small>\n</small>\n\n=== Procedimientos ===\n<small>\n</small>\n\n=== Instalacion .odb ===\n*Copiar el documento .odb\n*Cambiar el usuario de la base de datos\n*Cambiar la constante [[oCheckEstadoLicencia]] a True\n*Grabar documento .odb\n*Cambiar a nivel de Sistema Operativo a ReadOnly\n\n=== Documentación de Usuario ===\n[[WikiUserSpanex]]\n=== Soporte-Bitacora ===\n*[[:Category:TKT|SpanexSupport -> Pendientes]]\n*[[:Category:TKTOut|SpanexSupport -> Finalizados]]','utf-8'),(1081,'== Developing ==\n*[[Developing]]\n*[[Pendientes|Requirements]]\n*[[SpanexDraw|Spanex:Draw]]\n*[[Spanex:Estructuras]]\n\n== Gestión Retail Aberturas (Spanex) ==\n*[[GRA: Relaciones]]\n*[[GRA: Releases]]\n*[[GRA: PreciosABT]]\n\n=== Procedimientos ===\n<small>\n</small>\n\n=== Instalacion .odb ===\n*Copiar el documento .odb\n*Cambiar el usuario de la base de datos\n*Cambiar la constante [[oCheckEstadoLicencia]] a True\n*Grabar documento .odb\n*Cambiar a nivel de Sistema Operativo a ReadOnly\n\n=== Documentación de Usuario ===\n[[WikiUserSpanex]]\n=== Soporte-Bitacora ===\n*[[:Category:TKT|SpanexSupport -> Pendientes]]\n*[[:Category:TKTOut|SpanexSupport -> Finalizados]]','utf-8'),(1082,'== Developing ==\n*[[Developing]]\n*[[Pendientes|Requirements]]\n*[[SpanexDraw|Spanex:Draw]]\n*[[Spanex:Estructuras]]\n\n== Gestión Retail Aberturas (Spanex) ==\n*[[GRA: Relaciones]]\n*[[GRA: Releases]]\n*[[GRA: PreciosABT]]\n=== Instalacion .odb ===\n*Copiar el documento .odb\n*Cambiar el usuario de la base de datos\n*Cambiar la constante [[oCheckEstadoLicencia]] a True\n*Grabar documento .odb\n*Cambiar a nivel de Sistema Operativo a ReadOnly\n=== Documentación de Usuario ===\n[[WikiUserSpanex]]\n=== Soporte-Bitacora ===\n*[[:Category:TKT|SpanexSupport -> Pendientes]]\n*[[:Category:TKTOut|SpanexSupport -> Finalizados]]','utf-8'),(1083,'[[Category:VISTAS]]\n== Descripción ==\n\n<span style=\"background:#EE6622\"> \'\'\'En proceso de evaluación. Queda desafectada temporariamente de la base a efectos del procedimiento de Resguardo.\'\'\' </span>\n\nLista los valores calculados de los subconjuntos de dimensiones definidos dentro de un módulo para corroborar el correcto dimensionamiento de un módulo.\n\nToma las registraciones de la [[TABLA:modulosdet]] que tengan valores significativos dentro de los atributos SubSet\'\'xxxxx\'\' y los agrupa sumarizando los valores indicados dentro de \'\'xxxxx\'\'Predef, que representan los valores originales de dimensionamiento interno.\n\n== Composición ==\n*[[TABLA:modulosdet]]\n*[[TABLA:moduloscab]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE VIEW vischeckmod AS\nSELECT \n    `modulossbs`.`ModuloID`,\n    `modulossbs`.`ProductoID`,\n    `modulossbs`.`ComposicID`,\n    `modulossbs`.`SubSetTP`,\n    `modulossbs`.`SubSetNO`,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        SUM(`modulosdet`.`AnchoPredef`),\n        SUM(`modulosdet`.`AltoPredef`)) AS LineaDim,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        `moduloscab`.`ModuloVW`,\n        `moduloscab`.`ModuloVH`) AS ModuloDim\nFROM\n    `fzggestion`.`modulosdet` AS `modulosdet`,\n    `fzggestion`.`modulossbs` AS `modulossbs`,\n    `fzggestion`.`moduloscab` AS `moduloscab`\nWHERE\n    `modulosdet`.`ModuloID` = `modulossbs`.`ModuloID`\n        AND `modulosdet`.`ProductoID` = `modulossbs`.`ProductoID`\n        AND `modulosdet`.`ComposicID` = `modulossbs`.`ComposicID`\n        AND `moduloscab`.`ModuloID` = `modulosdet`.`ModuloID`\nGROUP BY `modulossbs`.`SubSetTP` , `modulossbs`.`SubSetNO`\n</pre>\n\n== Bitácora ==\n*20121127\n**Alta Vista.\n== Uso ==\n== URL ==','utf-8'),(1084,'[[Category:VISTAS]]\n== Descripción ==\nLista los valores calculados de los subconjuntos de dimensiones definidos dentro de un módulo para corroborar el correcto dimensionamiento de un módulo.\n\nToma las registraciones de la [[TABLA:modulosdet]] que tengan valores significativos dentro de los atributos SubSet\'\'xxxxx\'\' y los agrupa sumarizando los valores indicados dentro de \'\'xxxxx\'\'Predef, que representan los valores originales de dimensionamiento interno.\n\n== Composición ==\n*[[TABLA:modulosdet]]\n*[[TABLA:moduloscab]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE VIEW vischeckmod AS\nSELECT \n    `modulossbs`.`ModuloID`,\n    `modulossbs`.`ProductoID`,\n    `modulossbs`.`ComposicID`,\n    `modulossbs`.`SubSetTP`,\n    `modulossbs`.`SubSetNO`,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        SUM(`modulosdet`.`AnchoPredef`),\n        SUM(`modulosdet`.`AltoPredef`)) AS LineaDim,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        `moduloscab`.`ModuloVW`,\n        `moduloscab`.`ModuloVH`) AS ModuloDim\nFROM\n    `fzggestion`.`modulosdet` AS `modulosdet`,\n    `fzggestion`.`modulossbs` AS `modulossbs`,\n    `fzggestion`.`moduloscab` AS `moduloscab`\nWHERE\n    `modulosdet`.`ModuloID` = `modulossbs`.`ModuloID`\n        AND `modulosdet`.`ProductoID` = `modulossbs`.`ProductoID`\n        AND `modulosdet`.`ComposicID` = `modulossbs`.`ComposicID`\n        AND `moduloscab`.`ModuloID` = `modulosdet`.`ModuloID`\nGROUP BY `modulossbs`.`SubSetTP` , `modulossbs`.`SubSetNO`\n</pre>\n\n== Bitácora ==\n*20121127\n**Alta Vista.\n== Uso ==\n== URL ==','utf-8'),(1085,'[[Category:VISTAS]]\n== Descripción ==\nLista los valores calculados de los subconjuntos de dimensiones definidos dentro de un módulo para corroborar el correcto dimensionamiento de un módulo.\n\nToma las registraciones de la [[TABLA:modulosdet]] que tengan valores significativos dentro de los atributos SubSet\'\'xxxxx\'\' y los agrupa sumarizando los valores indicados dentro de \'\'xxxxx\'\'Predef, que representan los valores originales de dimensionamiento interno.\n\n== Composición ==\n*[[TABLA:modulosdet]]\n*[[TABLA:moduloscab]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE VIEW vischeckmod AS\nSELECT \n    `modulossbs`.`ModuloID`,\n    `modulossbs`.`ProductoID`,\n    `modulossbs`.`ComposicID`,\n    `modulossbs`.`SubSetTP`,\n    `modulossbs`.`SubSetNO`,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        SUM(`modulosdet`.`AnchoPredef`),\n        SUM(`modulosdet`.`AltoPredef`)) AS LineaDim,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        `moduloscab`.`ModuloVW`,\n        `moduloscab`.`ModuloVH`) AS ModuloDim\nFROM\n    `fzggestion`.`modulosdet` AS `modulosdet`,\n    `fzggestion`.`modulossbs` AS `modulossbs`,\n    `fzggestion`.`moduloscab` AS `moduloscab`\nWHERE\n    `modulosdet`.`ModuloID` = `modulossbs`.`ModuloID`\n        AND `modulosdet`.`ProductoID` = `modulossbs`.`ProductoID`\n        AND `modulosdet`.`ComposicID` = `modulossbs`.`ComposicID`\n        AND `moduloscab`.`ModuloID` = `modulosdet`.`ModuloID`\nGROUP BY `modulossbs`.`SubSetTP` , `modulossbs`.`SubSetNO`\n</pre>\n\n== Bitácora ==\n*20121127\n**Alta Vista\n*2012121\n**Debido al cambio de estructura de Módulos para poder albergar varias definiciones de lineas de control por producto, se cambia completamente el esquema\n\n== Uso ==\n== URL ==','utf-8'),(1086,'[[Category:VISTAS]]\n== Descripción ==\nLista los valores calculados de los subconjuntos de dimensiones definidos dentro de un módulo para corroborar el correcto dimensionamiento de un módulo.\n\nToma las registraciones de la [[TABLA:modulosdet]] que tengan valores significativos dentro de los atributos SubSet\'\'xxxxx\'\' y los agrupa sumarizando los valores indicados dentro de \'\'xxxxx\'\'Predef, que representan los valores originales de dimensionamiento interno.\n\n== Composición ==\n*[[TABLA:modulossbs]]\n*[[TABLA:modulosdet]]\n*[[TABLA:moduloscab]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE VIEW vischeckmod AS\nSELECT \n    `modulossbs`.`ModuloID`,\n    `modulossbs`.`ProductoID`,\n    `modulossbs`.`ComposicID`,\n    `modulossbs`.`SubSetTP`,\n    `modulossbs`.`SubSetNO`,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        SUM(`modulosdet`.`AnchoPredef`),\n        SUM(`modulosdet`.`AltoPredef`)) AS LineaDim,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        `moduloscab`.`ModuloVW`,\n        `moduloscab`.`ModuloVH`) AS ModuloDim\nFROM\n    `fzggestion`.`modulosdet` AS `modulosdet`,\n    `fzggestion`.`modulossbs` AS `modulossbs`,\n    `fzggestion`.`moduloscab` AS `moduloscab`\nWHERE\n    `modulosdet`.`ModuloID` = `modulossbs`.`ModuloID`\n        AND `modulosdet`.`ProductoID` = `modulossbs`.`ProductoID`\n        AND `modulosdet`.`ComposicID` = `modulossbs`.`ComposicID`\n        AND `moduloscab`.`ModuloID` = `modulosdet`.`ModuloID`\nGROUP BY `modulossbs`.`SubSetTP` , `modulossbs`.`SubSetNO`\n</pre>\n\n== Bitácora ==\n*20121127\n**Alta Vista\n*2012121\n**Debido al cambio de estructura de Módulos para poder albergar varias definiciones de lineas de control por producto, se cambia completamente el esquema\n\n== Uso ==\n== URL ==','utf-8'),(1087,'[[Category:VISTAS]]\n== Descripción ==\nLista los valores calculados de los subconjuntos de dimensiones definidos dentro de un módulo para corroborar el correcto dimensionamiento de un módulo.\n\nToma las registraciones de la [[TABLA:modulossbs]] y las agrupa sumarizando los valores indicados dentro de SubSetTP (Tipo) y SubSetNO (Número de línea) que representan los valores originales de dimensionamiento interno.\n\n== Composición ==\n*[[TABLA:modulossbs]]\n*[[TABLA:modulosdet]]\n*[[TABLA:moduloscab]]\n\n== Estructura ==\n<pre>\n</pre>\n== SQL ==\n<pre>\nCREATE VIEW vischeckmod AS\nSELECT \n    `modulossbs`.`ModuloID`,\n    `modulossbs`.`ProductoID`,\n    `modulossbs`.`ComposicID`,\n    `modulossbs`.`SubSetTP`,\n    `modulossbs`.`SubSetNO`,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        SUM(`modulosdet`.`AnchoPredef`),\n        SUM(`modulosdet`.`AltoPredef`)) AS LineaDim,\n    IF(`modulossbs`.`SubSetTP` = \'W\',\n        `moduloscab`.`ModuloVW`,\n        `moduloscab`.`ModuloVH`) AS ModuloDim\nFROM\n    `fzggestion`.`modulosdet` AS `modulosdet`,\n    `fzggestion`.`modulossbs` AS `modulossbs`,\n    `fzggestion`.`moduloscab` AS `moduloscab`\nWHERE\n    `modulosdet`.`ModuloID` = `modulossbs`.`ModuloID`\n        AND `modulosdet`.`ProductoID` = `modulossbs`.`ProductoID`\n        AND `modulosdet`.`ComposicID` = `modulossbs`.`ComposicID`\n        AND `moduloscab`.`ModuloID` = `modulosdet`.`ModuloID`\nGROUP BY `modulossbs`.`SubSetTP` , `modulossbs`.`SubSetNO`\n</pre>\n\n== Bitácora ==\n*20121127\n**Alta Vista\n*2012121\n**Debido al cambio de estructura de Módulos para poder albergar varias definiciones de lineas de control por producto, se cambia completamente el esquema\n\n== Uso ==\n== URL ==','utf-8'),(1088,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `ModuloID` char(8) NOT NULL,\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` varchar(45) DEFAULT NULL,\n  `BocetoVH` varchar(45) DEFAULT NULL,\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  `BocetoEstado` int(1) NOT NULL DEFAULT \'0\',\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1089,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `ModuloID` char(8) NOT NULL,\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` varchar(45) DEFAULT NULL,\n  `BocetoVH` varchar(45) DEFAULT NULL,\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  `BocetoEstado` int(1) NOT NULL DEFAULT \'0\',\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1090,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `ModuloID` char(8) NOT NULL,\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` varchar(45) DEFAULT NULL,\n  `BocetoVH` varchar(45) DEFAULT NULL,\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  `BocetoEstado` int(1) NOT NULL DEFAULT \'0\',\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n== Triggers ==\n*Alta\n**[[TRIG:bocetoscab.Baja_Boceto]]\n<pre>\ndelimiter $$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1091,'[[Category:TRIG]]\n== Lanzador ==\n*Alta\n== Composición ==\n*[[TABLA:bocetoscab]]\n*[[TABLA:bocetosdet]]\n*[[TABLA:bocetossbs]]\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\n    DELETE\n        FROM bocetossbs\n        WHERE bocetossbs.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n== Bitácora ==\n*20121218\n**Agregado de eliminación de registraciones en [[TABLA:bocetossbs]]\n== Uso ==','utf-8'),(1092,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `ModuloID` char(8) NOT NULL,\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` varchar(45) DEFAULT NULL,\n  `BocetoVH` varchar(45) DEFAULT NULL,\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  `BocetoEstado` int(1) NOT NULL DEFAULT \'0\',\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n== Triggers ==\n*Alta\n**[[TRIG:bocetoscab.Baja_Boceto]]\n\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1093,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `ModuloID` char(8) NOT NULL DEFAULT \'\',\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` int(5) DEFAULT \'0\',\n  `BocetoVH` int(5) DEFAULT \'0\',\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n</pre>\n\n== Triggers ==\n*Alta\n**[[TRIG:bocetoscab.Baja_Boceto]]\n\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1094,'[[Category:TABLAS]]\n== Descripción ==\nContainer de Detalle de Productos de un Boceto\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetosdet` (\n  `BocetoID` char(8) NOT NULL,\n  `ProductoID` char(8) NOT NULL,\n  `ComposicID` int(5) NOT NULL AUTO_INCREMENT,\n  `CantidadPR` int(5) DEFAULT NULL,\n  `AnchoPredef` int(5) DEFAULT NULL,\n  `AltoPredef` int(5) DEFAULT NULL,\n  `DimensionChg` int(5) DEFAULT \'1\',\n  `CantidadChg` int(5) DEFAULT \'1\',\n  `ProductoChg` int(5) DEFAULT \'1\',\n  `ProductoVsb` int(5) DEFAULT \'1\',\n  `PosX` int(5) DEFAULT \'0\',\n  `PosY` int(5) DEFAULT \'0\',\n  PRIMARY KEY (`BocetoID`,`ProductoID`,`ComposicID`)\n) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1$$\n</pre>\n== Triggers ==\n*Baja\n**[[TRIG:bocetosdet.Baja_BocetosDet]]\n\n== Bitácora ==\n== Uso ==\n*20121201\n**Alta\n== URL ==','utf-8'),(1095,'[[Category:TRIG]]\n== Lanzador ==\n*Alta\n== Composición ==\n*[[TABLA:bocetoscab]]\n*[[TABLA:bocetosdet]]\n*[[TABLA:bocetossbs]]\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_Boceto`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n\n== Bitácora ==\n*20121218\n**Agregado de eliminación de registraciones en [[TABLA:bocetossbs]]\n== Uso ==','utf-8'),(1096,'[[Category:TRIG]]\n== Lanzador ==\n*Alta\n== Composición ==\n*[[TABLA:bocetoscab]]\n*[[TABLA:bocetosdet]]\n*[[TABLA:bocetossbs]]\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_BocetosCab`\nAFTER DELETE ON `fzggestion`.`bocetoscab`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetosdet\n        WHERE bocetosdet.BocetoID=OLD.BocetoID;\nEND\n$$\n</pre>\n\n== Bitácora ==\n*20121218\n**Agregado de eliminación de registraciones en [[TABLA:bocetossbs]]\n== Uso ==','utf-8'),(1097,'#REDIRECCIÓN [[TRIG:bocetoscab.Baja BocetosCab]]','utf-8'),(1098,'[[Category:TABLAS]]\n== Descripción ==\nContainer de cabecera de bocetos. Es parte del conjunto de la estructura \'\'\'Bocetos\'\'\'\n\n*[[TABLA:bocetoscab]]\n**[[TABLA:bocetosdet]]\n***[[TABLA:bocetossbs]]\n\n== Composición ==\n== SQL ==\n<pre>\ndelimiter $$\n\nCREATE TABLE `bocetoscab` (\n  `ModuloID` char(8) NOT NULL DEFAULT \'\',\n  `BocetoID` char(8) NOT NULL DEFAULT \'\',\n  `BocetoDSC` varchar(80) NOT NULL,\n  `BocetoVW` int(5) DEFAULT \'0\',\n  `BocetoVH` int(5) DEFAULT \'0\',\n  `BocetoIMG` blob,\n  `BocetoATH` varchar(10) NOT NULL,\n  `BocetoFec` date NOT NULL,\n  PRIMARY KEY (`BocetoID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1$$\n</pre>\n\n== Triggers ==\n*Alta\n**[[TRIG:bocetoscab.Baja_BocetosCab]]\n\n== Bitácora ==\n*20121201\n**Alta\n== Uso ==\n== URL ==','utf-8'),(1099,'[[Category:TRIG]]\n== Lanzador ==\n== Composición ==\n== SQL ==\n<pre>\n</pre>\n== Bitácora ==\n== Uso ==','utf-8'),(1100,'[[Category:TRIG]]\n== Lanzador ==\n== Composición ==\n== SQL ==\n<pre>\nDELIMITER $$\n\nUSE `fzggestion`$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_BocetosDet`\nAFTER DELETE ON `fzggestion`.`bocetosdet`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetossbs\n        WHERE bocetossbs.BocetoID=OLD.BocetoID;\nEND$$\n</pre>\n\n== Bitácora ==\n== Uso ==','utf-8'),(1101,'[[Category:TRIG]]\n== Lanzador ==\n*Baja\n\n== Composición ==\n== SQL ==\n<pre>\nDELIMITER $$\n\nUSE `fzggestion`$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_BocetosDet`\nAFTER DELETE ON `fzggestion`.`bocetosdet`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetossbs\n        WHERE bocetossbs.BocetoID=OLD.BocetoID;\nEND$$\n</pre>\n\n== Bitácora ==\n== Uso ==','utf-8'),(1102,'[[Category:TRIG]]\n== Lanzador ==\n*Baja\n\n== Composición ==\n*[[TABLA:bocetosdet]]\n*[[TABLA:bocetossbs]]\n\n== SQL ==\n<pre>\nDELIMITER $$\n\nUSE `fzggestion`$$\n\nCREATE\nDEFINER=`sas_admin`@`%`\nTRIGGER `fzggestion`.`Baja_BocetosDet`\nAFTER DELETE ON `fzggestion`.`bocetosdet`\nFOR EACH ROW\nBEGIN\n    DELETE\n        FROM bocetossbs\n        WHERE bocetossbs.BocetoID=OLD.BocetoID;\nEND$$\n</pre>\n\n== Bitácora ==\n== Uso ==','utf-8'),(1103,'[[Category:TKT]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n=====Estado=====\nPendiente\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1104,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== Embed multiple components into a single Window ===\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n\n\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1105,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n\n\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1106,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1107,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre>\n===== Corrección del Thread =====\n<pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1108,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre>\n===== Corrección del Thread =====\n<pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1109,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre>\n===== Corrección del Thread =====\n<pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1110,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre>\n===== Corrección del Thread =====\n<pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1111,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n==== TopWindow having MenuBar ====\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre></small>\n===== Corrección del Thread =====\n<small><pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1112,'[[Category:TKT]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n=====Estado=====\nFinalizado\n\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1113,'[[Category:TKT]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n<small><pre>\nDROP TABLE `fzggestion`.`proddvh`;\n\nCREATE TABLE proddvh\nSELECT CONCAT(\'P\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n       `productos`.`CategoriaID`,\n       CONCAT(TRIM(`productos`.`Descripcion`),\" p/Paño Fijo\") AS Descripcion,\n       `productos`.`ProveedorID`,\n       `productos`.`Reposicion`,\n       `productos`.`Magnitud`,\n       `productos`.`MagnitudIN`,\n       `productos`.`CoefP00P01`,\n       `productos`.`CoefP00P02`,\n       `productos`.`CoefP00P03`,\n       `productos`.`ProductoPID`,\n       `productos`.`InsumoIMG`,\n       `productos`.`Presentacion`,\n       `productos`.`ProductoProy`\nFROM productos\nWHERE Descripcion LIKE \'DVH%\';\n\nDROP TABLE `fzggestion`.`compdvh`;\n\nCREATE TABLE compdvh\nSELECT CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)) AS ProductoID,\n       IF(`composicion`.`ProductoID`=`composicion`.`ElementoID`,\n			CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)),\n			`composicion`.`ElementoID`) AS ElementoID,\n       `composicion`.`ComposicID`,\n       `composicion`.`ValorElemento`,\n       `composicion`.`ElementoPM`,\n       `composicion`.`OffsetVanoAncho`,\n       `composicion`.`OffsetVanoAlto`,\n       `composicion`.`CoefVanoAncho`,\n       `composicion`.`CoefVanoAlto`\nFROM `fzggestion`.`productos` AS `productos`,\n     `fzggestion`.`composicion` AS `composicion`\nWHERE `productos`.`ProductoID` = `composicion`.`ProductoID`\n  AND `productos`.`Descripcion` LIKE \'DVH%\';\n\n-- INSERT de registros generados\n\nINSERT INTO `fzggestion`.`productos`\n(`ProductoGen`,\n`ProductoDflt`,\n`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`MagCmpX`,\n`MagCmpY`,\n`MagCmpZ`,\n`MagCmpW`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\n`proddvh`.`ProductoGen`,\n`proddvh`.`ProductoDflt`,\n`proddvh`.`ProductoID`,\n`proddvh`.`CategoriaID`,\n`proddvh`.`Descripcion`,\n`proddvh`.`ProveedorID`,\n`proddvh`.`Reposicion`,\n`proddvh`.`Magnitud`,\n`proddvh`.`MagnitudIN`,\n`proddvh`.`CoefP00P01`,\n`proddvh`.`CoefP00P02`,\n`proddvh`.`CoefP00P03`,\n`proddvh`.`ProductoPID`,\n`proddvh`.`InsumoIMG`,\n`proddvh`.`MagCmpX`,\n`proddvh`.`MagCmpY`,\n`proddvh`.`MagCmpZ`,\n`proddvh`.`MagCmpW`,\n`proddvh`.`Presentacion`,\n`proddvh`.`ProductoProy`\nFROM `fzggestion`.`proddvh`;\n\n-- DELETE de Registros Automáticos de Composicion\n\nDELETE\nFROM composicion\nWHERE ProductoID IN\n    (SELECT ProductoID\n     FROM proddvh);\n\n-- INSERT de Registros Automáticos de Composicion en base a los anteriores.\n\nINSERT INTO `fzggestion`.`composicion`\n(`ProductoID`,\n`ElementoID`,\n`ComposicID`,\n`ValorElemento`,\n`ElementoPM`,\n`OffsetVanoAncho`,\n`OffsetVanoAlto`,\n`CoefVanoAncho`,\n`CoefVanoAlto`)\nSELECT\n`compdvh`.`ProductoID`,\n`compdvh`.`ElementoID`,\n`compdvh`.`ComposicID`,\n`compdvh`.`ValorElemento`,\n`compdvh`.`ElementoPM`,\n`compdvh`.`OffsetVanoAncho`,\n`compdvh`.`OffsetVanoAlto`,\n`compdvh`.`CoefVanoAncho`,\n`compdvh`.`CoefVanoAlto`\nFROM `fzggestion`.`compdvh`;\n</pre></small>\n\n=====Estado=====\nFinalizado\n\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1114,'[[Category:TKTOut]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n<small><pre>\nDROP TABLE `fzggestion`.`proddvh`;\n\nCREATE TABLE proddvh\nSELECT CONCAT(\'P\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n       `productos`.`CategoriaID`,\n       CONCAT(TRIM(`productos`.`Descripcion`),\" p/Paño Fijo\") AS Descripcion,\n       `productos`.`ProveedorID`,\n       `productos`.`Reposicion`,\n       `productos`.`Magnitud`,\n       `productos`.`MagnitudIN`,\n       `productos`.`CoefP00P01`,\n       `productos`.`CoefP00P02`,\n       `productos`.`CoefP00P03`,\n       `productos`.`ProductoPID`,\n       `productos`.`InsumoIMG`,\n       `productos`.`Presentacion`,\n       `productos`.`ProductoProy`\nFROM productos\nWHERE Descripcion LIKE \'DVH%\';\n\nDROP TABLE `fzggestion`.`compdvh`;\n\nCREATE TABLE compdvh\nSELECT CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)) AS ProductoID,\n       IF(`composicion`.`ProductoID`=`composicion`.`ElementoID`,\n			CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)),\n			`composicion`.`ElementoID`) AS ElementoID,\n       `composicion`.`ComposicID`,\n       `composicion`.`ValorElemento`,\n       `composicion`.`ElementoPM`,\n       `composicion`.`OffsetVanoAncho`,\n       `composicion`.`OffsetVanoAlto`,\n       `composicion`.`CoefVanoAncho`,\n       `composicion`.`CoefVanoAlto`\nFROM `fzggestion`.`productos` AS `productos`,\n     `fzggestion`.`composicion` AS `composicion`\nWHERE `productos`.`ProductoID` = `composicion`.`ProductoID`\n  AND `productos`.`Descripcion` LIKE \'DVH%\';\n\n-- INSERT de registros generados\n\nINSERT INTO `fzggestion`.`productos`\n(`ProductoGen`,\n`ProductoDflt`,\n`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`MagCmpX`,\n`MagCmpY`,\n`MagCmpZ`,\n`MagCmpW`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\n`proddvh`.`ProductoGen`,\n`proddvh`.`ProductoDflt`,\n`proddvh`.`ProductoID`,\n`proddvh`.`CategoriaID`,\n`proddvh`.`Descripcion`,\n`proddvh`.`ProveedorID`,\n`proddvh`.`Reposicion`,\n`proddvh`.`Magnitud`,\n`proddvh`.`MagnitudIN`,\n`proddvh`.`CoefP00P01`,\n`proddvh`.`CoefP00P02`,\n`proddvh`.`CoefP00P03`,\n`proddvh`.`ProductoPID`,\n`proddvh`.`InsumoIMG`,\n`proddvh`.`MagCmpX`,\n`proddvh`.`MagCmpY`,\n`proddvh`.`MagCmpZ`,\n`proddvh`.`MagCmpW`,\n`proddvh`.`Presentacion`,\n`proddvh`.`ProductoProy`\nFROM `fzggestion`.`proddvh`;\n\n-- DELETE de Registros Automáticos de Composicion\n\nDELETE\nFROM composicion\nWHERE ProductoID IN\n    (SELECT ProductoID\n     FROM proddvh);\n\n-- INSERT de Registros Automáticos de Composicion en base a los anteriores.\n\nINSERT INTO `fzggestion`.`composicion`\n(`ProductoID`,\n`ElementoID`,\n`ComposicID`,\n`ValorElemento`,\n`ElementoPM`,\n`OffsetVanoAncho`,\n`OffsetVanoAlto`,\n`CoefVanoAncho`,\n`CoefVanoAlto`)\nSELECT\n`compdvh`.`ProductoID`,\n`compdvh`.`ElementoID`,\n`compdvh`.`ComposicID`,\n`compdvh`.`ValorElemento`,\n`compdvh`.`ElementoPM`,\n`compdvh`.`OffsetVanoAncho`,\n`compdvh`.`OffsetVanoAlto`,\n`compdvh`.`CoefVanoAncho`,\n`compdvh`.`CoefVanoAlto`\nFROM `fzggestion`.`compdvh`;\n</pre></small>\n\n=====Estado=====\nFinalizado\n\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1115,'[[Category:TKTOut]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n*20130102\n<small><pre>\nDROP TABLE `fzggestion`.`proddvh`;\n\nCREATE TABLE proddvh\nSELECT CONCAT(\'P\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n       `productos`.`CategoriaID`,\n       CONCAT(TRIM(`productos`.`Descripcion`),\" p/Paño Fijo\") AS Descripcion,\n       `productos`.`ProveedorID`,\n       `productos`.`Reposicion`,\n       `productos`.`Magnitud`,\n       `productos`.`MagnitudIN`,\n       `productos`.`CoefP00P01`,\n       `productos`.`CoefP00P02`,\n       `productos`.`CoefP00P03`,\n       `productos`.`ProductoPID`,\n       `productos`.`InsumoIMG`,\n       `productos`.`Presentacion`,\n       `productos`.`ProductoProy`\nFROM productos\nWHERE Descripcion LIKE \'DVH%\';\n\nDROP TABLE `fzggestion`.`compdvh`;\n\nCREATE TABLE compdvh\nSELECT CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)) AS ProductoID,\n       IF(`composicion`.`ProductoID`=`composicion`.`ElementoID`,\n			CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)),\n			`composicion`.`ElementoID`) AS ElementoID,\n       `composicion`.`ComposicID`,\n       `composicion`.`ValorElemento`,\n       `composicion`.`ElementoPM`,\n       `composicion`.`OffsetVanoAncho`,\n       `composicion`.`OffsetVanoAlto`,\n       `composicion`.`CoefVanoAncho`,\n       `composicion`.`CoefVanoAlto`\nFROM `fzggestion`.`productos` AS `productos`,\n     `fzggestion`.`composicion` AS `composicion`\nWHERE `productos`.`ProductoID` = `composicion`.`ProductoID`\n  AND `productos`.`Descripcion` LIKE \'DVH%\';\n\n-- INSERT de registros generados\n\nINSERT INTO `fzggestion`.`productos`\n(`ProductoGen`,\n`ProductoDflt`,\n`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`MagCmpX`,\n`MagCmpY`,\n`MagCmpZ`,\n`MagCmpW`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\n`proddvh`.`ProductoGen`,\n`proddvh`.`ProductoDflt`,\n`proddvh`.`ProductoID`,\n`proddvh`.`CategoriaID`,\n`proddvh`.`Descripcion`,\n`proddvh`.`ProveedorID`,\n`proddvh`.`Reposicion`,\n`proddvh`.`Magnitud`,\n`proddvh`.`MagnitudIN`,\n`proddvh`.`CoefP00P01`,\n`proddvh`.`CoefP00P02`,\n`proddvh`.`CoefP00P03`,\n`proddvh`.`ProductoPID`,\n`proddvh`.`InsumoIMG`,\n`proddvh`.`MagCmpX`,\n`proddvh`.`MagCmpY`,\n`proddvh`.`MagCmpZ`,\n`proddvh`.`MagCmpW`,\n`proddvh`.`Presentacion`,\n`proddvh`.`ProductoProy`\nFROM `fzggestion`.`proddvh`;\n\n-- DELETE de Registros Automáticos de Composicion\n\nDELETE\nFROM composicion\nWHERE ProductoID IN\n    (SELECT ProductoID\n     FROM proddvh);\n\n-- INSERT de Registros Automáticos de Composicion en base a los anteriores.\n\nINSERT INTO `fzggestion`.`composicion`\n(`ProductoID`,\n`ElementoID`,\n`ComposicID`,\n`ValorElemento`,\n`ElementoPM`,\n`OffsetVanoAncho`,\n`OffsetVanoAlto`,\n`CoefVanoAncho`,\n`CoefVanoAlto`)\nSELECT\n`compdvh`.`ProductoID`,\n`compdvh`.`ElementoID`,\n`compdvh`.`ComposicID`,\n`compdvh`.`ValorElemento`,\n`compdvh`.`ElementoPM`,\n`compdvh`.`OffsetVanoAncho`,\n`compdvh`.`OffsetVanoAlto`,\n`compdvh`.`CoefVanoAncho`,\n`compdvh`.`CoefVanoAlto`\nFROM `fzggestion`.`compdvh`;\n</pre></small>\n\n=====Estado=====\nFinalizado\n\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1116,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n\n==== TopWindow having MenuBar ====\n[[Category:OOBasicCode]]\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre></small>\n===== Corrección del Thread =====\n<small><pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>\n\n==== Embed multiple components into a single Window ====\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1117,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n\n==== TopWindow having MenuBar ====\n[[Category:OOBasicCode]]\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre></small>\n===== Corrección del Thread =====\n<small><pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>\n\n==== Embed multiple components into a single Window ====\n[[Category:OOBasicCode]]\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1118,'Lista de CodeSnipets en OOBasic','utf-8'),(1119,'===== Referencias =====\n*Crear nueva página\n<pre>\nhttp://ayuda.cloudoffice.com.ar/index.php?title=\n</pre>\n*[[TEMP:LayoutGeneral|Templates de Layout]]\n*[http://sqlformat.appspot.com/ SQLFormatBeautify]\n\n<small>\n{| class=\"wikitable\"\n| <center>\'\'\'Nombre\'\'\'</center>\n| <center>\'\'\'Comando\'\'\'</center>\n| <center>\'\'\'Uso\'\'\'</center>\n| <center>\'\'\'Cross\'\'\'</center>\n\n|-\n| Viscabdetalla\n| FZG.Vista.viscabdetalla.sql\n| Vista utilizada para agregar la información de cual es la lista de precios a utilizar para el cliente del presupuesto en tiempo real.FORM: Presupuesto\n| Contactos, Vidquoten1\n\n|-\n| Proveedores\n| FZG.Vista.proveedores.sql\n| Visualización de Contactos “Proveedores”\n| Contactos\n\n|-\n| Clientes\n| FZG.Vista.clientes.sql\n| Visualización de Contactos “Clientes”\n| Contactos\n\n|-\n| Visreppres\n| FZG.Vista.visreppres.sql\n| Vista Reporte Presupuesto Individual. Para generar una línea completa con la información de detalle de los presupuestos con las combinaciones de información a incluir en el mismo. No contiene la información estática del cliente.\n| Vislineabs, Visdetaobs\n\n|-\n| Viscompodis\n| FZG.Vista.viscompodis.sql\n| Vista de productos (DISTINCT productos) dentro de la tabla de composición ordenada por alfabéticamente.\n| \n\n|-\n| Viscoposimpl\n| FZG.Vista.viscomposimpl.sql\n| Vista de los elementos de composicion con información para query\n| Productos, Composición\n\n|-\n| Visdetaobs\n| FZG.Vista.visdetaobs.sql\n| Une todas las Observaciones de cada item para los casos que se encuentren señaladas con la Descripción del Producto-Item\n| Productos, Vidquoten3\n\n|-\n| Visintdetpre\n| FZG.Vista.visintdetpre.sql\n| Reducción de vista Visprodadic aplicable al cálculo de presupuesto con los datos en tiempo real del presupuesto activo en formulario y calculando el precio correcto de acuerdo al cliente y el cálculo del valor del elemento de acuerdo al los valores de Alto y Ancho del Vano en tiempo real\n| Visprodadic, Vidquoten2\n\n|-\n| Vislineabs\n| [[FZG.Vista.vislineabs.sql]]\n| Define linea básica para reporte teniendo como base Vidquoten2, agregando la información de la cabecera + datos de descrpción de producto + el subtotal por Producto-Item\n| Vidquoten1, Vidquoten2, Productos, Vissubxitem\n\n|-\n| Visprodadic\n| FZG.Vista.visproadic.sql\n| Vista de tabla de componentes con la información de cada elemento como producto y de los precios vigentes.\n| Productos, Composicion, PreciosVigentes\n\n|-\n| Vissubxitem\n| FZG.Vista.vissubxitem.sql\n| Subtotal por Item de Presupuesto en tiempo real\n| Vidquoten3\n\n|-\n| Listavigente\n| \n| Selecciona solo el primer registro ordenado en forma descendente de la tabla de listasprecios\n| Listasprecios\n\n|-\n| Preciosvigentes\n| FZG.Vista.preciosvigentes.sql\n| Es la selección de la tabla de precios referenciando el mayor valor dentro de la tabla de listasprecios\n| Listasprecios, Precios\n\n|-\n| Preciosvigact\n| FZG.Vista.preciosvigact.sql\n| Vista de lista de precios vigentes con datos de productos para actualización columnar.FORM: Actualización por tipo de lista\n| Preciosvigentes, Productos\n\n|-\n| Precioscmpl\n| [[FZG.Vista.precioscmpl.sql]]\n| Vista de lista de precios completa con datos de productos. [[FORM: Precios Tabular x Proceso]]\n| Precios, Productos\n\n|-\n| Visprestot\n| FZG.Vista.visprestot.sql\n| Vista de Presupuestos Totalizados por Cliente\n| Visreppres\n\n|-\n| Viscompcnt\n| [[FZG.Vista.viscompcnt.sql]]\n| Vista resumen de Componentes completa con indicadores de estado de composición\n| composicion, producto\n|}</small>','utf-8'),(1120,'===== Referencias =====\n*Crear nueva página\n<pre>\nhttp://ayuda.cloudoffice.com.ar/index.php?title=  &action=edit\n</pre>\n*[[TEMP:LayoutGeneral|Templates de Layout]]\n*[http://sqlformat.appspot.com/ SQLFormatBeautify]\n\n<small>\n{| class=\"wikitable\"\n| <center>\'\'\'Nombre\'\'\'</center>\n| <center>\'\'\'Comando\'\'\'</center>\n| <center>\'\'\'Uso\'\'\'</center>\n| <center>\'\'\'Cross\'\'\'</center>\n\n|-\n| Viscabdetalla\n| FZG.Vista.viscabdetalla.sql\n| Vista utilizada para agregar la información de cual es la lista de precios a utilizar para el cliente del presupuesto en tiempo real.FORM: Presupuesto\n| Contactos, Vidquoten1\n\n|-\n| Proveedores\n| FZG.Vista.proveedores.sql\n| Visualización de Contactos “Proveedores”\n| Contactos\n\n|-\n| Clientes\n| FZG.Vista.clientes.sql\n| Visualización de Contactos “Clientes”\n| Contactos\n\n|-\n| Visreppres\n| FZG.Vista.visreppres.sql\n| Vista Reporte Presupuesto Individual. Para generar una línea completa con la información de detalle de los presupuestos con las combinaciones de información a incluir en el mismo. No contiene la información estática del cliente.\n| Vislineabs, Visdetaobs\n\n|-\n| Viscompodis\n| FZG.Vista.viscompodis.sql\n| Vista de productos (DISTINCT productos) dentro de la tabla de composición ordenada por alfabéticamente.\n| \n\n|-\n| Viscoposimpl\n| FZG.Vista.viscomposimpl.sql\n| Vista de los elementos de composicion con información para query\n| Productos, Composición\n\n|-\n| Visdetaobs\n| FZG.Vista.visdetaobs.sql\n| Une todas las Observaciones de cada item para los casos que se encuentren señaladas con la Descripción del Producto-Item\n| Productos, Vidquoten3\n\n|-\n| Visintdetpre\n| FZG.Vista.visintdetpre.sql\n| Reducción de vista Visprodadic aplicable al cálculo de presupuesto con los datos en tiempo real del presupuesto activo en formulario y calculando el precio correcto de acuerdo al cliente y el cálculo del valor del elemento de acuerdo al los valores de Alto y Ancho del Vano en tiempo real\n| Visprodadic, Vidquoten2\n\n|-\n| Vislineabs\n| [[FZG.Vista.vislineabs.sql]]\n| Define linea básica para reporte teniendo como base Vidquoten2, agregando la información de la cabecera + datos de descrpción de producto + el subtotal por Producto-Item\n| Vidquoten1, Vidquoten2, Productos, Vissubxitem\n\n|-\n| Visprodadic\n| FZG.Vista.visproadic.sql\n| Vista de tabla de componentes con la información de cada elemento como producto y de los precios vigentes.\n| Productos, Composicion, PreciosVigentes\n\n|-\n| Vissubxitem\n| FZG.Vista.vissubxitem.sql\n| Subtotal por Item de Presupuesto en tiempo real\n| Vidquoten3\n\n|-\n| Listavigente\n| \n| Selecciona solo el primer registro ordenado en forma descendente de la tabla de listasprecios\n| Listasprecios\n\n|-\n| Preciosvigentes\n| FZG.Vista.preciosvigentes.sql\n| Es la selección de la tabla de precios referenciando el mayor valor dentro de la tabla de listasprecios\n| Listasprecios, Precios\n\n|-\n| Preciosvigact\n| FZG.Vista.preciosvigact.sql\n| Vista de lista de precios vigentes con datos de productos para actualización columnar.FORM: Actualización por tipo de lista\n| Preciosvigentes, Productos\n\n|-\n| Precioscmpl\n| [[FZG.Vista.precioscmpl.sql]]\n| Vista de lista de precios completa con datos de productos. [[FORM: Precios Tabular x Proceso]]\n| Precios, Productos\n\n|-\n| Visprestot\n| FZG.Vista.visprestot.sql\n| Vista de Presupuestos Totalizados por Cliente\n| Visreppres\n\n|-\n| Viscompcnt\n| [[FZG.Vista.viscompcnt.sql]]\n| Vista resumen de Componentes completa con indicadores de estado de composición\n| composicion, producto\n|}</small>','utf-8'),(1121,'[[Category:OOBasicCode]]\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=59986\n*\'\'\'Nota\'\'\': Ver [[#Corrección del Thread|Corrección del Thread]] \n<small><pre>\nSub Main\nOn Error GoTo Handler\nDim oNewFrame As Object, oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\n \n  oNewMenuBar = CreateMenuBar()\n  oNewMenuBar.removeItem(0,oNewMenuBar.getItemCount())\n  oNewMenuBar.insertItem(0,\"~Menu\",0,0)\n  oNewPopMenu = CreatePopMenu()\n  oNewPopMenu.insertItem(1,\"~Pop\", 0,0)\n  oMenuListener = CreateUnoListener(\"MenuListener_\", _\n    \"com.sun.star.awt.XMenuListener\")\n  oNewPopMenu.addMenuListener(oMenuListener)\n  oNewMenuBar.setPopupMenu(0,oNewPopMenu)\n  oNewWindow.setMenuBar(oNewMenuBar)\n \n  oNewEdit = CreateCtrWithProp( _\n    \"Edit\",oNewToolkit,oNewWindow,MakeRect(0,0,150,oNewWindow.OutputSize.Height), _\n    array(\"MultiLine\",\"VScroll\"), array(true,true))\n  oNewEdit.setText(\"string...\")\n  oFrames = StarDesktop.getFrames()\n  oNewFrame = CreateNewFrame( oNewWindow, \"New Frame\" )\n  oNewFrame.setPropertyValue(\"Title\",\"title\")\n  AddTopFrame( oNewFrame )\n  Exit Sub\nHandler:\n  msgBox \"error\"\nEnd Sub\n\n\nSub MenuListener_highlight()\nEnd Sub\n\nSub MenuListener_select( ev )\n  Select Case ev.MenuId\n  Case 1\n    msgBox \"Pop\"\n  End Select\nEnd Sub\n\nSub MenuListener_activate( ev )\nEnd Sub\n\nSub MenuListener_deactivate()\nEnd Sub\n\nSub MenuListener_disposing()\nEnd Sub\n\n\nFunction CreateMenuBar() As Object\n  CreateMenuBar = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXMenuBar\",GetDefaultContext)\nEnd Function\n\n\nFunction CreatePopMenu() As Object\n  CreatePopMenu = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"stardiv.Toolkit.VCLXPopupMenu\",GetDefaultContext)\nEnd Function\n\n\nFunction GetToolkit()\n  GetToolkit = GetProcessServiceManager. _\n    createInstanceWithContext( _\n    \"com.sun.star.awt.Toolkit\",GetDefaultContext)\nEnd Function\n\n\nSub AddTopFrame( oLocFrame As Object )\n  StarDesktop.getFrames().append( oLocFrame )\nEnd Sub\n\n\nFunction CreateNewFrame( oLocWindow As Object, sLocFrameName As String ) As Object\nDim oLocNewFrame As Object\n  oLocNewFrame = GetProcessServiceManager.createInstance(\"com.sun.star.frame.Frame\")\n  With oLocNewFrame\n    .initialize(oLocWindow)\n    .setCreator(StarDesktop)\n    .setName(sLocFrameName)\n  End With\n  CreateNewFrame = oLocNewFrame\nEnd Function\n\n\nFunction CreateWindow( oLocToolkit As Object, _\n  aLocRect As com.sun.star.awt.Rectangle ) As com.sun.star.awt.WindowDescriptor\nDim oLocWinDesc\n  oLocWinDesc = createUnoStruct(\"com.sun.star.awt.WindowDescriptor\")\n  With oLocWinDesc\n    .Type = com.sun.star.awt.WindowClass.TOP\n    \'.WindowServiceName = \"window\"\n    \'.ParentIndex = -1\n    .Bounds = aLocRect\n  End With\n  With com.sun.star.awt.WindowAttribute\n    oLocWinDesc.WindowAttributes = _\n      .MOVEABLE + .CLOSEABLE + .BORDER + .SHOW + .SIZEABLE\n  End With\n  CreateWindow = oLocToolkit.createWindow(oLocWinDesc)\nEnd Function\n\n\nFunction CreateCtrWithProp( CtrType, oToolkit, oWindow, aPosSize, aPropNames, aPropValues )\nDim oCtr As Object, oCtrModel As Object\n  oCtr = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType )\n  oCtrModel = createUnoService(\"com.sun.star.awt.UnoControl\" & CtrType & \"Model\" )\n  oCtrModel.setPropertyValues( aPropNames, aPropValues )\n  With oCtr\n    .setModel(oCtrModel)\n    .createPeer( oToolkit, oWindow )\n    .setPosSize( aPosSize.X, aPosSize.Y, aPosSize.Width, aPosSize.Height, _\n        com.sun.star.awt.PosSize.POSSIZE )\n  End With\n  CreateCtrWithProp() = oCtr \'model can be got from returned value\nEnd Function\n\n\nFunction MakeRect( nX As Long, nY As Long, _\n  nWidth As Long, nHeight As Long ) As com.sun.star.awt.Rectangle\nDim oLocRect\n  oLocRect = createUnoStruct(\"com.sun.star.awt.Rectangle\")\n  With oLocRect\n    .X = nX\n    .Y = nY\n    .Width = nWidth\n    .Height = nHeight\n  End With\n  MakeRect() = oLocRect\nEnd Function\n</pre></small>\n===== Corrección del Thread =====\n<small><pre>\nGlobal oNewFrame\nSub Main\nOn Error GoTo Handler\nDim oNewToolkit\nDim oNewWindow As Object\nDim oNewMenuBar As Object, oNewPopMenu As Object\n  oNewToolkit = GetToolkit\n  oNewWindow = CreateWindow( oNewToolkit, MakeRect(50,50,150,150) )\noTWL = createUnoListener(\"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\")\noNewWindow.addTopWindowListener(oTWL)\n...\nEnd Sub\n\n...\n\nSub TopWindowListener_windowClosing(oEventObject)\n  oNewFrame.close(True)\nEnd Sub\nSub TopWindowListener_windowClosed(oEventObject)\nEnd Sub\nSub TopWindowListener_windowMinimized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowNormalized(oEventObject)\nEnd Sub\nSub TopWindowListener_windowActivated(oEventObject)\nEnd Sub\nSub TopWindowListener_windowDeactivated(oEventObject)\nEnd Sub\nSub TopWindowListener_disposing(oEventObject)\nEnd Sub \n</pre></small>','utf-8'),(1122,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n\n==== Embed multiple components into a single Window ====\n[[Category:OOBasicCode]]\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1123,'[[Category:OOBasicCode]]\n\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=9883\n<small><pre>\nREM  *****  BASIC  *****\n\nglobal component1\nglobal component2\n\nSub Main\n   On Error goto Main_error\n   \n   \' Set the globals to Null initially, so that the TopWindowListener can\n   \' recognize whether or not they point to valid items, and only run as\n   \' appropriate.\n   component1 = Null\n   component2 = Null\n   \n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oTopWindow = CreateTopWindow( oAwtToolkit, 100, 200, 800, 700 )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oTopWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Create a TopWindowListener\n   \' This is necessary to close the OOo Component frames when the window closes,\n   \' which is necessary so that OOo doesn\'t crash.  See details in\n   \' TopWindowListener_windowClosing().\n   oTopWindowListener = CreateUnoListener( \"TopWindowListener_\", \"com.sun.star.awt.XTopWindowListener\" )\n   \n   \' Add the TopWindowListener to the top-level window\n   oTopWindow.addTopWindowListener(oTopWindowListener)\n   \n   \' Change the background color of the window to baby blue.\n   oTopWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oTopWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Create a sub-window.\n   oSubWindow1 = CreateSubWindow( oAwtToolkit, oTopWindow, 100, 200, 300, 400 )\n   \n   \' Create a sub-frame.\n\n   oSubFrame1 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame1.initialize( oSubWindow1 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame1.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame1)\n   \n   \n   \n   \' Create another sub-window.\n   oSubWindow2 = CreateSubWindow( oAwtToolkit, oTopWindow, 450, 200, 300, 400 )\n   \n   \' Create another sub-frame.\n   oSubFrame2 = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oSubFrame2.initialize( oSubWindow2 )\n   \' Tell the frame that its parent is the Desktop.\n   oSubFrame2.setCreator( oFrame )\n   \n   \' add subframe to main frame\n   oFrame.getFrames().append(oSubFrame2)\n   \n\n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oTopWindow, \"Meow\", \"file:///c:/tmp/test-small.jpg\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Now all the windows and sub-windows should be added, sizes set, etc.,\n   \' So now, load items into them...\n   \n   \' Load something into the first frame (oSubFrame1, which we put to the left)\n   component1 = oSubFrame1.loadComponentFromURL( \"private:factory/simpress\", \"_self\", 0, Array() )\n\n   \' Load something into the second frame (oSubFrame2, which we put to the right)\n   component2 = oSubFrame2.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   Exit Sub\n   \nMain_error:\n\n    MsgBox (\"Main: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n   \nEnd Sub\n\n\nSub TopWindowListener_windowOpened(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowClosing(oEventObject)\n   \' In here, we need to close the components using the XClosable interface,\n   \' rather than letting the system automatically \'dispose()\' of them.\n   \' The class documentation says that if XCloseable is supported, then it\n   \' should be used in lieu of \'dispose()\'.\n   \'\n   \' Tests of this window handler suggest that XCloseable /must/ be used -- if\n   \' it isn\'t, then OpenOffice crashes.\n   \'\n   \' Also note: these components must be closed /very/ quickly!  Introducing\n   \' any sort of delay before closing them [even \'wait(100)\'] causes OOo to\n   \' crash.\n   \n   \' if the first component exists, close it.\n   if not isNull(component1) then\n      component1.close(false)\n   end if\n   \n   \' if the second component exists, close it.\n   if not isNull(component2) then\n      component2.close(false)\n   end if\nEnd Sub\n\nSub TopWindowListener_windowClosed(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowMinimized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowNormalized(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowActivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_windowDeactivated(oEventObject)\n   \' do nothing\nEnd Sub\n\nSub TopWindowListener_disposing(oEventObject)\n   \' do nothing\nEnd Sub\n\n\n\nFunction CreateTopWindow( oAwtToolkit, x, y, w, h )\n\n   On Error goto CreateTopWindow_Error\n   \n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = null\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n\'      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\n   \n   Exit Function\n\nCreateTopWindow_Error:\n\n    MsgBox (\"CreateTopWindow: There has been an error in \" & sMacroName & \". \" & chr(10) _\n      & \"Error text is: \" & Error(Err) & chr(10) _\n      & \"Line number: \" & Erl, 48, \"Error Message\")\n\nEnd Function\n\n\n\' This method is almost-identical to \"CreateTopWindow\", above, except that the\n\' WindowClass is set to CONTAINER, and the window\'s parent is set to \'parentWindow\'.\n\' For details on what everything is and how it works, see \"CreateTopWindow\".\nFunction CreateSubWindow( oAwtToolkit, parentWindow, x, y, w, h )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' is a container that may contain other components. It is not a top window.\n      .Type = com.sun.star.awt.WindowClass.CONTAINER\n     \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n     \n      \' specifies the parent of the component.\n      .Parent = parentWindow\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n\'      .ParentIndex = -1\n     \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( x, y, w, h )\n     \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n\n   CreateSubWindow = oXWindowPeer\nEnd Function\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional cImageFile, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cLabel ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   \n   If Not IsMissing( cImageFile ) Then\n      oButtonModel.ImageURL = cImageFile\n   EndIf\n   \n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from Danny\'s library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre></small>','utf-8'),(1124,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1125,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n[http://ayuda.cloudoffice.com.ar/index.php?title=Categor%C3%ADa:OOBasicCode|CodeSnipets]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1126,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n[[:Category:OOBasicCode]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1127,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1128,'== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1129,'[[Category:OOBasicCode]]\n\'\'\'Site:\'\'\' http://en.wikibooks.org/wiki/OpenOffice.org/Macro\n<pre>\nsub Main\nrem ----------------------------------------------------------------------\nrem define variables\ndim document   as object\ndim dispatcher as object\nrem ----------------------------------------------------------------------\nrem get access to the document\ndocument   = ThisComponent.CurrentController.Frame\ndispatcher = createUnoService(\"com.sun.star.frame.DispatchHelper\")\n \nrem ----------------------------------------------------------------------\ndim args1(2) as new com.sun.star.beans.PropertyValue\nargs1(0).Name = \"Zoom.Value\"\nargs1(0).Value = 75\nargs1(1).Name = \"Zoom.ValueSet\"\nargs1(1).Value = 28703\nargs1(2).Name = \"Zoom.Type\"\nargs1(2).Value = 0\n \ndispatcher.executeDispatch(document, \".uno:Zoom\", \"\", 0, args1())\n\nend sub\n</pre>','utf-8'),(1130,'[[Category:OOBasicCode]]\n<pre>\nSub Doczoom\n   Dim Doc As Object\n   Dim Settings As Object\n   \n   Doc=ThisComponent\n   Settings=Doc.CurrentController.viewSettings\n   \n   With Settings\n      .zoomType=3 \'\n      .ZoomValue=10\n   End With\nEnd Sub\n</pre>','utf-8'),(1131,'[[Category:OOBasicCode]]\n\'\'\'site:\'\'\' http://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=30687\n<pre>\nSub Doczoom\n   Dim Doc As Object\n   Dim Settings As Object\n   \n   Doc=ThisComponent\n   Settings=Doc.CurrentController.viewSettings\n   \n   With Settings\n      .zoomType=3 \'\n      .ZoomValue=10\n   End With\nEnd Sub\n</pre>','utf-8'),(1132,'','utf-8'),(1133,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana]]\n\n    Window\n        ContainerWindow\n        ComponentWindow\n        Show and hide\n        Enabling and disabling\n        Size \nContainerWindow Edit\n\nI want to access from the frame.\n\n  oContainerWindow = oFrame.getContainerWindow () \n\nComponentWindow Edit\n\nI want to access from the frame in the same way.\n\n  oComponentWindow = oFrame.getComponentWindow () \n\nShow and hide Edit\n\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\nEnabling and disabling Edit\n\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled) \n\nSize Edit\n\nGets the location and size of the ContainerWindow, I want to change.\n\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1134,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide=\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1135,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1136,'','utf-8'),(1137,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana]]\n[[Image:FCMFrame.png|Frame]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1138,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana]]\n[[Image:FCMFrame.png|Frame|200px]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1139,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana|600px]]\n[[Image:FCMFrame.png|Frame|600px]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1140,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n[[Image:OOBasicCode.window.png|Ventana|200px]]\n[[Image:FCMFrame.png|Frame|600px]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1141,'=Window=\nWhen the document is displayed, the frame, ComponentWindow ContainerWindow and contains therein the border of the window. Part of the green and blue portions of the part ContainerWindow, blue is ComponentWindow. Then, the frame will be in the frame.\n\n[[Image:OOBasicCode.window.png|Ventana|200px]]\n\n[[Image:FCMFrame.png|Frame|600px]]\n==ContainerWindow==\nI want to access from the frame.\n<pre>\n  oContainerWindow = oFrame.getContainerWindow () \n</pre>\n==ComponentWindow==\nI want to access from the frame in the same way.\n<pre>\n  oComponentWindow = oFrame.getComponentWindow ()\n</pre>\n==Show and hide==\n<pre>\n    Returns the display state () boolean isVisible\n    Toggles the visibility ([in] boolean Visible) void setVisible \n</pre>\nAlso be hidden ComponentWindow that are included and to hide the ContainerWindow. Moreover, the entire window will be hidden if you hide ContainerWindow.\n==Enabling and disabling==\n<pre>\n    Returns the state () boolean isEnabled\n    Enable and disable void setEnable ([in] boolean bEnabled)\n</pre>\n==Size==\nGets the location and size of the ContainerWindow, I want to change.\n<pre>\n    com.sun.star.awt.Size getPosSize Returns the size and position ()\n    We set the size of void setPosSize ([in] long X, [in] long Y, [in] long Width, [in] long Height, [in] short Flags) position and \n</pre>\nSpecified from the constant com.sun.star.awt.PosSize the Flags. You can specify the size of the particular coordinates or specify the add X, Y, WIDTH, HEIGHT, POS, SIZE, of POSSIZE.','utf-8'),(1142,'===== Referencias =====\n*Crear nueva página\n<pre>\nhttp://ayuda.cloudoffice.com.ar/index.php?title=  &action=edit\nhttp://webcache.googleusercontent.com/search?q=cache:SMXgJL3UaPAJ:www.oooforum.org/forum/viewtopic.phtml%3Ft%3D\n</pre>\n*[[TEMP:LayoutGeneral|Templates de Layout]]\n*[http://sqlformat.appspot.com/ SQLFormatBeautify]\n\n<small>\n{| class=\"wikitable\"\n| <center>\'\'\'Nombre\'\'\'</center>\n| <center>\'\'\'Comando\'\'\'</center>\n| <center>\'\'\'Uso\'\'\'</center>\n| <center>\'\'\'Cross\'\'\'</center>\n\n|-\n| Viscabdetalla\n| FZG.Vista.viscabdetalla.sql\n| Vista utilizada para agregar la información de cual es la lista de precios a utilizar para el cliente del presupuesto en tiempo real.FORM: Presupuesto\n| Contactos, Vidquoten1\n\n|-\n| Proveedores\n| FZG.Vista.proveedores.sql\n| Visualización de Contactos “Proveedores”\n| Contactos\n\n|-\n| Clientes\n| FZG.Vista.clientes.sql\n| Visualización de Contactos “Clientes”\n| Contactos\n\n|-\n| Visreppres\n| FZG.Vista.visreppres.sql\n| Vista Reporte Presupuesto Individual. Para generar una línea completa con la información de detalle de los presupuestos con las combinaciones de información a incluir en el mismo. No contiene la información estática del cliente.\n| Vislineabs, Visdetaobs\n\n|-\n| Viscompodis\n| FZG.Vista.viscompodis.sql\n| Vista de productos (DISTINCT productos) dentro de la tabla de composición ordenada por alfabéticamente.\n| \n\n|-\n| Viscoposimpl\n| FZG.Vista.viscomposimpl.sql\n| Vista de los elementos de composicion con información para query\n| Productos, Composición\n\n|-\n| Visdetaobs\n| FZG.Vista.visdetaobs.sql\n| Une todas las Observaciones de cada item para los casos que se encuentren señaladas con la Descripción del Producto-Item\n| Productos, Vidquoten3\n\n|-\n| Visintdetpre\n| FZG.Vista.visintdetpre.sql\n| Reducción de vista Visprodadic aplicable al cálculo de presupuesto con los datos en tiempo real del presupuesto activo en formulario y calculando el precio correcto de acuerdo al cliente y el cálculo del valor del elemento de acuerdo al los valores de Alto y Ancho del Vano en tiempo real\n| Visprodadic, Vidquoten2\n\n|-\n| Vislineabs\n| [[FZG.Vista.vislineabs.sql]]\n| Define linea básica para reporte teniendo como base Vidquoten2, agregando la información de la cabecera + datos de descrpción de producto + el subtotal por Producto-Item\n| Vidquoten1, Vidquoten2, Productos, Vissubxitem\n\n|-\n| Visprodadic\n| FZG.Vista.visproadic.sql\n| Vista de tabla de componentes con la información de cada elemento como producto y de los precios vigentes.\n| Productos, Composicion, PreciosVigentes\n\n|-\n| Vissubxitem\n| FZG.Vista.vissubxitem.sql\n| Subtotal por Item de Presupuesto en tiempo real\n| Vidquoten3\n\n|-\n| Listavigente\n| \n| Selecciona solo el primer registro ordenado en forma descendente de la tabla de listasprecios\n| Listasprecios\n\n|-\n| Preciosvigentes\n| FZG.Vista.preciosvigentes.sql\n| Es la selección de la tabla de precios referenciando el mayor valor dentro de la tabla de listasprecios\n| Listasprecios, Precios\n\n|-\n| Preciosvigact\n| FZG.Vista.preciosvigact.sql\n| Vista de lista de precios vigentes con datos de productos para actualización columnar.FORM: Actualización por tipo de lista\n| Preciosvigentes, Productos\n\n|-\n| Precioscmpl\n| [[FZG.Vista.precioscmpl.sql]]\n| Vista de lista de precios completa con datos de productos. [[FORM: Precios Tabular x Proceso]]\n| Precios, Productos\n\n|-\n| Visprestot\n| FZG.Vista.visprestot.sql\n| Vista de Presupuestos Totalizados por Cliente\n| Visreppres\n\n|-\n| Viscompcnt\n| [[FZG.Vista.viscompcnt.sql]]\n| Vista resumen de Componentes completa con indicadores de estado de composición\n| composicion, producto\n|}</small>','utf-8'),(1143,'[[Category:OOBasicCode]]\n\'\'\'Site\'\'\':http://www.oooforum.org/forum/viewtopic.phtml?t=5057&highlight=frame+controller+model\n\'\'\'Autor\'\'\':DannyB\n\nThere are three objects that you typically associate with a document. There is:\n1. the document model\n2. the document controller\n3. the document frame.\n\nWhen you need to do something to a document, you need one of these three objects. Which one of the three you need depends on what you intend to do.\n\nCalling loadComponentFromURL() always gives you the document model object. OOo Basic also has a \"variable\" called ThisComponent which returns the document model of the document that contains the currently running macro code. So using either technique: loadComponentFromURL() or ThisComponent, always results in the document model.\n\nSometimes, for instnace, to use the Dispatcher, you need the document frame. Other times, you need the document controller (for instance, to manipulate which shapes of a drawing are selected).\n\nThe following three functions from my library are how I easily move between the three different objects.\n<pre>\n\'############################################################\n\'   API navigation convenience\n\'############################################################\n\n\n\'----------\n\' This will always return the document\'s controller.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentController( oDoc As Object ) As Object\n   Dim oCtrl As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oCtrl = oDoc\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocController called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentController() = oCtrl\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s frame.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentFrame( oDoc As Object ) As Object\n   Dim oFrame As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oFrame = oDoc\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentFrame called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentFrame() = oFrame\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s model.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentModel( oDoc As Object ) As Object\n   Dim oDocModel As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oDocModel = oDoc\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n      \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentModel called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentModel() = oDocModel\nEnd Function\n</pre>\nNow I can do something like...\n<pre>\noDoc = loadComponentFromURL( ..... )	\n</pre>\nThen later, I need the frame, I can just call...\n<pre>\noDocFrame = GetDocumentFrame( oDoc )	\n</pre>\nThe above code provides three functions...\n<pre>	\nFunction GetDocumentModel     ( oDoc As Object ) As Object\nFunction GetDocumentController( oDoc As Object ) As Object\nFunction GetDocumentFrame     ( oDoc As Object ) As Object	\n</pre>\nAll three functions accept any of the model, frame or controller. Each function will \"convert\" to the desired object. For instance, if I need the model, I\'ll call GetDocumentModel(), but I can pass it the model, the frame or the controller. (Obviously, if I pass the document model to GetDocumentModel(), it doesn\'t have to do anything but just return what I gave it.)\n\nWhere these routines are really useful is in writing more general subroutines. I could write a routine to, say, copy to the clipboard. The routine takes a single parameter oDoc. But you could pass in any of the three objects (model, controller, frame). This makes my clipboardCopy() function easier to call. You just pass it whichever of the three document objects that you conveniently have on hand. If internally, the clipboardCopy() function needs a Frame, then it will use my GetDocumentFrame() function to get the frame from whichever one of the three you passed it.\n\nHope this is helpful to someone.','utf-8'),(1144,'[[Category:OOBasicCode]]\n*\'\'\'Site\'\'\':http://www.oooforum.org/forum/viewtopic.phtml?t=5057&highlight=frame+controller+model\n*\'\'\'Autor\'\'\':DannyB\n\nThere are three objects that you typically associate with a document. There is:\n#the document model\n#the document controller\n#the document frame.\n\nWhen you need to do something to a document, you need one of these three objects. Which one of the three you need depends on what you intend to do.\n\nCalling loadComponentFromURL() always gives you the document model object. OOo Basic also has a \"variable\" called ThisComponent which returns the document model of the document that contains the currently running macro code. So using either technique: loadComponentFromURL() or ThisComponent, always results in the document model.\n\nSometimes, for instnace, to use the Dispatcher, you need the document frame. Other times, you need the document controller (for instance, to manipulate which shapes of a drawing are selected).\n\nThe following three functions from my library are how I easily move between the three different objects.\n<pre>\n\'############################################################\n\'   API navigation convenience\n\'############################################################\n\n\n\'----------\n\' This will always return the document\'s controller.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentController( oDoc As Object ) As Object\n   Dim oCtrl As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oCtrl = oDoc\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocController called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentController() = oCtrl\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s frame.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentFrame( oDoc As Object ) As Object\n   Dim oFrame As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oFrame = oDoc\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentFrame called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentFrame() = oFrame\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s model.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentModel( oDoc As Object ) As Object\n   Dim oDocModel As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oDocModel = oDoc\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n      \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentModel called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentModel() = oDocModel\nEnd Function\n</pre>\nNow I can do something like...\n<pre>\noDoc = loadComponentFromURL( ..... )	\n</pre>\nThen later, I need the frame, I can just call...\n<pre>\noDocFrame = GetDocumentFrame( oDoc )	\n</pre>\nThe above code provides three functions...\n<pre>	\nFunction GetDocumentModel     ( oDoc As Object ) As Object\nFunction GetDocumentController( oDoc As Object ) As Object\nFunction GetDocumentFrame     ( oDoc As Object ) As Object	\n</pre>\nAll three functions accept any of the model, frame or controller. Each function will \"convert\" to the desired object. For instance, if I need the model, I\'ll call GetDocumentModel(), but I can pass it the model, the frame or the controller. (Obviously, if I pass the document model to GetDocumentModel(), it doesn\'t have to do anything but just return what I gave it.)\n\nWhere these routines are really useful is in writing more general subroutines. I could write a routine to, say, copy to the clipboard. The routine takes a single parameter oDoc. But you could pass in any of the three objects (model, controller, frame). This makes my clipboardCopy() function easier to call. You just pass it whichever of the three document objects that you conveniently have on hand. If internally, the clipboardCopy() function needs a Frame, then it will use my GetDocumentFrame() function to get the frame from whichever one of the three you passed it.\n\nHope this is helpful to someone.','utf-8'),(1145,'[[Category:OOBasicCode]]\n*\'\'\'Site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=5057&highlight=frame+controller+model\n*\'\'\'Autor\'\'\': DannyB\n\nThere are three objects that you typically associate with a document. There is:\n#the document model\n#the document controller\n#the document frame.\n\nWhen you need to do something to a document, you need one of these three objects. Which one of the three you need depends on what you intend to do.\n\nCalling loadComponentFromURL() always gives you the document model object. OOo Basic also has a \"variable\" called ThisComponent which returns the document model of the document that contains the currently running macro code. So using either technique: loadComponentFromURL() or ThisComponent, always results in the document model.\n\nSometimes, for instnace, to use the Dispatcher, you need the document frame. Other times, you need the document controller (for instance, to manipulate which shapes of a drawing are selected).\n\nThe following three functions from my library are how I easily move between the three different objects.\n<pre>\n\'############################################################\n\'   API navigation convenience\n\'############################################################\n\n\n\'----------\n\' This will always return the document\'s controller.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentController( oDoc As Object ) As Object\n   Dim oCtrl As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oCtrl = oDoc\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocController called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentController() = oCtrl\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s frame.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentFrame( oDoc As Object ) As Object\n   Dim oFrame As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...then get the controller from that.\n      oCtrl = oDoc.getCurrentController()\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the frame from the controller.\n      oFrame = oCtrl.getFrame()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oFrame = oDoc\n   \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentFrame called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentFrame() = oFrame\nEnd Function\n\n\n\'----------\n\' This will always return the document\'s model.\n\' Pass in any one of...\n\'   * the document\'s model (subclass of com.sun.star.document.OfficeDocument)\n\'   * the document\'s controller\n\'   * the document\'s frame\nFunction GetDocumentModel( oDoc As Object ) As Object\n   Dim oDocModel As Object\n   \n   \' If the caller gave us the document model...\n   If oDoc.supportsService( \"com.sun.star.document.OfficeDocument\" ) Then\n      \' ...thanks!  That\'s just what we wanted!\n      oDocModel = oDoc\n\n   \' If the caller gave us a document controller...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XController\" ) Then\n      oCtrl = oDoc\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n   \n   \' If the caller gave us the document frame...\n   ElseIf HasUnoInterfaces( oDoc, \"com.sun.star.frame.XFrame\" ) Then\n      oFrame = oDoc\n      \' ...then get the controller from the frame.\n      oCtrl = oFrame.getController()\n      \' ...then get the model from the controller.\n      oDocModel = oCtrl.getModel()\n      \n   Else\n      \' The caller did not give us what we expected!\n      MsgBox( \"GetDocumentModel called with incorrect parameter.\" )\n   EndIf\n   \n   GetDocumentModel() = oDocModel\nEnd Function\n</pre>\nNow I can do something like...\n<pre>\noDoc = loadComponentFromURL( ..... )	\n</pre>\nThen later, I need the frame, I can just call...\n<pre>\noDocFrame = GetDocumentFrame( oDoc )	\n</pre>\nThe above code provides three functions...\n<pre>	\nFunction GetDocumentModel     ( oDoc As Object ) As Object\nFunction GetDocumentController( oDoc As Object ) As Object\nFunction GetDocumentFrame     ( oDoc As Object ) As Object	\n</pre>\nAll three functions accept any of the model, frame or controller. Each function will \"convert\" to the desired object. For instance, if I need the model, I\'ll call GetDocumentModel(), but I can pass it the model, the frame or the controller. (Obviously, if I pass the document model to GetDocumentModel(), it doesn\'t have to do anything but just return what I gave it.)\n\nWhere these routines are really useful is in writing more general subroutines. I could write a routine to, say, copy to the clipboard. The routine takes a single parameter oDoc. But you could pass in any of the three objects (model, controller, frame). This makes my clipboardCopy() function easier to call. You just pass it whichever of the three document objects that you conveniently have on hand. If internally, the clipboardCopy() function needs a Frame, then it will use my GetDocumentFrame() function to get the frame from whichever one of the three you passed it.\n\nHope this is helpful to someone.','utf-8'),(1146,'[[Category:OOBasicCode]]\nsite: \nautor: DannyB\n	\nIt is interesting to look at all the stuff in the API under....\n\ncom.sun.star.awt.*\n\n\nIt is possible to create new windows, add menu bars to them, and draw any kind of graphics within your window. You can put new controls in your window.\n\nIn fact, a window created by a component using the AWT toolkit would look and feel just like the native windows of Calc, Writer, Impress, Draw.\n\nHere is a fun test program to exercise what I have learned there. Just copy, paste and run. I apologize that this is way more comments than actual lines of code. The code would be quite short if you removed the comments.\n\n<pre>\nSub Main\n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oWindow = CreateTopWindow( oAwtToolkit )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Change the background color of the window to baby blue.\n   oWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Note that if you wanted to, you could now load a component\n   \'  into your newly created window!\n\'   oFrame.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oWindow, \"Meow\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Create a menu.\n\'   CreateMenuBar( oWindow )\n\' menubar to be provided later....\n\' okay, well maybe not, see below...\nEnd Sub\n\n\n\n\nFunction CreateTopWindow( oAwtToolkit )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n      \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n      \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = 0\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n      .ParentIndex = -1\n      \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( 100, 200, 300, 400 )\n      \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\nEnd Function\n\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cName ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from my library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\nWhen I provide the MenuBar implementation, it will be painfully obvious that you need a real programming language (i.e. not Basic). Well, this is probably true if you are going to implement a full blown office component anyway.\n\nHere is my proposed menubar implementation. But it doesn\'t seem to work properly in Basic.\n\nI believe the problem is that you cannot setMenuBar() to an object created by CreateUnoListener. Like I said, you need a language that lets you create real objects.\n\nIf you study it, I think you can see the idea behind it.\n\n<pre>	\n\n\'##################################################\n\nGlobal oAppleMenu\nGlobal oOrangeMenu\n\nSub CreateMenuBar( oWindow )\n   oMenubar = CreateUnoListener( \"MyMenuBar_\", \"com.sun.star.awt.XMenu\" )\n   oAppleMenu = CreateUnoListener( \"AppleMenu_\", \"com.sun.star.awt.XPopupMenu\" )\n   oOrangeMenu = CreateUnoListener( \"OrangeMenu_\", \"com.sun.star.awt.XPopupMenu\" )\n   oWindow.setMenuBar( oMenubar )\nEnd Sub\n\n\' Our menu bar is hardcoded.\n\' Menu: Apple\n\'  has items:  Apple Pie, Apple Juice\n\' Menu: Orange\n\'  has items:  Orange Juice, Orange JellO\n\n\'##################################################\n\'   My Menu Bar interface\n\'\n\'##################################################\n\'   com.sun.star.awt.XMenuBar\n\'\n\'   An interface like this just plain needs to\n\'    be written in a language other than Baisc!\n\'##################################################\n\nSub MyMenuBar_addMenuListener( xListener )\nEnd Sub\n\nSub MyMenuBar_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub MyMenuBar_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub MyMenuBar_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction MyMenuBar_getItemCount()\n   \' We have two menus.\n   MyMenuBar_getItemCount = 2\nEnd Function\n\nFunction MyMenuBar_getItemId( nPos )\n   MyMenuBar_getItemId = nPos\nEnd Function\n\nFunction MyMenuBar_getItemPos( nItemId )\n   MyMenuBar_getItemPos = nItemId\nEnd Function\n\nSub MyMenuBar_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction MyMenuBar_isItemEnabled( nItemId )\n   MyMenuBar_isItemEnabled = True\nEnd Function\n\nSub MyMenuBar_setItemText( nItemId, cText )\nEnd Sub\n\nFunction MyMenuBar_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Apple\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Orange\"\n   EndIf\n   MyMenuBar_getItemText = cItemName\nEnd Function\n\nSub MyMenuBar_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction MyMenuBar_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   If nItemId = 1 Then\n      oPopupMenu = oAppleMenu\n   ElseIf nItemId = 2 Then\n      oPopupMenu = oOrangeMenu\n   EndIf\n   MyMenuBar_getPopupMenu = oPopupMenu\nEnd Function\n\n\n\'##################################################\n\'   com.sun.star.awt.XPopupMenu\n\'##################################################\n\nSub AppleMenu_addMenuListener( xListener )\nEnd Sub\n\nSub AppleMenu_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub AppleMenu_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub AppleMenu_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction AppleMenu_getItemCount()\n   \' We have two menus.\n   AppleMenu_getItemCount = 2\nEnd Function\n\nFunction AppleMenu_getItemId( nPos )\n   AppleMenu_getItemId = nPos\nEnd Function\n\nFunction AppleMenu_getItemPos( nItemId )\n   AppleMenu_getItemPos = nItemId\nEnd Function\n\nSub AppleMenu_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction AppleMenu_isItemEnabled( nItemId )\n   AppleMenu_isItemEnabled = True\nEnd Function\n\nSub AppleMenu_setItemText( nItemId, cText )\nEnd Sub\n\nFunction AppleMenu_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Apple Pie\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Apple Juice\"\n   EndIf\n   AppleMenu_getItemText = cItemName\nEnd Function\n\nSub AppleMenu_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction AppleMenu_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   AppleMenu_getPopupMenu = oPopupMenu\nEnd Function\n\nSub AppleMenu_insertSeparator( nPos )\nEnd Sub\n\nSub AppleMenu_setDefaultItem( nItemId )\nEnd Sub\n\nFunction AppleMenu_getDefaultItem()\n   AppleMenu_getDefaultItem = 1\nEnd Function\n\nSub AppleMenu_checkItem( nItemId, bCheckmark )\nEnd Sub\n\nFunction AppleMenu_isItemChecked( nItemId )\n   AppleMenu_isItemChecked = False\nEnd Function\n\nFunction AppleMenu_execute( oWindowPeerParent, oAreaRect, nDirection )\n   AppleMenu_execute = 0\nEnd Function\n\n\n\n\'##################################################\n\'   com.sun.star.awt.XPopupMenu\n\'##################################################\n\nSub OrangeMenu_addMenuListener( xListener )\nEnd Sub\n\nSub OrangeMenu_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub OrangeMenu_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub OrangeMenu_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction OrangeMenu_getItemCount()\n   \' We have two menus.\n   OrangeMenu_getItemCount = 2\nEnd Function\n\nFunction OrangeMenu_getItemId( nPos )\n   OrangeMenu_getItemId = nPos\nEnd Function\n\nFunction OrangeMenu_getItemPos( nItemId )\n   OrangeMenu_getItemPos = nItemId\nEnd Function\n\nSub OrangeMenu_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction OrangeMenu_isItemEnabled( nItemId )\n   OrangeMenu_isItemEnabled = True\nEnd Function\n\nSub OrangeMenu_setItemText( nItemId, cText )\nEnd Sub\n\nFunction OrangeMenu_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Orange Juice\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Orange JellO\"\n   EndIf\n   OrangeMenu_getItemText = cItemName\nEnd Function\n\nSub OrangeMenu_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction OrangeMenu_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   OrangeMenu_getPopupMenu = oPopupMenu\nEnd Function\n\nSub OrangeMenu_insertSeparator( nPos )\nEnd Sub\n\nSub OrangeMenu_setDefaultItem( nItemId )\nEnd Sub\n\nFunction OrangeMenu_getDefaultItem()\n   OrangeMenu_getDefaultItem = 1\nEnd Function\n\nSub OrangeMenu_checkItem( nItemId, bCheckmark )\nEnd Sub\n\nFunction OrangeMenu_isItemChecked( nItemId )\n   OrangeMenu_isItemChecked = False\nEnd Function\n\nFunction OrangeMenu_execute( oWindowPeerParent, oAreaRect, nDirection )\n   OrangeMenu_execute = 0\nEnd Function\n</pre>\n\n\'\'\'Atención, probablemente tenga errores\'\'\'\n\nyour first macro stops at his position\n\' .Parent = 0\n\'.Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n.Parent = oAwtToolkit.getDesktopWindow()\n\nwith the error message\n\ncom.sun.star.lang.IllegalArgumentException\nMEssage; illegal value given.\n\nThenew macro stops at\noWindow.setMenuBar( oMenubar )\n\nwith the message Argument is not optional.','utf-8'),(1147,'[[Category:OOBasicCode]]\n*\'\'\'site\'\'\': http://www.oooforum.org/forum/viewtopic.phtml?t=8481\n*\'\'\'autor\'\'\': DannyB\n	\nIt is interesting to look at all the stuff in the API under....\n\ncom.sun.star.awt.*\n\n\nIt is possible to create new windows, add menu bars to them, and draw any kind of graphics within your window. You can put new controls in your window.\n\nIn fact, a window created by a component using the AWT toolkit would look and feel just like the native windows of Calc, Writer, Impress, Draw.\n\nHere is a fun test program to exercise what I have learned there. Just copy, paste and run. I apologize that this is way more comments than actual lines of code. The code would be quite short if you removed the comments.\n\n<pre>\nSub Main\n   \' Get an AWT toolkit.\n   \' OOo\'s AWT, not a Java AWT.\n   oAwtToolkit = CreateUnoService( \"com.sun.star.awt.Toolkit\" )\n   \n   \' Create a top level window.\n   oWindow = CreateTopWindow( oAwtToolkit )\n   \n   \' At this point, you should check out the interfaces\n   \'  and all of the methods that they give you for\n   \'  manipulating this new oWindow.\n   \' See comment in CreateTopWindow() below.\n   \n   \' Change the background color of the window to baby blue.\n   oWindow.setBackground( RGB( 240, 240, 255 ) )\n   \n   \' At this point, if you stop the program, you will have a\n   \'  new OOo window on the screen, but you cannot do anything\n   \'  with it.  You cannot even close it!\n   \' In fact, you have to kill the OOo process, as even OOo\n   \'  cannot close this window since it has no Frame and\n   \'  therefore is not integrated into the desktop environment.\n   \' So I had to go on writing additional code....\n   \n   \' Create a new frame.\n   oFrame = CreateUnoService( \"com.sun.star.frame.Frame\" )\n   \' Initialize this frame with our new window.\n   oFrame.initialize( oWindow )\n   \' Tell the frame that its parent is the Desktop.\n   oFrame.setCreator( StarDesktop )\n   \n   \' At this point you have a window that can be resized, moved, or closed.\n   \n   \' Note that if you wanted to, you could now load a component\n   \'  into your newly created window!\n\'   oFrame.loadComponentFromURL( \"private:factory/scalc\", \"_self\", 0, Array() )\n   \n   \' Create a new button.\n   oBtnCtrl = MakeButtonCtrl( oAwtToolkit, oWindow, \"Meow\",_\n         MakeRectangle( 20, 30, 100, 40 ) )\n   \n   \' Create a menu.\n\'   CreateMenuBar( oWindow )\n\' menubar to be provided later....\n\' okay, well maybe not, see below...\nEnd Sub\n\n\n\n\nFunction CreateTopWindow( oAwtToolkit )\n   oWindowDesc = CreateUnoStruct( \"com.sun.star.awt.WindowDescriptor\" )\n   With oWindowDesc\n      \' specifies a top level window on the desktop. It is also a container.\n      .Type = com.sun.star.awt.WindowClass.TOP\n      \' is a modal top level window on the desktop. It is also a container.\n\'      .Type = com.sun.star.awt.WindowClass.MODALTOP\n      \' is a container that may contain other components. It is not a top window.\n\'      .Type = com.sun.star.awt.WindowClass.CONTAINER\n      \' is the simplest window. It can be a container.\n\'      .Type = com.sun.star.awt.WindowClass.SIMPLE\n      \n      \' specifies the name of the component service.\n      \' A zero length name means that the vcl creates a blank top,\n      \'  a container, or a simple window.\n      .WindowServiceName = \"\"\n      \n      \' specifies the parent of the component.\n      \' If Parent == 0 && ParentIndex == -1 , then the window is on the desktop.\n\'      .Parent = 0\n\'      .Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n      .Parent = oAwtToolkit.getDesktopWindow()\n      \' specifies the index of the parent window, if available.\n      \' If Parent == 0 and this struct is a member of an array,\n      \'  then this is the offset from the beginning of the array to the parent.\n      \'  A value of -1 means desktop.\n      .ParentIndex = -1\n      \n      \' specifies the position and size of the window.\n      \' This member is ignored if the window attribute is\n      \'  WindowAttribute::FULLSIZE .\n      .Bounds = MakeRectangle( 100, 200, 300, 400 )\n      \n      \' specifies the window attributes.\n      .WindowAttributes = 0\n      \' specifies that the window is initially visible.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SHOW\n      \' specifies that the window fills the complete desktop area.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.FULLSIZE\n      \' specifies that the window is optimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.OPTIMUMSIZE\n      \' specifies that the window is minimum size.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MINSIZE\n      \' specifies that the window has visible borders.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.BORDER\n      \' specifies that the size of the window can be changed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SIZEABLE\n      \' specifies that the window can be moved by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.MOVEABLE\n      \' specifies that the window can be closed by the user.\n      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.CLOSEABLE\n      \'[ DEPRECATED ] specifies that the window should support the XSystemDependentWindowPeer interface.\n\'      .WindowAttributes = .WindowAttributes + com.sun.star.awt.WindowAttribute.SYSTEMDEPENDENT\n   End With\n   \n   oXWindowPeer = oAwtToolkit.createWindow( oWindowDesc )\n   \n   \' Look at the capabilities that these interfaces give you\n   \'  for manipulating your newly created window.\n   \' Interfaces supported by oXWindowPeer...\n   \'  com.sun.star.awt.XTopWindow\n   \'  com.sun.star.awt.XWindow\n   \'  com.sun.star.awt.XWindowPeer\n   \'  com.sun.star.awt.XVclContainer\n   \'  com.sun.star.awt.XVclContainerPeer\n   \'  com.sun.star.awt.XVclWindowPeer\n   \'  com.sun.star.awt.XLayoutConstraints\n   \'  com.sun.star.awt.XView\n   \'  com.sun.star.awt.XDevice\n   \'  com.sun.star.lang.XEventListener\n   \'  com.sun.star.lang.XComponent\n   \'  com.sun.star.lang.XTypeProvider\n   \'  com.sun.star.accessibility.XAccessible\n   \'\n   \' Properties...\n   \'  <object> MenuBar\n   \'  <array>  Windows\n   \'  <array>  Group\n   \'  <object> PosSize\n   \'  Boolean  Visible\n   \'  Boolean  Enable\n   \'  <object> Toolkit\n   \'  <object> Pointer\n   \'  Long     Background\n   \'  Boolean  DesignMode\n   \'  Long     Foreground\n   \'  <object> ControlFont\n   \'  <object> MinimumSize\n   \'  <object> PreferredSize\n   \'  <object> AccessibleContext\n   \'  <object> Graphics\n   \'  <object> Size\n   \'  <object> Info\n   \'  <array>  FontDescriptors\n   \n   CreateTopWindow = oXWindowPeer\nEnd Function\n\n\n\n\n\nFunction MakeButtonCtrl( oAwtToolkit, oWindow, Optional cLabel, Optional oPosSizeRect )\n   \' Create a new button model.\n   oButtonModel = CreateUnoService( \"com.sun.star.awt.UnoControlButtonModel\" )\n   \n   \' Create a new button control.\n   oButtonCtrl = CreateUnoService( \"com.sun.star.awt.UnoControlButton\" )\n   \n   \' Tell the control that it has a model.\n   oButtonCtrl.setModel( oButtonModel )\n   \n   \' Tell the control to create its window peer.\n   \' (To understand what this means, it is helpful to\n   \'  read some Java documention about how Java\'s AWT works\n   \'  even though we\'re not working with Java AWT here.)\n   \' Basically, this puts something visible onto the window.\n   oButtonCtrl.createPeer( oAwtToolkit, oWindow )\n   \n   If Not IsMissing( cName ) Then\n      oButtonModel.Label = cLabel\n   EndIf\n   If Not IsMissing( oPosSizeRect ) Then\n      oButtonCtrl.setPosSize( _\n                  oPosSizeRect.X, oPosSizeRect.Y,_\n                  oPosSizeRect.Width, oPosSizeRect.Height,_\n                  com.sun.star.awt.PosSize.POSSIZE )\n   EndIf\n   \n   MakeButtonCtrl = oButtonCtrl\nEnd Function\n\n\n\' ripped from my library....\n\nFunction MakeRectangle( ByVal nX As Long, ByVal nY As Long,_\n                  ByVal nWidth As Long, ByVal nHeight As Long ) As com.sun.star.awt.Rectangle\n   oRectangle = createUnoStruct( \"com.sun.star.awt.Rectangle\" )\n   With oRectangle\n      .X = nX\n      .Y = nY\n      .Width = nWidth\n      .Height = nHeight\n   End With\n   MakeRectangle() = oRectangle\nEnd Function\n</pre>\n\nWhen I provide the MenuBar implementation, it will be painfully obvious that you need a real programming language (i.e. not Basic). Well, this is probably true if you are going to implement a full blown office component anyway.\n\nHere is my proposed menubar implementation. But it doesn\'t seem to work properly in Basic.\n\nI believe the problem is that you cannot setMenuBar() to an object created by CreateUnoListener. Like I said, you need a language that lets you create real objects.\n\nIf you study it, I think you can see the idea behind it.\n\n<pre>	\n\n\'##################################################\n\nGlobal oAppleMenu\nGlobal oOrangeMenu\n\nSub CreateMenuBar( oWindow )\n   oMenubar = CreateUnoListener( \"MyMenuBar_\", \"com.sun.star.awt.XMenu\" )\n   oAppleMenu = CreateUnoListener( \"AppleMenu_\", \"com.sun.star.awt.XPopupMenu\" )\n   oOrangeMenu = CreateUnoListener( \"OrangeMenu_\", \"com.sun.star.awt.XPopupMenu\" )\n   oWindow.setMenuBar( oMenubar )\nEnd Sub\n\n\' Our menu bar is hardcoded.\n\' Menu: Apple\n\'  has items:  Apple Pie, Apple Juice\n\' Menu: Orange\n\'  has items:  Orange Juice, Orange JellO\n\n\'##################################################\n\'   My Menu Bar interface\n\'\n\'##################################################\n\'   com.sun.star.awt.XMenuBar\n\'\n\'   An interface like this just plain needs to\n\'    be written in a language other than Baisc!\n\'##################################################\n\nSub MyMenuBar_addMenuListener( xListener )\nEnd Sub\n\nSub MyMenuBar_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub MyMenuBar_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub MyMenuBar_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction MyMenuBar_getItemCount()\n   \' We have two menus.\n   MyMenuBar_getItemCount = 2\nEnd Function\n\nFunction MyMenuBar_getItemId( nPos )\n   MyMenuBar_getItemId = nPos\nEnd Function\n\nFunction MyMenuBar_getItemPos( nItemId )\n   MyMenuBar_getItemPos = nItemId\nEnd Function\n\nSub MyMenuBar_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction MyMenuBar_isItemEnabled( nItemId )\n   MyMenuBar_isItemEnabled = True\nEnd Function\n\nSub MyMenuBar_setItemText( nItemId, cText )\nEnd Sub\n\nFunction MyMenuBar_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Apple\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Orange\"\n   EndIf\n   MyMenuBar_getItemText = cItemName\nEnd Function\n\nSub MyMenuBar_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction MyMenuBar_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   If nItemId = 1 Then\n      oPopupMenu = oAppleMenu\n   ElseIf nItemId = 2 Then\n      oPopupMenu = oOrangeMenu\n   EndIf\n   MyMenuBar_getPopupMenu = oPopupMenu\nEnd Function\n\n\n\'##################################################\n\'   com.sun.star.awt.XPopupMenu\n\'##################################################\n\nSub AppleMenu_addMenuListener( xListener )\nEnd Sub\n\nSub AppleMenu_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub AppleMenu_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub AppleMenu_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction AppleMenu_getItemCount()\n   \' We have two menus.\n   AppleMenu_getItemCount = 2\nEnd Function\n\nFunction AppleMenu_getItemId( nPos )\n   AppleMenu_getItemId = nPos\nEnd Function\n\nFunction AppleMenu_getItemPos( nItemId )\n   AppleMenu_getItemPos = nItemId\nEnd Function\n\nSub AppleMenu_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction AppleMenu_isItemEnabled( nItemId )\n   AppleMenu_isItemEnabled = True\nEnd Function\n\nSub AppleMenu_setItemText( nItemId, cText )\nEnd Sub\n\nFunction AppleMenu_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Apple Pie\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Apple Juice\"\n   EndIf\n   AppleMenu_getItemText = cItemName\nEnd Function\n\nSub AppleMenu_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction AppleMenu_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   AppleMenu_getPopupMenu = oPopupMenu\nEnd Function\n\nSub AppleMenu_insertSeparator( nPos )\nEnd Sub\n\nSub AppleMenu_setDefaultItem( nItemId )\nEnd Sub\n\nFunction AppleMenu_getDefaultItem()\n   AppleMenu_getDefaultItem = 1\nEnd Function\n\nSub AppleMenu_checkItem( nItemId, bCheckmark )\nEnd Sub\n\nFunction AppleMenu_isItemChecked( nItemId )\n   AppleMenu_isItemChecked = False\nEnd Function\n\nFunction AppleMenu_execute( oWindowPeerParent, oAreaRect, nDirection )\n   AppleMenu_execute = 0\nEnd Function\n\n\n\n\'##################################################\n\'   com.sun.star.awt.XPopupMenu\n\'##################################################\n\nSub OrangeMenu_addMenuListener( xListener )\nEnd Sub\n\nSub OrangeMenu_removeMenuListener( xListener )\nEnd Sub\n\n\' This trivial implementation of the interface\n\'  does NOT support inserting or removing items.\n\nSub OrangeMenu_insertItem( nItemId, cText, nItemStyle, nPos )\nEnd Sub\n\nSub OrangeMenu_removeItem( nPos, nCount )\nEnd Sub\n\n\' This joke implementation of the interface\n\'  has hardcoded the contents of the menu bar.\n\' Calling insertItem or removeItem does not change\n\'  what the following routines return.\n\nFunction OrangeMenu_getItemCount()\n   \' We have two menus.\n   OrangeMenu_getItemCount = 2\nEnd Function\n\nFunction OrangeMenu_getItemId( nPos )\n   OrangeMenu_getItemId = nPos\nEnd Function\n\nFunction OrangeMenu_getItemPos( nItemId )\n   OrangeMenu_getItemPos = nItemId\nEnd Function\n\nSub OrangeMenu_enableItem( nItemId, bEnable )\nEnd Sub\n\nFunction OrangeMenu_isItemEnabled( nItemId )\n   OrangeMenu_isItemEnabled = True\nEnd Function\n\nSub OrangeMenu_setItemText( nItemId, cText )\nEnd Sub\n\nFunction OrangeMenu_getItemText( nItemId )\n   cItemName = \"\"\n   If nItemId = 1 Then\n      cItemName = \"Orange Juice\"\n   ElseIf nItemId = 2 Then\n      cItemName = \"Orange JellO\"\n   EndIf\n   OrangeMenu_getItemText = cItemName\nEnd Function\n\nSub OrangeMenu_setPopupMenu( nItemId, oXPopupMenu )\nEnd Sub\n\nFunction OrangeMenu_getPopupMenu( nItemId )\n   Dim oPopupMenu As Object\n   OrangeMenu_getPopupMenu = oPopupMenu\nEnd Function\n\nSub OrangeMenu_insertSeparator( nPos )\nEnd Sub\n\nSub OrangeMenu_setDefaultItem( nItemId )\nEnd Sub\n\nFunction OrangeMenu_getDefaultItem()\n   OrangeMenu_getDefaultItem = 1\nEnd Function\n\nSub OrangeMenu_checkItem( nItemId, bCheckmark )\nEnd Sub\n\nFunction OrangeMenu_isItemChecked( nItemId )\n   OrangeMenu_isItemChecked = False\nEnd Function\n\nFunction OrangeMenu_execute( oWindowPeerParent, oAreaRect, nDirection )\n   OrangeMenu_execute = 0\nEnd Function\n</pre>\n\n\'\'\'Atención, probablemente tenga errores\'\'\'\n\nyour first macro stops at his position\n\' .Parent = 0\n\'.Parent = createUnoValue( \"com.sun.star.awt.XWindowPeer\", 0 )\n.Parent = oAwtToolkit.getDesktopWindow()\n\nwith the error message\n\ncom.sun.star.lang.IllegalArgumentException\nMEssage; illegal value given.\n\nThenew macro stops at\noWindow.setMenuBar( oMenubar )\n\nwith the message Argument is not optional.','utf-8'),(1148,'[[Category:TKTOut]]\n====Data TKT====\n*\'\'\'Usuario:\'\'\' Lucas\n*\'\'\'Fecha:\'\'\' 20121218.1730\n*\'\'\'Soporte:\'\'\' SAS\n=====Incidente=====\nCopia de Registraciones de DVH para dividirlas en DVH p/ventanas corredizas y DVH para Paños Fijos\n=====WorkAround=====\n=====Resolución=====\n*20130110\n<small><pre>\nINSERT INTO `fzggestion`.`proddvh`\n(`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\n`productos`.`ProductoID`,\n`productos`.`CategoriaID`,\nCONCAT(TRIM(`productos`.`Descripcion`),\" p/2 Hojas\"),\n`productos`.`ProveedorID`,\n`productos`.`Reposicion`,\n`productos`.`Magnitud`,\n`productos`.`MagnitudIN`,\n`productos`.`CoefP00P01`,\n`productos`.`CoefP00P02`,\n`productos`.`CoefP00P03`,\n`productos`.`ProductoPID`,\n`productos`.`InsumoIMG`,\n`productos`.`Presentacion`,\n`productos`.`ProductoProy`\nFROM `fzggestion`.`productos`\nWHERE Descripcion LIKE \"DVH%\";\n\n\nINSERT INTO `fzggestion`.`proddvh`\n(`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\nCONCAT(\'P\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n`productos`.`CategoriaID`,\nCONCAT(TRIM(`productos`.`Descripcion`),\" p/Paño Fijo\"),\n`productos`.`ProveedorID`,\n`productos`.`Reposicion`,\n`productos`.`Magnitud`,\n`productos`.`MagnitudIN`,\n`productos`.`CoefP00P01`,\n`productos`.`CoefP00P02`,\n`productos`.`CoefP00P03`,\n`productos`.`ProductoPID`,\n`productos`.`InsumoIMG`,\n`productos`.`Presentacion`,\n`productos`.`ProductoProy`\nFROM `fzggestion`.`productos`\nWHERE Descripcion LIKE \"DVH%\";\n\nINSERT INTO `fzggestion`.`proddvh`\n(`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\nCONCAT(\'Q\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n`productos`.`CategoriaID`,\nCONCAT(TRIM(`productos`.`Descripcion`),\" p/3 Hojas\"),\n`productos`.`ProveedorID`,\n`productos`.`Reposicion`,\n`productos`.`Magnitud`,\n`productos`.`MagnitudIN`,\n`productos`.`CoefP00P01`,\n`productos`.`CoefP00P02`,\n`productos`.`CoefP00P03`,\n`productos`.`ProductoPID`,\n`productos`.`InsumoIMG`,\n`productos`.`Presentacion`,\n`productos`.`ProductoProy`\nFROM `fzggestion`.`productos`\nWHERE Descripcion LIKE \"DVH%\";\n\nINSERT INTO `fzggestion`.`proddvh`\n(`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\nCONCAT(\'R\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n`productos`.`CategoriaID`,\nCONCAT(TRIM(`productos`.`Descripcion`),\" p/4 Hojas\"),\n`productos`.`ProveedorID`,\n`productos`.`Reposicion`,\n`productos`.`Magnitud`,\n`productos`.`MagnitudIN`,\n`productos`.`CoefP00P01`,\n`productos`.`CoefP00P02`,\n`productos`.`CoefP00P03`,\n`productos`.`ProductoPID`,\n`productos`.`InsumoIMG`,\n`productos`.`Presentacion`,\n`productos`.`ProductoProy`\nFROM `fzggestion`.`productos`\nWHERE Descripcion LIKE \"DVH%\";\n</pre></small>\n*20130102\n<small><pre>\nDROP TABLE `fzggestion`.`proddvh`;\n\nCREATE TABLE proddvh\nSELECT CONCAT(\'P\', SUBSTR(`productos`.`ProductoID`, 2)) AS ProductoID,\n       `productos`.`CategoriaID`,\n       CONCAT(TRIM(`productos`.`Descripcion`),\" p/Paño Fijo\") AS Descripcion,\n       `productos`.`ProveedorID`,\n       `productos`.`Reposicion`,\n       `productos`.`Magnitud`,\n       `productos`.`MagnitudIN`,\n       `productos`.`CoefP00P01`,\n       `productos`.`CoefP00P02`,\n       `productos`.`CoefP00P03`,\n       `productos`.`ProductoPID`,\n       `productos`.`InsumoIMG`,\n       `productos`.`Presentacion`,\n       `productos`.`ProductoProy`\nFROM productos\nWHERE Descripcion LIKE \'DVH%\';\n\nDROP TABLE `fzggestion`.`compdvh`;\n\nCREATE TABLE compdvh\nSELECT CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)) AS ProductoID,\n       IF(`composicion`.`ProductoID`=`composicion`.`ElementoID`,\n			CONCAT(\'P\', SUBSTR(`composicion`.`ProductoID`, 2)),\n			`composicion`.`ElementoID`) AS ElementoID,\n       `composicion`.`ComposicID`,\n       `composicion`.`ValorElemento`,\n       `composicion`.`ElementoPM`,\n       `composicion`.`OffsetVanoAncho`,\n       `composicion`.`OffsetVanoAlto`,\n       `composicion`.`CoefVanoAncho`,\n       `composicion`.`CoefVanoAlto`\nFROM `fzggestion`.`productos` AS `productos`,\n     `fzggestion`.`composicion` AS `composicion`\nWHERE `productos`.`ProductoID` = `composicion`.`ProductoID`\n  AND `productos`.`Descripcion` LIKE \'DVH%\';\n\n-- INSERT de registros generados\n\nINSERT INTO `fzggestion`.`productos`\n(`ProductoGen`,\n`ProductoDflt`,\n`ProductoID`,\n`CategoriaID`,\n`Descripcion`,\n`ProveedorID`,\n`Reposicion`,\n`Magnitud`,\n`MagnitudIN`,\n`CoefP00P01`,\n`CoefP00P02`,\n`CoefP00P03`,\n`ProductoPID`,\n`InsumoIMG`,\n`MagCmpX`,\n`MagCmpY`,\n`MagCmpZ`,\n`MagCmpW`,\n`Presentacion`,\n`ProductoProy`)\nSELECT\n`proddvh`.`ProductoGen`,\n`proddvh`.`ProductoDflt`,\n`proddvh`.`ProductoID`,\n`proddvh`.`CategoriaID`,\n`proddvh`.`Descripcion`,\n`proddvh`.`ProveedorID`,\n`proddvh`.`Reposicion`,\n`proddvh`.`Magnitud`,\n`proddvh`.`MagnitudIN`,\n`proddvh`.`CoefP00P01`,\n`proddvh`.`CoefP00P02`,\n`proddvh`.`CoefP00P03`,\n`proddvh`.`ProductoPID`,\n`proddvh`.`InsumoIMG`,\n`proddvh`.`MagCmpX`,\n`proddvh`.`MagCmpY`,\n`proddvh`.`MagCmpZ`,\n`proddvh`.`MagCmpW`,\n`proddvh`.`Presentacion`,\n`proddvh`.`ProductoProy`\nFROM `fzggestion`.`proddvh`;\n\n-- DELETE de Registros Automáticos de Composicion\n\nDELETE\nFROM composicion\nWHERE ProductoID IN\n    (SELECT ProductoID\n     FROM proddvh);\n\n-- INSERT de Registros Automáticos de Composicion en base a los anteriores.\n\nINSERT INTO `fzggestion`.`composicion`\n(`ProductoID`,\n`ElementoID`,\n`ComposicID`,\n`ValorElemento`,\n`ElementoPM`,\n`OffsetVanoAncho`,\n`OffsetVanoAlto`,\n`CoefVanoAncho`,\n`CoefVanoAlto`)\nSELECT\n`compdvh`.`ProductoID`,\n`compdvh`.`ElementoID`,\n`compdvh`.`ComposicID`,\n`compdvh`.`ValorElemento`,\n`compdvh`.`ElementoPM`,\n`compdvh`.`OffsetVanoAncho`,\n`compdvh`.`OffsetVanoAlto`,\n`compdvh`.`CoefVanoAncho`,\n`compdvh`.`CoefVanoAlto`\nFROM `fzggestion`.`compdvh`;\n</pre></small>\n\n=====Estado=====\nFinalizado\n\n=====Observaciones=====\nPreparar el SQL para subirlo a producción.Reemplazar la \"V\" por \"P\" en el código para los de Paño Fijo','utf-8'),(1149,'===Esquema de Actualizaciones===\n*[[Actualizacion DB]]\n\n=== Versión 1.1 ===\n====Release 20121201====\n=====Problemas Conocidos=====\n*[[FORM:Presupuesto]]. Aleatoriamente no hace el cálculo o no lo refresca correctamente.\n*[[TKT:FZG.000001]]. Se corrompe el archivo manifiest.rdf propio de la instalación del equipamiento laptop.\n*[[TKT:FZG.000002]]. Se detecta que no se propagan las características de los elementos componentes con niveles de composición adicional. Se hizo tarea de cosmética sobre [[PROC:CalculoPrecio]]. Se modificaron los [[PROC:AltaItemPresupuesto]] y [[PROC:AltaItemPresupuestoTmp]]. Se procedió a:\n**Multiplicar los coeficientes\n**Sumar los Offset\n\n=====Correcciones y Agregados=====\n*[[FORM:Modulos]]. Rediseño del originario [[FORM:Predefinidos]] y puesta en producción.\n*[[FORM:Modulos]]. Cambio de diseño para incluir el [[FORM:Modulos.FormModulos.FormDetalleProducto.FormSubSet]] como control para el ingreso de ocurrencias de subconjuntos de lineas de control. Se crea la [[MACRO:ChangeFieldtxtSubSetTPFORMModulos]] para la validación del identificativo de Wide/Height del elemento.\n*[[TABLA:modulosdet]]. Cambio de esquema para albergar ocurrencias de Subconjuntos de \"lineas de control\" con el alta de la [[TABLA:modulossbs]].\n*[[VISTA:viscompcnt]]\n\n====Release 20121030====\n=====Problemas Conocidos=====\n*Aleatoriamente no elimina registros y cuando se visualiza o refresca la tabla, hace shutdown de la sesión\n=====Correcciones y Agregados=====\n* [[MACRO:AprobacionPresupuesto]]. Corrección. Se modifica la acción posterior de redespliegue de subformularios eliminando las instrucciones anteriores y sumando la rutina [[MACRO:ControlFormPresupuesto]]\n====Release 20121029====\n=====Problemas Conocidos=====\n=====Correcciones y Agregados=====\n* [[TABLA:vidquoten1]]. Corrección. Se agregan los controles de NOTNULL a los atributos de Cliente y de Agente Comercial.\n* [[FORM:Presupuesto]]. Corrección. Por diferencias aparentes en las versiones de la DB vs. ODBC se cambia el DataSource de [[FORM:Presupuesto.DataCliente]] para que lo haga sobre la [[TABLA:contactos]] y no sobre la [[VISTA:clientes]].\n* [[FORM:Presupuesto]]. Corrección. Se agregan los controles de límites para los atributos de Ancho y Alto dentro de [[FORM:Presupuestos.Productos]].\n**El esquema funciona haciendo un llamado básicamente a la rutina indicada en [[MACRO:CheckValidMeasure]] ante los eventos de ItemChange de ambas columnas.\n**Se modifica el esquema de [[MACRO:EventoBRCDetallePresupuesto]] que gestionaba a la fecha escencialmente el alta de registros en [[TABLA:viquoten3]] transfiriendo esa ejecución del alta a traves de [[MACRO:AltaProductoPresupuesto]] que se ejecuta en [[MACRO:EventoARADetallePresupuesto]] con los parámetros de acción provenientes de [[MACRO:EventoBRADetallePresupuesto]]. Es precisamente la [[MACRO:EventoARADetallePresupuesto]], donde efectua el chequeo [[MACRO:CheckValidMeasure]], que siendo declarada como función, retorna el valor del chequeo para que se mantenga dentro del mismo control en el caso de error.\n**Esta modificación general permite que el refresco del Control correspondiente al Subtotal lo haga aún si presiona el ícono de grabar sin efectuar el \"gesture\" natural de la secuencia de ingreso de datos (presionar [Enter]) del registro en el [[FORM:Presupuesto.Productos.ProductosGrid]].\n\n====Release 20121024====\n=====Correcciones y Agregados=====\n* [[FORM:PosicionCRM]]. Corrección de Data Source.\n* [[RPRT:IndividualCRM]]. Corrección de Data Source y MakeUp Fecha Detalle\n* [[FORM:ConsultaClienteCRM]]. Corrección de Data Source de [[FORM:ConsultaClienteCRM.MainForm.SFSaldo]]\n* [[TABLA:magnitudes]]. Agregado de tabla\n====Release 20121005====\n=====Problemas Conocidos=====\n* [[FORM:PosicionCRM]]. Existen diferencias en los origenes de datos por lo que muestra diferentes resultados de [[FORM:ConsultaClientesCRM]]\n=====Correcciones y Agregados=====\n* [[PROC:AltaItemPresupuestoTmp]]. Corrección. Error en el procedimiento. El error radicaba en que la condición de los registros existentes dentro de la [[TABLA:vidquoten3tmp]] para evitar el agregado de esos mismos registro por parte del procedimiento desde la [[TABLA:componentes]]. Los valores que existían eran las constantes utilizadas para las pruebas. Se procede al reemplazo por parte de los parámetros provenientes de la función que llama al procedimiento. Se agrega además un parche para asignar el atributo ElementoPM para aquellos Elementos que no han arrastrado previamente por algún motivo este elemento al momento de grabar.\n* [[VISTA:proveedores]]. Cambio de formato del tag\n* [[PROC:CalculoPrecio]]. Agregado de los cálculos correspondientes a las nuevas magnitudes ALto y ANcho.\n* [[FORM:Presupuesto]]. Corrección. Ordenamiento del vector de ProductosDSC.\n* [[FORM:Presupuesto]]. Agregado. Se agrega la opción dentro del ListBox correspondiente a ProductosDSC de \"Selección de Filtro\". Lanza la [[MACRO:ControlLista]] y recupera el valor anterior con [[MACRO:ResetFiltroProductoFORMPresupuesto]].\n* [[FORM:Presupuesto]]. Corrección. Se agrega la función para afectar las eliminaciones de productos.\n* [[FORM:Presupuesto]]. Corrección. Se elimina el tabstop del campo de aprobado.\n* [[FORM:Aux000002]]. Corrección. Se cambia la Property de Add record.\n* [[MACRO:SugerenciaContactoID]]. Se agrega la distinción para que pueda ser leido correctamente desde [[FORM:Aux000002]].\n* [[FORM:Presupuesto]]. Se elimina la visualización del boton de prueba en la zona de Composicion.\n* [[FORM:Presupuesto]]. Se agrega valor por defecto en [[CTRL:Presupuesto.txtVidQuoteACom]]\n* [[FORM:Presupuesto]]. Se agrega la visualización del FORM:ComponentesDisplay desde [[MACRO:EventoWhenLoadingFormCabecera]]\n====Release 20120912====\n=====Problemas Conocidos=====\n* [[FORM:Presupuesto]]. La ayuda específica de ingreso de la descripción de producto no funciona.\n* [[FORM:PosicionCRM]]. El reporte [[RPRT:IndividualCRM]] muestra problemas aleatorios en la última columna (despliega aleatoriamente decimales).\n=====Correcciones y Agregados=====\n* [[FORM:Presupuesto]]. Diseño. Agregado de Form:DataCliente para evitar repetir la consulta de los datos del cliente (descripción, coeficientes agregados, etc.)\n* [[FORM:Presupuesto]]. Diseño. Agregado de Form:DataAgente para evitar repetir la consulta ya que se agrega la modalidad de aplicar el coeficiente que tiene el agente comercial adicional al del cliente y a los definidos en el módulo de precios.\n* [[FORM:Presupuesto]]. Corrección. El [[CTRL:Presupuesto.ListaProducto]] pasa a depender de [[CTRL:Presupuesto.Cabecera]]\n* [[VISTA:acomerciales]]. Se cambia el nombre del ID principal por AComercialID y se agregan los datos de Coeficiente que proviene de la [[TABLA:contactos]].\n* [[TABLA:contactos]]. Se agrega un atributo que puede representar la fotografía o logo de la empresa contacto.\n* [[PROC:AltaItemPresupuesto]]. Correcciones y Test.\n* [[PROC:ActualizaItemPresupuesto]]. Correcciones y Test\n* [[TRIG:Actualiza_Item_Presupuesto]]. Creación en el evento SQL BEFORE UPDATE sobre [[TABLA:vidquoten2]] para reemplazar la ejecución del proceso de actualización en [[MACRO:EventoBRCDetallePresupuesto]]. Cuando activa el UPDATE, la [[MACRO:EventoBRCDetallePresupuesto]] solo refresca la [[TABLA:vidquoten3]]\n* [[PROC:CopiaPresupuesto]]. Reactivación a razón del rediseño [[FORM:Presupuesto]].\n* [[FORM:Presupuesto]]. Inclusion del ordenamiento por el atributo VidQuoteID dentro de [[TABLA:vidquoten1]]\n\n====Release 20120901====\n* [[FORM:Presupuesto]]. Cambio de diseño.\n* [[TABLA:precios]]. Agrega atributo para identificar el usuario del último cambio.\n* [[FORM:PreciosTabularNormal]]. Modificación. Agregado de columnas a la vista de la tabla. Fecha de última modificación y Usuario.\n* [[FORM:PreciosGeneral]]. Modificación. Ajustes de forma y agregado de columna de Usuario Evento.\n* [[FORM:ConsumoMasivoPrecios]]. Modificacion. Ajustes de forma y agregado de columnas a la vista de la tabla. Fecha de última modificación y Usuario.\n* [[FORM:Contactos]]. Ajuste y Rediseño. Se colocó el tipo de contacto en primer lugar para poder utilizar la función de sugerencia de código de contacto. Se rediseñó la función de sugerencia de código de contacto para que abarque todos los tipos de contactos.\n* [[VISTA:clientes]]. Cambio de condicion de la [[TABLA:contactos]] por cambio de tipo de variable del tag de clientes y el agregado de Coeficiente de MarkUp.\n* [[TABLA:telemecomp]]. Alta de Tabla.\n* [[FORM:ComposicionMasivoxProducto]]. Modificacion. Se cambió el tipo de lista de control del atributo ElementoPM\n* [[FORM:CopiaComposicion]]. Modificación. Se modificó el orden y el tipo de control de atributo ElementoPM\n* [[FORM:ComposicionProductoElemento]]. Modificacion. Se cambió el tipo de lista de control del atributo ElementoPM\n* [[FORM:CopiaComposicion]]. Corrección. Se actualizó la [[MACRO:CopiaComposicion]] para fijar posicion sobre la decisión de copiar datos anteriores\n* [[PROC:DuplicaProductoCompo]]. Se agrega el parámetro de descripción del producto destino.\n* [[TABLA:composicion]]. Agrega atributo ComposicID autoincremental para diferenciar aquellos que están duplicados.\n* [[FORM:ComposicionMasivoxProducto]]. Se edita para que adapte el ingreso del atributo Composic. Luego de las pruebas de test, la eliminación de un registro de Producto/Elemento similar, eliminaba todos los iguales.\n* [[TABLA:vidquoten3]]. Agrega atributo ComposicID autoincremental para diferenciar aquellos que están duplicados.\n* [[TABLA:vidquoten3tmp]]. Agrega atributo ComposicID para diferenciar aquellos que están duplicados.\n* [[PROC:AltaItemPresupuestoTmp]]. Se revisó e introdujeron los cambios asociados a la incorporación del atributo ComposicID de las [[TABLA:vidquoten3tmp]] y [[TABLA:vidquoten3]]\n* [[PROC:ActualizaPreciosTabular]]. Modificación. Corrección / Verificación de Fórmulas del Release 20120424.[[File:warning-icon-hi.png|20px]]\n* [[PROC:GrabaItemPresupuestoTmp]]. Generación para cerrar el círculo de edición de componentes durante el presupuesto.\n* [[PROC:ResetEdicionItemTmp]]. Creación para eliminar las registraciones temporarias en [[TABLA:vidquoten3tmp]]\n* [[FORM:Presupuesto]]. Cambios\n** Se habilita la posibilidad de solo consulta para todos los Presupuestos Aprobados con [[MACRO:ControlFormPresupuesto]].\n** Se limita la posibilidad de eliminar Presupuesto / Producto para Presupuestos Aprobados y se habilita el LOC (Last Opportunity Check) con [[MACRO:ConfirmaDeletePresupuesto]]\n** Chequeos [[FORM:PresupuestoV1.0]].\n***Form:Cabecera\n****[[MACRO:NewResetListBox]]: No es necesario. No se usa más la modificación del contenido del ListBox OTA.\n****[[MACRO:PresupuestoExpirado]]: Optimizar y agregar como función dentro de [[MACRO:ControlFormPresupuesto]]\n****[[MACRO:EventoWhenLoadingFromCabecera]]\n*****Confirmar [[MACRO:ChequeoLicenciaOK]]\n*****Eliminar limpieza ListBox\n*****Asigna default Fecha Presupuesto con [[MACRO:Hoy]]\n*****Eliminar Reset ListBoxes\n****[[MACRO:EventoBRADetallePresupuesto]]\n*****Sin Cambios\n****[[MACRO:EventoBRCDetallePresupuesto]]\n****[[MACRO:BotonActualizarPresupuesto]]\n*****Adaptación al nuevo [[PROC:ActualizaPreciosPresupuesto]]\n\n=== Versión 1 ===\n====Release 20120720====\n* [[FORM:Pagos]]. Creación.\n* [[TABLA:tdocumento]]. Rediseño. Se incorporan atributos para indicar cuales son los procesos que se incluye el documento para un posterior filtro.\n* [[FORM:ClientesCRM]]. Rediseño. Se reemplaza las tablas y se confecciona a partir de los presupuestos aprobados/pendientes y de las cobranzas.\n* [[FORM:Cobranzas]]. Modificación. Se agrega la posibilidad de asignación por cliente (cuenta corriente).\n* [[TABLA:accpayab]]. Creación.\n====Release 20120628====\n* [[FORM:Categorias]]. Rediseño. Se rediseña la interfaz de acuerdo a el nuevo lineamiento y se agrega un control de Grid para su mejor visualización.\n* [[FORM:PreciosGeneral]]. Rediseño. Se agrega el Control Grid sobre la [[TABLA:precios]] y los controles de navegación.\n* [[TABLA:vidquoten1]]. Se agrega el atributo para controlar si se efectua la medición en obra.\n====Release 20120627====\n* [[FORM:CopiaComposicion]]: Modificado: Se generan una nueva forma de copia duplicación de componentes. Se agregan además las funciones de Agregado masivo a partir de otro producto y de control de repetición de producto.\n* [[FORM:PresupuestoV1.0]]. Modificado. Se prepara el acceso de los Módulos permitiendo la copia de un módulo predefinido en forma completa.\n* [[FORM:ComposicionMasivoxProducto]]. Modificado. Se agrega un control de navegación para cada grupo de datos: Productos y Elementos.\n====Release 20120608====\n* [[FORM:Predefinidos]]. Creación. Genera una nueva instancia inicial con presupuestos \"preformateados\" que simulen un nivel inmediato superior al esquema Producto-Elemento-Parámetro que permitiría inicialmente generar anteproyectos. Queda pendiente el ingreso de este grupo como elemento manipulable.[[File:warning-icon-hi.png|20px]]\n* [[TABLA:predefcab]]. Creación\n* [[TABLA:predefdet]]. Creación\n====Release 20120515====\n* [[FORM:Productos]]. Modificación. Cambio del control de verificación del campo ProductoID. Cambio de Control y verificación en [[TABLA:productos]], [[TABLA:composicion]] y [[TABLA:precios]]. Se habilita función específica de verificación de integridad. Ok\n* [[FORM:Productos]]. Modificación. Corrección de código por bug en función iif en Basic en el evento AfterChangeRecordFORMProductos.\n* [[REPORTE:PresupuestoDirecto]]. Modificación. Agregado de Numéración de páginas para el caso de presupuestos de más de una hoja de extensión.\n* [[PROC:CalculaPrecioBase]]. Incorpora el cálculo de las magnitudes \"2H\" (cálculo en base a la altura indicada multiplicada por 2) y \"2W\" (cálculo en base al ancho indicado multiplicado por 2).\n* [[PROC:CalculoPrecio]]. Incorpora el cálculo de las magnitudes \"2H\" (cálculo en base a la altura indicada multiplicada por 2) y \"2W\" (cálculo en base al ancho indicado multiplicado por 2).\n* [[FORM:MasivoCoeficienteActualizacion]]. Asigna [[MACRO:CambioMasivoCoeficientesPrecios]] y agrega botón de limpieza con [[MACRO:LimpiarMasivoCoeficientesPrecios]]\n* [[PROC:CalculaPrecioBase]]. Modificación. Se agrega la alternativa dentro de la fórmula de Metro Lineal (ML) que calcule también en caso de:\n** Cuando se realice el calculo de componentes de un producto cuya valorización se debe definir Ancho y Alto (por si tiene elementos con magnitudes de Metro Cuadrado -M2-)\n** Cuando tenga algún componente que se refiera exclusivamente al Alto o Al Ancho, en cuyo caso se debe administrar el uso a través del CoeficienteAncho y CoeficienteAlto.[[File:warning-icon-hi.png|20px]]\n* [[PROC:CalculoPrecio]]. Modificación. Se agrega la alternativa dentro de la fórmula de Metro Lineal (ML) que calcule también en caso de:\n** Cuando se realice el calculo de componentes de un producto cuya valorización se debe definir Ancho y Alto (por si tiene elementos con magnitudes de Metro Cuadrado -M2-)\n** Cuando tenga algún componente que se refiera exclusivamente al Alto o Al Ancho, en cuyo caso se debe administrar el uso a través del CoeficienteAncho y CoeficienteAlto.[[File:warning-icon-hi.png|20px]]\n* [[PROC:CalculoMedidaReal]]. Se agrega la función para facilitar el cálculo de la medida real (con respecto al Vano) para la información para Producción.[[File:warning-icon-hi.png|20px]]\n====Release 20120507====\n* [[FORM:PrecioTabularXProceso]]. Modificación. Corrección posicion botones ejecución. Ok.\n* [[FORM:PrecioTabularXProceso]]. Modificación. Corrección alineamiento lbl Filtro. Ok.\n* [[FORM:PrecioTabularXProceso]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:Productos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:PrecioTabularXProceso]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:PrecioTabuladoNormal]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXProducto]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:CambioMasivo]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:ComposicionProductos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXElementos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXElementos]]. Modificación. Agregado BoxControls, Activación de filtro. Ok\n====Release 20120424====\n* [[PROC:ActualizaPreciosTabular]]. Modificación. Corrección de Formulas.[[File:warning-icon-hi.png|20px]]\n====Release 20120409====\n* [[FORM:PresupuestoV1.0]]. Reemplazo de Iconos operativos por gráficos. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Proceso de Copia de Presupuesto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Proceso de Filtro de Presupuestos con Boton On/Off. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Hide/UnHide del Bloque de Parámetros de Elementos. Nuevo. Ok\n* [[TABLA:Precios]]. Reducción de decimales por cálculo automático de precios. Modificado. Ok.\n* [[FORM:Contactos]]. Reemplazo del Formulario por otro Diseño. Nuevo. Ok.\n* [[FORM:Contactos]]. Agregado de Proceso de Sugerencia de Contacto. Nuevo. Ok.\n* [[FORM:PrecioTabularNormal]]. Cambio de formato de campos de precios debido al cambio de estructura. Modificado. Ok.\n* [[FORM:MasivoCoeficientesActualizacion]]. Agregado de Formulario. Nuevo. Ok.\n* [[FORM:Productos]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n** Agregado de Esquema de Filtro.\n** Agregado de Hide/UnHide del Bloque de Filtro.\n* Corrección \"On Error\" en Acceso inicial a DB con 3 repeticiones posibles. Nuevo. Ok.\n* [[FORM:PresupuestoV1.0]]. Modificación. Corrección de los procesos de envío directo de correo al cliente. Ok.\n* [[FORM:PresupuestoV1.0]]. Modificación. Agregado del proceso de Aprobación de Presupuesto dentro del mismo formulario de ingreso / consulta para facilitar el proceso administrativo. Ok.\n* [[TABLA:Productos]]. Modificación. Agregado del atributo Reposicion. Ok. Enviado a Batch de Actualización de DB.\n* [[FORM:Productos]]. Modificación. Agregado del atributo Reposicion. Ok\n* [[FORM:Productos]]. Nuevo. Agregado de control tipo tabla en Filtro para búsqueda rápida. Ok\n* [[FORM:PresupuestoV1.0]]. Cambio de Relación entre DetallePresupuesto / Detalle Producto. Agregado de valores de Alto y Ancho. [[File:warning-icon-hi.png|20px]]\n* [[PROC:AltaItemPresupuesto]]. Modificacion. Cambio de esquema para incorporar subitems.\n* [[PROC:CalculoPrecio]]. Nuevo. Procedimiento para solo establecer el cálculo sin buscar los valores necesarios en [[VISTA:valprodadic]]\n====Release 20120328====\n* [[FORM:PresupuestoV1.0]]. Chequeo de Eliminación de Elemento Básico en Detalle de Producto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Chequeo de incorporación de Elementos restantes. Modificado. Ok\n* [[FORM:PresupuestoV1.0]]. Imposibilidad de modificar un Elemento básico en un Presupuesto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Cambio de esquema de Eventos en la cascada de subformularios. Modificado. Ok\n* [[FORM:PresupuestoV1.0]]. Incorporación de Botón de Actualización de Precios. Nuevo. Ok.\n* [[FORM:PrecioTabularXProceso]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:GestionMasivaPorProducto]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:GestionMasivaPorProducto]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:PreciosGeneral]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PreciosGeneral]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:ProductosElementos]]. Eliminación Campo MarkUP. Modificado. Ok.\n* [[FORM:Contactos]]. Rediseño. Nuevo. En proceso de desarrollo.\n* Varios: Corrección de Acceso a URL de imagenes sobreimpresas de botones de acción. Correr carpeta \"Graficos\" como subdirectorio del main.\n====Release 20120112====\n* Activación de Wiki\n* Desarrollo y test de [[TRIGGER:Alta_Productos]]\n* Modificación de [[VISTA:visindetpre]]\n* Modificación de [[TABLA:composicion]]\n** Default values para Coeficientes Alto/Ancho y Offset Alto/Ancho\n====Release 20120113====\n* Alta Formulario Presupuesto: Aprobación\n** Por el período de prueba se visualizan todos los valores de VidQuoteEstado.\n* Alta Formulario Presupuestos Aprobados\n* Modificación Formulario Presupuesto: Alta + Pendientes\n** Solo se visualizarán los VidQuoteEstado<>1\n* Modificación de Mantenimiento>Productos\n** Control de ingreso de Magnitudes\n* Test Formulario Presupuesto\n** Errores generados por combinación padre-hijo-nieto en el esquema de VidQuoteEstado<>1.<br/><strike>El error estaba dado porque cuando daba de alta el registro de VidQuoten1 con VidQuoteEstado=NULL, grababa el registro saltaba al subformulario (bug?) pero no tenía referencia posible ya que se encontraba vigente el filtro VidQuoteEstado<>1 y perdía el registro padre, entonces duplicaba los registros hijo y generaba error de insert record por duplicación de clave.<br/>Se procedió a definir por default el valor 0 para el atributo VidQuoteEstado</Strike>\n====Release 20120118====\n* Modificación [[FORM:PresupuestoV1.0]]>Alta + Pendientes:\n** Se detecta la incompatibilidad en la integración de Triggers en MySQL - ODBC - LibreOffice.\n** Búsqueda de soluciones a partir de comportamiento de Eventos. Se cambia la gestión de resultados del despliegue de datos de Precios por código asociado al cambio de valores dentro del grid.\n** Se generan las funciones de usuario de Cálculo de Precio\n====Release 20120119====\n* Continua de 20120118\n** Se procede a eliminar los Triggers asociados a TABLA:vidquoten2\n** Se genera el procedimiento de Alta obligatoria de elementos asociados a producto\n====Release 20120120====\n* Modificación [[FORM:PresupuestoV1.0]]>Alta + Pendientes:\n** Se realiza código para reemplazar los Triggers asociados a TABLA:vidquoten2\n*** Se activan los eventos de BeforeAction para controlar la operación y AfterAction para ejecutar la operación. Se confeccionan procedimientos de control de registraciones\n*** Se activan los eventos de para la corrección de atributos de SUBFORM:DetalleProducto\n====Release 20120122====\n* Modificación de TABLA:contactos. Se agrega el atributo ContactoIDAbrv (\"Abreviatura\").\n* Modificación FORM:Contactos: Se agrega el atributo ContactoIDAbrv (\"Abreviatura\").\n* Modificación VISTA:Proveedores: Se agrega el atributo Abreviatura (\"Abreviatura\")\n* Modificación FORM:Productos: Se agregan los atributos Coeficientes Precios 1/2/3 y Proveedor.\n* Modificación FORM:Productos: Se corrige el ListBox de Magnitud y se cambia el ValueList por la consulta de la TABLA:Productos de las magnitudes existentes.\n====Release 20120123====\n* Control de Procedimiento de Impresión asignada (REPORT:Presupuesto Directo). OK.\n* Investigación sobre com.sun...executeDispatch\n* Investigación sobre Environmental Variables + MAC\n* Investigación sobre ExportToPDF Method.\n====Release 20120124====\n* Funcionalidad a botón de [[FORM:PresupuestoV1.0]]>Alta+Pendientes sobre envío de Correo.\n** Se detecta un bug en la integración Thunderbird - LibreOffice Basic: La bandera de \"No mostrar Dialogo\" no funciona.\n====Release 20120125====\n* Agregado de Agente Comercial\n** Agregado en [[TABLA:vidquoten1]]\n** Agregado en [[TABLA:contactos]]\n** Agregado de [[VISTA:acomerciales]]\n** Modificación de [[FORM:Contactos]].\n*** Agregado de Option\n** Modificación de [[FORM:Presupuestos>Alta+Pendientes]]\n*** Agregado de campo AComercial con Listbox en Abreviatura del ContactoID.\n====Release 20120127====\n* Modificacion [[TRIGGER:Alta_Producto]]\n** Agrega registro de Producto Básico en [[TABLA:composicion]].\n====Release 20120203====\n* Generación de [[REPORTE:Composicion.Productos]]\n* Generación de [[REPORTE:Lista.Precios.Vigentes]]\n* Generación de [[REPORTE:Contactos.Resumen]]\n* Modificación de [[REPORTE:Presupuesto]]\n** Ampliar Campo Producto\n** Cambiar variable filtro por \"_\"\n** Cambiar Dirección de Cliente.\n====Release 20120206====\n* Modificación [[TABLA:productos]]\n** Agregado ProductoPID:VARCHAR(15).\n** Identifica el código puente del proveedor para hacer el pedido correspondiente\n* Modificación [[FORM:productos]]\n** Agregado de campo de código puente','utf-8'),(1150,'[[Category:VISTAS]]\n== Descripción ==\nVista de Cantidad de Componentes de un Producto\n== Composición ==\n*[[TABLA:composicion]]\n*[[TABLA:productos]]\n== SQL ==\n<pre>\nCREATE \n    ALGORITHM = UNDEFINED \n    DEFINER = `sas_admin`@`%` \n    SQL SECURITY DEFINER\nVIEW `viscompcnt` AS\n    SELECT \n        `composicion`.`ProductoID` AS `ProductoID`,\n        `productos`.`Descripcion` AS `ProductoDSC`,\n        `productos`.`CategoriaID` AS `CategoriaID`,\n        `productos`.`ProveedorID` AS `ProveedorID`,\n        COUNT(`composicion`.`ProductoID`) AS `Cantidad`,\n		CASE\n			WHEN COUNT(*) > 1 THEN 1\n			ELSE 0\n		END AS `Compuesto`\n    FROM\n        `productos`,`composicion`\n    WHERE\n        `productos`.`ProductoID` = `composicion`.`ProductoID`\n    GROUP BY `composicion`.`ProductoID`\n</pre>\n== Bitácora ==\n== Uso ==\n*[[FORM:CopiaComposicion]]\n== URL ==','utf-8'),(1151,'===Esquema de Actualizaciones===\n*[[Actualizacion DB]]\n\n=== Versión 1.1 ===\n====Release 20121201====\n=====Problemas Conocidos=====\n*[[FORM:Presupuesto]]. Aleatoriamente no hace el cálculo o no lo refresca correctamente.\n*[[TKT:FZG.000001]]. Se corrompe el archivo manifiest.rdf propio de la instalación del equipamiento laptop.\n*[[TKT:FZG.000002]]. Se detecta que no se propagan las características de los elementos componentes con niveles de composición adicional. Se hizo tarea de cosmética sobre [[PROC:CalculoPrecio]]. Se modificaron los [[PROC:AltaItemPresupuesto]] y [[PROC:AltaItemPresupuestoTmp]]. Se procedió a:\n**Multiplicar los coeficientes\n**Sumar los Offset\n\n=====Correcciones y Agregados=====\n*[[FORM:Modulos]]. Rediseño del originario [[FORM:Predefinidos]] y puesta en producción.\n*[[FORM:Modulos]]. Cambio de diseño para incluir el [[FORM:Modulos.FormModulos.FormDetalleProducto.FormSubSet]] como control para el ingreso de ocurrencias de subconjuntos de lineas de control. Se crea la [[MACRO:ChangeFieldtxtSubSetTPFORMModulos]] para la validación del identificativo de Wide/Height del elemento.\n*[[TABLA:modulosdet]]. Cambio de esquema para albergar ocurrencias de Subconjuntos de \"lineas de control\" con el alta de la [[TABLA:modulossbs]].\n*[[VISTA:viscompcnt]]. Restylish de la vista\n*[[FORM:CopiaComposicion]]. Restylish, modificación de SubForm.\n\n====Release 20121030====\n=====Problemas Conocidos=====\n*Aleatoriamente no elimina registros y cuando se visualiza o refresca la tabla, hace shutdown de la sesión\n=====Correcciones y Agregados=====\n* [[MACRO:AprobacionPresupuesto]]. Corrección. Se modifica la acción posterior de redespliegue de subformularios eliminando las instrucciones anteriores y sumando la rutina [[MACRO:ControlFormPresupuesto]]\n====Release 20121029====\n=====Problemas Conocidos=====\n=====Correcciones y Agregados=====\n* [[TABLA:vidquoten1]]. Corrección. Se agregan los controles de NOTNULL a los atributos de Cliente y de Agente Comercial.\n* [[FORM:Presupuesto]]. Corrección. Por diferencias aparentes en las versiones de la DB vs. ODBC se cambia el DataSource de [[FORM:Presupuesto.DataCliente]] para que lo haga sobre la [[TABLA:contactos]] y no sobre la [[VISTA:clientes]].\n* [[FORM:Presupuesto]]. Corrección. Se agregan los controles de límites para los atributos de Ancho y Alto dentro de [[FORM:Presupuestos.Productos]].\n**El esquema funciona haciendo un llamado básicamente a la rutina indicada en [[MACRO:CheckValidMeasure]] ante los eventos de ItemChange de ambas columnas.\n**Se modifica el esquema de [[MACRO:EventoBRCDetallePresupuesto]] que gestionaba a la fecha escencialmente el alta de registros en [[TABLA:viquoten3]] transfiriendo esa ejecución del alta a traves de [[MACRO:AltaProductoPresupuesto]] que se ejecuta en [[MACRO:EventoARADetallePresupuesto]] con los parámetros de acción provenientes de [[MACRO:EventoBRADetallePresupuesto]]. Es precisamente la [[MACRO:EventoARADetallePresupuesto]], donde efectua el chequeo [[MACRO:CheckValidMeasure]], que siendo declarada como función, retorna el valor del chequeo para que se mantenga dentro del mismo control en el caso de error.\n**Esta modificación general permite que el refresco del Control correspondiente al Subtotal lo haga aún si presiona el ícono de grabar sin efectuar el \"gesture\" natural de la secuencia de ingreso de datos (presionar [Enter]) del registro en el [[FORM:Presupuesto.Productos.ProductosGrid]].\n\n====Release 20121024====\n=====Correcciones y Agregados=====\n* [[FORM:PosicionCRM]]. Corrección de Data Source.\n* [[RPRT:IndividualCRM]]. Corrección de Data Source y MakeUp Fecha Detalle\n* [[FORM:ConsultaClienteCRM]]. Corrección de Data Source de [[FORM:ConsultaClienteCRM.MainForm.SFSaldo]]\n* [[TABLA:magnitudes]]. Agregado de tabla\n====Release 20121005====\n=====Problemas Conocidos=====\n* [[FORM:PosicionCRM]]. Existen diferencias en los origenes de datos por lo que muestra diferentes resultados de [[FORM:ConsultaClientesCRM]]\n=====Correcciones y Agregados=====\n* [[PROC:AltaItemPresupuestoTmp]]. Corrección. Error en el procedimiento. El error radicaba en que la condición de los registros existentes dentro de la [[TABLA:vidquoten3tmp]] para evitar el agregado de esos mismos registro por parte del procedimiento desde la [[TABLA:componentes]]. Los valores que existían eran las constantes utilizadas para las pruebas. Se procede al reemplazo por parte de los parámetros provenientes de la función que llama al procedimiento. Se agrega además un parche para asignar el atributo ElementoPM para aquellos Elementos que no han arrastrado previamente por algún motivo este elemento al momento de grabar.\n* [[VISTA:proveedores]]. Cambio de formato del tag\n* [[PROC:CalculoPrecio]]. Agregado de los cálculos correspondientes a las nuevas magnitudes ALto y ANcho.\n* [[FORM:Presupuesto]]. Corrección. Ordenamiento del vector de ProductosDSC.\n* [[FORM:Presupuesto]]. Agregado. Se agrega la opción dentro del ListBox correspondiente a ProductosDSC de \"Selección de Filtro\". Lanza la [[MACRO:ControlLista]] y recupera el valor anterior con [[MACRO:ResetFiltroProductoFORMPresupuesto]].\n* [[FORM:Presupuesto]]. Corrección. Se agrega la función para afectar las eliminaciones de productos.\n* [[FORM:Presupuesto]]. Corrección. Se elimina el tabstop del campo de aprobado.\n* [[FORM:Aux000002]]. Corrección. Se cambia la Property de Add record.\n* [[MACRO:SugerenciaContactoID]]. Se agrega la distinción para que pueda ser leido correctamente desde [[FORM:Aux000002]].\n* [[FORM:Presupuesto]]. Se elimina la visualización del boton de prueba en la zona de Composicion.\n* [[FORM:Presupuesto]]. Se agrega valor por defecto en [[CTRL:Presupuesto.txtVidQuoteACom]]\n* [[FORM:Presupuesto]]. Se agrega la visualización del FORM:ComponentesDisplay desde [[MACRO:EventoWhenLoadingFormCabecera]]\n====Release 20120912====\n=====Problemas Conocidos=====\n* [[FORM:Presupuesto]]. La ayuda específica de ingreso de la descripción de producto no funciona.\n* [[FORM:PosicionCRM]]. El reporte [[RPRT:IndividualCRM]] muestra problemas aleatorios en la última columna (despliega aleatoriamente decimales).\n=====Correcciones y Agregados=====\n* [[FORM:Presupuesto]]. Diseño. Agregado de Form:DataCliente para evitar repetir la consulta de los datos del cliente (descripción, coeficientes agregados, etc.)\n* [[FORM:Presupuesto]]. Diseño. Agregado de Form:DataAgente para evitar repetir la consulta ya que se agrega la modalidad de aplicar el coeficiente que tiene el agente comercial adicional al del cliente y a los definidos en el módulo de precios.\n* [[FORM:Presupuesto]]. Corrección. El [[CTRL:Presupuesto.ListaProducto]] pasa a depender de [[CTRL:Presupuesto.Cabecera]]\n* [[VISTA:acomerciales]]. Se cambia el nombre del ID principal por AComercialID y se agregan los datos de Coeficiente que proviene de la [[TABLA:contactos]].\n* [[TABLA:contactos]]. Se agrega un atributo que puede representar la fotografía o logo de la empresa contacto.\n* [[PROC:AltaItemPresupuesto]]. Correcciones y Test.\n* [[PROC:ActualizaItemPresupuesto]]. Correcciones y Test\n* [[TRIG:Actualiza_Item_Presupuesto]]. Creación en el evento SQL BEFORE UPDATE sobre [[TABLA:vidquoten2]] para reemplazar la ejecución del proceso de actualización en [[MACRO:EventoBRCDetallePresupuesto]]. Cuando activa el UPDATE, la [[MACRO:EventoBRCDetallePresupuesto]] solo refresca la [[TABLA:vidquoten3]]\n* [[PROC:CopiaPresupuesto]]. Reactivación a razón del rediseño [[FORM:Presupuesto]].\n* [[FORM:Presupuesto]]. Inclusion del ordenamiento por el atributo VidQuoteID dentro de [[TABLA:vidquoten1]]\n\n====Release 20120901====\n* [[FORM:Presupuesto]]. Cambio de diseño.\n* [[TABLA:precios]]. Agrega atributo para identificar el usuario del último cambio.\n* [[FORM:PreciosTabularNormal]]. Modificación. Agregado de columnas a la vista de la tabla. Fecha de última modificación y Usuario.\n* [[FORM:PreciosGeneral]]. Modificación. Ajustes de forma y agregado de columna de Usuario Evento.\n* [[FORM:ConsumoMasivoPrecios]]. Modificacion. Ajustes de forma y agregado de columnas a la vista de la tabla. Fecha de última modificación y Usuario.\n* [[FORM:Contactos]]. Ajuste y Rediseño. Se colocó el tipo de contacto en primer lugar para poder utilizar la función de sugerencia de código de contacto. Se rediseñó la función de sugerencia de código de contacto para que abarque todos los tipos de contactos.\n* [[VISTA:clientes]]. Cambio de condicion de la [[TABLA:contactos]] por cambio de tipo de variable del tag de clientes y el agregado de Coeficiente de MarkUp.\n* [[TABLA:telemecomp]]. Alta de Tabla.\n* [[FORM:ComposicionMasivoxProducto]]. Modificacion. Se cambió el tipo de lista de control del atributo ElementoPM\n* [[FORM:CopiaComposicion]]. Modificación. Se modificó el orden y el tipo de control de atributo ElementoPM\n* [[FORM:ComposicionProductoElemento]]. Modificacion. Se cambió el tipo de lista de control del atributo ElementoPM\n* [[FORM:CopiaComposicion]]. Corrección. Se actualizó la [[MACRO:CopiaComposicion]] para fijar posicion sobre la decisión de copiar datos anteriores\n* [[PROC:DuplicaProductoCompo]]. Se agrega el parámetro de descripción del producto destino.\n* [[TABLA:composicion]]. Agrega atributo ComposicID autoincremental para diferenciar aquellos que están duplicados.\n* [[FORM:ComposicionMasivoxProducto]]. Se edita para que adapte el ingreso del atributo Composic. Luego de las pruebas de test, la eliminación de un registro de Producto/Elemento similar, eliminaba todos los iguales.\n* [[TABLA:vidquoten3]]. Agrega atributo ComposicID autoincremental para diferenciar aquellos que están duplicados.\n* [[TABLA:vidquoten3tmp]]. Agrega atributo ComposicID para diferenciar aquellos que están duplicados.\n* [[PROC:AltaItemPresupuestoTmp]]. Se revisó e introdujeron los cambios asociados a la incorporación del atributo ComposicID de las [[TABLA:vidquoten3tmp]] y [[TABLA:vidquoten3]]\n* [[PROC:ActualizaPreciosTabular]]. Modificación. Corrección / Verificación de Fórmulas del Release 20120424.[[File:warning-icon-hi.png|20px]]\n* [[PROC:GrabaItemPresupuestoTmp]]. Generación para cerrar el círculo de edición de componentes durante el presupuesto.\n* [[PROC:ResetEdicionItemTmp]]. Creación para eliminar las registraciones temporarias en [[TABLA:vidquoten3tmp]]\n* [[FORM:Presupuesto]]. Cambios\n** Se habilita la posibilidad de solo consulta para todos los Presupuestos Aprobados con [[MACRO:ControlFormPresupuesto]].\n** Se limita la posibilidad de eliminar Presupuesto / Producto para Presupuestos Aprobados y se habilita el LOC (Last Opportunity Check) con [[MACRO:ConfirmaDeletePresupuesto]]\n** Chequeos [[FORM:PresupuestoV1.0]].\n***Form:Cabecera\n****[[MACRO:NewResetListBox]]: No es necesario. No se usa más la modificación del contenido del ListBox OTA.\n****[[MACRO:PresupuestoExpirado]]: Optimizar y agregar como función dentro de [[MACRO:ControlFormPresupuesto]]\n****[[MACRO:EventoWhenLoadingFromCabecera]]\n*****Confirmar [[MACRO:ChequeoLicenciaOK]]\n*****Eliminar limpieza ListBox\n*****Asigna default Fecha Presupuesto con [[MACRO:Hoy]]\n*****Eliminar Reset ListBoxes\n****[[MACRO:EventoBRADetallePresupuesto]]\n*****Sin Cambios\n****[[MACRO:EventoBRCDetallePresupuesto]]\n****[[MACRO:BotonActualizarPresupuesto]]\n*****Adaptación al nuevo [[PROC:ActualizaPreciosPresupuesto]]\n\n=== Versión 1 ===\n====Release 20120720====\n* [[FORM:Pagos]]. Creación.\n* [[TABLA:tdocumento]]. Rediseño. Se incorporan atributos para indicar cuales son los procesos que se incluye el documento para un posterior filtro.\n* [[FORM:ClientesCRM]]. Rediseño. Se reemplaza las tablas y se confecciona a partir de los presupuestos aprobados/pendientes y de las cobranzas.\n* [[FORM:Cobranzas]]. Modificación. Se agrega la posibilidad de asignación por cliente (cuenta corriente).\n* [[TABLA:accpayab]]. Creación.\n====Release 20120628====\n* [[FORM:Categorias]]. Rediseño. Se rediseña la interfaz de acuerdo a el nuevo lineamiento y se agrega un control de Grid para su mejor visualización.\n* [[FORM:PreciosGeneral]]. Rediseño. Se agrega el Control Grid sobre la [[TABLA:precios]] y los controles de navegación.\n* [[TABLA:vidquoten1]]. Se agrega el atributo para controlar si se efectua la medición en obra.\n====Release 20120627====\n* [[FORM:CopiaComposicion]]: Modificado: Se generan una nueva forma de copia duplicación de componentes. Se agregan además las funciones de Agregado masivo a partir de otro producto y de control de repetición de producto.\n* [[FORM:PresupuestoV1.0]]. Modificado. Se prepara el acceso de los Módulos permitiendo la copia de un módulo predefinido en forma completa.\n* [[FORM:ComposicionMasivoxProducto]]. Modificado. Se agrega un control de navegación para cada grupo de datos: Productos y Elementos.\n====Release 20120608====\n* [[FORM:Predefinidos]]. Creación. Genera una nueva instancia inicial con presupuestos \"preformateados\" que simulen un nivel inmediato superior al esquema Producto-Elemento-Parámetro que permitiría inicialmente generar anteproyectos. Queda pendiente el ingreso de este grupo como elemento manipulable.[[File:warning-icon-hi.png|20px]]\n* [[TABLA:predefcab]]. Creación\n* [[TABLA:predefdet]]. Creación\n====Release 20120515====\n* [[FORM:Productos]]. Modificación. Cambio del control de verificación del campo ProductoID. Cambio de Control y verificación en [[TABLA:productos]], [[TABLA:composicion]] y [[TABLA:precios]]. Se habilita función específica de verificación de integridad. Ok\n* [[FORM:Productos]]. Modificación. Corrección de código por bug en función iif en Basic en el evento AfterChangeRecordFORMProductos.\n* [[REPORTE:PresupuestoDirecto]]. Modificación. Agregado de Numéración de páginas para el caso de presupuestos de más de una hoja de extensión.\n* [[PROC:CalculaPrecioBase]]. Incorpora el cálculo de las magnitudes \"2H\" (cálculo en base a la altura indicada multiplicada por 2) y \"2W\" (cálculo en base al ancho indicado multiplicado por 2).\n* [[PROC:CalculoPrecio]]. Incorpora el cálculo de las magnitudes \"2H\" (cálculo en base a la altura indicada multiplicada por 2) y \"2W\" (cálculo en base al ancho indicado multiplicado por 2).\n* [[FORM:MasivoCoeficienteActualizacion]]. Asigna [[MACRO:CambioMasivoCoeficientesPrecios]] y agrega botón de limpieza con [[MACRO:LimpiarMasivoCoeficientesPrecios]]\n* [[PROC:CalculaPrecioBase]]. Modificación. Se agrega la alternativa dentro de la fórmula de Metro Lineal (ML) que calcule también en caso de:\n** Cuando se realice el calculo de componentes de un producto cuya valorización se debe definir Ancho y Alto (por si tiene elementos con magnitudes de Metro Cuadrado -M2-)\n** Cuando tenga algún componente que se refiera exclusivamente al Alto o Al Ancho, en cuyo caso se debe administrar el uso a través del CoeficienteAncho y CoeficienteAlto.[[File:warning-icon-hi.png|20px]]\n* [[PROC:CalculoPrecio]]. Modificación. Se agrega la alternativa dentro de la fórmula de Metro Lineal (ML) que calcule también en caso de:\n** Cuando se realice el calculo de componentes de un producto cuya valorización se debe definir Ancho y Alto (por si tiene elementos con magnitudes de Metro Cuadrado -M2-)\n** Cuando tenga algún componente que se refiera exclusivamente al Alto o Al Ancho, en cuyo caso se debe administrar el uso a través del CoeficienteAncho y CoeficienteAlto.[[File:warning-icon-hi.png|20px]]\n* [[PROC:CalculoMedidaReal]]. Se agrega la función para facilitar el cálculo de la medida real (con respecto al Vano) para la información para Producción.[[File:warning-icon-hi.png|20px]]\n====Release 20120507====\n* [[FORM:PrecioTabularXProceso]]. Modificación. Corrección posicion botones ejecución. Ok.\n* [[FORM:PrecioTabularXProceso]]. Modificación. Corrección alineamiento lbl Filtro. Ok.\n* [[FORM:PrecioTabularXProceso]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:Productos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:PrecioTabularXProceso]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:PrecioTabuladoNormal]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXProducto]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:CambioMasivo]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:ComposicionProductos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXElementos]]. Modificación. Agregado de Control de Navegación. Ok\n* [[FORM:GestionMasivaXElementos]]. Modificación. Agregado BoxControls, Activación de filtro. Ok\n====Release 20120424====\n* [[PROC:ActualizaPreciosTabular]]. Modificación. Corrección de Formulas.[[File:warning-icon-hi.png|20px]]\n====Release 20120409====\n* [[FORM:PresupuestoV1.0]]. Reemplazo de Iconos operativos por gráficos. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Proceso de Copia de Presupuesto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Proceso de Filtro de Presupuestos con Boton On/Off. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Agregado de Hide/UnHide del Bloque de Parámetros de Elementos. Nuevo. Ok\n* [[TABLA:Precios]]. Reducción de decimales por cálculo automático de precios. Modificado. Ok.\n* [[FORM:Contactos]]. Reemplazo del Formulario por otro Diseño. Nuevo. Ok.\n* [[FORM:Contactos]]. Agregado de Proceso de Sugerencia de Contacto. Nuevo. Ok.\n* [[FORM:PrecioTabularNormal]]. Cambio de formato de campos de precios debido al cambio de estructura. Modificado. Ok.\n* [[FORM:MasivoCoeficientesActualizacion]]. Agregado de Formulario. Nuevo. Ok.\n* [[FORM:Productos]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n** Agregado de Esquema de Filtro.\n** Agregado de Hide/UnHide del Bloque de Filtro.\n* Corrección \"On Error\" en Acceso inicial a DB con 3 repeticiones posibles. Nuevo. Ok.\n* [[FORM:PresupuestoV1.0]]. Modificación. Corrección de los procesos de envío directo de correo al cliente. Ok.\n* [[FORM:PresupuestoV1.0]]. Modificación. Agregado del proceso de Aprobación de Presupuesto dentro del mismo formulario de ingreso / consulta para facilitar el proceso administrativo. Ok.\n* [[TABLA:Productos]]. Modificación. Agregado del atributo Reposicion. Ok. Enviado a Batch de Actualización de DB.\n* [[FORM:Productos]]. Modificación. Agregado del atributo Reposicion. Ok\n* [[FORM:Productos]]. Nuevo. Agregado de control tipo tabla en Filtro para búsqueda rápida. Ok\n* [[FORM:PresupuestoV1.0]]. Cambio de Relación entre DetallePresupuesto / Detalle Producto. Agregado de valores de Alto y Ancho. [[File:warning-icon-hi.png|20px]]\n* [[PROC:AltaItemPresupuesto]]. Modificacion. Cambio de esquema para incorporar subitems.\n* [[PROC:CalculoPrecio]]. Nuevo. Procedimiento para solo establecer el cálculo sin buscar los valores necesarios en [[VISTA:valprodadic]]\n====Release 20120328====\n* [[FORM:PresupuestoV1.0]]. Chequeo de Eliminación de Elemento Básico en Detalle de Producto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Chequeo de incorporación de Elementos restantes. Modificado. Ok\n* [[FORM:PresupuestoV1.0]]. Imposibilidad de modificar un Elemento básico en un Presupuesto. Nuevo. Ok\n* [[FORM:PresupuestoV1.0]]. Cambio de esquema de Eventos en la cascada de subformularios. Modificado. Ok\n* [[FORM:PresupuestoV1.0]]. Incorporación de Botón de Actualización de Precios. Nuevo. Ok.\n* [[FORM:PrecioTabularXProceso]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PrecioTabularXProceso]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:GestionMasivaPorProducto]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:GestionMasivaPorProducto]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:PreciosGeneral]]. Cambio de Esquema de Filtro Inicial. Nuevo. Ok\n* [[FORM:PreciosGeneral]]. Boton de limpieza campo Filtro. Nuevo. Ok\n* [[FORM:ProductosElementos]]. Eliminación Campo MarkUP. Modificado. Ok.\n* [[FORM:Contactos]]. Rediseño. Nuevo. En proceso de desarrollo.\n* Varios: Corrección de Acceso a URL de imagenes sobreimpresas de botones de acción. Correr carpeta \"Graficos\" como subdirectorio del main.\n====Release 20120112====\n* Activación de Wiki\n* Desarrollo y test de [[TRIGGER:Alta_Productos]]\n* Modificación de [[VISTA:visindetpre]]\n* Modificación de [[TABLA:composicion]]\n** Default values para Coeficientes Alto/Ancho y Offset Alto/Ancho\n====Release 20120113====\n* Alta Formulario Presupuesto: Aprobación\n** Por el período de prueba se visualizan todos los valores de VidQuoteEstado.\n* Alta Formulario Presupuestos Aprobados\n* Modificación Formulario Presupuesto: Alta + Pendientes\n** Solo se visualizarán los VidQuoteEstado<>1\n* Modificación de Mantenimiento>Productos\n** Control de ingreso de Magnitudes\n* Test Formulario Presupuesto\n** Errores generados por combinación padre-hijo-nieto en el esquema de VidQuoteEstado<>1.<br/><strike>El error estaba dado porque cuando daba de alta el registro de VidQuoten1 con VidQuoteEstado=NULL, grababa el registro saltaba al subformulario (bug?) pero no tenía referencia posible ya que se encontraba vigente el filtro VidQuoteEstado<>1 y perdía el registro padre, entonces duplicaba los registros hijo y generaba error de insert record por duplicación de clave.<br/>Se procedió a definir por default el valor 0 para el atributo VidQuoteEstado</Strike>\n====Release 20120118====\n* Modificación [[FORM:PresupuestoV1.0]]>Alta + Pendientes:\n** Se detecta la incompatibilidad en la integración de Triggers en MySQL - ODBC - LibreOffice.\n** Búsqueda de soluciones a partir de comportamiento de Eventos. Se cambia la gestión de resultados del despliegue de datos de Precios por código asociado al cambio de valores dentro del grid.\n** Se generan las funciones de usuario de Cálculo de Precio\n====Release 20120119====\n* Continua de 20120118\n** Se procede a eliminar los Triggers asociados a TABLA:vidquoten2\n** Se genera el procedimiento de Alta obligatoria de elementos asociados a producto\n====Release 20120120====\n* Modificación [[FORM:PresupuestoV1.0]]>Alta + Pendientes:\n** Se realiza código para reemplazar los Triggers asociados a TABLA:vidquoten2\n*** Se activan los eventos de BeforeAction para controlar la operación y AfterAction para ejecutar la operación. Se confeccionan procedimientos de control de registraciones\n*** Se activan los eventos de para la corrección de atributos de SUBFORM:DetalleProducto\n====Release 20120122====\n* Modificación de TABLA:contactos. Se agrega el atributo ContactoIDAbrv (\"Abreviatura\").\n* Modificación FORM:Contactos: Se agrega el atributo ContactoIDAbrv (\"Abreviatura\").\n* Modificación VISTA:Proveedores: Se agrega el atributo Abreviatura (\"Abreviatura\")\n* Modificación FORM:Productos: Se agregan los atributos Coeficientes Precios 1/2/3 y Proveedor.\n* Modificación FORM:Productos: Se corrige el ListBox de Magnitud y se cambia el ValueList por la consulta de la TABLA:Productos de las magnitudes existentes.\n====Release 20120123====\n* Control de Procedimiento de Impresión asignada (REPORT:Presupuesto Directo). OK.\n* Investigación sobre com.sun...executeDispatch\n* Investigación sobre Environmental Variables + MAC\n* Investigación sobre ExportToPDF Method.\n====Release 20120124====\n* Funcionalidad a botón de [[FORM:PresupuestoV1.0]]>Alta+Pendientes sobre envío de Correo.\n** Se detecta un bug en la integración Thunderbird - LibreOffice Basic: La bandera de \"No mostrar Dialogo\" no funciona.\n====Release 20120125====\n* Agregado de Agente Comercial\n** Agregado en [[TABLA:vidquoten1]]\n** Agregado en [[TABLA:contactos]]\n** Agregado de [[VISTA:acomerciales]]\n** Modificación de [[FORM:Contactos]].\n*** Agregado de Option\n** Modificación de [[FORM:Presupuestos>Alta+Pendientes]]\n*** Agregado de campo AComercial con Listbox en Abreviatura del ContactoID.\n====Release 20120127====\n* Modificacion [[TRIGGER:Alta_Producto]]\n** Agrega registro de Producto Básico en [[TABLA:composicion]].\n====Release 20120203====\n* Generación de [[REPORTE:Composicion.Productos]]\n* Generación de [[REPORTE:Lista.Precios.Vigentes]]\n* Generación de [[REPORTE:Contactos.Resumen]]\n* Modificación de [[REPORTE:Presupuesto]]\n** Ampliar Campo Producto\n** Cambiar variable filtro por \"_\"\n** Cambiar Dirección de Cliente.\n====Release 20120206====\n* Modificación [[TABLA:productos]]\n** Agregado ProductoPID:VARCHAR(15).\n** Identifica el código puente del proveedor para hacer el pedido correspondiente\n* Modificación [[FORM:productos]]\n** Agregado de campo de código puente','utf-8'),(1152,'== Notes ==\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1153,'== Notes ==\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1154,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore --accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1155,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1156,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1157,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\nnetstat -tul\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1158,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1159,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[OpenOffice/Python|http://lucasmanual.com/mywiki/OpenOffice]]\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1160,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice|OpenOffice/Python]]\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1161,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1162,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n*[[http://wiki.openoffice.org/wiki/OOoES/Desarrollo/PyUNO_ES Desarrollo PyUNO]]\n*[[http://wiki.openoffice.org/wiki/PyUNO_bridge PyUNO bridge]]\n*[[http://wiki.openoffice.org/wiki/Extensions_development_python Extensions Development Python]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1163,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n*[[http://wiki.openoffice.org/wiki/OOoES/Desarrollo/PyUNO_ES Desarrollo PyUNO]]\n*[[http://wiki.openoffice.org/wiki/PyUNO_bridge PyUNO bridge]]\n*[[http://wiki.openoffice.org/wiki/Extensions_development_python Extensions Development Python]]\n*[[http://es.diveintopython.net/toc.html Sumergirse en Pyton]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1164,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n*[[http://wiki.openoffice.org/wiki/OOoES/Desarrollo/PyUNO_ES Desarrollo PyUNO]]\n*[[http://wiki.openoffice.org/wiki/PyUNO_bridge PyUNO bridge]]\n*[[http://wiki.openoffice.org/wiki/Extensions_development_python Extensions Development Python]]\n*[[http://es.diveintopython.net/toc.html Sumergirse en Pyton]]\n*[[http://cutter.rexx.com/~dkuhlman/python_101/python_101.html Python 101-Introduction to Python]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1165,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Generado. Representa el Producto generado por un módulo. No puede ser igual a ProductoID a menos que responda en forma individual / a si mismo\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n*[[http://wiki.openoffice.org/wiki/OOoES/Desarrollo/PyUNO_ES Desarrollo PyUNO]]\n*[[http://wiki.openoffice.org/wiki/PyUNO_bridge PyUNO bridge]]\n*[[http://wiki.openoffice.org/wiki/Extensions_development_python Extensions Development Python]]\n*[[http://es.diveintopython.net/toc.html Sumergirse en Pyton]]\n*[[http://cutter.rexx.com/~dkuhlman/python_101/python_101.html Python 101-Introduction to Python]]\n*[[http://beastie.cs.ua.edu/cs150/book/index.html The Art and Craft of Programming - Python Edition]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),(1166,'== Notes ==\n\n=== Acceso a \"OpenOffice\" Server para PyUNO ===\n<pre>\n<LO o OO caller command> --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n<pre>\nlibreoffice3.4 --nodefault --nologo --minimized --norestore \\\n--accept=\"socket,host=localhost,port=2002;urp;\" --invisible\n</pre>\n=== Check listening Port OpenOffice Server ===\n<pre>\nnetstat -tul\n</pre>\n\n=== Descripción Nuevo Productos ===\n*ProductoGen\nProducto Genérico. Representa el Producto genérico asociado al código de ProductoID.\n*ProductoDflt\n*MagnitudIn. Magnitud de Ingreso. Puede diferir a la Magnitud\n*MagCmpX\n*MagCmpY\n*MagCmpZ\n*ProductoProy\n\n== KnowledgeBase ==\n=== OOBasic / LOBasic / StarOffice Basic ===\n*[[:Category:OOBasicCode|OOBasic CodeSnippets]]\n=== PyUNO ===\n*[[http://lucasmanual.com/mywiki/OpenOffice OpenOffice/Python]]\n*[[http://wiki.openoffice.org/wiki/OOoES/Desarrollo/PyUNO_ES Desarrollo PyUNO]]\n*[[http://wiki.openoffice.org/wiki/PyUNO_bridge PyUNO bridge]]\n*[[http://wiki.openoffice.org/wiki/Extensions_development_python Extensions Development Python]]\n*[[http://es.diveintopython.net/toc.html Sumergirse en Pyton]]\n*[[http://cutter.rexx.com/~dkuhlman/python_101/python_101.html Python 101-Introduction to Python]]\n*[[http://beastie.cs.ua.edu/cs150/book/index.html The Art and Craft of Programming - Python Edition]]\n==== General Events ====\n{| class=\"wikitable\"\n|<center>\'\'\'Event Name\'\'\'</center>\n|<center>\'\'\'Event Type\'\'\'</center>\n|<center>\'\'\'Descripción Ejecución\'\'\'</center>\n\n|-\n|Prior To Reset\n|EventObject\n|Antes que el formulario sea reseteado. El formulario es reseteado cuando el cursos se mueve a la fila insertada\n\n|-\n|After Reset\n|EventObject\n|Luego que el formulario se resetea\n\n|-\n|When Loading\n|EventObject\n|Cuando el formulario es cargado la primera vez\n\n|-\n|Before Reloading\n|EventObject\n|Antes que el formulario es recargado -también cuando se presiona el boton de recarga desde la barra de navegación o programandolo\n\n|-\n|When Reloading\n|EventObject\n|Cuando un formulario es recargado\n\n|-\n|Before Unloading\n|EventObject\n|Antes que inicie el formulario\n\n|-\n|When Unloading\n|EventObject\n|Cuando el formulario se está descargando\n\n|-\n|Confirm Deletion\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es seleccionado para ser eliminado.\n\n|-\n|Before Record Action\n|com.sun.star.sdb.RowChangeEvent\n|Cuando un registro es ingresado, actualizado o eliminado\n\n|-\n|After Record Action\n|EventObject\n|Luego de una accion es ejecutada sobre un registro. Ni antes ni después se se va a ejecutar hasta que se salga del registro modificado o el boton de Grabar sea presionado.\n\n|-\n|Before Record Change\n|EventObject\n|Antes que el formulario despliegue otro registro.\n\n|-\n|After Record Change\n|\n|Después que el formulario despliegue otro registro.\n\n|}\n==== Basic IDE ====\n* Largo de archivo menor a 64K\n\n== Reset MW pass ==\n<pre>\nUPDATE user \nSET user_password = CONCAT(\':A:\', MD5(\'<password>\')) \nWHERE TRIM(CAST(user_email AS CHAR(40)))=<direccion>\n</pre>\n== KeyTeam ==\n{| class=\"wikitable\"\n|<center>\'\'\'Code\'\'\'</center>\n|<center>\'\'\'Site\'\'\'</center>\n|<center>\'\'\'Eq\'\'\'</center>\n|-\n|850417886\n|FZG\n|FZG001\n|-\n|219838925\n|FZG\n|FZG002\n|-\n|707325105\n|FZG\n|FZG010\n|-\n|161523437\n|MMV\n|ADMIN\n|}','utf-8'),