Aller au contenu

Troubleshooting - PT1CE

Table des matières

  1. Erreurs fréquentes
  2. Problèmes de données
  3. Problèmes de performance
  4. Problèmes d'export SAP
  5. Diagnostics et vérifications
  6. Solutions avancées

Erreurs fréquentes

Erreur : Fichier new_pas_prb.csv introuvable

Message :

ERREUR: Fichier inputs\new_pas_prb.csv introuvable !

Causes possibles :
- Fichier absent du dossier inputs/
- Nom de fichier incorrect
- Extension incorrecte (.txt au lieu de .csv)

Solutions :
1. Vérifier la présence du fichier

dir inputs\*.csv

  1. Vérifier le nom exact

    inputs\new_pas_prb.csv  ✓
    inputs\new_pas_prb.CSV  ✗
    inputs\nouveaux_pas_prb.csv  ✗
    

  2. Créer le fichier avec le bon format

    ID_ART;PAS;PRB_RC;PRB_COLL
    075130;12,456;15,820;14,935
    

Erreur : Tables PT0CE manquantes

Message :

ERREUR: Table PT0CE_CORRIDOR_HISTORY_ZOOM1 n'existe pas

Causes possibles :
- PT0CE n'a pas été exécuté
- Tables supprimées ou renommées
- Mauvaise base de données

Solutions :

  1. Vérifier l'existence des tables

    SELECT table_name 
    FROM user_tables 
    WHERE table_name LIKE 'PT0CE_CORRIDOR_HISTORY%'
    ORDER BY table_name;
    

  2. Vérifier la base de données

    # Êtes-vous sur DWH ou une autre base ?
    echo %DATABASE%
    

  3. Relancer PT0CE si nécessaire

Erreur : Colonnes manquantes dans CSV

Message :

Colonnes manquantes dans le CSV : {'PRB_RC'}

Causes possibles :
- En-têtes mal orthographiés
- Séparateur incorrect
- Colonnes dans le mauvais ordre

Solutions :

  1. Vérifier les en-têtes (première ligne)

    ID_ART;PAS;PRB_RC;PRB_COLL  ✓
    ID_ART,PAS,PRB_RC,PRB_COLL  ✗ (virgules)
    ID_ART;PAS;PRBRC;PRBCOLL    ✗ (sans underscore)
    

  2. Vérifier le séparateur

  3. Doit être point-virgule (;)
  4. Pas virgule (,)
  5. Pas tabulation

  6. Format décimal

    12,456  ✓ (virgule décimale)
    12.456  ✗ (point décimal)
    

Problèmes de données

Problème : Nombreux corridors sous-optimaux

Symptôme :

ZOOM1: 125,432 corridors
  - 45,234 sous-optimaux (36%) ⚠️

Causes possibles :
- Hausse importante des PAS
- PRB non mis à jour
- Corridors historiques inadaptés

Diagnostic :

-- Analyser l'ampleur des hausses PAS
SELECT 
    AVG((NEW_PAS - PAS_ACTIF) / PAS_ACTIF * 100) as HAUSSE_MOY_PCT,
    MAX((NEW_PAS - PAS_ACTIF) / PAS_ACTIF * 100) as HAUSSE_MAX_PCT,
    COUNT(CASE WHEN (NEW_PAS - PAS_ACTIF) / PAS_ACTIF > 0.20 THEN 1 END) as NB_HAUSSE_20PCT
FROM PT1CE_CORRIDORS_ZOOM1
WHERE IS_UPDATED = 1;

Solutions :

  1. Vérifier les nouveaux prix
  2. Les hausses sont-elles réalistes ?
  3. Y a-t-il des erreurs dans le CSV ?

  4. Mise à jour des PRB

  5. Fournir également les nouveaux PRB
  6. Sinon les contraintes max sont dépassées

  7. Corrections par lot

  8. Prioriser par CA
  9. Corriger les plus impactants d'abord

Problème : Bornes incohérentes après calcul

Symptôme :

⚠ 523 corridors avec bornes incohérentes

Exemple :

PL3 (15,00€) > PL4 (14,50€)

Causes possibles :
- Écarts historiques incohérents
- Application des contraintes
- Erreurs dans PT0CE

Diagnostic :

