Troubleshooting - PT1CE¶
Table des matières¶
- Erreurs fréquentes
- Problèmes de données
- Problèmes de performance
- Problèmes d'export SAP
- Diagnostics et vérifications
- Solutions avancées
Erreurs fréquentes¶
Erreur : Fichier new_pas_prb.csv introuvable¶
Message :
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
-
Vérifier le nom exact
-
Créer le fichier avec le bon format
Erreur : Tables PT0CE manquantes¶
Message :
Causes possibles :
- PT0CE n'a pas été exécuté
- Tables supprimées ou renommées
- Mauvaise base de données
Solutions :
-
Vérifier l'existence des tables
-
Vérifier la base de données
-
Relancer PT0CE si nécessaire
Erreur : Colonnes manquantes dans CSV¶
Message :
Causes possibles :
- En-têtes mal orthographiés
- Séparateur incorrect
- Colonnes dans le mauvais ordre
Solutions :
-
Vérifier les en-têtes (première ligne)
-
Vérifier le séparateur
- Doit être point-virgule (
;
) - Pas virgule (
,
) -
Pas tabulation
-
Format décimal
Problèmes de données¶
Problème : Nombreux corridors sous-optimaux¶
Symptôme :
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 :
- Vérifier les nouveaux prix
- Les hausses sont-elles réalistes ?
-
Y a-t-il des erreurs dans le CSV ?
-
Mise à jour des PRB
- Fournir également les nouveaux PRB
-
Sinon les contraintes max sont dépassées
-
Corrections par lot
- Prioriser par CA
- Corriger les plus impactants d'abord
Problème : Bornes incohérentes après calcul¶
Symptôme :
Exemple :
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 :
-
Correction manuelle ciblée
-
Recalcul complet du corridor
- Ignorer les écarts historiques
- Appliquer une distribution standard
Problème : Articles sans nouveaux prix¶
Symptôme :
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 :
- Comportement normal
- Seuls les articles du CSV sont mis à jour
-
Les autres gardent leurs anciens prix
-
Si problématique
- Compléter le CSV avec tous les articles
- 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 :
-
Vérifier les index
-
Mettre à jour les statistiques
-
Traitement par batch
- Modifier
batch_size
dans config - Augmenter la parallélisation
Problème : Mémoire insuffisante¶
Message :
Solutions :
-
Réduire le batch size
-
Traiter un univers à la fois
- Commenter les autres dans le code
-
Ou utiliser des scripts séparés
-
Libérer la mémoire
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 :
-
Vérifier l'existence
-
Export NATIONAL uniquement
- PT1CE peut exporter sans la table
- Mais seulement les corridors NATIONAL
-
Les codes sources seront vides
-
Relancer PT0CE
- 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 :
- Normal pour gros volumes
- Division automatique à 400k lignes
-
SAP peut importer plusieurs fichiers
-
Si trop de fichiers
- Filtrer par TYPE_CLIENT important
- Ou par article à fort CA
Problème : Format dates incorrect¶
Erreur SAP :
Vérification :
- Format attendu : dd.mm.yyyy
- Exemple : 01.10.2025
Solution :
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;