Как подключить онлайн-кассу АТОЛ 1Ф к 1С на macOS: обход ограничений драйверов и настройка через веб-сервер

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

При работе с торговым оборудованием в среде macOS пользователи часто сталкиваются со специфическими трудностями. Типичная ситуация: у вас есть MacBook, коробка 1С:Розница 8.3 и фискальный регистратор АТОЛ 1Ф. Вне среды 1С касса прекрасно определяется операционной системой и работает через стандартную утилиту ДТО (Драйвер торгового оборудования) от АТОЛ. Однако при попытке настроить подключение непосредственно из базы 1С система отказывается видеть устройство, а драйверы не устанавливаются. В этой статье мы подробно разберем, почему возникает эта проблема и какими путями её можно решить.

Почему стандартный драйвер АТОЛ не запускается в 1С на macOS?

Прежде чем переходить к решениям, выясним причину такого поведения системы. Когда мы пытаемся подключить кассу напрямую через Библиотеку подключаемого оборудования (БПО) в 1С на macOS, часто возникает ошибка подключения или установки внешней компоненты. Это происходит из-за двух ключевых факторов безопасности и архитектуры операционной системы Apple:

  1. Блокировка системы Gatekeeper (подпись кода): macOS жестко контролирует запуск исполняемых файлов и динамических библиотек. Когда 1С пытается распаковать внешнюю компоненту (файл формата .dylib) во временную папку и запустить её, Gatekeeper блокирует этот процесс, так как библиотека не имеет подтвержденной нотариальной подписи от Apple. ОС считает этот файл потенциально опасным и помещает его в карантин.
  2. Архитектурные конфликты (Apple Silicon vs Intel): Современные компьютеры Mac работают на собственных процессорах (M1/M2/M3 с архитектурой ARM64), в то время как старые версии платформы 1С или сами библиотеки драйвера АТОЛ могут быть скомпилированы под архитектуру x86_64 (Intel). Если один из компонентов работает в режиме эмуляции Rosetta 2, а другой пытается запуститься нативно, внешняя компонента физически не сможет загрузиться в процесс 1С.

Для решения этой проблемы мы можем пойти тремя путями: принудительно «подружить» локальный драйвер с macOS, развернуть веб-сервер АТОЛ в Docker-контейнере или использовать виртуализацию. Разберем каждый вариант пошагово.

Решение 1. Ручной обход карантина macOS для локального драйвера

Если вы хотите использовать прямое подключение без дополнительных серверов, можно попробовать принудительно снять флаг карантина со скачанных библиотек драйвера АТОЛ. Для этого выполним следующие действия:

  1. Запустите стандартное приложение Терминал на вашем Mac.
  2. Выясните, куда именно 1С распаковала внешнюю компоненту драйвера АТОЛ (обычно это папка во временных файлах пользователя или каталог шаблонов 1С).
  3. Выполните команду снятия атрибута карантина для файла драйвера (замените путь на ваш фактический):

xattr -cr /Users/ИмяПользователя/Library/Application_Support/1C/1cv8/ExtCompT/fptr.dylib

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

Решение 2. Использование Docker для запуска веб-сервера АТОЛ

Если локальный драйвер упорно отказывается работать, лучшим архитектурным решением будет использование Веб-сервера АТОЛ. Веб-сервер позволяет отправлять команды на печать чеков по протоколу HTTP/JSON, что полностью избавляет 1С от необходимости загружать локальные библиотеки драйвера. 1С просто отправляет сетевые запросы на определенный IP-адрес и порт. Для этой задачи можно использовать конфигурацию рабочего места кассира для взаимодействия с кассами АТОЛ через ДТО Web-сервер.

Официальный установщик веб-сервера АТОЛ поставляется только для ОС Windows и Linux. На macOS мы можем запустить Linux-версию веб-сервера внутри контейнера Docker. Проанализируем, как это сделать правильно, учитывая критически важные подводные камни.

Главный подводный камень: проброс USB в Docker на macOS

В отличие от Linux, где пробросить подключенную по USB кассу в контейнер можно одной простой командой --device /dev/ttyUSB0, среда Docker Desktop на macOS работает внутри виртуальной машины и по умолчанию не поддерживает прямой проброс USB-устройств. Если вы просто запустите контейнер, веб-сервер АТОЛ внутри него не увидит кассу, подключенную к вашему MacBook.

