{}const=>[]async()letfn</>var
1CDéveloppement

Conditions dans 1C : si, sinon et logique des règles métier

Guide détaillé des constructions conditionnelles en 1C. Analysons la syntaxe Si-Alors-Sinon, SinonSi, l'opérateur ternaire et l'opérateur CHOIX dans les requêtes. Nous vous montrerons quatre scénarios commerciaux réels, du contrôle des stocks à l'approbation automatique des documents. Nous analyserons les erreurs typiques des débutants et apprendrons à écrire un code propre et lisible avec des conditions.

К

Kodik

Auteur

9 min de lecture

Les constructions conditionnelles sont la base de toute logique métier dans 1C : Enterprise. Réduction pour un client grossiste, blocage de l'expédition en cas de solde négatif, choix du taux de TVA en fonction du groupe de nomenclature : toutes ces tâches sont résolues par le biais de la ramification du code. Dans cet article, nous analyserons la syntaxe des conditions, les modèles typiques et les scénarios commerciaux réels auxquels chaque développeur 1C est confronté.

Syntaxe de base : Si … Alors … FinSi

La construction conditionnelle la plus simple dans le langage 1C se compose de trois éléments obligatoires : le mot-clé Если, suivi d'une expression logique, puis le mot Тогда, le bloc de code et la fermeture КонецЕсли. Si la condition est vraie, le bloc est exécuté à l'intérieur de la structure. Si elle est fausse, il est entièrement ignoré.

// Vérification simple : interdiction de la transaction avec un montant nul
Если Объект.СуммаДокумента = 0 Тогда
    Сообщить("The document amount cannot be zero!");
    Отказ = Истина;
КонецЕсли;

Veuillez noter : 1C n'a pas d'accolades, comme en JavaScript ou C#. Les limites du bloc sont définies par des mots-clés. Un point-virgule est placé après КонецЕсли et après chaque opérateur à l'intérieur du bloc.

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

Branche « Sinon » — traitement d'un scénario alternatif

Lorsqu'il est nécessaire d'exécuter un bloc de code lorsque la condition est vraie et un autre lorsqu'elle est fausse, la construction avec Иначе est utilisée. Il s'agit d'un modèle classique « ou-ou » que l'on retrouve dans la grande majorité des tâches commerciales.

// Déterminer le type de prix pour le client
Если Контрагент.ОптовыйПокупатель Тогда
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Wholesale");
Иначе
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Retail");
КонецЕсли;

Ici, le programme vérifie les détails de la contrepartie et, en fonction de sa valeur, attribue à la variable l'un des deux types de prix. Le bloc Иначе est exécuté uniquement lorsque la condition après Если a renvoyé Ложь.

Conditions multiples : SinonSi

La logique commerciale réelle se résume rarement à deux options. Lorsqu'il est nécessaire de vérifier trois scénarios ou plus, la construction ИначеЕсли est utilisée. La plate-forme vérifie les conditions séquentiellement de haut en bas et exécute le premier bloc dont la condition s'est avérée vraie. Toutes les autres branches sont ignorées.

// Calcul de la remise en fonction du montant de la commande
Если СуммаЗаказа >= 500000 Тогда
    ПроцентСкидки = 15;
ИначеЕсли СуммаЗаказа >= 100000 Тогда
    ПроцентСкидки = 10;
ИначеЕсли СуммаЗаказа >= 50000 Тогда
    ПроцентСкидки = 5;
Иначе
    ПроцентСкидки = 0;
КонецЕсли;

L'ordre des branches dans ИначеЕсли est d'une importance critique. Si vous mettez la vérification sur 50 000 en premier, alors la commande de 500 000 ira également dans cette branche, car 500 000 >= 50 000. Toujours organiser les conditions de la plus stricte à la plus douce.

Opérateurs logiques : ET, OU, NON

Les conditions peuvent être combinées à l'aide de trois opérateurs logiques. Cela vous permet de construire des contrôles complexes qui prennent en compte plusieurs facteurs à la fois.

L'opérateur И (conjonction) renvoie Истина lorsque les deux conditions sont vraies. L'opérateur ИЛИ (disjonction) renvoie Истина quand au moins une condition est vraie. L'opérateur НЕ (négation) inverse la valeur - renvoie Истина lorsque la condition est fausse.

// L'expédition est autorisée si les marchandises sont en stock ET le client n'est pas bloqué
Если ОстатокНаСкладе > 0 И НЕ Контрагент.Заблокирован Тогда
    РазрешитьОтгрузку();
КонецЕсли;

// Conditions spéciales pour les clients VIP ou les employés
Если Контрагент.VIP ИЛИ Контрагент.Сотрудник Тогда
    ПрименитьСпециальнуюСкидку();
КонецЕсли;

Dans 1C, il n'y a pas de calcul « paresseux » des expressions logiques (short-circuit evaluation). La plateforme calcule toujours les deux opérandes, même si le résultat est déjà évident pour le premier. Cela signifie que si le deuxième opérande peut provoquer une erreur, vous devez le placer dans une vérification séparée via le Если imbriqué.

Opérateurs de comparaison

