======Общая таблица транзакций (ОТТ)====== Модуль предназначен для централизованного хранения транзакций кассира 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. **Вручную выполнить скрипт создания таблиц в СУБД**: {{ :кассир5:всевнешниемодули:kassir5_transactions_mssql.zip |скрипт для MSSQL}} (в первой строке заменить символы %ИмяБД% на имя существующей базы), {{ :кассир5:всевнешниемодули:kassir5_transactions_postgresql.zip |скрипт для 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$;