10 Replies Latest reply: Jul 4, 2017 7:10 AM by Sébastien Fatoux RSS

    boucle dans script

    Fabien Pirot

      Bonjour,

       

      J'essaie de recharger des qvd dans un script, mais seulement les deux dernières années

      Ci-joint mon script qui ne s'arrête pas ...

       

      Avez vous des idées ?

      Merci

       

      let vAnneeInitProdyear(today())-1;
      let vAnneeMaxProd = year(today());


      do while vAnneeInitProd <= vAnneeMaxProd

      LOAD *
      FROM
      prodREEL_$(vAnneeInitProd).qvd
      (
      qvd);

      Concatenate
      LOAD *
      FROM
      prodOBJ_$(vAnneeInitProd).qvd
      (
      qvd);

      let vAnneeInitProd = $(vAnneeInitProd)+1;
      loop

        • Re: boucle dans script
          Kevin Chevrier

          Bonjour Fabien,

           

          Essaie peut-être :


          Set vAnneeInitProdyear(today())-1;

          Set vAnneeMaxProd = year(today());


          do while vAnneeInitProd <= vAnneeMaxProd

          LOAD *
          FROM
          prodREEL_$(vAnneeInitProd).qvd
          (
          qvd);

          Concatenate
          LOAD *
          FROM
          prodOBJ_$(vAnneeInitProd).qvd
          (
          qvd);

          let vAnneeInitProd = $(vAnneeInitProd)+1;
          loop

          • Re: boucle dans script
            Fabien Pirot

            Bonjour Kevin,

             

            Quelle est la différence ?

            Merci

            • Re: boucle dans script
              Fabien Pirot

              Je n'ai pas vu ce détail. ^^

               

              Apres modification, mon script s'arrête bien, cependant, mes données de la table FAIT ne sont plus chargées

               

              Merci

                • Re: boucle dans script
                  Sébastien Fatoux

                  Si tu utilise SET tu auras l'expression dans ta variable et non pas le résultat de l'expression. Il faut donc utiliser LET.

                   

                  Essaye ce script:

                   

                   

                   

                  let vAnneeInitProdyear(today())-1;
                  let vAnneeMaxProd = year(today());

                  for vAnnee=vAnneeInitProd to vAnneeMaxProd

                      LOAD *
                      FROM
                      prodREEL_$(vAnnee).qvd
                      (
                  qvd);

                      Concatenate
                          LOAD *
                      FROM
                      prodOBJ_$(vAnnee).qvd
                      (
                  qvd);

                  next

                   

                   

                   

                   

                   

                   

                    • Re: boucle dans script
                      Fabien Pirot

                      Bonjour,

                       

                      Merci pour votre réponse.

                       

                      J'ai bien les deux années qui se chargent, (en deux tables au lieu d'une seule)

                      ensuite différentes tables associées comme les clients se chargent aussi

                      mais le script ne s'arrête pas après l'achèvement, je suis obligé d'abandonner ?

                       

                      Merci d'avance

                        • Re: boucle dans script
                          Sébastien Fatoux

                          Bonjour,

                           

                          je me suis concentré sur le problème de boucle sans me préoccuper du code interne à la boucle.

                           

                          essaye comme ceci:

                           

                          let vAnneeInitProdyear(today())-1;
                          let vAnneeMaxProd = year(today());

                          for vAnnee=vAnneeInitProd to vAnneeMaxProd

                              LOAD *
                              FROM
                              prodREEL_$(vAnnee).qvd
                              (
                          qvd);

                          next

                           


                          for vAnnee=vAnneeInitProd to vAnneeMaxProd

                              Concatenate
                                  LOAD *
                              FROM
                              prodOBJ_$(vAnnee).qvd
                              (
                          qvd);

                          next

                            • Re: boucle dans script
                              Fabien Pirot

                              Bonjour Sébastien,

                               

                              Merci pour la réponse, cela fonctionne.

                              Il faut bien mettre la boucle à chaque table.

                               

                              Bonne journée

                                • Re: boucle dans script
                                  Sébastien Fatoux

                                  le problème vient du fait que tes tables ont des structures différentes. On doit donc utiliser  le mot clé Concatenate qui ne peut pas être utilisé si la table n'existe pas. Tu ne peux donc pas le mettre sur ta 1ère table, se qui pose problème lors du second passage dans la boucle.

                                   

                                  Il y a 2 solutions:

                                  1. Celle utilisée, qui consiste à faire une 1ère boucle pour charger la première table (auto concatenation) qui va créer la structure, et de faire une 2eme boucle pour charger les autres tables avec le mot clé Concatenate.
                                  2. N'utiliser qu une boucle et t'arranger pour que tes requêtes te retournes les mêmes structures  ( ajouter les champs avec une valeur Null ==> Null() as monChamp). Dans ce cas, pas besoin d'utilisé le mot clé Concatenate (concaténation automatique)
                                  3. creer la structure avant la boucle (load  inline avec tous les champs sans valeur), puis une seule boucle avec tes requêtes précédée du mot clé Concatenate
                          • Re: boucle dans script
                            Kevin Chevrier

                            Set vAnneeInitProdyear(today())-1;

                            Set vAnneeMaxProd = year(today());


                            do while $(vAnneeInitProd) <= $(vAnneeMaxProd)

                            LOAD *
                            FROM
                            prodREEL_$(vAnneeInitProd).qvd
                            (
                            qvd);

                            Concatenate
                            LOAD *
                            FROM
                            prodOBJ_$(vAnneeInitProd).qvd
                            (
                            qvd);

                            let vAnneeInitProd = $(vAnneeInitProd)+1;
                            loop