Travailler avec de grandes quantités de données dans 1C est un test auquel chaque développeur est confronté tôt ou tard. Une requête qui s'exécute instantanément sur une base de test peut prendre des minutes en production. Analysons les erreurs typiques et apprenons à les éviter.

Erreur n° 1 : Utilisation de SIMILAIRE au lieu de conditions exactes.
De nombreux développeurs débutants abusent de l'opérateur LIKE, surtout lorsqu'il s'agit de trouver quelque chose dans une chaîne.
Mauvais :
Номенклатура.Наименование ПОДОБНО "%Bolt%"Bien :
Номенклатура.Артикул = "12345"L'opérateur LIKE oblige le SGBD à scanner l'ensemble de la table, en ignorant les index. S'il est possible d'utiliser une correspondance exacte ou le début d'une chaîne, faites-le. Si la recherche de sous-chaîne est inévitable, évitez au moins les masques avec un pourcentage au début.
Erreur n° 2 : Obtenir des champs inutiles.
L'erreur classique des débutants est de sélectionner tous les champs, même s'ils n'en ont besoin que de deux ou trois.
Mauvais :
ВЫБРАТЬ
*
ИЗ
Справочник.КонтрагентыBien :
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.КонтрагентыLa sélection de données inutiles augmente la charge sur le réseau et la mémoire. Ceci est particulièrement critique pour les champs de type StockageValeurs — ils peuvent contenir des mégaoctets de données.
Erreur n° 3 : Absence d'index dans les critères de sélection.
Si vous filtrez souvent les données par un champ spécifique, mais que vous avez oublié de créer un index pour celui-ci, préparez-vous à un travail lent.
Vérifiez les champs que vous utilisez dans les conditions WHERE et les CONNEXIONS. Des index doivent être créés pour ces champs. Dans le configurateur, cela se fait via les propriétés de l'accessoire, en cochant la case « Indexer ».
Important : indexez uniquement ce qui est réellement utilisé dans les requêtes. Les index redondants ralentissent les opérations d'écriture.
Erreur n° 4 : Requêtes imbriquées au lieu de connexions.
Parfois, les développeurs tentent d'obtenir des données liées par le biais de requêtes imbriquées dans SELECT.
Mauvais :
ВЫБРАТЬ
Документы.Номер,
(ВЫБРАТЬ Контрагенты.Наименование
ИЗ Справочник.Контрагенты КАК Контрагенты
ГДЕ Контрагенты.Ссылка = Документы.Контрагент)Bien :
ВЫБРАТЬ
Документы.Номер,
Контрагенты.Наименование
ИЗ
Документ.РеализацияТоваров КАК Документы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Документы.Контрагент = Контрагенты.СсылкаLes requêtes imbriquées sont exécutées pour chaque ligne du résultat. Les connexions sont traitées par l'optimiseur du SGBD beaucoup plus efficacement.
Erreur n° 5 : ignorer les tableaux virtuels.
1C fournit des tableaux virtuels puissants pour travailler avec les soldes, les chiffres d'affaires et d'autres tranches de données. Beaucoup de débutants essaient de calculer cela manuellement.
Mauvais : calcul indépendant des soldes par le biais de la rotation des documents
Bien :
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиLes tableaux virtuels sont déjà optimisés par les développeurs de la plateforme et utilisent des mécanismes de mise en cache spéciaux.
Erreur n° 6 : Absence de limites sur le nombre d'entrées.
Lorsque vous affichez des données dans un formulaire, limitez toujours le nombre d'entrées.
ВЫБРАТЬ ПЕРВЫЕ 1000
// champs de requêteCeci est particulièrement important pour les rapports et les listes. L'utilisateur a rarement besoin de voir 100 000 lignes à la fois, mais les performances en souffrent beaucoup.
Erreur n° 7 : expressions complexes dans les conditions.
Si vous appliquez des fonctions aux champs dans les conditions WHERE, les index ne seront pas utilisés.
Mauvais :
ГДЕ ГОД(Документ.Дата) = 2024Bien :
ГДЕ Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериодаLes paramètres de la période sont calculés une fois côté client, et la requête elle-même peut utiliser l'index par date.
Erreur n° 8 : plusieurs appels à la base de données dans une boucle.
C'est un problème classique de N+1, lorsque vous obtenez d'abord une liste d'éléments, puis dans une boucle pour chacun, vous faites une requête supplémentaire.
Mauvais :
// Nous obtenons la liste des documents
Для Каждого Документ Из Выборка Цикл
// Pour chaque document - une nouvelle demande à la base de données
Контрагент = ПолучитьКонтрагента(Документ);
КонецЦикла;Bien : regroupez tout en une seule requête avec des connexions ou utilisez des tableaux temporaires.

Conseils pratiques pour l'optimisation.
Utilisez des tableaux temporaires.
Si la requête est complexe et que les données intermédiaires sont utilisées plusieurs fois, les tableaux temporaires peuvent considérablement accélérer l'exécution.
Analyser les plans de requête.
En mode entreprise, activez la console de requêtes et étudiez quels index sont utilisés et lesquels ne le sont pas.
N'oubliez pas la mise en cache.
Certaines données peuvent être mises en cache côté client afin de ne pas tirer la base de données à chaque fois.
Utilisez les opérations par lots.
Au lieu de plusieurs petites écritures, effectuez une seule grande transaction.
Comment mesurer la productivité ?
Mesurez le temps d'exécution des requêtes en conditions réelles, sur des volumes de données réels. Ce qui fonctionne rapidement sur 100 enregistrements peut ralentir sur 100 000.
Utilisez le journal technologique 1C pour rechercher des requêtes lentes. Configurez-le pour enregistrer les requêtes qui prennent plus de temps qu'un certain temps (par exemple, 1 seconde).
Conclusion.
L'optimisation des requêtes dans 1C n'est pas une tâche ponctuelle, mais une pratique constante. Commencez simplement : indiquez clairement les champs requis, utilisez des index, évitez les requêtes similaires et imbriquées. Ces règles de base donneront déjà une augmentation notable de la productivité.
Rappelez-vous qu'il n'y a pas de recette universelle. Chaque cas nécessite une analyse et une compréhension du fonctionnement de votre requête et de ce qui peut être amélioré.
Vous voulez améliorer vos compétences en programmation ?
Dans Codique vous trouverez des cours sur Python, JavaScript, HTML, CSS et d'autres technologies populaires pour les développeurs débutants. Apprenez à votre rythme et créez de vrais projets !
Et nous avons aussi un super Chaîne Telegram avec une communauté amicale où nous discutons de programmation, partageons nos expériences et nous aidons mutuellement à grandir ! Rejoignez-nous ! 🚀