-- Identifier les cas
SELECT 
    ID_ART, TYPE_CLIENT, TYPE_RESTAURANT,
    NEW_BORNE_PL3_PL4, NEW_BORNE_PL4_PL5,
    ECART_PL3_PL4_PAS, ECART_PL4_PL5_PAS
FROM PT1CE_OPTIMAL_ZOOM1
WHERE BORNES_COHERENCE = 'INCOHERENT'
  AND NEW_BORNE_PL3_PL4 > NEW_BORNE_PL4_PL5;

Solutions :

  1. Correction manuelle ciblée

    ID_ART;TYPE_CLIENT;TYPE_RESTAURANT;NEW_BORNE_PL1_PL2;...
    075XXX;...;...;13,00;14,00;15,00;16,00;17,00;18,00
    

  2. Recalcul complet du corridor

  3. Ignorer les écarts historiques
  4. Appliquer une distribution standard

Problème : Articles sans nouveaux prix

Symptôme :

INFO: 75,234 corridors non mis à jour (articles absents du CSV)

Vérification :

-- Articles dans corridors mais pas dans CSV
SELECT DISTINCT c.ID_ART
FROM PT1CE_CORRIDORS_ZOOM1 c
WHERE NOT EXISTS (
    SELECT 1 FROM TEMP_NEW_PRICES p
    WHERE p.ID_ART = c.ID_ART
)
AND ROWNUM <= 100;

Solutions :

  1. Comportement normal
  2. Seuls les articles du CSV sont mis à jour
  3. Les autres gardent leurs anciens prix

  4. Si problématique

  5. Compléter le CSV avec tous les articles
  6. Ou accepter la mise à jour partielle

Problèmes de performance

Problème : Traitement très long

Symptômes :
- Plus de 2h pour un univers
- Blocage apparent
- Timeout Oracle

Causes possibles :
- Volume de données important
- Index manquants
- Statistiques Oracle obsolètes

Solutions :

  1. Vérifier les index

    -- Index sur PT0CE_CORRIDOR_HISTORY
    SELECT index_name, column_name 
    FROM user_ind_columns
    WHERE table_name = 'PT0CE_CORRIDOR_HISTORY_ZOOM1'
    ORDER BY index_name, column_position;
    

  2. Mettre à jour les statistiques

    BEGIN
        DBMS_STATS.GATHER_TABLE_STATS(
            ownname => USER,
            tabname => 'PT0CE_CORRIDOR_HISTORY_ZOOM1'
        );
    END;
    /
    

  3. Traitement par batch

  4. Modifier batch_size dans config
  5. Augmenter la parallélisation

Problème : Mémoire insuffisante

Message :

MemoryError: Unable to allocate array

Solutions :

  1. Réduire le batch size

    {
        "processing": {
            "batch_size": 5000  // Au lieu de 10000
        }
    }
    

  2. Traiter un univers à la fois

  3. Commenter les autres dans le code
  4. Ou utiliser des scripts séparés

  5. Libérer la mémoire

    import gc
    gc.collect()
    

Problèmes d'export SAP

Erreur : Table de mapping introuvable

Message :

Table de mapping des dimensions introuvable
ERREUR: Tables PT1CE_OPTIMAL_* manquantes. Exécutez d'abord 1_appliquer_nouveaux_prix.bat

Causes :
- PT0CE_DIMENSION_MAPPING n'existe pas
- PT0CE n'a pas créé cette table
- Table supprimée

Solutions :

  1. Vérifier l'existence

    SELECT COUNT(*) 
    FROM user_tables 
    WHERE table_name LIKE 'PT0CE_DIMENSION_MAPPING%';
    

  2. Export NATIONAL uniquement

  3. PT1CE peut exporter sans la table
  4. Mais seulement les corridors NATIONAL
  5. Les codes sources seront vides

  6. Relancer PT0CE

  7. Seule solution pour régénérer la table

Problème : Fichiers Excel trop gros

Symptôme :

Export 3/4 : MASTER - PRB_TO_USE = 1...
  → 850,000 corridors trouvés
  → 5,100,000 lignes SAP générées
  → Fichier créé : master_prb01_part01.xlsx
  → Fichier créé : master_prb01_part02.xlsx
  ...
  → Fichier créé : master_prb01_part13.xlsx

Solutions :

  1. Normal pour gros volumes
  2. Division automatique à 400k lignes
  3. SAP peut importer plusieurs fichiers

  4. Si trop de fichiers

  5. Filtrer par TYPE_CLIENT important
  6. Ou par article à fort CA

