use objets_metier_rs::errors::SageResult;
use objets_metier_rs::wrappers::cpta::CptaApplication;
const BSCPTA_CLSID: &str = "309DE0FB-9FB8-4F4E-8295-CC60C60DAA33";
fn main() -> SageResult<()> {
println!("🚀 Exemple PMEncoder - Création de pièce comptable\n");
println!("{}", "=".repeat(70));
println!("\n📂 Connexion à la base BIJOU...");
let app = CptaApplication::new(BSCPTA_CLSID)?;
app.set_name(r"D:\TMP\BIJOU.MAE")?;
let loggable = app.loggable()?;
loggable.set_user_name("<Administrateur>")?;
loggable.set_user_pwd("")?;
app.open()?;
println!(" ✓ Connecté à la base BIJOU");
println!("\n🔧 Création du processus PMEncoder...");
let process = app.create_process_encoder()?;
println!(" ✓ Processus créé");
println!("\n📋 Configuration de l'entête de la pièce...");
let factory_journal = app.factory_journal()?;
let journal = factory_journal.read_numero("OD")?;
println!(
" ✓ Journal : {} - {}",
journal.jo_num()?,
journal.jo_intitule()?
);
process.set_journal(&journal)?;
let date = "2025-07-31";
process.set_date(date)?;
println!(" ✓ Date : {}", date);
let date_echeance = "2025-08-31";
println!(" ✓ Date d'échéance : 2025-08-31");
let num_piece = journal.next_ec_piece(date)?;
process.set_ec_piece(&num_piece)?;
println!(" ✓ N° Pièce : {}", num_piece);
process.set_ec_intitule("Règlement facture fournisseur")?;
println!(" ✓ Intitulé : Règlement facture fournisseur");
process.set_ec_reference("REF-2025-001")?;
println!(" ✓ Référence : REF-2025-001");
process.set_analytique_auto(true)?;
process.set_multi_echeance_auto(true)?;
println!(" ✓ Génération automatique : analytique et échéances activées");
println!("\n✍️ Création des écritures...");
let factory_ecriture = process.factory_ecriture_in()?;
let factory_compte_g = app.factory_compte_g()?;
let factory_tiers = app.factory_tiers()?;
println!("\n 📝 Écriture 1 : DÉBIT Compte Fournisseur");
let ecriture1 = factory_ecriture.create()?;
let compte_fournisseur = factory_compte_g.read_numero("4010000")?;
ecriture1.set_compte_g(&compte_fournisseur)?;
println!(
" - Compte : {} - {}",
compte_fournisseur.cg_num()?,
compte_fournisseur.cg_intitule()?
);
if let Ok(tiers) = factory_tiers.read_numero("CARAT") {
ecriture1.set_tiers(&tiers)?;
println!(" - Tiers : {}", tiers.ct_intitule()?);
}
ecriture1.set_ec_sens(0)?; ecriture1.set_ec_montant(1200.00)?;
println!(" - Débit : 1 200,00 €");
ecriture1.set_ec_intitule("Règlement facture F2025-456")?;
ecriture1.set_ec_echeance(date_echeance)?;
ecriture1.write()?;
println!(" ✓ Écriture 1 validée");
println!("\n 📝 Écriture 2 : CRÉDIT Compte Banque");
let ecriture2 = factory_ecriture.create()?;
let compte_banque = factory_compte_g.read_numero("5121000")?;
ecriture2.set_compte_g(&compte_banque)?;
println!(
" - Compte : {} - {}",
compte_banque.cg_num()?,
compte_banque.cg_intitule()?
);
ecriture2.set_ec_sens(1)?; ecriture2.set_ec_montant(1200.00)?;
println!(" - Crédit : 1 200,00 €");
ecriture2.write()?;
println!(" ✓ Écriture 2 validée");
println!("\n⚖️ Vérification de l'équilibre...");
let debit = process.debit()?;
let credit = process.credit()?;
let solde = process.solde()?;
println!(" - Débit total : {:.2} €", debit);
println!(" - Crédit total : {:.2} €", credit);
println!(" - Solde : {:.2} €", solde);
if solde == 0.0 {
println!(" ✓ Pièce équilibrée !");
} else {
println!(" ⚠️ Pièce déséquilibrée de {:.2} €", solde);
}
println!("\n✅ Validation du processus...");
if process.can_process()? {
println!(" ✓ Le processus peut être validé");
println!("\n💾 Enregistrement en base...");
process.process()?;
println!(" ✓ Pièce comptable enregistrée avec succès !");
println!("\n📊 Écritures créées :");
let ecritures_out = process.list_ecritures_out()?;
println!(" Type : {:?}", ecritures_out);
} else {
println!(" ❌ Le processus contient des erreurs");
afficher_erreurs(&process)?;
}
println!("\n🔒 Fermeture de la connexion...");
app.close()?;
println!(" ✓ Connexion fermée");
println!("\n{}", "=".repeat(70));
println!("✅ Exemple terminé avec succès !");
Ok(())
}
fn afficher_erreurs(
process: &objets_metier_rs::wrappers::cpta::process::PMEncoder,
) -> SageResult<()> {
println!("\n❌ Erreurs détectées :");
let errors = process.errors()?;
let count = errors.count()?;
println!(" Nombre d'erreurs : {}", count);
for i in 1..=count {
let error = errors.item(i)?;
let code = error.error_code()?;
let text = error.text()?;
let indice = error.indice()?;
println!("\n Erreur #{} :", i);
println!(" - Code : {}", code);
println!(" - Ligne : {}", indice);
println!(" - Message: {}", text);
}
Ok(())
}
#[allow(dead_code)]
fn exemple_add_tiers_part() -> SageResult<()> {
println!("\n🔧 Exemple avancé : AddTiersPart()");
println!("{}", "-".repeat(70));
let app = CptaApplication::new(BSCPTA_CLSID)?;
app.set_name(r"D:\TMP\BIJOU.MAE")?;
let loggable = app.loggable()?;
loggable.set_user_name("<Administrateur>")?;
loggable.set_user_pwd("")?;
app.open()?;
let process = app.create_process_encoder()?;
let factory_journal = app.factory_journal()?;
let journal = factory_journal.read_numero("VTE")?; process.set_journal(&journal)?;
process.set_date("2024-12-31")?;
let num_piece = journal.next_ec_piece("2024-12-31")?;
process.set_ec_piece(&num_piece)?;
process.set_ec_intitule("Facture client avec TVA")?;
println!("\n 📝 Utilisation de AddTiersPart()...");
println!(" ℹ️ AddTiersPart() génère automatiquement :");
println!(" - Écriture HT (charge/produit)");
println!(" - Écriture TVA");
println!(" - Écriture TTC (compte tiers)");
println!(" - Échéances selon le mode de règlement");
app.close()?;
Ok(())
}
#[allow(dead_code)]
fn exemple_equilibrer() -> SageResult<()> {
println!("\n🔧 Exemple avancé : Equilibrer()");
println!("{}", "-".repeat(70));
let app = CptaApplication::new(BSCPTA_CLSID)?;
app.set_name(r"D:\TMP\BIJOU.MAE")?;
let loggable = app.loggable()?;
loggable.set_user_name("<Administrateur>")?;
loggable.set_user_pwd("")?;
app.open()?;
let process = app.create_process_encoder()?;
let factory_journal = app.factory_journal()?;
let journal = factory_journal.read_numero("OD")?;
process.set_journal(&journal)?;
process.set_date("2024-12-31")?;
let num_piece = journal.next_ec_piece("2024-12-31")?;
process.set_ec_piece(&num_piece)?;
let factory_ecriture = process.factory_ecriture_in()?;
let factory_compte_g = app.factory_compte_g()?;
let ecriture1 = factory_ecriture.create()?;
let compte1 = factory_compte_g.read_numero("607000")?;
ecriture1.set_compte_g(&compte1)?;
ecriture1.set_ec_sens(0)?; ecriture1.set_ec_montant(500.00)?;
ecriture1.write()?;
println!(" Avant équilibrage :");
println!(" - Débit : {:.2} €", process.debit()?);
println!(" - Crédit : {:.2} €", process.credit()?);
println!(" - Solde : {:.2} €", process.solde()?);
println!("\n 🔄 Appel de Equilibrer()...");
process.equilibrer()?;
println!("\n Après équilibrage :");
println!(" - Débit : {:.2} €", process.debit()?);
println!(" - Crédit : {:.2} €", process.credit()?);
println!(" - Solde : {:.2} €", process.solde()?);
println!(" ✓ Pièce automatiquement équilibrée !");
app.close()?;
Ok(())
}