1
1

Al momento de configurar un reporte de word y necesito agregar mas de un origen de datos como utilizo los campos PK y FK o que utilidad tienen?

asked 29 May '13, 20:14

Jimy%20Tobar's gravatar image

Jimy Tobar ♦♦
(suspended)
accept rate: 56%

Jimy, no se te olvide marcar la respuesta que te ayudó a resolver tu problema!

(30 May '13, 14:50) sabanito ♦♦ sabanito's gravatar image

Es bien fácil. Supongamos que tenes 2 datasources:

  • Roles: Te regresa un listado de roles. Su llave principal es rol_id
  • UsuariosRoles: Te regresa un listado de usuarios unido con los roles que tiene, es decir que si un usuario está en 2 roles, aparecerá 2 veces. Tiene 2 columnas: usr_codrol y usr_nombre.

Lo que buscamos es un documento de word que te muestre cada rol y dentro una tabla con los usuarios que tienen dicho rol. Por lo tanto el datasource PRINCIPAL será Roles.

Ahora, en la configuración de cada datasource tendrías que poner:

  • Para el datasource ROLES no tendrias que poner nada en campos PK ni campos FK, pues es el principal. Solo tendrías que verificar que tenga puesto el chequesito de "Es Principal"
  • Para el datasource UsuariosRoles tendrías que quitar el chequesito de "Es Principal" y luego le indicarías como hacer el join con el datasource principal:
  • Campos PK: Son los campos con los que harás join en el datasource principal, es decir, que aca tendrías que poner rol_id
  • Campos FK: Son los campos que harán join con los campos PK del datasource principal, es decir, que acá tendrías que poner usr_codrol

Solo una última aclaración, es posible que el join sea con 2 o mas campos, y en este caso, simplemente pondrías los campos separados por "," y en orden, tanto en PK como en FK. Podes ver la descripción de estos al poner el mouse sobre los textboxes.


Ejemplo

Edit: Te estoy adjuntando un link para un archivo de word que te permitirá ver como funciona esto y para que puede servir: http://sdrv.ms/ZwNTgP

Este archivo está hecho para funcionar con Oracle, porque todos los campos están en mayúscula, si queres que te funcione con SqlServer solo tenes que poner el mismo casing que está en la base de Sql y listo!

Si tenes la base de desarrollo, solo tenes que ir al archivo, descargarlo y subirlo al reporte que ya está creado con el código prueba, luego te pasas a la compañía Aseinfo Guatemala y lo ejecutas sin llenar filtros y verás el resultado.

Si no tenes acceso a una base de desarrollo podes insertarlo con el siguiente script (Sql Server):

INSERT [wrp].[wrd_word_templates] ([wrd_codigo], [wrd_nombre_loc_key], [wrd_descripcion_loc_key], [wrd_codupf], [wrd_codpai], [wrd_tipo_origen_datos], [wrd_fecha_grabacion], [wrd_usuario_grabacion], [wrd_fecha_modificacion], [wrd_usuario_modificacion]) VALUES (N'prueba', N'Listado de Dependientes', N'Lista los miembros del grupo familiar del empleado', N'2049BF60-FCB8-4FD2-874C-FB0C8748BCE0', NULL, 2, CAST(0x00009C9C011653B4 AS DateTime), N'red\creyes', CAST(0x00009F13011884BF AS DateTime), N'ferpaz')
INSERT [wrp].[ddw_det_datasources_word] ([ddw_nombre], [ddw_codwrd], [ddw_origen_datos], [ddw_es_principal], [ddw_campos_join_pk], [ddw_campos_join_fk], [ddw_usuario_grabacion], [ddw_fecha_grabacion], [ddw_usuario_modificacion], [ddw_fecha_modificacion]) VALUES (N'Expediente', N'prueba', N'(select plz_codcia, exp_codigo, emp_codigo, exp_codigo_alternativo, exp_nombres_apellidos, plz_nombre
  from exp.exp_expedientes
  join exp.emp_empleos on emp_codexp = exp_codigo
  join eor.plz_plazas on plz_codigo = emp_codplz
 where emp_codigo in (177, 178, 179) and  emp_estado = ''A'') empleado', 1, NULL, NULL, N'red\creyes', CAST(0x00009C9C0116E3CA AS DateTime), N'ferpaz', CAST(0x00009F1301181085 AS DateTime))
INSERT [wrp].[ddw_det_datasources_word] ([ddw_nombre], [ddw_codwrd], [ddw_origen_datos], [ddw_es_principal], [ddw_campos_join_pk], [ddw_campos_join_fk], [ddw_usuario_grabacion], [ddw_fecha_grabacion], [ddw_usuario_modificacion], [ddw_fecha_modificacion]) VALUES (N'familiar', N'prueba', N'(select plz_codcia, emp_codigo, fae_codexp, fae_nombre, convert(varchar, fae_fecha_nac, 103) fae_fecha_nac, prt_descripcion,
       case when fae_sexo = ''M'' then ''{Masculino}'' else ''{Femenino}'' end fae_sexo
  from exp.fae_familiares_expedientes
  join exp.emp_empleos on emp_codexp = fae_codexp
  join exp.prt_parentescos on prt_codigo = fae_codprt
  join eor.plz_plazas on plz_codigo = emp_codplz) familiar', 0, N'emp_codigo', N'emp_codigo', N'red\creyes', CAST(0x00009C9C0119297A AS DateTime), N'ferpaz', CAST(0x00009F1301186DCC AS DateTime))
INSERT [wrp].[dpw_det_parametros_word] ([dpw_codwrd], [dpw_parametro], [dpw_descripcion_loc_key], [dpw_codfld], [dpw_codvli], [dpw_prompt_loc_key], [dpw_visible], [dpw_orden], [dpw_valor], [dpw_usuario_grabacion], [dpw_fecha_grabacion], [dpw_usuario_modificacion], [dpw_fecha_modificacion]) VALUES (N'prueba', N'emp_codigo', N'Código del empleado para filtrar el reporte', N'int', NULL, N'Código Empleado', 1, 5, NULL, N'ferpaz', CAST(0x00009F1300C8DFE1 AS DateTime), N'ferpaz', CAST(0x00009F1300CCB7F0 AS DateTime))
INSERT [wrp].[dpw_det_parametros_word] ([dpw_codwrd], [dpw_parametro], [dpw_descripcion_loc_key], [dpw_codfld], [dpw_codvli], [dpw_prompt_loc_key], [dpw_visible], [dpw_orden], [dpw_valor], [dpw_usuario_grabacion], [dpw_fecha_grabacion], [dpw_usuario_modificacion], [dpw_fecha_modificacion]) VALUES (N'prueba', N'plz_codcia', N'Codigo de Compañia', N'int', NULL, N'Compañia', 0, 0, N'$$CODCIA$$', N'ferpaz', CAST(0x00009F130117DFE5 AS DateTime), N'ferpaz', CAST(0x00009F1301182BED AS DateTime))
INSERT [wrp].[wrm_word_modulos] ([wrm_codwrd], [wrm_codmod]) VALUES (N'prueba', N'Expedientes')
INSERT [wrp].[wrr_word_roles] ([wrr_codwrd], [wrr_codrol]) VALUES (N'prueba', N'Administrador')

OJO No se te olvide que si estás en Oracle, los campos que pones en el word deben ir en mayúsculas, porque así los regresa Oracle.

link

answered 29 May '13, 21:07

sabanito's gravatar image

sabanito ♦♦
(suspended)
accept rate: 54%

edited 30 May '13, 22:54

Por que razón el parámetro de la consulta no funciona, es decir en una prueba tengo lo siguiente:

  1. Datasource Principal: EXP_EXP_EXPEDIENTES chequeado como principal
  2. DataSource Secundario: EXP_EMP_EMPLEOS
  3. PK del secundario: EXP_CODIGO
  4. FK del secundario: EMP_CODEXP
  5. tengo un parametro llamado EXP_CODIGO_ALTERNATIVO de tipo String

esta configuración me da un error que dice ORA-00904: "EXP_CODIGO_ALTERNATIVO": invalid identifier. De igual forma si utilizo "EMP_CODIGO".

(30 May '13, 16:10) Jimy Tobar ♦♦ Jimy%20Tobar's gravatar image

El problema es que estas usandolo mal. Has puesto nombres de tablas y no de vistas o de SP como es lo recomendado. Esto responde a que los filtros se aplican en TODAS las datasources, por lo que si un campo no existe en la otra fallará... Esto no es un bug, funciona así por diseño, ya que no queremos estar filtrando en memoria TODA la tabla secundaria, sino que lo ideal es que se haga en la base de datos

(30 May '13, 16:13) sabanito ♦♦ sabanito's gravatar image

Supongo tambien que solo podrás utilizar los campos que se encuentran en la principal, ya que, realice una prueba y un campo que solo existe en el secundario no se muestra y uno que solo existe en el primario si. Si es asi entonces el secundario solo sirve para filtrar al primario?

(30 May '13, 17:03) Jimy Tobar ♦♦ Jimy%20Tobar's gravatar image

Es que el secundario sirve para detalles. En que escenario lo queres usar?

(30 May '13, 17:16) sabanito ♦♦ sabanito's gravatar image

Yo cree mi propio escenario de prueba, no es un requerimiento, es mas, como conocimiento debido a que me ha tocado capacitar y no le encuentro la escencia de dicha funcionalidad.

(30 May '13, 20:00) Jimy Tobar ♦♦ Jimy%20Tobar's gravatar image
1

Funcionó gracias. Para ampliar un poco el datasource secundario(s) debe tener una referencia como mínimo en el principal para que funcione, si no puede dar un error.

Si lo vemos de otra manera

un hijo (secundario) debe tener padre (primario) pero un padre no necesariamente tiene que tener hijos. Autor: Sabanito.

(30 May '13, 23:45) Jimy Tobar ♦♦ Jimy%20Tobar's gravatar image
1

Esto es así porque en memoria se crea un FK y por lo tanto no pueden haber huérfanos! :)

(30 May '13, 23:48) sabanito ♦♦ sabanito's gravatar image
1

otro punto es que al querer mostrar los campos del secundario hay que hacer referencia al nombre del origen de datos. Por ejemplo:

  • si el nombre del origen de datos secundario se llama 'familiares' y tiene un campo llamado 'fae_nombre', el nombre del campo en el repote deberia llamarse <<familiares.fae_nombre>>.
(31 May '13, 00:01) Jimy Tobar ♦♦ Jimy%20Tobar's gravatar image
showing 5 of 8 show all

En el datasource principal, los campos PK y FK se dejan vacíos.

En el(los) datasource(s) secundarios, el "campo PK" tiene el nombre de una columna en el datasource principal que representa el código de enlace entre los 2 datasources.

Y el "campo FK" tiene el nombre de una columna del datasource secundario, que corresponde con el "campo PK" del datasource principal.

(Son las columnas que pondrías en la cláusula ON del JOIN entre los dos datasources)

link

answered 29 May '13, 21:10

Fernando%20Paz's gravatar image

Fernando Paz ♦♦
17.3k81635
accept rate: 51%

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Evolution en BitBucket

En este sitio puede acceder al código fuente, centro de descargas y reportar bugs, propuestas y mejoras para Evolution.

Evolution en JIRA

En este sitio puedes sugerir nueva funcionalidad para Evolution, o puedes votar por la funcionalidad ya propuesta por otros usuarios.

Tags:

×44
×13
×9

Asked: 29 May '13, 20:14

Seen: 3,052 times

Last updated: 31 May '13, 00:01

[Acerca de] [Preguntas Frecuentes] [Privacidad] [Soporte] [Contacto]
Copyright 2013-2018. Asesores en Informática