PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 03-12-2010 09:36:40

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

[SOURCE] SaveAs avec rapport imbriqué (nested report)

Lors d'un SaveAs en PDF, Excel,... sur un rapport contenu dans une librairie d'edition (PBL) contenant des nested report, seul le principal est imprimé dans le fichier de destination.

Pour voir apparaître les autres, il faut impérativement que ces fichiers soit présents dans une librairie compilée (fichier PBD).


Pré requis :

- Compiler une librairie et placer ce fichier PBD dans le répertoire de l'application (is_filepbd_model dans le code). Il sera utilisé comme modèle d'une librairie compilée temporaire.

Voici l'algorithme résumé :

- Détection de la présence d'un rapport imbriqué
- Création d'une PBD temporaire à partir du modèle
- Transfert des rapports liés dans la PBD
- Rattachement du fichier PBD à la librairie list de votre application


Voici le code de la fonction (un argument nommé as_ds, la DataStore du rapport principal):

Code: pb

/*==>  Gestion de la présence d'un rapport imbriqué  <==*/
string ls_objets, ls_buffer, ls_tab_objets[], ls_nom_rapport, ls_syntax, ls_erreurs, ls_temp, ls_tab_delete[]
integer li_nb, li_ret
boolean ab_creation = true, ab_need_pbd = false
long ll_i

/*==>  Recherche d'un rapport imbriqué  <==*/
ls_objets = as_ds.object.datawindow.Objects

li_nb = 1
ls_buffer = ls_objets
do
  
  if pos(ls_buffer, '~t') = 0 then
    ls_tab_objets[li_nb] = ls_buffer
    ls_buffer = ''
  else
    ls_tab_objets[li_nb] = trim(left(ls_buffer, pos(ls_buffer, '~t') - 1))
    ls_buffer = trim(mid(ls_buffer, pos(ls_buffer, '~t') +1))
  end if
  
  if isnull(ls_tab_objets[li_nb]) or ls_tab_objets[li_nb] = '' then 
    li_nb++
    continue
  end if
  

  /*==>  S'agit il d'un nested    <==*/
  if as_ds.describe(ls_tab_objets[li_nb] + '.type') = 'report' then
    
    if ab_creation then
      /*==>  Copie de la PBD modèle  <==*/
      is_filepbd_temp =  string(today(), 'yymmdd') + string(now(), 'hhmmssffffff') + string(rand(32000)) +'.pbd'
      
      li_ret = FileCopy(is_filepbd_model,is_filepbd_temp)
        of_log("Fichier PBD généré : " + is_filepbd_temp,0)
      if li_ret = -1 then
        of_log("Erreur lors de la creation du fichier PBD (Accès au fichier modèle) : " + is_filepbd_temp,0)
      elseif li_ret = -2 then
        of_log("Erreur lors de la creation du fichier PBD (Ecriture du fichier temporaire) : " + is_filepbd_temp,0)
      end if
      
      /*==>  Flage la creation de la PBD  <==*/
      ab_creation = false
    end if
    
    /*==>  Extraction du dataobject    <==*/
    ls_nom_rapport = as_ds.describe(ls_tab_objets[li_nb] + '.Dataobject')
    
    /*==>  Export du rapport     <==*/
    ls_syntax = LibraryExport(is_nom_pbl, ls_nom_rapport, ExportDataWindow!)

    /*==>  import du rapport dans la PBD  <==*/
    li_ret = LibraryImport(is_filepbd_temp, ls_nom_rapport, ImportDataWindow!, ls_syntax, ls_erreurs)
    if li_ret < 0 then
      of_log("Erreur d'import du rapport "+ ls_nom_rapport + " dans la PBD :~r~n" + ls_erreurs + "~r~nVérifiez que " + is_filepbd_temp +" n'est pas verrouillé en écriture et réessayez",0)
      return -1
    else
      of_log("Import du rapport "+ ls_nom_rapport + " dans le fichier " + is_filepbd_temp,0)
    end if
    
    ab_need_pbd = true

  end if
  
  li_nb++
loop while not isnull(ls_tab_objets[li_nb - 1]) and ls_tab_objets[li_nb - 1] <> ''

/*==>  Ajout de la PBD dans le librarie liste de l'application  <==*/
if ab_need_pbd then
  li_ret = addtolibrarylist(is_filepbd_temp)
  
  if li_ret <> 1 then
//    inv_mail.of_ajoutlog(inv_mail.ii_handlefichier,"Erreur lors de AddToLibraryList de " + is_filepbd +". li_ret = " + string(li_ret))
  end if
end if

/*==>  Tout s'est bien passé    <==*/
return 1

Dernière modification par mial (03-12-2010 10:15:51)

Hors ligne

 

#2 03-12-2010 10:04:45

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [SOURCE] SaveAs avec rapport imbriqué (nested report)

Mais on n'oublie pas les bonnes vieilles habitudes:


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 03-12-2010 10:08:40

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [SOURCE] SaveAs avec rapport imbriqué (nested report)

Autant pour moi.

C'est corrigé!

Hors ligne

 

#4 03-12-2010 10:52:20

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [SOURCE] SaveAs avec rapport imbriqué (nested report)

Nickel 000 pépites


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22