Инструменты пользователя

Инструменты сайта


кассир5:всевнешниемодули:отт

Общая таблица транзакций (ОТТ)

Модуль предназначен для централизованного хранения транзакций кассира 5 и работы с ними.

Требования к программам: 1С:Предприятие версии 8.3.5 или новее, «Кассир 5» версии 5.1.7.6 или новее.

Преимущества: доступ к транзакциям всех ПОС, что позволяет подбирать чеки возврата, предоплаты, оплаты кредита и т.п. с других касс, разбитие доступности транзакций по группам ККМ.

Недостатки: перенос N-ого количества транзакций происходит раз в заданный период, нужен внешний источник данных в виде СУБД, например MSSQL или PostgreSQL.

Настройка

1. Перед настройкой Кассира, у вас уже должна быть готова база данных (БД), в которую будут переноситься транзакции. В ней должна быть схема «dbo» и поддержка кириллицы.
На момент написания данного руководства, работа была проверена с базами MSSQL и PostgreSQL.

Должен использовать модуль логики ОбщаяТаблицаТранзакций.epf (разархивировать ExtFiles\ОбщаяТаблицаТранзакций.zip или выбрать в мастере настроек).

2. Запустите Кассир в режиме предприятия, и авторизуйтесь под пользователем с правом захода в настройки.

3. В настройках перейдите на вкладку «Модули логики», затем, если у вас модулей несколько, на вкладку «ОТТ».

4. На вкладке нажмите на кнопку «Настроить параметры подключения».

5. На открывшейся форме нужно указать параметры подключения к вашей БД.

а) Для работы не через строку соединения, заполните:

1) "СУБД";
2) "Способ подключения";
3) "Имя сервера";
4) "Номер порта" (только для PostgreSQL);
5) "Имя базы".
6) "Логин";
7) "Пароль".

б) Для работы через строку соединения, установите флаг «Использовать строку соединения» и заполните:

1) "СУБД";
2) "Способ подключения";
3) "Логин";
4) "Пароль";
5) "Строка подключения".

Также, можно сгенерировать строку подключения на основе заполненных полей, нажав кнопку «Сгенерировать».

6. Нажмите на кнопку «Проверить соединение».

а) При успешной установке соединения, выведется одно из двух сообщений:

1) "Связь установлена";
2) "Ошибка запроса к БД. Проверьте наличие таблицы Transactions в БД".

б) Иначе, выведется сообщение:

1) "Не удалось установить связь: <Причина ошибки>".

Если вернулось сообщение «Ошибка запроса к БД. Проверьте наличие таблицы Transactions в БД» - нужно создать таблицы в БД.
Есть два 2 способа создания таблиц:
1. Требуется установленный драйвер ODBC: нажмите на кнопку «Создать таблицу» для создания необходимых для работы ОТТ таблиц в вашей БД.
2. Вручную выполнить скрипт создания таблиц в СУБД: скрипт для MSSQL (в первой строке заменить символы %ИмяБД% на имя существующей базы), скрипт для PostgreSQL.

а) При успешном создании таблиц, выведется сообщение:

"Таблица в базе данных успешно создана.".

б) Иначе, выведется одно из трех сообщений:

1) "Скрипт для создания таблицы в СУБД <Имя СУБД> отсутствует.";
2) "Таблица transactions уже существует в БД. Выполните удаление таблицы средствами СУБД.";
3) "<Описание ошибки при создании таблицы>".

7. После, примените изменения и закройте форму настройки параметров подключения.

8. В форме настройки Кассира установите желаемое «Количество транзакций в запросе» (по умолчанию 1000) и «Период отправки запросов, с» (по умолчанию 60).

9. После, нажмите на кнопку «Перенести вручную» для первоначального заполнения таблицы транзакций в ОТТ.

10. На форме переноса транзакций можно переносить транзакции:

а) Начиная с самой первой;
б) Начиная с указанного кода;
в) Начиная с указанной даты;
г) Начиная с последней перенесенной.

Для способов а), б) и в), нужно выбрать способ отбора (все, начиная с кода или начиная с даты), заполнить поле (по необходимости) и нажать на кнопку «Начать перенос».
Рекомендуется переносить транзакции, начиная с самой первой (все).

Для способа г), нужно нажать на кнопку «Синхронизировать». Программа продолжит переносить транзакции, начиная с кода последней выгруженной транзакции.

11. После переноса транзакций, закройте форму. Общая настройка ОТТ завершена.

12. Если есть необходимость ограничить доступ к данным других ККМ для какой-либо операции (например, для возврата),
то нужно создать и указать группу ККМ. Для этого на форме настройки кассира нажмите на кнопку «Настроить группы ККМ».

Стоит иметь ввиду, что группы ККМ могут настраиваться на любой ККМ, подключенной к БД, поскольку данные о них хранятся там же.

13. По умолчанию, списки ККМ пусты. Это значит, что все данные будут доступны на всех ККМ.

14. Для начала, добавьте в список ККМ новую строку. Укажите «Номер ПОС».

15. По окончании редактирования новой строки, в таблице «Операции» автоматически создадутся шесть операций:

1) "Возврат";
2) "Просмотр";
3) "Кредит";
4) "Предоплата";
5) "Tax free" (модуль Global Blue IC2);
6) "Подбор чека".

16. Каждой операции можно указать необходимую группу.
Группы работают следующим образом: если у ККМ 1 у операции «Возврат» стоит «Группа 1», и у ККМ 2 у той же операции стоит та же группа,
запросы к ОТТ будут производиться для номеров ПОС 1 и 2.

17. Есть две группы по умолчанию:

1) "Все ККМ" – запросы ведутся по всем ККМ, транзакции которых есть в ОТТ;
2) "Локально" – запросы ведутся в справочник транзакций данной ККМ. Запросы в ОТТ для данной операции не производятся.

18. Для добавления своих групп, нажмите на кнопку «Группы».

19. В открывшемся окне, добавьте новую строку в список групп. Укажите «Код группы» и «Наименование группы».

20. По завершении добавления необходимых групп, нажмите ОК. Теперь, для операций можно указать созданные группы.

21. По окончании работы с группами ККМ, примените изменения и закройте форму.

Удаление транзакций

Автоматической очистки транзакций нет. Очистку необходимо выполнять напрямую в СУБД.
Для этого необходимо создать хранимую процедуру в БД.
Это можно сделать в настройках Кассир 5 на вкладке ОТТ, если возникает ошибка, то это нужно сделать вручную в СУБД.
Для этого необходимо выполнить скрипт создания хранимой процедуры для удаления транзакций: для MSSQL:

SET ANSI_NULLS ON
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, -@older_than_days, CURRENT_TIMESTAMP));

	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 = 'Можно очищать только транзакции старше 30 дней (' + CAST(@older_than_days AS NVARCHAR(10)) + ' < 30)';

для PostgreSQL:

CREATE OR REPLACE PROCEDURE dbo.cleanup_transactions(IN older_than_days integer, INOUT trans_deleted bigint, INOUT checks_deleted bigint, INOUT error_message text)
    LANGUAGE 'plpgsql'
    
AS $BODY$
DECLARE border_code numeric(19,0);
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 = 'Можно очищать только транзакции старше 30 дней (' || CAST(older_than_days AS text) || ' < 30)';
	END IF;
END$BODY$;
кассир5/всевнешниемодули/отт.txt · Последнее изменение: 2024/04/04 17:42 — maimakarov