Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
кассир5:всевнешниемодули:отт [2020/04/28 10:22] dzayonchkovskiy |
кассир5:всевнешниемодули:отт [2024/04/04 17:42] (текущий) maimakarov [Общая таблица транзакций (ОТТ)] |
||
|---|---|---|---|
| Строка 2: | Строка 2: | ||
| Модуль предназначен для централизованного хранения транзакций кассира 5 и работы с ними. | Модуль предназначен для централизованного хранения транзакций кассира 5 и работы с ними. | ||
| - | **Требования к программам**: | + | **Требования к программам**: |
| **Преимущества**: | **Преимущества**: | ||
| Строка 108: | Строка 108: | ||
| 21. По окончании работы с группами ККМ, примените изменения и закройте форму. | 21. По окончании работы с группами ККМ, примените изменения и закройте форму. | ||
| + | |||
| + | =====Удаление транзакций===== | ||
| + | Автоматической очистки транзакций нет. Очистку необходимо выполнять напрямую в СУБД.\\ | ||
| + | Для этого необходимо создать хранимую процедуру в БД.\\ | ||
| + | Это можно сделать в настройках Кассир 5 на вкладке ОТТ, если возникает ошибка, | ||
| + | Для этого необходимо выполнить скрипт создания хранимой процедуры для удаления транзакций: | ||
| + | **для MSSQL**:\\ | ||
| + | < | ||
| + | GO | ||
| + | SET QUOTED_IDENTIFIER ON | ||
| + | GO | ||
| + | CREATE OR ALTER PROCEDURE dbo.cleanup_transactions @older_than_days INTEGER, @trans_deleted bigint OUTPUT, @checks_deleted bigint OUTPUT, @error_message nvarchar(max) OUTPUT | ||
| + | AS | ||
| + | SET NOCOUNT ON; | ||
| + | |||
| + | DECLARE @border_code numeric(19, 0); | ||
| + | DECLARE @transrows_deleted bigint; | ||
| + | DECLARE @checkrows_deleted bigint; | ||
| + | |||
| + | IF @older_than_days >= 30 | ||
| + | BEGIN | ||
| + | SET @border_code = ( | ||
| + | SELECT MAX(t.code) | ||
| + | FROM dbo.transactions AS t | ||
| + | WHERE t.transactiondate <= DATEADD(day, | ||
| + | |||
| + | IF @border_code > 0 | ||
| + | BEGIN | ||
| + | DECLARE @TranCounter INT; | ||
| + | SET @TranCounter = @@TRANCOUNT; | ||
| + | |||
| + | IF @TranCounter > 0 | ||
| + | SAVE TRANSACTION SavePoint; | ||
| + | ELSE | ||
| + | BEGIN TRANSACTION; | ||
| + | |||
| + | BEGIN TRY | ||
| + | DELETE FROM dbo.transactions | ||
| + | WHERE code <= @border_code; | ||
| + | |||
| + | SELECT @transrows_deleted = @@ROWCOUNT; | ||
| + | |||
| + | DELETE FROM dbo.receipts | ||
| + | WHERE startcode <= @border_code; | ||
| + | |||
| + | SELECT @checkrows_deleted = @@ROWCOUNT; | ||
| + | |||
| + | SET @trans_deleted = @transrows_deleted; | ||
| + | SET @checks_deleted = @checkrows_deleted; | ||
| + | |||
| + | IF @TranCounter = 0 | ||
| + | COMMIT TRANSACTION; | ||
| + | END TRY | ||
| + | BEGIN CATCH | ||
| + | SET @error_message = ERROR_MESSAGE(); | ||
| + | |||
| + | IF @TranCounter = 0 | ||
| + | ROLLBACK TRANSACTION; | ||
| + | ELSE IF XACT_STATE() = -1 | ||
| + | ROLLBACK TRANSACTION SavePoint; | ||
| + | END CATCH | ||
| + | END | ||
| + | END | ||
| + | ELSE | ||
| + | SET @error_message = ' | ||
| + | **для PostgreSQL**: | ||
| + | < | ||
| + | LANGUAGE ' | ||
| + | | ||
| + | AS $BODY$ | ||
| + | DECLARE border_code numeric(19, | ||
| + | DECLARE transrows_deleted bigint; | ||
| + | DECLARE checkrows_deleted bigint; | ||
| + | |||
| + | BEGIN | ||
| + | IF older_than_days >= 30 THEN | ||
| + | SELECT MAX(t.code) | ||
| + | INTO border_code | ||
| + | FROM dbo.transactions AS t | ||
| + | WHERE t.transactiondate <= CURRENT_TIMESTAMP - make_interval(days => older_than_days); | ||
| + | |||
| + | IF border_code > 0 THEN | ||
| + | BEGIN | ||
| + | DELETE FROM dbo.transactions | ||
| + | WHERE code <= border_code; | ||
| + | |||
| + | GET DIAGNOSTICS transrows_deleted = ROW_COUNT; | ||
| + | |||
| + | DELETE FROM dbo.receipts | ||
| + | WHERE startcode <= border_code; | ||
| + | |||
| + | GET DIAGNOSTICS checkrows_deleted = ROW_COUNT; | ||
| + | |||
| + | trans_deleted = transrows_deleted; | ||
| + | checks_deleted = checkrows_deleted; | ||
| + | EXCEPTION WHEN OTHERS THEN | ||
| + | GET STACKED DIAGNOSTICS error_message = MESSAGE_TEXT; | ||
| + | END; | ||
| + | END IF; | ||
| + | ELSE | ||
| + | error_message = ' | ||
| + | END IF; | ||
| + | END$BODY$;</ | ||
| + | |||
| + | |||