Η συνάρτηση qty_docs_based υπολογίζει το άθροισμα των ποσοτήτων για ένα συγκεκριμένο προϊόν, λαμβάνοντας υπόψη επιλεγμένα παραστατικά.
Παράμετροι:
product_aa INTEGER: Το αναγνωριστικό του προϊόντος του οποίου η ποσότητα πρέπει να υπολογιστεί.
add_docs VARCHAR(1000): Αριθμός γραμμής παραστατικών, διαχωρισμένων με κόμμα, που με βάση αυτά προστίθεται η ποσότητα.
deduct_docs VARCHAR(1000): Αριθμός γραμμής παραστατικών, διαχωρισμένων με κόμμα, που με βάση αυτά αφαιρείται η ποσότητα.
Επιστρέφει:
FLOAT: Η υπολογισμένη ποσότητα του συγκεκριμένου προϊόντος με βάση τα παρεχόμενα παραστατικά.
Χρήση:
Για να χρησιμοποιήσεις τη λειτουργία, πρέπει να ορίσεις το αριθμό γραμμής του προϊόντος και τα παραστατικά που προστίθενται στην ποσότητα και αφαιρούνται από αυτήν.
Παράδειγμα:
1 |
SELECT qty_docs_based("apouhkh"."Aa",'133,125','135') FROM from "apouhkh" |
Αυτό το παράδειγμα υπολογίζει την ποσότητα για το προϊόν με αριθμό γραμμής 123, προσθέτοντας ποσότητες από τα παραστατικά 1, 2, 3 και αφαιρώντας ποσότητες από τα παραστατικά 4, 5, 6.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
/* Function: qty_docs_based Purpose: The function qty_docs_based calculates the sum of quantities for a specified product, considering certain types of documents that add to and subtract from the quantity. Parameters: product_aa (INTEGER): The identifier of the product whose quantity needs to be calculated. add_docs (VARCHAR(1000)): A comma-separated list of document types that should add to the quantity. subtract_docs (VARCHAR(1000)): A comma-separated list of document types that should subtract from the quantity. Returns: FLOAT: The calculated quantity of the specified product based on the provided document types. Usage: To use the function, you need to provide the product identifier and the document types that add to and subtract from the quantity. Example: SELECT qty_docs_based("apouhkh"."Aa",'133,125','135') FROM from "apouhkh" This example calculates the quantity for the product with ID 123, adding quantities from document types 1, 2, 3 and subtracting quantities from document types 4, 5, 6. */ CREATE OR ALTER FUNCTION qty_docs_based ( product_aa INTEGER, add_docs VARCHAR(1000), subtract_docs VARCHAR(1000) ) RETURNS FLOAT AS DECLARE VARIABLE tmpqty FLOAT; BEGIN execute statement ' SELECT SUM(CASE WHEN "pvlhseis"."Parastatiko" IN (' || :add_docs || ') THEN 1 ELSE -1 END * "grammes"."Posothta") FROM "grammes", "pvlhseis", "eidhpar" WHERE "pvlhseis"."Parastatiko" IN (' || :add_docs || ',' || :subtract_docs || ') AND "grammes"."Aapar" = "pvlhseis"."Aa" AND "pvlhseis"."Parastatiko" = "eidhpar"."Aa" AND "grammes"."Eidos" = ' || :product_aa || ' AND ("grammes"."KvdikosEidoys" <> '''') AND ("grammes"."KvdikosEidoys" IS NOT NULL)' INTO :tmpqty; if (tmpqty is null) then tmpqty=0; RETURN tmpqty; END |