MySQL trigger before insert, numery faktur

Rozwiązanie proste, ale wymagał jednej zmiany w konfiguracji my.cnf, dokładniej thread_stack bo wartość 64K to deko mało. Całość bazuje na założeniu, że numer faktury to ROK/NUMER, gdzie numer jest autoinkrementowaną wartością.

Tablica t_faktury, w której numer faktury jest reprezentowany za pomocą pola fvat_no trigger dla niej i procedura poniżej:


DROP TRIGGER IF EXISTS fvat_number;
DROP PROCEDURE IF EXISTS generuj_fvatno;

DELIMITER $$

CREATE PROCEDURE generuj_fvatno(out numerek VARCHAR(30))
BEGIN
SELECT
CONCAT(DATE_FORMAT(CURDATE(), '%Y'),'/',COUNT(fvat_no) + 1) INTO numerek
FROM t_faktury
WHERE
SUBSTRING_INDEX(fvat_no, '/', 1) = DATE_FORMAT(CURDATE(), '%Y')
LIMIT 1 ;
END$$

CREATE TRIGGER fvat_number BEFORE INSERT ON t_faktury
FOR EACH ROW BEGIN
CALL generuj_fvatno(@out);
IF @out = NULL THEN
SET NEW.fvat_no = CONCAT(DATE_FORMAT(CURDATE(), '%Y'),'/', 1);
ELSE
SET NEW.fvat_no = @out;
END IF;
END$$

Leave a Reply

Your email address will not be published. Required fields are marked *