{}const=>[]async()letfn</>var
Développement1C

Big Data dans 1C : comment accélérer le travail de 100 fois sans béquilles

Votre rapport est en cours de chargement depuis 5 minutes et les utilisateurs se plaignent déjà à la direction ? Le traitement se bloque sur un million d'enregistrements ? Nous analysons les principales erreurs des développeurs débutants et montrons comment une ligne de code peut transformer une minute d'attente en une seconde de travail. Sans magie, seulement les bonnes requêtes et la compréhension du fonctionnement réel de 1C avec la base de données.

К

Kodik

Auteur

5 min de lecture

Travailler avec de grandes quantités de données est l'un des problèmes les plus courants rencontrés par les développeurs 1C. Rapports lents, traitements en attente et utilisateurs mécontents — tout cela est la conséquence d'une mauvaise approche du travail avec les données. Voyons comment le faire correctement.

Pourquoi les problèmes de performance surviennent-ils ?

Lorsque la base de données contient plusieurs milliers de documents, tout fonctionne rapidement. Mais dès que les données atteignent des centaines de milliers ou des millions d'enregistrements, le code qui s'exécutait auparavant instantanément commence à fonctionner en quelques minutes. La raison est simple : chaque appel à la base de données prend du temps, et les requêtes non optimisées peuvent traiter beaucoup plus de données que nécessaire.

🔥 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


Principes de base du Big Data

1. Utilisez des requêtes au lieu de boucles

L'erreur la plus courante des développeurs novices est le traitement des données en boucles. Par exemple, si vous avez besoin d'obtenir le reste des marchandises dans l'entrepôt, vous ne devez pas parcourir toutes les marchandises dans le cycle et faire une demande distincte pour chacune.

❌ Mauvais :

Для Каждого Товар Из СписокТоваров Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "SELECT Remainder WHERE Nomenclature = &Nomenclature";
    Запрос.УстановитьПараметр("Nomenclature", Товар);
    // Exécuté des centaines de fois !
КонецЦикла;

✅ Bien :

Запрос = Новый Запрос;
Запрос.Текст = 
"SELECT
|    Nomenclature,
|    Balance
|FROM RegisterAccumulation.BalanceGoods.Balance
|WHERE Nomenclature IN (&List of Goods)";
Запрос.УстановитьПараметр("List of goods", СписокТоваров);
// Effectué une fois !

Important : Une seule requête au lieu de centaines, c'est la différence entre une seconde et une minute de travail.

2. Limitez la sélection des données

Ne téléchargez pas tous les champs s'ils ne sont pas nécessaires. Ne sélectionnez pas tous les enregistrements si vous n'avez besoin que d'une partie.

// Sélectionnez uniquement les champs nécessaires
Запрос.Текст = 
"SELECT
|    Document.Number,
|    Document.Date,
| Document.Amount
 | FROM Document.SaleOfGoodsServices AS Document
|WHERE Document.Date BETWEEN &StartDate AND &EndDate
|    AND Document.Posted = TRUE";

Utilisez les conditions WHERE pour filtrer les données au niveau de la base de données, et non dans le code après avoir reçu tous les enregistrements.

3. Appliquez des index

Les index sont ce qui rend la recherche dans la base de données rapide. Dans 1C, les index sont créés automatiquement pour les détails marqués comme indexés. Si vous filtrez fréquemment les données en fonction d'un attribut spécifique, assurez-vous qu'un index a été créé pour celui-ci.

4. Utilisez des tableaux temporaires

Lorsque vous avez besoin de faire plusieurs requêtes liées entre elles, les tableaux temporaires vous aident à enregistrer les résultats intermédiaires et à ne pas consulter à nouveau les tableaux principaux.

