προοδευτικό άθροισμα σε στήλη (cumulative)

35 views
Skip to first unread message

Stan Karathanasis

unread,
Nov 1, 2025, 4:58:39 AM (7 days ago) Nov 1
to Softone Developers Network
Καλημέρα σε όλους,
διαβάζω αρκετό καιρό το group, είναι εξαιρετική η επικοινωνία για τα θέματα που προκύπτουν
Ετσι κι εγω με τη σειρά μου έχω ένα θέμα. 
Εχω φτιάξει σε browser να φέρνει τα ειδη ανα παραγγελία και μαζί το stock , reserved κτλ. Το θέμα είναι ότι θα ήθελα να δω πότε το stock μηδενίζει στο είδος, οπότε θα ήθελα το προοδευτικό του Qty1 ώστε αφαιρώντας το στοκ να δω σε ποιά παραγγελία μηδενίζει
Αν υπάρχει άλλος τρόπος εννοείται και τον χρειαζόμαστε !!

Δηλ.
Το είδος είναι Ομαδοποιημένο
+ειδος  Α    Qty1  Cum(Qty1) 
-------------------------------------------------
παραγγ 1   10   10     
παραγγ 2   10    20

+ειδος Β
--------------------------------------------------
παραγγ 1    5   5
παραγγ 2  10   15
παραγγ 3  15   30

Ευχαριστώ
Στάθης

Screenshot 2025-11-01 103819.pngScreenshot 2025-11-01 104906.png


Παναγιώτης Θεοδώρου

unread,
Nov 1, 2025, 10:34:44 AM (7 days ago) Nov 1
to Softone Developers Network
Καλησπέρα σας,
Αυτό που γνωρίζω εγώ και εύχομαι να συμφωνήσουν και οι υπόλοιποι είναι ότι τα ευρετήρια της εφαρμογής, δεν μπορούν να υπολογίσουν κάτι - προοδευτικά ανά γραμμή.
Αυτό το κάνει ο sql χρησιμοποιώντας μια window function και αυτό σημαίνει ότι είτε θα χρησιμοποιήσετε ελεύθερη εκτύπωση, είτε θα φτιάξετε δικό σας Object (εσείς θα αποφασίσετε).
Για να γίνει κατανοητό, θα σας γράψω τις εντολές που έδωσα σε online εργαλείο SQL που χρησιμοποιώ για testing χωρίς να χρειαστεί να συνδεθώ σε softone, μπορείτε να το χρησιμοποιήσετε και σε δική σας Test βάση

Κατασκευάζω έναν πίνακα που να μοιάζει με το findoc της softone

CREATE TABLE sql_server_test_a
(
    item int,
    doc int,
    qty float
);

item είναι το mtrl, doc το findoc και qty η ποσότητα π.χ. qty1

παρακάτω εισαγω στον πίνακσ μερικές εγγραφές

INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154123, 1);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154234, 2);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154345, 3);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154456, 4);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154567, 5);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (155, 1154678, 6);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154123, 4);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154234, 5);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154345, 6);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154456, 7);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154567, 8);
INSERT INTO sql_server_test_a (item, doc, qty) VALUES (208, 1154678, 9);


Στο τέλος, για να λάβω το αποτέλεσμα δίνω:

SELECT item, doc, 100 as Rem,
currRes = sum(qty) over (partition by item order by doc),
progRese = 100 - sum(qty) over (partition by item order by doc) /* το πιο σωστό επειδή θα το δουν και άλλοι συνάδελφοι είναι αυτό το σημείο να μην ξαναυπολογιστεί και να ληφθεί από εξωτερικό ερώτημα εφόσον έχει ήδη υπολογιστεί, το αφήνω μόνο και μόνο για να γίνει κατανοητό το παράδειγμα */
  FROM sql_server_test_a;

όπου: item είναι το mtrl, doc το findoc (όπως ανέφερα παραπάνω), Rem = 100 του έδωσα εγώ ένα υπόλοιπο για να εκτελέσει την πράξη
ΚΑΙ
currRes = sum(qty) over (partition by item order by doc), αθροίζει την ποσότητα qty ανά item (= είδος) ταξινομημένο κατά doc αύξουσα αρίθμηση, από το μικρότερο (=παλαιότερο) προς το μεγαλύτερο (=νεότερο), διότι λογικά θα θέλετε έναν FIFO υπολογισμό
ΣΤΟ ΤΕΛΟΣ
progRese = 100 - sum(qty) over (partition by item order by doc), αφαιρεί το ήδη υπολογισμένο υπόλοιπο π.χ. 100 από την προοδευτικά αθροισμένη ποσότητα του προηγούμενου βήματος

