use objets_metier_rs::SageResult;
const BSCPTA_CLSID: &str = "309DE0FB-9FB8-4F4E-8295-CC60C60DAA33";
fn main() -> SageResult<()> {
println!("=============================================================");
println!(" Exemple : Création de pièce comptable (IPMEncoder)");
println!("=============================================================\n");
unsafe {
let _ = windows::Win32::System::Com::CoInitializeEx(
None,
windows::Win32::System::Com::COINIT_MULTITHREADED,
);
}
let app = objets_metier_rs::CptaApplication::new(BSCPTA_CLSID)?;
app.set_name(r"D:\TMP\BIJOU.MAE")?;
app.loggable()?.set_user_name("<Administrateur>")?;
app.loggable()?.set_user_pwd("")?;
app.open()?;
println!("✅ Connexion à BIJOU réussie\n");
println!("📝 Création d'une pièce comptable complète avec IPMEncoder...\n");
println!("🔧 Étape 1 : Création du processus encoder");
let process = app.create_process_encoder()?;
println!(" ✓ Processus créé\n");
println!("📋 Étape 2 : Configuration des propriétés globales");
let journal = app.factory_journal()?.read_by_code("BEU")?;
process.set_journal(&journal)?;
println!(" ✓ Journal : BEU (Banque - Euros)");
process.set_date("2025-01-15")?;
println!(" ✓ Date : 2025-01-15");
let piece = "REGLT001";
process.set_ec_piece(piece)?;
println!(" ✓ Numéro de pièce : {}", piece);
process.set_ec_intitule("Règlement facture fournisseur")?;
println!(" ✓ Intitulé : Règlement facture fournisseur\n");
println!("💳 Étape 3 : Création de l'écriture fournisseur (débit)");
let ec_tiers = process.factory_ecriture_in()?.create()?;
ec_tiers.set_default()?;
let compte_tiers = app.factory_compte_g()?.read_numero("4010000")?;
ec_tiers.set_compte_g(&compte_tiers)?;
println!(" ✓ Compte : 4010000 (Fournisseurs)");
let tiers = app.factory_tiers()?.read_numero("HOLDI")?;
ec_tiers.set_tiers(&tiers)?;
println!(" ✓ Tiers : HOLDI");
ec_tiers.set_ec_sens(0)?; println!(" ✓ Sens : Débit");
ec_tiers.set_ec_montant(10000.0)?;
println!(" ✓ Montant : 10 000.00 €");
ec_tiers.write_default()?;
println!(" ✓ Écriture tiers enregistrée dans le processus\n");
println!("🏦 Étape 4 : Création de l'écriture banque (crédit)");
let ec_banque = process.factory_ecriture_in()?.create()?;
ec_banque.set_default()?;
let compte_banque = app.factory_compte_g()?.read_numero("5120")?;
ec_banque.set_compte_g(&compte_banque)?;
println!(" ✓ Compte : 5120 (Banque)");
ec_banque.set_ec_sens(1)?; println!(" ✓ Sens : Crédit");
ec_banque.set_ec_montant(10000.0)?;
println!(" ✓ Montant : 10 000.00 €");
ec_banque.write_default()?;
println!(" ✓ Écriture banque enregistrée dans le processus\n");
println!("🔍 Étape 5 : Validation de la pièce comptable");
if process.can_process()? {
println!(" ✅ Pièce valide et équilibrée\n");
println!("💾 Étape 6 : Enregistrement en base");
process.process()?;
println!(" ✅ Pièce enregistrée avec succès !\n");
println!("=============================================================");
println!("✅ SUCCÈS : Pièce comptable créée");
println!(" - Journal : BEU");
println!(" - Pièce : {}", piece);
println!(" - Date : 2025-01-15");
println!(" - Débit : 4010000 (HOLDI) = 10 000.00 €");
println!(" - Crédit : 5120 (Banque) = 10 000.00 €");
println!("=============================================================\n");
} else {
println!(" ❌ Erreurs détectées lors de la validation :\n");
let errors = process.errors()?;
let count = errors.count()?;
for i in 1..=count {
let error = errors.item(i)?;
println!(
" [Ligne {}] Code {} : {}",
error.indice()?,
error.error_code()?,
error.text()?
);
}
println!("\n❌ ÉCHEC : La pièce n'a pas pu être enregistrée\n");
}
app.close()?;
println!("✅ Fermeture de la base\n");
Ok(())
}