Запрос = Новый Запрос;
Запрос.Текст = 
"SELECT 
| Counterparty, 
| AMOUNT (Amount) AS TotalAmount
| PLACE InAmountsByCounterparties | FROM Document.SaleOfGoodsServices
| GROUP BY Counterparty |; | | SELECT
|    InAmountsByCounterparties.Counterparty,
|    InAmountsByCounterparties.TotalAmount
| FROM VtAmountsByCounterparties | WHERE VtAmountsByCounterparties.TotalAmount> 100000";


5. Travaillez par paquets

Si vous avez besoin de traiter un million d'enregistrements, ne les téléchargez pas tous en même temps. Traitez les données par lots de 1 000 à 10 000 enregistrements.

СчётчикПорции = 0;
РазмерПорции = 5000;

Пока Истина Цикл
    Запрос.Текст = 
    "SELECT FIRST " + РазмерПорции + "
    |    Link
    |FROM Reference Book.Nomenclature
    | WHERE Link> & LastLink | SORT BY Link";
    
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Прервать;
    КонецЕсли;
    
    // Traitement de la portion
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        // Traitement de l'élément
        ПоследняяСсылка = Выборка.Ссылка;
    КонецЦикла;
КонецЦикла;

6. Utilisez correctement les registres d'accumulation

Les registres d'accumulation sont un outil puissant pour travailler avec des données quantitatives. Ils vous permettent d'obtenir rapidement des soldes et des chiffres d'affaires sans avoir à recompter tout l'historique des mouvements.

// Obtention des soldes à la date
Запрос.Текст = 
"SELECT
|    Remainders.Nomenclature,
|    Remainders.QuantityRemainder
| FROM AccumulationRegister. GoodsInWarehouses. Remains (& Date) AS Remains";

7. Optimisez les connexions de table

Lorsque les connexions (JOIN) sont utilisées dans la requête, l'ordre et le type de connexion sont importants. Commencez par connecter les tableaux avec le moins d'entrées.

Conseils pratiques

  • Analyser les plans de requête. Dans la console de requêtes 1C, vous pouvez voir exactement comment la requête est exécutée et où les goulots d'étranglement se produisent.

  • Utilisez des mesures de performance. Les outils intégrés 1C vous permettent de trouver les opérations lentes. Ne devinez pas, mesurez !

  • Évitez les requêtes imbriquées. Le plus souvent, ils peuvent être remplacés par des connexions ou des tables temporaires avec de meilleures performances.

  • Mettez en cache les données immuables. Si les données changent rarement, enregistrez-les dans les variables du module ou utilisez des registres d'informations avec la possibilité de mise en cache.

Erreurs fréquentes

  • Obtenir tous les champs via « SÉLECTIONNER * » au lieu d'énumérer explicitement les champs requis

  • Utilisation de calculs complexes dans les conditions WHERE au lieu d'un calcul préliminaire

  • Absence de conditions de filtrage permettant de limiter la sélection

  • Plusieurs appels à la base de données au lieu d'une seule requête par lots

Conclusion

Travailler avec le big data dans 1C nécessite une compréhension des principes de fonctionnement de la base de données et des requêtes. Les règles de base sont simples : minimisez le nombre d'appels à la base de données, utilisez des requêtes au lieu de boucles, sélectionnez uniquement les données dont vous avez besoin et utilisez les bons outils pour les bonnes tâches.

Rappelez-vous : l'optimisation n'est pas une complication prématurée du code, mais une conception compétente dès le début. L'habitude d'écrire des requêtes efficaces vous fera gagner des heures de débogage et des semaines d'optimisation à l'avenir.

🚀 Vous voulez en savoir plus ?

Vous pouvez étudier ce sujet et bien d'autres dans Codique — notre plateforme pour les développeurs débutants ! Nous avons créé des cours structurés pour vous aider à maîtriser le développement de zéro à un niveau de confiance.

Et nous avons aussi chaîne Telegram cool avec une communauté amicale, où des développeurs expérimentés aident les débutants, partagent leur expérience et discutent des problèmes de programmation actuels.

Aller à Kodik Rejoindre la communauté

🎯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