Как лучше прикрутить эквайринг к древней отраслевке 1С:Розница для избежания ошибок продавцов?

Программист 1С v8.3 (Обычные формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При внедрении эквайринга в старые, сильно доработанные конфигурации 1С, такие как "древняя отраслевка" на базе 1С:Розница, перед разработчиками и интеграторами встает целый ряд уникальных и достаточно сложных задач. Основная цель, как правило, заключается в автоматизации процесса приема безналичных платежей, чтобы минимизировать человеческий фактор и исключить ошибки продавцов при ручном вводе суммы на эквайринговом терминале. Мы рассмотрим различные подходы к решению этой проблемы, проанализируем их преимущества и недостатки, а также разберем связанные с этим технические нюансы и практические советы.

Введение: Сложности интеграции эквайринга в старые конфигурации 1С

Когда речь идет о "древней отраслевке", мы подразумеваем конфигурацию, которая, возможно, была создана или сильно модифицирована много лет назад, имеет уникальные доработки и, вероятно, работает на устаревшей версии платформы 1С. Такая система, хоть и полностью устраивает клиента в части основного функционала, может оказаться крайне негибкой в отношении внедрения современных технологий, таких как автоматизированный эквайринг.

  1. Уникальность и нетиповые изменения: Каждая "древняя отраслевка" уникальна. Множество изменений, внесенных в ее код и структуру, могут конфликтовать со стандартными решениями 1С, включая Библиотеку подключаемого оборудования (БПО) или драйверы эквайринга.
  2. Несовместимость платформы и оборудования: Старые редакции платформы 1С могут быть несовместимы с современными моделями эквайринговых терминалов и актуальными протоколами передачи данных. Новые версии БПО могут не корректно работать на устаревших платформах.
  3. Ограниченная поддержка API: Банки постоянно обновляют свои API для интеграции. Старые конфигурации могут не иметь возможностей для работы с современными банковскими протоколами, а поддержка старых API часто прекращается.
  4. Сложности обновления: Обновление нетиповых конфигураций всегда требует индивидуального подхода, тщательного анализа всех внесенных изменений и трудоемкого объединения. Это значительно увеличивает сроки и стоимость работ.

Общие подходы к интеграции эквайринга в 1С

Независимо от специфики конфигурации, для приема безналичной оплаты нам всегда потребуется эквайринговое оборудование (терминал), его установка и соответствующие драйверы. Терминал подключается к системе 1С. В типовых конфигурациях 1С, таких как "1С:Розница 8" ред. 2.3, ред. 3.0, "1С:Управление нашей фирмой" ред. 1.6, ред. 3.0, поддерживается как подключаемый эквайринг (данные передаются автоматически), так и не подключаемый (кассир вручную вводит сумму). Наша задача — реализовать именно подключаемый эквайринг для минимизации ошибок.

Вариант 1: Интеграция через Библиотеку подключаемого оборудования (БПО)

Библиотека подключаемого оборудования (БПО) — это стандартный механизм 1С для работы с различным торговым оборудованием, включая эквайринговые терминалы. БПО предоставляет унифицированный интерфейс для взаимодействия с драйверами оборудования от разных производителей. Использование БПО в типовых конфигурациях является предпочтительным способом подключения эквайринга. Однако, при работе с "древней отраслевкой" этот путь может оказаться одним из самых сложных.

Проблемы и сложности при интеграции БПО в "древнюю отраслевку"

Внедрение современной БПО в старую нетиповую конфигурацию представляет собой трудоемкий процесс. Мы сталкиваемся с несколькими ключевыми проблемами:

  1. Трудоемкость объединения подсистем: БПО — это не просто несколько модулей, а целая подсистема со своей архитектурой, объектами, формами и механизмами. Для ее внедрения в нетиповую конфигурацию необходимо выполнить сравнение и объединение множества объектов. Как показывает опыт, это может быть крайне непросто из-за глубоких изменений в структуре данных и логике работы между старыми и новыми версиями БПО (например, между БПО 2.0 и БПО 3.2.3). Некоторые разработчики, имевшие подобный опыт, откровенно заявляют: "я на нетленку ставил БПО (тоже ради эквайринга) - зарекся это поделие внедрять в нетленки."
  2. Совместимость версий БПО и платформы: Старая платформа 1С может просто не понять новые БПО. Современные БПО могут использовать функционал платформы, недоступный в старых версиях, что приведет к ошибкам компиляции или работы. Возникает вопрос: "платформа там старенькая... может не понять новых БПО."
  3. Целесообразность "тянуть" всю БПО: Если нам нужен только эквайринг, интеграция всей БПО ради одной функции может показаться избыточной. Как было замечено на форуме: "Тянуть БПО ради эквайринга? - хехе :) забавно :)". Это не только увеличивает объем конфигурации, но и вносит потенциальные конфликты с существующим функционалом. Однако, если планируется использование различных драйверов (например, Сбер, Тинькофф), БПО могла бы унифицировать работу.
  4. Обновления и поддержка: После успешной интеграции БПО, поддержание ее в актуальном состоянии становится дополнительной задачей, которая может осложниться при будущих обновлениях основной конфигурации или самой БПО.

Стратегии "обновления" БПО

Вместо полной интеграции всей БПО, можно рассмотреть более точечные подходы:

  1. Частичная подмена или обновление: Мы можем попытаться "подменить" или обновить только те части БПО, которые напрямую касаются работы с эквайрингом. Этот подход предполагает глубокое понимание внутренней структуры БПО. Идея состоит в том, чтобы импортировать только необходимые объекты и модули, а не всю подсистему целиком. Однако, как отмечают пользователи, даже такая частичная интеграция может оказаться сложной, так как "подменить - это объединить по подсистемам и т.п. Это трудоемко и не изолированно."
  2. Изучение стандарта БПО: Важно ознакомиться со стандартом БПО и различиями между версиями, например, БПО 2.0 и БПО 3.2.3, особенно в части эквайринговых систем. Это поможет понять, какие компоненты действительно изменились и являются критичными для функционала эквайринга. Возможно, для эквайринга в БПО 2.0 "ничего" не поменялось кардинально, как было замечено: "А чего там для эквайнинга то поменялось? ... ничего :)". В таком случае, модификация старого БПО или его минимальное обновление может быть более простым решением.

Вариант 2: Прямая работа с драйвером Сбербанка

Альтернативным подходом, который часто рассматривается для "нетленок", является прямая работа с драйвером эквайрингового терминала Сбербанка. Этот метод предполагает вызов функций драйвера напрямую из кода конфигурации 1С, минуя стандартные механизмы БПО.

Преимущества прямого подхода

Прямая работа с драйвером обладает несколькими преимуществами, особенно в контексте старых и сильно доработанных конфигураций:

  1. Изолированность: Этот подход является более изолированным и не требует глубокой модификации всей конфигурации. Мы не "тянем" в базу 100500 новых драйверов или подсистем, а работаем только с тем, что необходимо для эквайринга.
  2. Точечная реализация: Мы можем реализовать только нужный функционал: оплата, отмена, возврат и сверка итогов. Это значительно уменьшает объем работы и потенциальные риски конфликтов.
  3. Контроль над процессом: Разработчик имеет полный контроль над логикой взаимодействия с терминалом, что может быть полезно для отладки и адаптации к специфическим требованиям клиента.

Технические детали и сложности

Для работы с эквайринговыми терминалами Сбербанка чаще всего используется обработчик драйвера "СБ РФ: Эквайринговые терминалы", который взаимодействует с COM-компонентой SBRFCOM.dll. Этот драйвер является развитием предыдущих версий и поддерживает операции оплаты, выдачи наличных и формирования коротких слип-чеков. Он совместим с ОС Windows, Linux, Android (x32/x64 архитектуры).

  1. Установка и регистрация COM-компоненты: Ключевым шагом является корректная установка и регистрация SBRFCOM.dll в операционной системе Windows. Как правило, ее необходимо скопировать в системную папку (например, System32 или SysWOW64) и зарегистрировать с помощью команды regsvr32 SBRFCOM.dll.
  2. Взаимодействие с драйвером из 1С: После регистрации COM-компонента становится доступной для создания объектов в 1С. Мы можем создать объект COMОбъект("AddIn.SBRF") (или аналогичный, в зависимости от версии драйвера и его ProgID) и вызывать его методы.
  3. Поддержка нескольких версий драйверов: Проблема, озвученная автором, заключается в том, что "там могут драйвера на автоматизированный эквайринг поставить и старые и новые, придется оба драйвера поддерживать". Это означает, что код должен быть достаточно гибким для определения и работы с разными версиями драйвера или иметь логику для выбора подходящего драйвера. В некоторых случаях, при обновлении 1С, устаревшие драйверы торгового оборудования, включая драйверы АТОЛ, ШТРИХ-М и другие, перестают поддерживаться, что может потребовать их обновления до актуальных версий.
  4. Основные операции: Как правило, нам потребуется реализовать следующие операции:
    • Инициализация: Настройка соединения с терминалом.
    • Оплата (Payment): Передача суммы и выполнение платежа.
    • Отмена (Cancel): Отмена последней операции.
    • Возврат (Refund): Возврат денежных средств по номеру слип-чека или ссылке на транзакцию.
    • Сверка итогов (CloseShift/Reconciliation): Выполнение сверки с банком для закрытия смены на терминале.

Пример псевдокода для прямой работы с драйвером Сбербанка (концептуальный)

Мы рассмотрим пример псевдокода, который демонстрирует логику взаимодействия с COM-объектом драйвера эквайринга Сбербанка. Это не готовый к использованию код, а иллюстрация принципов:


// Функция для инициализации драйвера эквайринга
Функция ИнициализироватьЭквайрингСбербанк()
    Попытка
        ДрайверЭквайринга = Новый COMОбъект("AddIn.SBRF"); // Или другой ProgID, зависящий от версии драйвера
        // Установка параметров драйвера (например, COM-порт, IP-адрес, таймауты)
        // ДрайверЭквайринга.УстановитьПараметр("ComPort", 1);
        // ДрайверЭквайринга.УстановитьПараметр("IP", "192.168.1.100");
        Возврат ДрайверЭквайринга;
    Исключение
        Сообщить("Ошибка при инициализации драйвера эквайринга: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

// Функция для выполнения оплаты
Функция ВыполнитьОплатуЭквайринг(ДрайверЭквайринга, СуммаКОплате)
    Если ДрайверЭквайринга = Неопределено Тогда
        Сообщить("Драйвер эквайринга не инициализирован.");
        Возврат Ложь;
    КонецЕсли;

    Попытка
        // Вызов метода оплаты. Параметры могут отличаться в зависимости от версии драйвера.
        Результат = ДрайверЭквайринга.Payment(СуммаКОплате);
        
        Если Результат.Успех Тогда // Предполагаем, что драйвер возвращает объект с полем Успех
            Сообщить("Оплата успешно произведена. Номер чека: " + Результат.НомерЧека);
            // Дополнительная обработка, запись в документ ЭквайринговаяОперация
            // ...
            Возврат Истина;
        Иначе
            Сообщить("Ошибка оплаты: " + Результат.СообщениеОбОшибке);
            Возврат Ложь;
        КонецЕсли;
    Исключение
        Сообщить("Критическая ошибка при выполнении оплаты: " + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции

// Функция для выполнения возврата
Функция ВыполнитьВозвратЭквайринг(ДрайверЭквайринга, СуммаКВозврату, НомерЧекаДляВозврата)
    Если ДрайверЭквайринга = Неопределено Тогда
        Сообщить("Драйвер эквайринга не инициализирован.");
        Возврат Ложь;
    КонецЕсли;

    Попытка
        // Вызов метода возврата.
        Результат = ДрайверЭквайринга.Refund(СуммаКВозврату, НомерЧекаДляВозврата);
        
        Если Результат.Успех Тогда
            Сообщить("Возврат успешно произведен.");
            // ...
            Возврат Истина;
        Иначе
            Сообщить("Ошибка возврата: " + Результат.СообщениеОбОшибке);
            Возврат Ложь;
        КонецЕсли;
    Исключение
        Сообщить("Критическая ошибка при выполнении возврата: " + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции

// Функция для выполнения сверки итогов
Функция ВыполнитьСверкуИтоговЭквайринг(ДрайверЭквайринга)
    Если ДрайверЭквайринга = Неопределено Тогда
        Сообщить("Драйвер эквайринга не инициализирован.");
        Возврат Ложь;
    КонецЕсли;

    Попытка
        // Вызов метода сверки итогов (закрытие смены)
        Результат = ДрайверЭквайринга.CloseShift();
        
        Если Результат.Успех Тогда
            Сообщить("Сверка итогов успешно произведена.");
            // ...
            Возврат Истина;
        Иначе
            Сообщить("Ошибка сверки итогов: " + Результат.СообщениеОбОшибке);
            Возврат Ложь;
        КонецЕсли;
    Исключение
        Сообщить("Критическая ошибка при выполнении сверки итогов: " + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции

// Пример использования:
// Драйвер = ИнициализироватьЭквайрингСбербанк();
// Если Драйвер <> Неопределено Тогда
//     Если ВыполнитьОплатуЭквайринг(Драйвер, 123.45) Тогда
//         // Успех
//     Иначе
//         // Ошибка
//     КонецЕсли;
// КонецЕсли;

Важно помнить, что актуальные методы и их параметры необходимо уточнять в документации к конкретной версии драйвера Сбербанка. После того как автор темы заявил "Нашел решение тут: На базе этого написал тестовую обработку", мы можем предположить, что он пошел именно по пути использования прямой работы с драйвером или нашел аналогичное, изолированное решение, избегающее полной интеграции БПО.

Вариант 3: Неинтегрированный эквайринг (ручной ввод)

В случаях, когда бюджет на доработки крайне ограничен, а сложности интеграции представляются непреодолимыми, мы можем рассмотреть вариант использования эквайринга без прямого подключения к 1С. Этот подход наименее желателен, так как не решает проблему ошибок продавцов, но может быть временным или экономически оправданным решением.

  1. Суть метода: Кассир вручную вводит сумму к оплате на эквайринговом терминале, а затем вручную отражает эту операцию в 1С.
  2. Недостатки:
    • Высокий риск ошибок: Ручной ввод суммы на терминале является основным источником ошибок, которые мы пытаемся избежать.
    • Отсутствие автоматизации: Нет автоматического контроля за операциями, сверка итогов усложняется.
    • Дополнительные операции: Кассиру приходится выполнять двойную работу.
  3. Преимущества:
    • Низкая стоимость: Не требует доработок конфигурации 1С.
    • Простота внедрения: Только покупка терминала и заключение договора с банком.

Дополнительные аспекты и рекомендации

Независимо от выбранного подхода, мы должны учитывать ряд сопутствующих факторов, которые влияют на успешность и стоимость проекта.

Финансовые затраты

Подключение эквайринга в нетиповую самописную конфигурацию может быть недешевым. Как справедливо замечено в сообщении 3, "У твоего клиента денег не хватит. Вот тут вот: пишут что подключение эквайринга в нетиповую самописную конфигурацию обходится недешево." Стоимость услуг по доработке 1С варьируется, например, от 2800 до 3900 рублей в час. При необходимости разработка может включать создание нового функционала, настройку существующих функций, изменение отчетов, форм и других элементов системы. Перед началом работ крайне важно составить детальную смету и согласовать бюджет с клиентом.

Договор с банком-эквайером

Для подключения эквайринга необходимо заключить договор с банком-эквайером (в нашем случае, Сбербанком). Банк предоставит не только необходимое оборудование, но и данные для настройки (например, идентификаторы терминала, мерчанта). В договоре также будет указан процент комиссии, который необходимо учесть в настройках 1С для корректного отражения фактической выручки и взаиморасчетов с банком.

Тестирование и обучение

После завершения всех настроек и доработок необходимо провести всестороннее тестирование новой функциональности. Мы должны проверить все сценарии: оплата, отмена, возврат, сверка итогов, а также поведение системы при ошибках (например, отсутствие связи с терминалом, недостаток средств на карте). Затем необходимо провести обучение сотрудников работе с новой функциональностью и эквайринговым терминалом. Четкие инструкции и практические занятия помогут минимизировать возможные ошибки и ускорить адаптацию.

Контроль и отчетность

В 1С доступны стандартные механизмы для учета эквайринговых операций. Операции по эквайрингу обычно отражаются через документ Эквайринговая операция. Для контроля и анализа мы можем использовать отчеты, такие как Контроль операций эквайринга и Расчеты по эквайрингу. Важно убедиться, что наша "древняя отраслевка" корректно взаимодействует с этими механизмами или, при необходимости, доработать их для формирования необходимой отчетности и проведения сверок с банком.

Современные версии 1С поддерживают прямой обмен с банками, такими как Сбербанк, Тинькофф и Альфа-Банк, через API, а также автоматизацию отчетов по безналичным расчетам и сверке с банком. Также существуют модули для связи заказов и оплат через интернет-эквайринг между 1С и Сбербанком, позволяющие создавать счета, возвраты и автоматически обновлять статусы заказов. Мы должны рассмотреть возможность адаптации некоторых из этих принципов для нашей конфигурации, если это технически возможно и оправдано.

Актуализация драйверов и платформы

Важно регулярно проверять актуальность драйверов касс и эквайринговых терминалов. Устаревшие драйверы могут быть сняты с поддержки или перестать корректно работать после обновлений операционной системы или платформы 1С. В случае возникновения ошибок после обновления компоненты Сбербанка драйвера 2.x, рекомендуется проверить версию драйвера и при необходимости обратиться в техническую поддержку 1С или Сбербанка. Если платформа 1С действительно "старенькая", как упоминается, это может быть основным препятствием. Мы можем рассмотреть возможность ее обновления до более актуальной версии 8.3, если это позволит совместимость с отраслевкой, хотя это и является отдельным, крупным проектом.

Заключение

Выбор оптимального подхода к интеграции эквайринга в "древнюю отраслевку" 1С:Розница требует тщательного анализа. Мы рассмотрели три основных варианта: интеграцию через БПО, прямую работу с драйвером Сбербанка и неинтегрированный (ручной) подход. Каждый из них имеет свои особенности, преимущества и недостатки. Для данной ситуации, учитывая сложности с БПО и уникальность конфигурации, прямая работа с драйвером Сбербанка через COM-компоненту SBRFCOM.dll представляется наиболее изолированным и контролируемым решением, позволяющим точечно реализовать необходимый функционал без глубокого вмешательства во всю структуру "нетленки".

Однако, прежде чем приступить к реализации, мы должны провести детальное обследование текущей конфигурации, оценить версию платформы 1С, проанализировать существующие доработки и понять реальные потребности клиента. Не следует забывать и о финансовой стороне вопроса — такие доработки могут быть весьма дорогостоящими. Комплексный подход, включающий техническую экспертизу, планирование бюджета и тестирование, позволит нам успешно решить задачу автоматизации эквайринга и обеспечить бесперебойную работу продавцов.

← На главную