Модуль предназначен для централизованного хранения транзакций кассира 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$;