# Automatismes Boucle

### <mark style="color:blue;">Créer un automatisme boucle</mark> <a href="#toc330546862" id="toc330546862"></a>

Dans SIMAX vous pouvez décrire des automatismes qui s’exécutent un certain nombre de fois. Le but est d’éviter des saisies répétitives.

Le formulaire d'automatisme boucle se remplit de la même manière qu'un automatisme classique. La seule différence se situe au niveau de l'onglet « **Répéter ces actions (utilisation avancée)** ».

*Exemple d’utilisation : Vous créez un nouvel immeuble qui a 10 étages. Vous voulez créer automatiquement les étages. Il suffira de boucler sur le nombre d’étages dans l’automatisme boucle.*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FdlFwQj1rZUOKyUEptf3w%2F0.png?alt=media)

<p align="right"><em>IMG_P00205</em></p>

| **Formule** : inscrivez la formule sur laquelle la boucle s’exécutera.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Modèle** : indiquez un modèle de champ le cas échéant.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| <p><strong>Nombre de tours en transactionnel</strong> : ce champ ajoute la possibilité de fixer le nb de tour de boucle d'automatisme sont fait en mode transactionnel. Cela permet de valider un automatisme tous les x tours de boucle au lieu de faire un déclenchement d'automatisme "non transactionnel".</p><p>Il faut importer le SMX : Langage 07.00.smx</p><p>Si « Nombre de tours en transactionnel » = 0 alors c'est fonctionnement normal</p><p>Si vous avez un boucle sur 10 éléments et que "Nombre de tours en transactionnel" = 4 alors l'exécution est :</p><p>- Actions sur élément 1</p><p>- Actions sur élément 2</p><p>- Actions sur élément 3</p><p>- Actions sur élément 4</p><p>Non transactionnel</p><p>- Actions sur élément 5</p><p>- Actions sur élément 6</p><p>- Actions sur élément 7</p><p>- Actions sur élément 8</p><p>Non transactionnel</p><p>- Actions sur élément 9</p><p>- Actions sur élément 10</p><p>Si "Nombre de tours en transactionnel" = 1 après chaque ensemble d'actions sur 1 élément</p> |

*Explication: Lorsque vous créez un immeuble (action déclenchante), l'automatisme lancera une création d'étage (action à lancer). L'automatisme boucle va lancer des créations d'étages autant de fois que mentionné dans le formulaire « immeuble ». Si l'immeuble a 10 étages, l'automatisme boucle va se lancer 10 fois dans la création d'étages.*

*On peut faire un deuxième automatisme boucle à partir d'une création d'étage, qui lancera autant de création d'appartement que mentionné dans le champ « nb appartement / étage ».*

*<mark style="color:red;">**Remarque**</mark> : l'enregistrement de départ pour les automatismes boucle est l'enregistrement courant de la boucle et non pas l'enregistrement sur lequel porte l'automatisme boucle. SIMAX recherche en priorité dans la boucle ; si aucun enregistrement n'est trouvé, SIMAX cherche dans l'enregistrement déclencheur (cf. chapitre : les différents enregistrements utilisés dans les actions automatiques)*

*<mark style="color:$danger;">**Attention**</mark>* *à l'ordre des opérations sur colonne. Exemple : article = id.unique de article puis qté = qté de Article. L'inverse ne marche pas car aucun article n'est connu, SIMAX ne sait pas où trouver la quantité. Quand aucun enregistrement n'est sélectionné dans le cadre de la boucle, SIMAX ne fait rien.*

Répéter ces actions (Utilisation avancée) :

« **Pour toutes les combinaisons de valeurs des formules suivantes** » : il y a quatre types de boucles:

* les boucles sur un modèle liste d'éléments
* les boucles sur un modèle ID Unique
* les boucles sur un modèle entier
* les boucles sur une formule

Cliquez sur «**Créer** » pour insérer la colonne sur laquelle va porter la boucle, ou pour insérer une fonction.

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FFfwhsk0rNJlmSNieFcIQ%2F1.png?alt=media)

<p align="right">IMG_P00206</p>