Для обхода этого ограничения нам потребуется использовать технологию USB/IP или стороннее ПО вроде VirtualHere. Рассмотрим вариант с VirtualHere:

  1. Установите на ваш macOS серверную часть приложения VirtualHere (VirtualHere USB Server). Это приложение будет транслировать USB-порт с кассой АТОЛ в локальную сеть.
  2. Внутри вашего Docker-контейнера с веб-сервером АТОЛ настройте клиентскую часть VirtualHere (VirtualHere Client), которая подключится к серверу на macOS и смонтирует кассу АТОЛ как локальное USB-устройство внутри Linux-окружения контейнера.
  3. После этого веб-сервер АТОЛ в Docker успешно определит кассу на виртуальном порту (например, /dev/ttyACM0 или /dev/ttyUSB0).

Пример простой конфигурации Dockerfile для сборки контейнера с веб-сервером АТОЛ и установленным клиентом VirtualHere:


FROM ubuntu:20.04
RUN apt-get update && apt-get install -y wget libxml2
# Скачиваем и устанавливаем веб-сервер АТОЛ для Linux
RUN wget https://partner.atol.ru/upload/download/driver/10/atol-driver-10.x.x-linux.deb
RUN dpkg -i atol-driver-10.x.x-linux.deb
# Копируем конфигурационные файлы веб-сервера
COPY web-server.settings /etc/atol/web-server.settings
EXPOSE 16732
CMD ["/usr/bin/atol-web-server"]

Важная особенность авторизации в веб-сервере АТОЛ (версии 10.9.4.0 и выше)

Если вы настраиваете веб-сервер АТОЛ, обязательно учтите нововведение разработчиков. Начиная с версии драйверов 10.9.4.0, авторизация в веб-сервере стала строго обязательной.

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

Пример структуры JSON-запроса к веб-серверу АТОЛ с авторизацией:


{
  "uuid": "8bf6b2bf-7994-4375-9e67-0e625db6b0cf",
  "request": [
    {
      "type": "getDeviceStatus"
    }
  ],
  "user": "admin",
  "password": "MySafePassword123"
}

Решение 3. Использование Parallels Desktop (режим Coherence)

Если настройка Docker-контейнеров и проброс USB кажутся вам излишне сложными, существует проверенный и стабильный альтернативный вариант. Вы можете установить на ваш MacBook программу виртуализации Parallels Desktop.

Parallels Desktop обладает уникальной функцией интеграции под названием Coherence (Гибридный режим). В этом режиме окна приложений запущенной виртуальной машины Windows отображаются на рабочем столе macOS бок о бок с "родными" приложениями Mac, создавая иллюзию единой операционной системы.

Посмотрим на алгоритм настройки этой связки:

  1. Установите Parallels Desktop и разверните легкую гостевую ОС Windows.
  2. В настройках Parallels укажите автоматический проброс USB-устройства «АТОЛ 1Ф» в виртуальную машину Windows при его подключении к MacBook.
  3. Внутри виртуальной машины Windows установите стандартный драйвер АТОЛ 10-й версии и запустите службу Веб-сервер АТОЛ. Он будет работать локально внутри виртуальной машины.
  4. В вашей конфигурации 1С:Розница, запущенной непосредственно на macOS, настройте подключение к ККТ по сети (IP-адрес укажите как локальный адрес вашей виртуальной машины Parallels, например, 10.211.55.3 или настройте проброс портов на 127.0.0.1).

Этот способ гарантирует 100% стабильность работы кассы, так как драйверы АТОЛ работают в своей родной среде Windows, а 1С на Mac взаимодействует с ними по надежному сетевому протоколу HTTP.

Мы подробно проанализировали причины несовместимости торгового оборудования АТОЛ с 1С на macOS и разобрали три практических метода решения проблемы. Выбор конкретного варианта зависит от ваших технических навыков и готовности к администрированию дополнительных служб: от простого снятия карантина в Терминале до разворачивания изолированного Docker-контейнера или виртуальной машины Windows.

← На главную