Operation aborted όταν προσπαθώ να ορίσω MTRDOC WHOUSE σε inporcess c#

425 views
Skip to first unread message

Vagele

unread,
Jun 1, 2018, 7:31:02 AM6/1/18
to Softone Developers Network
Καλησπέρα,
έχω δημιουργήσει ένα inprocess c# dll για την καταχώρηση παραγγελιών. Χρησιμοποιώ .Net framework 4 και το Softone.Lib.dll. Ενώ καταχωρώ κανονικά προϊόντα και πελάτες μόλις φτάνω να φτιάξω το παραστατικό της παραγγελίας και να ορίσω αποθήκη στο MTRDOC μου βγάζει exception "Operation aborted". Αν δεν το συμπληρώσω φτάνει μέχρι το Post και μου βγάζει το λογικό μήνυμα ότι πρέπει να συμπληρωθεί ο Α.Χ.. Αν πάλι βάλω π.χ. (short)1000 για τιμή μου βγάζει και πάλι μήνυμα για μη έγκυρη μετατροπή. Όταν δώσω όμως κατευθείαν 1000 βγάζει "Operation aborted". Καμία ιδέα;

        public static void CreateOrder(XSupport XSupport, DataRow OrderRow, DataTable OrderItems, decimal vatPercentage, DataTable contactsForSync, DataTable productsForSync)
        {
            int warehouse = Convert.ToInt32(Main.GetSettingValueByName(XSupport, "Warehouse"));

            bool invoice = Convert.ToBoolean(OrderRow["Invoice"]);

            var trdr = invoice
                ? contactsForSync.AsEnumerable()
                .Where(c => Convert.ToBoolean(c.Field<long>("is_company"))
                && c.Field<UInt32>("id") == (UInt32)OrderRow["company_id"])
                .FirstOrDefault()
                : contactsForSync.AsEnumerable()
                .Where(c => !Convert.ToBoolean(c.Field<long>("is_company"))
                && c.Field<UInt32>("id") == (UInt32)OrderRow["payments_contact_id"])
                .FirstOrDefault();

            int Series = 0;

            if (invoice)
            {
                Series = Convert.ToInt32(Main.GetSettingValueByName(XSupport, "OrderSeries"));
            }
            else
            {
                Series = Convert.ToInt32(Main.GetSettingValueByName(XSupport, "OrderSeriesRetail"));
            }

            int? paymentsMethod = OrderRow["payments_method"] != DBNull.Value
                ? Convert.ToInt32(OrderRow["payments_method"])
                : (int?)null;

            int? shipmentsMethod = OrderRow["shipments_method"] != DBNull.Value
                ? Convert.ToInt32(OrderRow["shipments_method"])
                : (int?)null;

            Main.SalDocModule.InsertData();

            using (XTable tab = Main.SalDocModule.GetTable("FINDOC"))
            {
                tab.Current.Insert();
                tab.Current["SERIES"] = Series;
                tab.Current["TRNDATE"] = Convert.ToDateTime(OrderRow["created"]);
                tab.Current["TRDR"] = Convert.ToInt32(trdr["TRDR"]);
                tab.Current["PAYMENT"] = paymentsMethod ?? (object)DBNull.Value;
                tab.Current["SHIPMENT"] = shipmentsMethod ?? (object)DBNull.Value;
                tab.Current["INT01"] = Convert.ToInt32(OrderRow["id"]);
            }

            using (XTable MtrDoc = Main.SalDocModule.GetTable("MTRDOC"))
            {
                MtrDoc.Current["SHIPPINGADDR"] = trdr["address"].ToString();
                MtrDoc.Current["SHPZIP"] = trdr["postcode"].ToString();
                MtrDoc.Current["SHPCITY"] = trdr["city"].ToString();
                MtrDoc.Current["WHOUSE"] = warehouse; //Εδώ δημιουργείται το πρόβλημα
            }

            using (XTable tabLines = Main.SalDocModule.GetTable("ITELINES"))
            {
                foreach (DataRow row in OrderItems.Rows)
                {
                    int mtrl = productsForSync.AsEnumerable()
                        .Where(c => c.Field<UInt32>("id") == (UInt32)row["product_id"])
                        .Select(c => Convert.ToInt32(c.Field<UInt64>("MTRL")))
                        .FirstOrDefault();

                    tabLines.Current.Insert();
                    tabLines.Current["MTRL"] = mtrl;
                    tabLines.Current["QTY1"] = Convert.ToDouble(row["quantity"]);

                    decimal price = invoice
                        ? Convert.ToDecimal(row["price"]) / ((vatPercentage / 100) + 1)
                        : Convert.ToDecimal(row["price"]);

                    tabLines.Current["PRICE"] = Convert.ToDouble(price);
                    tabLines.Current.Post();
                }
            }

            decimal shipmentsPrice = (decimal)OrderRow["shipments_price"];
            decimal paymentsPrice = (decimal)OrderRow["payments_price"];

            if (shipmentsPrice > 0 || paymentsPrice > 0)
            {
                using (XTable expDoc = Main.SalDocModule.GetTable("EXPANAL"))
                {
                    if (shipmentsPrice > 0)
                    {
                        expDoc.Current.Insert();
                        expDoc.Current["EXPN"] = Convert.ToInt32(Main.GetSettingValueByName(XSupport, "EXP_Transport"));
                        expDoc.Current["EXPVAL"] = Convert.ToDouble(shipmentsPrice) / 1.24;
                        expDoc.Current.Post();
                    }

                    if (paymentsPrice > 0)
                    {
                        expDoc.Current.Insert();
                        expDoc.Current["EXPN"] = Convert.ToInt32(Main.GetSettingValueByName(XSupport, "EXP_PayOnDelivery"));
                        expDoc.Current["EXPVAL"] = Convert.ToDouble(paymentsPrice) / 1.24;
                        expDoc.Current.Post();
                    }
                }
            }

            Main.SalDocModule.PostData();
        }