« **pour toutes les combinaisons de valeurs des colonnes suivantes (pour compatibilité uniquement)** » est un tableau amené à disparaître. Il est conservé pour que les anciens paramétrages continuent de fonctionner. Dans une nouvelle version de SIMAX, une fonction permettra de fusionner les deux tableaux et de supprimer définitivement ce deuxième tableau. SI vous avez paramétré des automatismes en boucle avec ce tableau, vous ne devez pas remplir le premier tableau. L'avantage du premier tableau est que vous n'avez pas besoin de créer une colonne dont le seul but est de contenir la formule de l'automatisme boucle. Elle peut être insérée directement dans « boucle automatisme ».

#### <mark style="color:blue;">Boucle sur une liste d'éléments</mark> <a href="#toc330546863" id="toc330546863"></a>

Si la boucle porte sur une liste *(exemple : liste collaborateur)*, l'action à lancer se répétera autant de fois qu'il y a d'éléments dans cette liste.

**Action déclenchante** : créer réunion

**Action à lancer** : envoi automatique de message

Boucle :

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FQBcqMIaoGkJkhWGNxuWj%2F2.png?alt=media)

<p align="right">IMG_P00207</p>

Il y a 3 collaborateurs dans la liste des collaborateurs conviés à une réunion, l’automatisme va envoyer 3 fois un message d’alerte pour les 3 collaborateurs. A chaque tour, l’automatisme change de contexte pour envoyer le même message à un collaborateur différent.

#### <mark style="color:blue;">Boucle sur l'identifiant Unique d'un formulaire</mark> <a href="#toc330546864" id="toc330546864"></a>

Si la boucle porte sur un Identifiant Unique (ID Unique), l'action à lancer se répètera autant de fois qu'il y aura d'ID uniques différents dans la base.

**Action déclenchante** : créer article

**Action à lancer** : lancement automatique d'action: créer mouvement de stock

Boucle:

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FcokxMTWXECDFu9RNpoUH%2F3.png?alt=media)

<p align="right"><em>IMG_P00208</em></p>

*A la création d'un article, l'automatisme lance une création de stock pour chaque établissement. Ainsi nous obtiendrons une indication sur la disponibilité de l'article dans chaque établissement.*

#### <mark style="color:blue;">Boucle sur un entier</mark> <a href="#toc330546865" id="toc330546865"></a>

Si la boucle porte sur un entier, l'action à lancer se répètera autant de fois que la valeur mentionnée dans le champ

**Action déclenchante** : créer immeuble

**Action à lancer** : créer étage

Boucle :

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FxwbFM9QaZwM6iJeWpXtd%2F4.png?alt=media)

<p align="right"><em>IMG_P00209</em></p>

*Si on crée un immeuble (5 étages), l'automatisme lancera une création d'étages. L'automatisme boucle fera que cet automatisme se réalisera autant de fois qu'il y a d'étages, ici 5.*

#### <mark style="color:blue;">Boucle sur une formule</mark> <a href="#toc330546866" id="toc330546866"></a>

Vous pouvez insérer une formule. Cette formule peut être :

* un calcul avec un résultat entier *(ex : nombre d'étage \* nombre d'appartement)*
* une formule renvoyant une liste d'éléments *(ex : Selection(\['contacts' de 'Rendez-vous'], \['Id. unique' de 'Rendez-vous'])*

**Action déclenchante** : créer étage

**Action à lancer** : créer appartement

Boucle :

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FkwrDXzuSPvMph5mFejUd%2F5.png?alt=media)

<p align="right"><em>IMG_P00210</em></p>

**Évaluation des formules des boucles automatismes**

L'évaluation de la formule d'une boucle automatisme se fait à partir de :

\- l'enregistrement déclencheur pour la première boucle

\- l'enregistrement courant de la boucle précédente pour toutes les autres boucles

### <mark style="color:blue;">Utilisation de plusieurs boucles dans un automatisme</mark> <a href="#toc330546867" id="toc330546867"></a>

Si vous combinez plusieurs boucles, l’action se répète autant de fois qu’il existe de combinaisons différentes sur l’ensemble des boucles.

*Exemple: créer commande => créer stock (avec 2 boucles) :*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FCi5yVA566soMSISMhtVn%2F6.png?alt=media)

