| | Discusiones Técnico Uso de tablas t... | |
|
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 5:51 (Spain) |
| | |
Pues si la necesitas deberías crearla.
|
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 5:55 (Spain) |
| | |
Para ordenar se necesita la clave.
El problema es cuando la tabla es muy grande y crear más claves resulta costoso. Si ese es el caso, es cuando tienes que crear la tabla Buffer, que como nunca tiene registros reales, puedes crear tantas claves como quieras, que no pasa nada.
Al principio del proceso hay que copiar todos los registros que te interesen de la tabla, a la tabla buffer, y allí ordenar.
Salut!
|
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 5:58 (Spain) |
| | |
| Hola Kitik, efectivamente eso es lo que quiero, me puedes concretar el procedimiento un poco más, con algo de código.
Gracias. |
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 6:25 (Spain) |
| | |
1. Crea la tabla buffer. Esta tabla puede ser muy generica, como propone vvilla o más específica, como hace NAV con las tablas Buffer. Al ser generica se va a poder reaprovechar en otros procesos, pero es mas dificil programar porque los campos no dicen nada, con lo que el código es más lioso de seguir. Si es mas especifica va a ser más fácil trabajar con ella, pero no se va a poder reaprovechar tanto. Valora tu caso. Crea aquí todas las claves que necesites.
2. Crea una variable temporal que apunte a la tabla buffer.
3. Recorre la tabla inicial y copia los registros que te interesen en la variable temporal. La tabla buffer no tiene porque tener todos los campos de la tabla incial, solo los que necesites para el proceso.
ItemLedEntry.SETFILTER(<campo>,<filtro>); IF ItemLedEntry.FINSET THEN REPEAT tmpBuffer.INIT; tmpBuffer.Campo1 := ItemLedEntry.<campo>; ... tmpBuffer.CampoN := ItemLedEntry.<campo>; tmpBuffer.INSERT; UNTIL ItemLedEntry.NEXT = 0;
4. Ahora en tmpBuffer tienes los registros. Puedes ordenar, situar el puntero en el primer registro y empezar a trabajar! tmpBuffer.SETCURRENTKEY(<campo1>,<campo2>,...) tmpBuffer.FINDSET;
Cuando utilices tablas temporales, tienes que tener muy en cuenta el ambito de la variable. Si llamas a otro proceso te quedas sin la variable, a no ser que se la pases... Si llamas a otra instancia del mismo objeto te pasa lo mismo.
Salut!
|
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 8:51 (N/A) |
| | |
Gracias Kitik por tu valiosa ayuda, pero ¿donde se crean las tablas Buffer?, ¿que ID utilizan?.
Saludos. Pedro |
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 9:00 (Spain) |
| | |
Una tabla temporal es una tabla normal y corriente, que se crea del mismo modo y en la misma numeración que las demás tablas. Solo que para usarla como temporal, en tu proceso, cuando declares una variable de tipo record de esta tabla, en las propiedades de la variable pones Temporal a Si. Eso significa que en cualquier momento puedes crearte una variable temporal de cualquier tabla de Navision, no solo de las tablas que hayas creado tu.
|
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 9:26 (N/A) |
| | |
Pues la verdad es que no lo veo claro.
Recuerdo que en el curso que nos dio nuestro partner nos comento que las tablas temporales no ocupaban licencia, o por lo menos eso es lo que yo entendí, en estos momentos voy bastante al límite en cuanto a ID'S para la creación de nuevas tablas. |
| |
| | |
Re: Uso de tablas temporales. Posted: 03 jun 08 9:41 (Spain) |
| | |
Si que ocupan licencia, si, porque son tablas normales y corrientes, aunque tu las uses como temporales. De ahí la creación de una única tabla para estos fines, como comentaba vvilla. De este modo gastas una única tabla, y la puedes utilizar para lo que quieras, aunque seguramente la programación es un poco más liada, porque al tener nombres de campos genéricos, tienes que tener muy claro que datos estás metiendo en cada campo en cada momento....
|
| |
| | Discusiones Técnico Uso de tablas t... | |
| | | |
| | | |
| | | |