Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Hello, j'ai une DW tabular external qui contient divers sous-rapports external.
Je voudrais compléter mes données des sous-rapports, mais je trouve pas.
J'aiessayer avec un getchild, mais Pb mes dis que mon sous-rapport n'est pas une window child ????
Que faire ???
Je suis en Pb 9.0
Complément : je viens d'essayer avec une DW composite, contenant mes sous-rapports, mais ça va pas mieux !!!
Merci
Dernière modification par Sylvie de hannut (20-03-2012 14:37:20)
Hors ligne
tu pourrais poster un extrait du code qui ne compile pas (je presume) ?
Hors ligne
Le code compil, il plante à l'exécution.
Nouvel essai :
1ère fonction :
old_processing=ids_print.Object.Datawindow.Processing ids_print.Object.Datawindow.Processing="5" // Composite rtncode = ids_print.GetChild('d_tigr_it001_print', idwc_print) IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
Fonction d'initialisation des valeurs :
li_ret = idwc_print.setitem(li_row,'dateit',as_t_data[1]+as_t_data[2]+'-'+as_t_data[3]+'-'+as_t_data[4]) li_ret = idwc_print.setitem(li_row,'datedel',as_t_data[5]+as_t_data[6]+'-'+as_t_data[7]+'-'+as_t_data[8]) li_ret = idwc_print.setitem(li_row,'residence',as_t_data[9]) li_ret = idwc_print.setitem(li_row,'code_residence',as_t_data[10]) li_ret = idwc_print.setitem(li_row,'fusion',as_t_data[11]) li_ret = idwc_print.setitem(li_row,'language',as_t_data[12])
J'ai pas d'erreur à la compil, et à l'exécution, pour le setitem, Pb me renvoie une erreur -1.
??????
Hors ligne
Bonjour,
Tu n'aurais pas simplement oublié l'InsertRow avant de faire le SetItem, tu ne le mentionnes pas dans ton extrait de code ?
... li_row = idwc_print.InsertRow(0)
Hors ligne
NB :
Hors ligne
Sylvie de hannut a écrit:
...
J'ai pas d'erreur à la compil, et à l'exécution, pour le setitem, Pb me renvoie une erreur -1.
??????
Avec la MessageBox("Error", "Not a DataWindowChild") qui apparaît avant d'avoir -1 sur les setitem ?
Si oui: c'est "normal" car idwc_print n'étant pas correctement affecté car GetChild(...)=-1, il n'a (peut-être) pas de dataobject/dwsyntax valide.
Je te conseil de vérifier pourquoi le GetChild ne fonctionne pas: quel est l’intérêt de modifier le processing=5 avant de faire le GetChild?
Que vaut ids_print.Describe("d_tigr_it001_print.type") ?
Hors ligne
le processing=5 permet de modifier ma dw de tabular en composite, pour que pb reconnaisse bien mes sous-rapports comme des dw child ==> le getchild fonctionne bien !!!
Le setitem ne me renvoie plus d'erreur !!!
Aucun affichage en fin de traitement ????????????
Hors ligne
Qu'est-ce qui peux faire qu'un sous-rapport external ne s'imprime pas ????
Hors ligne
Tu n'as pas répondu à la question de Buck sur le InsertRow
Hors ligne
le insertrow est fait, et apparement il n'y a pas d'erreur.
Je ne comprend pas, j'ai aucune erreur nulle part, mais en fin de trt, je n'ai rien à l'affichage, même pas les titres de mes sous-rapports se trouvant dans les header !!!!!
Hors ligne
Je suppose qu'il n'y a pas de filtre d'actif sur ta datawindow?
Hors ligne
non aucun filtre
Hors ligne
je n'ai jamais travailler avec des dw external, je fais peut-être quelque chose d'erroné.
Pour moi, il suffit d'insérer des données pour qu'elles s'affichent, non ?
Hors ligne
Tu n'as pas non plus précisé le type de tes reports: ce sont des external, mais y a-t'il parmi elles une datawindow RichText?
Hors ligne
Attention à ne pas confondre une DW composite et une DW avec un nested report.
Ce n'est pas le même comportement.
Pour une composite, il n'y a pas de datasource, donc les reports intégrés dedant sont chargés en direct
Pour une nested, il faut impérativement avoir des lignes dans celle-ci pour que les reports intégrés s'affichent, ceux -ci étant
chargés en fonction des lignes présentes dans ta nested.
Ton idée de modifié par code le processing est erronée. Il vaut mieux partir d'une vrai composite, ou s'assurer que ta nested est correctement chargée.
Hors ligne
Information complémentaire : il n'y a pas de db associée à ce programme Pb et je travaille via un datastore !!!!
C'est pour cette raison que je travaille tout en external, et non je n'ai pas de rich text.
Juste une DW external liée à un datastore, contenant diverses autres dw external, tout en tabular.
J'espérais remplir ma datastore pour ensuite la passer à ma fenêtre d'impression.
Mais ma fenêtre d'impression n'affiche rien, aucune donnée venant d'un de mes sous-rapport ???
Même si j'encadre mes sous-rapports, il n'y a rien qui s'affiche ???
Dernière modification par Sylvie de hannut (12-03-2012 14:54:53)
Hors ligne
Et tu as des lignes dans ta datastore? Je suppose qu'elle est en sharedata avec ta DW external?
Hors ligne
Création du datastore
ids_print = create datastore
ids_print.dataobject = "dw_l_resp_niss_report_group2"
ids_print.settransobject(sqlca)
dw_l_resp_niss_report_group2 : contient plusieurs sous-rapports external
Création d'une datawindowchild liée à ids_print
old_processing=ids_print.Object.Datawindow.Processing
ids_print.Object.Datawindow.Processing="5" // Composite
rtncode = ids_print.GetChild('d_tigr_it001_print', idwc_print)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
idwc_print.SetTransObject(SQLCA)
Initialisation des données de mon 1er dwc
idwc_print.insertrow(1)
li_ret = idwc_print.setitem(li_row,'dateit',ldt_dateit)
if li_ret <> 1 then messagebox ('ERROR SETITEM','1')
li_ret = idwc_print.setitem(li_row,'datedel',ldt_datedel)
if li_ret <> 1 then messagebox ('ERROR SETITEM','2')
li_ret = idwc_print.setitem(li_row,'residence',as_t_data[9])
if li_ret <> 1 then messagebox ('ERROR SETITEM','3')
li_ret = idwc_print.setitem(li_row,'code_residence',as_t_data[10])
if li_ret <> 1 then messagebox ('ERROR SETITEM','4')
li_ret = idwc_print.setitem(li_row,'fusion',as_t_data[11])
if li_ret <> 1 then messagebox ('ERROR SETITEM','5')
li_ret = idwc_print.setitem(li_row,'language',as_t_data[12])
if li_ret <> 1 then messagebox ('ERROR SETITEM','6')
A la fin du trt, je n'ai l'affichage que des données de la dw main, pas des sous-rapports.
Merci de votre aide, je commence à voir peur de ne pas y arriver et de devoir remplir dynamiquement une zone texte, de mon rapport principal, mais pour faire la mise en page ça va être coton, surtout qu'il risque d'y avoir plusieurs pages de résultat.
Hors ligne
juste une proposition pour t'aider, tu peux fournir les syntaxes des dw (en mp si nécessaire) ?
que je regardes dans ma DatawindowDebugMachine
Hors ligne
Bonjour, en y repensant et en rapport avec les test effectué par un collègue, je me dis que c'est l'affichage des sous-rapports qui pose problème.
En passant par une autre solution que moi, il a le même résultat : affichage des données main mais pas des autres données.
Parlons clairement : y a t'il un problème pour afficher les données de sous-rapports liés à un datastore, quand on rempli celui-ci via un nvo, et que le datastore créé est en sharedata avec la dw d'affichage ?????
Dernière modification par Sylvie de hannut (13-03-2012 08:38:21)
Hors ligne
Sylvie de hannut a écrit:
Bonjour, en y repensant et en rapport avec les test effectué par un collègue, je me dis que c'est l'affichage des sous-rapports qui pose problème.
En passant par une autre solution que moi, il a le même résultat : affichage des données main mais pas des autres données.
Parlons clairement : y a t'il un problème pour afficher les données de sous-rapports liés à un datastore, quand on rempli celui-ci via un nvo, et que le datastore créé est en sharedata avec la dw d'affichage ?????
C'est déjà plus probable que ce soit çà qui pose problème.
- vérifie que ids_print.sharedata( dw_affichage ) = 1
- je t'aurais bien proposer de tester via getFullState/setFullState, mais cela étant buggé justement lorsque l'on à des sous rapports.
Par contre me viens une autre idée: as tu partagé aussi le child de la dw_affichage ?
if ids_print.GetChild('d_tigr_it001_print', idwc_print) = 1 then datawindowchild ldwc_affichage if dw_affichage.GetChild('d_tigr_it001_print', ldwc_affichage ) = 1 then if idwc_print.sharedata( ldwc_affichage ) <> 1 then messagebox("share childs", "echec!",exclamation! ) end if end if end if
Hors ligne
ce que j'ai fait :
Pour Remplir les données des sous-rapports, j'ai utilisé la dotnotation
Ne pas faire d'insertrow, donner la ligne d'affichage
ids_print.object.d_tigr_it001_print[1].object.dateit[ai_row] = ldt_dateit
Traitement de partage des données, pas réussi à faire le sharedata, alors j'ai fait un rowscopy, entre les sous-rapports de ma dw-affichage et les sous-rapports de mon datastore.
if dw_main.Object.DataWindow.Nested then li_nb_ds = f_get_ds_object_attrib(i_ds_orig,ls_tab_ds[]) !!!! fonction qui recherche le nb de sous-rapports li_nb_dw = f_get_dw_object_attrib(dw_main,ls_tab_dw[]) end if if li_nb_ds <> li_nb_dw then messagebox ('ERROR','Problème recherche nested report') if li_nb_ds > 0 then old_processing1=i_ds_orig.Object.Datawindow.Processing i_ds_orig.Object.Datawindow.Processing="5" // Composite old_processing2=dw_main.Object.Datawindow.Processing dw_main.Object.Datawindow.Processing="5" // Composite // Création des dwc pour chaque nested report récupérés for i = 1 to li_nb_ds rtncode = i_ds_orig.GetChild(ls_tab_ds[i], dwc_ds_tab[i]) IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild") rtncode = dw_main.GetChild(ls_tab_dw[i], dwc_dw_tab[i]) IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild") next // Boucle de rowscopy for i = 1 to li_nb_ds if dwc_ds_tab[i].rowcount() > 0 then rtncode = dwc_ds_tab[i].RowsCopy (1,dwc_ds_tab[i].rowcount(), Primary!, dwc_dw_tab[i],1,Primary!) IF rtncode = -1 THEN MessageBox("Error", "Problème rowscopy") end if next i_ds_orig.Object.Datawindow.Processing=old_processing1 dw_main.Object.Datawindow.Processing=old_processing2 end if
Le changement de processing est là car le getchild ne fonctionne que sur les dw composite, mais moi je pars d'une dw tabular qui contient des données external.
J'espère avoir étée claire.
Hors ligne
Merci de ton retour,
Hors ligne