<p align="right">IMG_P00211</p>

*Cet automatisme va créer un stock pour chaque agence de chaque article de la commande.*

*Contexte : disponibilité des articles dans les différentes agences :*

**Article 1**

Agence 1

Agence 2

**Article 3**

Agence 4

Agence 5

Agence 6

**Article 2**

Agence 3

Ici, l'automatisme va créer 6 stocks : le stock de l'article 1 dans l'agence 1, le stock de l'article 1 dans l'agence 2, le stock de l'article 2 dans l'agence 3 etc.

#### <mark style="color:blue;">**Sélection des enregistrements des boucles sur colonne**</mark>

se fait à partir de :

\- l'enregistrement déclencheur pour la première boucle

\- l'enregistrement courant de la boucle précédente pour toutes les autres boucles

*Ex : si vous souhaitez faire un automatisme boucle pour chaque "agence" de chaque "article" qui crée un stock*

*Boucle 1 : sélectionner les articles à partir de la commande*

Boucle 2 : sélectionner les agences à partir de l'article courant de la boucle 1 (id.unique de Article)

### <mark style="color:blue;">Utilisation de 'valeur boucle'</mark> <a href="#toc330546868" id="toc330546868"></a>

Reprendre l'exemple ci-dessus :

*L'automatisme 'créer commande => créer stock '(avec 2 boucles) crée un stock pour chaque agence de chaque article de la commande.*

*Les boucles sont donc sur l'article et l'agence :*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FAuKQ8tJalVC4CcpKqnux%2F7.png?alt=media)

<p align="right">IMG_P00211</p>

Dans les actions à lancer, dans les opérations sur colonnes il est possible d'utiliser en valeur par défaut la fonction 'ValeurBoucle'.

*Exemple vous pouvez dire que le champ 'article' dans le formulaire 'stock' prendra la valeur qui est décrite dans la boucle 1. La boucle 1 est la première ligna apparaissant dans l'onglet 'répéter ces actions'.*

*Actions à lancer :*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FlDX5FXl0moruJdNUtsDM%2F8.png?alt=media)

<p align="right">IMG_P00213</p>

### <mark style="color:blue;">Utilisation d’un compteur dans l’automatisme</mark> <a href="#toc330546869" id="toc330546869"></a>

\- Fonctions compteurboucle(indice boucle)

\- Fonction compteurboucle(colonne de la boucle)

Dans le cas de l’immeuble qui a N étages et X appartements par étage. Vous voulez créer automatiquement les appartements. Il suffira de boucler sur le nombre d’étages et dans un deuxième automatisme de boucler sur le nombre d’appartements par étage.

*Exemple du premier automatisme :*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2F3B4Y9TqZShQDzNM93a84%2F9.png?alt=media)

<p align="right"><em>IMG_P00214</em></p>

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FSyUmTgGJh35MFlcmBwJy%2F10.png?alt=media)

<p align="right"><em>IMG_P00215 IMG_P00215</em></p>

*Pour remplir le champ « Numéro Etage », vous utiliserez l'opération sur colonne :*

![](https://1324884545-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvBJ3Kpe0vg6NlDz0QDIX%2Fuploads%2FjvKHgMLfbDnqK9FtWhK9%2F11.png?alt=media)

<p align="right">IMG_P00216</p>

{% hint style="success" %}
*<mark style="color:green;">**Note**</mark>: pour les boucles automatismes vous devez utiliser compteurboucle(indice boucle)*
{% endhint %}

Pour les boucles sur colonne vous pouvez utiliser la fonction compteurboucle(colonne du compteur) (comme dans l'exemple) ou bien compteurboucle(indice boucle)

Ainsi, dans notre exemple, pour le champ N° d’étages, la formule aurait pu être compeutboucle(0)

*<mark style="color:red;">**Remarque**</mark> : Le compteurboucle prend en paramètre l'indice de la boucle (le numéro de la ligne dans la liste des boucles) et renvoie un entier qui est le numéro du tour de la boucle. Le résultat du compteurboucle commence à 1 contrairement à l'indice de la boucle qui commence à 0.*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.simax.fr/automatiser/automatismes-boucle.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
