Rechnungsproblem C# -> Python Verknüpfung?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

So auf den ersten Blick ignoriert das Python Script einfach die Argumente, die du beim Aufruf aus dem C# Programm übergibst und erstellt die pdf mit den Daten, die fest in invoice_data im Python Script stehen. Dadurch erstellt es immer nur dieselbe pdf und es sieht aus, als würde nichts passieren.

Wenn die json-Datei immer in C:\Projekte\rechnung\invoice_data.json liegt, brauchst du die Argumente aus der Kommandozeile nicht unbedingt auslesen, aber irgendwo müsstest du halt die json einlesen, damit du daraus die Rechnungsdaten erzeugen kannst.

JulianOnFire 
Fragesteller
 14.12.2023, 10:30
Wenn die json-Datei immer in C:\Projekte\rechnung\invoice_data.json liegt, brauchst du die Argumente aus der Kommandozeile nicht unbedingt auslesen, aber irgendwo müsstest du halt die json einlesen, damit du daraus die Rechnungsdaten erzeugen kannst.

Erstmal danke, würde sowas zum beispiel gehen ;

import sys
import json
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib import colors


def create_invoice(invoice_data, filename):
    
    # ...


# Pfad zur JSON-Datei
json_file_path = 'C:\\Projekte\\rechnung\\invoice_data.json'


# Einlesen der Daten aus der JSON-Datei
with open(json_file_path, 'r') as file:
    invoice_data = json.load(file)


# Aufrufen der Funktion create_invoice mit den eingelesenen Daten
create_invoice(invoice_data, 'Rechnung_Gespraech1.pdf')
0
daCypher  14.12.2023, 11:13
@JulianOnFire

Ja, damit müsste es klappen. Ich musste jetzt beim Test noch sagen, dass die Datei in utf-8 ist, damit die Umlaute richtig erkannt werden, aber die json wird eingelesen und kann mit print auch in der Console ausgegeben werden.

with open(json_file_path, 'r', encoding='utf-8') as file:

Kleiner Tipp noch: Falls du bei Dateipfaden nicht die ganzen Backslashes in doppelte Backslashes ändern willst, kannst du vor dem Anführungszeichen einfach ein r schreiben, dann erkennt python den Backslash nicht mehr als Escape-Sequenz und du kannst den Pfad einfach reinkopieren.

json_file_path = r'C:\Projekte\rechnung\invoice_data.json'
0
JulianOnFire 
Fragesteller
 14.12.2023, 11:33
@daCypher

Vielen Dank, Du hast mir sehr geholfen !

Wenn ich jetzt im dgv in irgendeinem Auftrag Rechnung erstellen klicke, dann steht dort wie eben Rechnung erfolgreich erstellt, allerdings wird sie nicht erstellt.

Wenn ich allerdings dann den python code seperat nochmal ausführe, dann wird die Rechnung richtig gespeichert mit den Daten aus der Auftragsverwaltung.

Das heißt, der Python code wird nicht von meinem c# programm ausgeführt. Hättest du da auch eine Ahnung ?

0
daCypher  14.12.2023, 12:27
@JulianOnFire

Da sehe ich leider keinen offensichtlichen Fehler. Das Einzige, was mir jetzt beim durchschauen noch aufgefallen ist: process.Start() wartet nicht darauf, dass das Python-Script durchgelaufen ist. Das heißt, das C# Programm prüft den Fehlerkanal wahrscheinlich schon bevor Python überhaupt die Chance hat, einen Fehler zu generieren.

Probier mal, ob dir was anderes angezeigt wird, wenn du nach dem process.Start() noch ein process.WaitForExit() einbaust.

0
JulianOnFire 
Fragesteller
 14.12.2023, 16:22
@daCypher

Sorry für die späte Rückmeldung.

Leider zeigt er mit dieser Funktion nichts anderes an, ich muss den python code immer manuell starten, damit die Rechnug gespeichert wird. Die Funktion in C# gibt nur die Werte ab, führt allerdings nicht den python code aus. Komisch...

0
JulianOnFire 
Fragesteller
 15.12.2023, 00:00
@daCypher

Habe das Problem gelöst, es lag an python.exe . Trotzdem vielen Dank!

0