Στο δικό σας task θα το εμπλουτίσετε με ό, τι σας ζητηθεί: ημερομηνίες, τύπους, σειρές, εκκρεμότητες κτλ όπως μπορείτε και έπειτα να έχετε ένα επιπλέον φίλτρο πχ
progRese >= 0 άρα παραγγελίες που μπορούν να εκτελεστούν
ή
progRese < 0 ποιές δεν μπορούν να εκτελεστούν

Nikos Arvanitis

unread,
Nov 1, 2025, 2:25:19 PM (6 days ago) Nov 1
to so...@googlegroups.com
Καλησπέρα,
χρησιμοποίηστε τη συνάρτηση cumul κάνει ακριβώς αυτό που θέλετε.

εικόνα.png

εικόνα.png

φιλικά,

Arvanitis I. Nikolaos
General Manager

Offices in Thessaloniki
Technopolis Business Center, Building G2,
T: +30.2311 11 38 18
40.574365, 22.995228
Offices in Halkidiki
Nea Moudania, Chrys. Smirnis 9,
40.241092, 23.285178
Offices in Thessaly

www.econnect.gr  , gm@econnect.gr



________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
ΔΗΛΩΣΗ ΑΠΟΠΟΙΗΣΗΣ ΕΥΘΥΝΗΣ
Το παρόν μήνυμα ηλεκτρονικού ταχυδρομείου και τα τυχόν συνημμένα σε αυτό αρχεία είναι εμπιστευτικό και προορίζεται αποκλειστικά για χρήση του φυσικού ή νομικού προσώπου στο οποίο απευθύνεται. Εάν δεν είστε ο ενδεδειγμένος παραλήπτης, οφείλετε να μην το αντιγράψετε, αναμεταδώσετε, χρησιμοποιήσετε ή αποκαλύψετε το περιεχόμενό του. Οφείλετε να ενημερώσετε τον αποστολέα του μηνύματος για την εσφαλμένη λήψη του και αμέσως να διαγράψετε το αντίγραφο από το σύστημά σας. Παρακαλώ σημειώσατε ότι οποιεσδήποτε θέσεις ή απόψεις που παρατίθενται στο παρόν μήνυμα ηλεκτρονικού ταχυδρομείου εκφράζουν αποκλειστικά το συντάκτη του και δεν αντιπροσωπεύουν, άνευ ετέρου, την ECONNECT . Τέλος, ο παραλήπτης οφείλει να ελέγξει για τυχόν ύπαρξη ιού στο παρόν μήνυμα ηλεκτρονικού ταχυδρομείου και στα συνημμένα σε αυτό αρχεία. Η ECONNECT αρνείται κάθε ευθύνη για οποιαδήποτε ζημία ήθελε προκληθεί από ιό που ενδεχομένως διαδοθεί από το παρόν μήνυμα ηλεκτρονικού ταχυδρομείου.

DISCLAIMER
This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to which they are addressed. If you are not the intended recipient, you should not copy it, re-transmit it, use it or disclose its contents, you should notify the sender of receiving the email in error, and immediately delete the copy from your system. Please note that any views or opinions presented in this email are solely those of the author and do not necessarily represent those of ECONNECT. Finally, the recipient should check this email and any attachments for the presence of viruses. ECONNECT accepts no liability for any damage caused by any virus transmitted by this email.


P Please consider your environmental responsibility before printing this e-mail

--
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/91e75311-f18c-4432-b845-690ba152c175n%40googlegroups.com.

Stan Karathanasis

unread,
Nov 3, 2025, 2:02:07 PM (4 days ago) Nov 3
to Softone Developers Network
Σας ευχαριστώ 
Θα δω πως θα το προχωρήσω. 
Πάντως η cumul() δεν μου κάνει την δουλειά, είναι το είδος σε ομάδα και αυτή κάνει άθροισμα χωρίς να "καταλαβαίνει" την αλλαγή είδους.

Reply all
Reply to author
Forward
0 new messages