Κωνσταντίνος Βάππας

unread,
Jun 1, 2018, 7:46:45 AM6/1/18
to so...@googlegroups.com
Καλησπέρα,
αν καταχωρήσεις με την ίδια σειρά manual σε αφήνεις να επιλέξεις την αποθήκη 1000?


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

Message has been deleted

Vagele

unread,
Jun 1, 2018, 7:50:00 AM6/1/18
to Softone Developers Network
Έχεις δίκιο ξέχασα να το αναφέρω. Με αφήνει κανονικά να καταχωρήσω χειροκίνητα παραστατικό με Α.Χ. 1000.

Vagele

unread,
Jun 1, 2018, 2:25:57 PM6/1/18
to Softone Developers Network
   σε Softone.Interop.XInterop.ThrowSoError(Int32 ptr)
   σε Softone.Interop.XInterop.Invoke(Int32 ptr, XFunctions disp, Int32 prm2, Int32 prm3, Int32 prm4)
   σε Softone.XTable.Invoke(XFunctions disp, Int32 prm2, Int32 prm3, Int32 prm4)
   σε Softone.XTable.SetAsInteger(Int32 rowid, Int32 fieldid, Int32 value)
   σε Softone.XTable.set_Item(Int32 rowid, Int32 fieldid, Object value)
   σε Softone.XTable.set_Item(Int32 rowid, String fieldname, Object value)
   σε Softone.XRow.set_Item(String fieldname, Object value)

Νίκος Μάλιακκας

unread,
Jun 3, 2018, 2:45:21 PM6/3/18
to Softone Developers Network
Καλησπέρα,
Το μήνυμα "Operation aborted" το παίρνουμε συχνά στα import scripts όταν υπάρχει σφάλμα στον αποθηκευτικό χώρο:
  • Η σειρά έχει δηλωμένο "καρφωτά" άλλον Α.Χ, από αυτόν που πάμε να περάσουμε.
  • Ο Α.Χ δεν είναι δηλωμένος στο υποκατάστημα της σειράς
  • Είμαστε logedin σε υποκατάστημα που δεν βλέπει τον Α.Χ
  • ο Α.Χ είναι ανενεργός
Δες επίσης: αν τα κλειδιά της εγκατάστασης δεν σου εμφανίζουν το υποκατάστημα στις σειρές των παραστατικών, αυτό δεν σημαίνει ότι το πεδίο SERIES.BRANCH δεν έχει τιμή (και αν έχει θα δουλεύει σύμφωνα με τα προβλεπόμενα). Αυτό θα μπορούσε εύκολα να συμβεί αν είχες αντιγράψει τις σειρές με XXF από εγκατάσταση με δηλωμένα τα υποκαταστήματα.

Ελπίζω να βοηθήσουν οι σκέψεις μου, στείλε μας feedback αν δούλεψε.

Vagele

unread,
Jun 3, 2018, 3:18:24 PM6/3/18
to Softone Developers Network
Η όλη διαδικασία δούλευε με backgroundworker για να εμφανίζει τρια progressbar για τον συγχρονισμό προϊόντων, πελατών και παραγγελιων και ενα datagridview που δείχνει αν πάσα στιγμή πληροφορίες για την οντότητα που συγχρονίζεται. Μόλις έβγαλα την διαδικασία εκτός threading δουλεψε όλο σωστά χωρίς κανένα πρόβλημα. Αρα σίγουρα δεν έχει να κάνει με το σερφάρισμα γιατί φαντάζομαι ούτε και πάλι θα δούλευε. Τωρα ας έχει τύχει κάτι αντίστοιχο με τα threads και εχει βρεθεί καποια λύση δεν το γνωρίζω.

salesioti...@gmail.com

unread,
Jun 15, 2018, 1:38:27 AM6/15/18
to Softone Developers Network
Έχω συναντήσει και εγώ προβλήματα όταν πάω να καταχωρήσω δεδομένα σε object εκτός UI Thread. Φαίνεται πως τις περισσότερες φορές δεν συμπληρώνει πεδία που κατά τα άλλα πρέπει να συμπληρώνονται αυτόματα από το Softone. Δεν ξέρω γιατί το κάνει αυτό αλλά καλύτερα να το αποφεύγεις.
Reply all
Reply to author
Forward
0 new messages