Pour la construction de conditions dans 1C, un ensemble standard d'opérateurs de comparaison est disponible. Ils fonctionnent avec des nombres, des chaînes, des dates et des types de référence : = (égal), <> (différent), > (supérieur), < (inférieur), >= (supérieur ou égal), <= (inférieur ou égal).

// Exemples d'utilisation d'opérateurs de comparaison
Если Статус = "Paid" Тогда
    // traitement de la commande payée
КонецЕсли;

Если Остаток <> 0 Тогда
    // le reste n'est pas nul
КонецЕсли;

Если ДатаОтгрузки < ТекущаяДата() Тогда
    // date d'expédition expirée
КонецЕсли;

Если Количество >= МинимальнаяПартия Тогда
    // quantité suffisante pour l'expédition
КонецЕсли;

Conditions intégrées

À l'intérieur de n'importe quel bloc Если, vous pouvez placer d'autres structures conditionnelles. C'est ce qu'on appelle l'imbrication. Elle permet d'implémenter une logique étape par étape, où chaque niveau de vérification suivant dépend du résultat du précédent.

// Vérification à plusieurs niveaux lors de la présentation d'un document
Если Объект.Контрагент.Пустая() Тогда
    Сообщить("No counterparty specified!");
    Отказ = Истина;
Иначе
    Если Объект.Контрагент.Заблокирован Тогда
        Сообщить("Counterparty is blocked. Please contact your supervisor.");
        Отказ = Истина;
    Иначе
        Если Объект.СуммаДокумента > Объект.Контрагент.КредитныйЛимит Тогда
            Сообщить("Counterparty credit limit exceeded!");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Essayez de ne pas aller plus loin que trois niveaux d'imbrication. Si la logique exige plus, effectuez des vérifications dans des fonctions distinctes ou utilisez une « sortie anticipée » en définissant la variable Отказ et en revenant de la procédure.

Opérateur ternaire : construction ?(…, …, …)

1C propose une alternative compacte à la construction Si-Sinon pour les cas simples où vous devez choisir l'une des deux valeurs. Il s'agit d'un opérateur ternaire qui est écrit avec un point d'interrogation.

// Forme complète :
Если Контрагент.ОптовыйПокупатель Тогда
    Приветствие = "Dear Partner,";
Иначе
    Приветствие = "Dear Customer,";
КонецЕсли;

// Forme compacte via un opérateur ternaire :
Приветствие = ?(Контрагент.ОптовыйПокупатель, "Dear Partner,", "Dear Customer,");

Syntaxe : ?(Условие, ЗначениеЕслиИстина, ЗначениеЕслиЛожь). L'opérateur ternaire est pratique pour attribuer des valeurs aux variables, générer des chaînes et définir des paramètres. Ne l'utilisez pas pour une logique complexe, cela nuit à la lisibilité.

Scénarios commerciaux réels

Examinons quelques tâches typiques auxquelles un développeur 1C est confronté dans son travail quotidien.

Scénario 1 : Contrôle des stocks lors de l'expédition

Lors de la validation du document « Vente de marchandises », il faut s'assurer qu'il y a suffisamment de marchandises en stock. Si le solde est insuffisant, bloquez la transaction et affichez un message clair.

Для Каждого СтрокаТЧ Из Объект.Товары Цикл

    Остаток = ПолучитьОстатокНаСкладе(СтрокаТЧ.Номенклатура, Объект.Склад);

    Если СтрокаТЧ.Количество > Остаток Тогда
        Сообщить("Not enough goods: "
            + СтрокаТЧ.Номенклатура
            + ". In stock: " + Остаток
            + ", required: " + СтрокаТЧ.Количество);
        Отказ = Истина;
    КонецЕсли;

КонецЦикла;

Scénario 2 : calcul automatique du taux de TVA

En fonction du groupe de nomenclature de la marchandise, le taux de TVA requis est automatiquement remplacé. Cela évite au gestionnaire d'avoir à sélectionner manuellement et réduit la probabilité d'erreur.

Если Номенклатура.НоменклатурнаяГруппа = Группы.ДетскиеТовары
    ИЛИ Номенклатура.НоменклатурнаяГруппа = Группы.Продовольствие Тогда
    СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
ИначеЕсли Номенклатура.НоменклатурнаяГруппа = Группы.Экспорт Тогда
    СтавкаНДС = Перечисления.СтавкиНДС.НДС0;
ИначеЕсли Номенклатура.НоменклатурнаяГруппа = Группы.МедицинскиеИзделия Тогда
    СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
Иначе
    СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
КонецЕсли;

Scénario 3 : Délimitation des droits lors de l'approbation

Les documents au-delà d'un certain montant nécessitent l'approbation du responsable. Les gestionnaires ordinaires ne peuvent envoyer que pour approbation, tandis que les responsables peuvent approuver directement.

ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;
ЭтоРуководитель = ТекущийПользователь.Роль = Перечисления.Роли.Руководитель;

Если Объект.СуммаДокумента > 1000000 Тогда
    Если ЭтоРуководитель Тогда
        Объект.Статус = Перечисления.СтатусыДокументов.Утверждён;
        Сообщить("The document is approved.");
    Иначе
        Объект.Статус = Перечисления.СтатусыДокументов.НаСогласовании;
        Сообщить("The document has been sent to the manager for approval.");
    КонецЕсли;
