
# Champs comptage et numérotation

Ni l'un ni l'autre ne reçoit de valeur d'un utilisateur. `count` est dérivé d'une relation ; `autonumber` est attribué par la base de données à l'insertion. Les deux acceptent également les [propriétés de base des champs](/fr/docs/tables-overview#proprits-de-base-des-champs).

## `count`

Compte les enregistrements liés par un champ de relation **de la même table** — un `rollup` réduit à la seule agrégation que tout le monde veut.

| Propriété           | Description                                                                            |
| ------------------- | -------------------------------------------------------------------------------------- |
| `relationshipField` | Nom du champ de relation de cette table dont il faut compter les enregistrements liés. |
| `filters`           | Filtres appliqués au comptage des enregistrements liés.                                |

`filters` prend le vocabulaire de conditions partagé : `field`, `operator` et `value` pour une condition simple, `and` et `or` pour en composer plusieurs.

```yaml
- {
    id: 2,
    name: completed_task_count,
    type: count,
    relationshipField: tasks,
    filters: { field: status, operator: equals, value: completed },
  }
```

`relationshipField` doit nommer un véritable champ `relationship` de la même table. C'est vérifié au décodage de la configuration : une faute de frappe, ou une référence à un champ d'un autre type, arrête le démarrage plutôt que de compter zéro indéfiniment.

`filters` restreint ce qui est compté, avec la même grammaire de conditions que les filtres d'une vue. Sans lui, chaque enregistrement lié compte.

## `autonumber`

Un entier auto-incrémenté attribué par la base de données — le type de champ derrière les références de factures et de commandes. La colonne est une séquence : la valeur est allouée par la base à l'insertion et n'est jamais fournie par le client.

`autonumber` n'accepte aucune propriété qui lui soit propre.

```yaml
- { id: 3, name: invoice_number, type: autonumber }
```

Cela produit `1`, `2`, `3`, et ainsi de suite. Pas de préfixe, pas de décalage de départ, pas de remplissage par zéros. Pour une référence lisible comme `INV-01000`, ajoutez un champ [`formula`](/fr/docs/formula-fields) qui compose le nombre avec le préfixe et le remplissage voulus. La présentation reste ainsi en un seul endroit et la séquence sous-jacente n'est pas touchée, si bien que le format peut changer sans renuméroter quoi que ce soit.

Une séquence ne promet pas non plus d'être sans trou. Une transaction qui alloue un numéro puis échoue l'a tout de même consommé, et c'est correct : le réutiliser laisserait deux enregistrements porter la même référence à des moments différents.

## Les deux se recalculent plutôt que de stocker

`count` se recalcule quand les liens qu'il compte changent. `autonumber` est attribué une fois puis fixé. Aucun des deux n'est accessible en écriture, ni par l'API des enregistrements ni par un formulaire : une écriture qui les nomme est refusée plutôt qu'acceptée puis jetée.

## Pages connexes

- [Champs formule](/fr/docs/formula-fields) — l'expression calculée, et la présentation d'une référence `autonumber`.
- [Champs relationnels](/fr/docs/relational-fields) — la relation que `count` traverse, plus `rollup` et `lookup`.
- [Présentation des types de champs](/fr/docs/field-types-overview) — tous les types par catégorie.