Problème : Format dates incorrect

Erreur SAP :

Format de date invalide ligne 1523

Vérification :
- Format attendu : dd.mm.yyyy
- Exemple : 01.10.2025

Solution :

# Dans config
"date_format": "%d.%m.%Y"

Diagnostics et vérifications

Script de diagnostic complet

-- 1. État des tables
SELECT 
    table_name,
    num_rows,
    last_analyzed
FROM user_tables
WHERE table_name LIKE 'PT1CE%'
ORDER BY table_name;

-- 2. Répartition par statut
SELECT 
    STATUS,
    COUNT(*) as NB,
    SUM(CA_TOTAL) as CA
FROM PT1CE_OPTIMAL_ZOOM1
GROUP BY STATUS;

-- 3. Problèmes détectés
SELECT 
    PROBLEM_TYPE,
    COUNT(*) as NB
FROM PT1CE_OPTIMAL_ZOOM1
WHERE PROBLEM_TYPE != 'AUCUN'
GROUP BY PROBLEM_TYPE;

-- 4. Cohérence
SELECT 
    BORNES_COHERENCE,
    COUNT(*) as NB
FROM PT1CE_OPTIMAL_ZOOM1
GROUP BY BORNES_COHERENCE;

Vérification avant export SAP

# Vérifier les prérequis
def check_export_ready():
    checks = {
        'tables_optimal': check_optimal_tables_exist(),
        'mapping_table': check_mapping_table_exists(),
        'corridors_count': count_optimal_corridors(),
        'disk_space': check_disk_space()
    }

    for check, result in checks.items():
        print(f"{check}: {'✓' if result else '✗'}")

Solutions avancées

Forcer la régénération complète

# Supprimer toutes les tables PT1CE
sqlplus user/pass@DWH
DROP TABLE PT1CE_CORRIDORS_ZOOM1 PURGE;
DROP TABLE PT1CE_CORRIDORS_ZOOM2 PURGE;
DROP TABLE PT1CE_CORRIDORS_ZOOM3 PURGE;
DROP TABLE PT1CE_OPTIMAL_ZOOM1 PURGE;
DROP TABLE PT1CE_OPTIMAL_ZOOM2 PURGE;
DROP TABLE PT1CE_OPTIMAL_ZOOM3 PURGE;
EXIT;

# Relancer
1_appliquer_nouveaux_prix.bat

Mode debug détaillé

# Modifier PT1CE_Menu.bat pour mode debug
set LOG_LEVEL=
set LOG_DESC=Debug complet

# Ou directement
python pt1ce_main.py DWH --input-file inputs\new_pas_prb.csv

Export partiel pour tests

# Modifier la requête d'export
query = f"""
    SELECT * FROM (
        SELECT * FROM {table}
        WHERE STATUS = 'OPTIMAL'
        AND ROWNUM <= 1000  -- Limiter pour test
    )
"""

Analyse des écarts

-- Comprendre pourquoi tant de sous-optimaux
WITH ANALYSIS AS (
    SELECT 
        ID_ART,
        (NEW_PAS - PAS_ACTIF) / PAS_ACTIF * 100 as PCT_HAUSSE_PAS,
        (NEW_BORNE_PL6_PLX - BORNE_PL6_PLX) / BORNE_PL6_PLX * 100 as PCT_HAUSSE_PL6,
        CASE 
            WHEN NEW_BORNE_PL6_PLX = NEW_PAS THEN 'PL6_EGAL_PAS'
            WHEN NEW_BORNE_PL6_PLX = NEW_PRB_RC THEN 'PL6_EGAL_PRB_RC'
            WHEN NEW_BORNE_PL6_PLX = NEW_PRB_COLL THEN 'PL6_EGAL_PRB_COLL'
            ELSE 'OK'
        END as CONTRAINTE_ATTEINTE
    FROM PT1CE_CORRIDORS_ZOOM1
    WHERE IS_UPDATED = 1
)
SELECT 
    CONTRAINTE_ATTEINTE,
    COUNT(*) as NB,
    AVG(PCT_HAUSSE_PAS) as MOY_HAUSSE_PAS,
    AVG(PCT_HAUSSE_PL6) as MOY_HAUSSE_PL6
FROM ANALYSIS
GROUP BY CONTRAINTE_ATTEINTE;