Иначе
    Объект.Статус = Перечисления.СтатусыДокументов.Утверждён;
КонецЕсли;

Scénario 4 : Contrôle des délais de paiement

Le système vérifie automatiquement les paiements en retard et génère des avertissements de gravité variable.

ДнейПросрочки = (ТекущаяДата() - Объект.ДатаОплаты) / 86400;

Если ДнейПросрочки <= 0 Тогда
    Статус = "On time";
ИначеЕсли ДнейПросрочки <= 7 Тогда
    Статус = "A small delay";
    ОтправитьНапоминание(Объект.Контрагент);
ИначеЕсли ДнейПросрочки <= 30 Тогда
    Статус = "Critical overdue";
    ОтправитьПретензию(Объект.Контрагент);
    ЗаблокироватьОтгрузки(Объект.Контрагент);
Иначе
    Статус = "Submitted to lawyers";
    СоздатьЗадачуЮристу(Объект.Контрагент, ДнейПросрочки);
КонецЕсли;

Erreurs typiques et comment les éviter

Erreur 1 : comparaison avec un lien vide

Les débutants écrivent souvent Если Контрагент = "" Тогда, essayant de vérifier l'intégralité des détails de la référence. C'est faux — la chaîne et le lien sont de types différents. Pour vérifier si le lien est vide, utilisez la méthode Пустая() ou la fonction ЗначениеЗаполнено().

// Incorrect :
Если Объект.Контрагент = "" Тогда

// Correct :
Если Объект.Контрагент.Пустая() Тогда

// C'est aussi correct (version universelle) :
Если НЕ ЗначениеЗаполнено(Объект.Контрагент) Тогда

Erreur 2 : le « Alors » oublié

Contrairement à la plupart des langages de programmation, dans 1C, la condition doit être suivie du mot-clé Тогда. Sans lui, la plateforme renverra une erreur de syntaxe. C'est l'une des erreurs les plus courantes lors de la transition depuis d'autres langues.

Erreur 3 : ordre incorrect dans SinonSi

Comme déjà mentionné, l'ordre des conditions est d'une importance cruciale. La plateforme exécute la première branche dont la condition est vraie. Si vous organisez les conditions de la plus douce à la plus stricte, les branches plus spécifiques ne fonctionneront jamais.

Erreur 4 : Imbrication excessive

L'imbrication profonde rend difficile la lecture et le débogage du code. Utilisez le modèle de sortie anticipée : vérifiez les conditions non valides au début de la procédure et quittez immédiatement via __CODE_BLOCK_444.

// Imbrication profonde (mauvais) :
Если УсловиеА Тогда
    Если УсловиеБ Тогда
        Если УсловиеВ Тогда
            // code principal
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

// Sortie anticipée (bien) :
Если НЕ УсловиеА Тогда
    Возврат;
КонецЕсли;

Если НЕ УсловиеБ Тогда
    Возврат;
КонецЕсли;

Если НЕ УсловиеВ Тогда
    Возврат;
КонецЕсли;

// code principal - sans imbrication

Conditions dans le langage de requête 1C

En plus du langage intégré, les constructions conditionnelles sont activement utilisées dans le langage de requête 1C. Ici, l'opérateur ВЫБОР est utilisé, similaire à CASE dans SQL.

ВЫБОР
    КОГДА Продажи.Сумма >= 500000
        ТОГДА "Large order"
    КОГДА Продажи.Сумма >= 100000
        ТОГДА "Average order"
    ИНАЧЕ "Small order"
КОНЕЦ КАК КатегорияЗаказа

L'opérateur ВЫБОР peut être utilisé dans les sections ВЫБРАТЬ, ГДЕ, УПОРЯДОЧИТЬ ПО et même dans les conditions de connexion des tableaux. C'est un outil puissant pour la formation de champs calculés et le filtrage des données au niveau du SGBD.

Conclusion

Les constructions conditionnelles sont un outil avec lequel vous travaillerez tous les jours. Le simple Если-Тогда se transforme en arbres complexes de règles métier qui gèrent les remises, les droits d'accès, les itinéraires d'approbation et des dizaines d'autres processus. L'essentiel est d'écrire les conditions clairement, de disposer les branches dans le bon ordre et de ne pas avoir peur de mettre une logique complexe dans des fonctions séparées. Un code propre avec des conditions est un code que vos collègues pourront lire et maintenir pendant des mois et des années.

Si vous débutez dans le développement ou souhaitez approfondir vos connaissances, l'application Code vous aidera à apprendre la programmation à partir de zéro. Des cours structurés sur Python, JavaScript, HTML, CSS, 1C et d'autres technologies, des exercices pratiques et des explications claires, le tout en un seul endroit. Téléchargez l'application Kodik sur l'App Store et Google Play, et si vous avez des questions, rejoignez notre chaîne Telegram avec un support où plus de 2 000 développeurs discutent déjà du code, partagent leur expérience et s'entraident. Ensemble, il est plus facile d'apprendre !

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte