Μηνύματα παρόχου, σε εκτύπωση Παραστατικού, σε εκτυπωτή eINVOICE μέσω C# OUTPROCESS

94 views
Skip to first unread message

Nikos Trampoulis

unread,
Jun 12, 2024, 7:26:43 AMJun 12
to so...@googlegroups.com

Καλημέρα σε όλους,

 

για να μπορέσω να πάρω σήμανση (myDATA κλπ), μετά την καταχώριση παραστατικού, μέσω C# Ouitprocess, σε εγκατάσταση με πάροχο, κάνω εκτύπωση του παραστατικού, με εκτυπωτή "eInvoice" και την αντίστοιχη φόρμα και παίζει κανονικά και όλα καλά...

 

Το πρόβλημα είναι ότι, όταν υπάρχει κάποιο σφάλμα από τον πάροχο (π.χ. αν εκδώσω συσχετιζόμενο πιστωτικό, για ένα τιμολόγιο, περισσότερες από μία φορές), τότε εμφανίζει το μήνυμα με popup παράθυρο και περιμένει από τον χρήστη να πατήσει ΟΚ, οπότε κολλάει την διαδικασία που θα έπρεπε να τρέχει χωρίς μηνύματα κλπ. (προφανώς όταν ο μηχανισμός τρέχει σαν windows service, τότε κολλάει)

 

Το module, έχει δημιουργηθεί κανονικά, χωρίς WARNINGS και MESSAGES, με τον παρακάτω κώδικα :

 

 

           string moduleParam = "SALDOC" + (!string.IsNullOrEmpty(formName) ? ";" + formName : "");

           

            mSALDOC = s1.S1Prg.CreateModule(moduleParam);

            SALDOC = mSALDOC.GetTable("SALDOC");

            MTRDOC = mSALDOC.GetTable("MTRDOC");

            EXPANAL = mSALDOC.GetTable("EXPANAL");

            ITELINES = mSALDOC.GetTable("ITELINES");

            VATANAL = mSALDOC.GetTable("VATANAL");

 

            object otherModule = s1.S1Prg.GetStockObj("ModuleIntf", true);

            object[] myArray1;

            myArray1 = new object[3];

            myArray1[0] = mSALDOC.Handle;

            myArray1[1] = "WARNINGS";   

            myArray1[2] = "OFF";        

            

            s1.S1Prg.CallPublished(otherModule, "SetParamValue", myArray1);

            myArray1 = new object[3];

            myArray1[0] = mSALDOC.Handle;

            myArray1[1] = "NOMESSAGES";   

            myArray1[2] = 1;        

            s1.S1Prg.CallPublished(otherModule, "SetParamValue", myArray1);

 

 

Σε ό,τι αφορά τη εκτύπωση,

 

είτε γίνεται με την «PrintForm» :

mSALDOC.PrintForm(9000, "eINVOICE", "");

 

είτε με «SysRequest» :

                    object[] myArray;

                    myArray = new object[4];

                    object SysRequest = s1.S1Prg.GetStockObj("SysRequest", true);

                    myArray[0] = mSALDOC.Handle;

                    myArray[1] = printFormCode;

                    myArray[2] = printerName;

                    s1.S1Prg.CallPublished(SysRequest, "PrintForm", myArray);

 

Το αποτέλεσμα είναι το ίδιο…

 

Επίσης, σημαντική παρατήρηση, είναι ότι ΔΕΝ το κάνει πάντα, δηλ, ενώ δεν αποστέλλεται στον πάροχο, λόγω του σφάλματος, δεν το εμφανίζει σαν popup

 

Υπάρχει κάποια ιδέα για το πως μπορεί να λυθεί ή αν είναι bug και πρόκειται να διορθωθεί στο μέλλον;

 

Ευχαριστώ πολύ!

 

 

 

Με εκτίμηση,

 

 

image001.png

vezirgiannis sa

unread,
Jun 13, 2024, 4:03:25 AMJun 13
to Softone Developers Network
Καλημέρα σας,

Δυστυχώς δεν μπορώ να προσφέρω λύση στο πρόβλημα και δεν μπορώ καν να το δοκιμάσω.

Αλλά μια ιδέα τουλάχιστον μπας και βοηθήσει να μην κολλάει το service μέχρι να λυθεί το πρόβλημα αν είναι της εταιρίας όντως;

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    System.Timers.Timer checkTimer;

    System.Timers.Timer eventTimer;

    DateTime lastTime = DateTime.Now;

    DateTime checkTime = DateTime.Now.AddMilliseconds(-10000);

    protected override void OnStart(string[] args)
    {
        checkTimer = new System.Timers.Timer();
        checkTimer.AutoReset = true;
        checkTimer.Interval = 20000;
        checkTimer.Elapsed += Check_Timer_Elapsed;

        eventTimer = new System.Timers.Timer();
        eventTimer.AutoReset = true;
        eventTimer.Interval = 1000;
        eventTimer.Elapsed += Simulated_Event_Elapsed;

        checkTimer.Start();

        eventTimer.Start();
    }

    private void Simulated_Event_Elapsed(object sender, ElapsedEventArgs e)
    {
        eventTimer.Stop();
        var random = new Random();
        Thread.Sleep(random.Next(1, 30) * 1000);
        lastTime = DateTime.Now;
        eventTimer.Start();
    }

    private void Check_Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        if (checkTime == lastTime)
        {
            Environment.Exit(1);
        }
        else
        {
            checkTime = lastTime;
        }
    }

    protected override void OnStop()
    {
    }

}

Και μετά στα windows services στο service στις ιδιότητες, στην καρτέλα recovery βάζουμε να ξεκινάει ξανά μετά από failure.

Πριν γίνει το exit μπορείτε να κάνετε log ή ότι άλλο.

Ευχαριστώ πολύ.

Με εκτίμηση,
Ζέικος Χρήστος
--

Nikos Trampoulis

unread,
Jun 14, 2024, 3:38:36 AMJun 14
to so...@googlegroups.com

Καλησπέρα και ευχαριστώ πολύ για την απάντηση,

 

Δυστυχώς στο δικό μου case, αν δεν ολοκληρωθεί η διαδικασία, θα ξανά κολλήσει, στον επόμενο κύκλο, οπότε δεν μου λύνει το πρόβλημα…

 

 

Με εκτίμηση,

 

--
Softone Developers Network group.
To post to this group, send email to so...@googlegroups.com
---
Λάβατε αυτό το μήνυμα επειδή έχετε εγγραφεί στην ομάδα "Softone Developers Network" των Ομάδων Google.
Για να απεγγραφείτε απ' αυτή την ομάδα και να σταματήσετε να λαμβάνετε μηνύματα ηλεκτρονικού ταχυδρομείου απ' αυτή, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στη διεύθυνση soft1+un...@googlegroups.com.
Για να κάνετε προβολή αυτής της συζήτησης στον ιστό, επισκεφτείτε τη διεύθυνση https://groups.google.com/d/msgid/soft1/8d19c369-ed88-4b84-a11b-bed33aa29a12n%40googlegroups.com.

image001.png
Reply all
Reply to author
Forward
0 new messages