Как настроить печать чеков на одной кассе АТОЛ с нескольких рабочих мест 1С?

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

В процессе автоматизации розничной и оптовой торговли часто возникает задача экономии на оборудовании. Типичный сценарий: предприятие имеет множество удаленных подразделений (офисов продаж, складов), работающих в одной базе 1С через терминальный сервер (RDP) или тонкий клиент, но пробивать чеки необходимо на одном физическом устройстве. Например, на популярной и бюджетной кассе АТОЛ 30Ф.

Основная проблема, с которой сталкиваются системные администраторы и разработчики при стандартном подключении ККТ — это монопольный захват COM-порта драйвером. Как только один пользователь начинает пробивать чек, порт кассы блокируется. В этот момент другие пользователи при попытке пробития получают критическую ошибку "Порт занят" или "Нет связи с ККТ". В кассовом аппарате по умолчанию отсутствует аппаратная очередь печати.

В данной статье мы подробно разберем, как решить проблему конкурентного доступа и организовать надежную очередь печати чеков из разных рабочих мест 1С на одной физической кассе АТОЛ. Мы проанализируем как классические методы, так и современные штатные механизмы платформы 1С и драйверов ДТО 10.

Вариант 1. Использование штатного механизма 1С «ККТ в общем доступе»

Начнем с самого простого и современного решения, которое не требует стороннего программного обеспечения или написания сложного кода. Фирма 1С добавила встроенную поддержку совместного использования касс.

Начиная с релизов 1С:Бухгалтерия 8 (версия 3.0.164), а также в актуальных версиях 1С:УНФ и 1С:Розница (начиная с 3.0.9), реализован полноценный механизм «ККТ в общем доступе». Рассмотрим по шагам, как его настроить:

  1. Подключим кассу АТОЛ к компьютеру (серверу или выделенному ПК), который имеет постоянный IP-адрес в локальной сети или VPN. Настроим сетевой доступ к ККТ.
  2. В базе 1С перейдем в раздел Администрирование — Подключаемое оборудование.
  3. При добавлении нового устройства типа "ККТ с передачей данных" выберем драйвер "АТОЛ:ККТ с передачей данных в общем доступе" (или аналогичный сертифицированный драйвер АТОЛ 10.х).
  4. В карточке настройки оборудования установим признак совместного использования ККТ.
  5. Для каждого удаленного рабочего места (пользователя) укажем единое сетевое имя кассы или её IP-адрес.

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

Вариант 2. Подключение через RPC-сервер АТОЛ (Сервер удаленного подключения)

Если конфигурация 1С устарела или требуется более гибкая настройка связи через RDP, идеальным решением станет использование встроенного в современные драйверы АТОЛ инструмента — RPC-сервера (служба ATOL Fiscal Printer Remote Server).

Этот способ пришел на смену сложному веб-серверу и работает гораздо стабильнее в терминальных средах. Проанализируем процесс его настройки:

  1. На компьютере, к которому физически подключена касса через USB, установим актуальный пакет драйверов АТОЛ (ДТО 10).
  2. Запустим службу удаленного подключения. По умолчанию она работает по TCP-порту 19524. В настройках службы выберем кассу, которую мы хотим "расшарить" в сеть.
  3. На удаленных рабочих местах (в сессиях RDP) в "Тесте драйвера ККТ" укажем способ подключения: TCP/IP, введем IP-адрес компьютера-сервера и порт 19524.
  4. В 1С на каждом рабочем месте настроим подключение к ККТ, указав этот сетевой адрес.

Преимущество метода: RPC-сервер АТОЛ оптимизирован для работы по сети. Он минимизирует задержки связи, эффективно пробрасывает команды через VPN-туннели и берет на себя диспетчеризацию портов. Однако, при экстремально высокой одновременной нагрузке (когда несколько десятков человек одновременно нажимают кнопку "Пробить") всё еще могут возникать кратковременные ошибки таймаута, поэтому данный метод лучше всего подходит для умеренной интенсивности продаж.

Вариант 3. Использование стороннего ПО (ККМ-Сервер / kkmserver)

Если стандартные средства не справляются с потоком запросов от 60 подразделений, мы рекомендуем использовать проверенное временем стороннее решение — программу ККМ-Сервер (kkmserver). Это мощный локальный сервер печати чеков, который идеально решает проблему очередей.

Выясним, как работает эта архитектура:

  1. Программа ККМ-Сервер устанавливается как служба Windows на компьютере, к которому физически подключен АТОЛ 30Ф.
  2. Она перехватывает управление кассой и предоставляет для внешней среды собственный HTTP-интерфейс (веб-сервер).
  3. Все рабочие места 1С отправляют команды на печать чеков не напрямую в ККТ, а в виде JSON-запросов на этот веб-сервер.
  4. Главный плюс: ККМ-Сервер имеет встроенную, отказоустойчивую очередь печати. Если 5 пользователей одновременно отправят чеки, программа примет их все, поместит в буфер памяти, вернет в 1С статус "Принято в очередь" и поочередно распечатает их без зависаний базы и без генерации ошибок "Порт занят".

Для интеграции ККМ-Сервера с 1С обычно используется готовая внешняя компонента или обработка обслуживания, которая подменяет стандартные вызовы фискализации на HTTP-запросы. Посмотрим на упрощенный пример отправки JSON-запроса из 1С:


// Пример формирования структуры запроса на печать чека в ККМ-Сервер
Функция ПробитьЧекЧерезККМСервер(ДанныеЧека)
    
    ЗапросJSON = Новый Соответствие;
    ЗапросJSON.Вставить("Command", "RegisterCheck");
    ЗапросJSON.Вставить("NumDevice", 1);
    ЗапросJSON.Вставить("IsFiscal", Истина);
    ЗапросJSON.Вставить("TypeCheck", 0); // 0 - приход
    
    // Наполнение строк чека
    МассивСтрок = Новый Массив;
    Для Каждого СтрокаТовара Из ДанныеЧека.Товары Цикл
        СтрокаЧека = Новый Соответствие;
        СтрокаЧека.Вставить("Name", СтрокаТовара.НоменклатураНаименование);
        СтрокаЧека.Вставить("Quantity", СтрокаТовара.Количество);
        СтрокаЧека.Вставить("Price", СтрокаТовара.Цена);
        СтрокаЧека.Вставить("Amount", СтрокаТовара.Сумма);
        СтрокаЧека.Вставить("Department", СтрокаТовара.Секция);
        СтрокаЧека.Вставить("Tax", СтрокаТовара.СтавкаНДС);
        МассивСтрок.Добавить(СтрокаЧека);
    КонецЦикла;
    ЗапросJSON.Вставить("List", МассивСтрок);
    
    // Сериализация в JSON и отправка
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ЗапросJSON);
    СтрокаЗапроса = ЗаписьJSON.Закрыть();
    
    HTTPСоединение = Новый HTTPСоединение("192.168.1.100", 5893); // IP компьютера с кассой
    HTTPЗапрос = Новый HTTPЗапрос("/Execute");
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Попытка
        HTTPОтвет = HTTPСоединение.ОтправитьДляОбъекта(HTTPЗапрос);
        Возврат HTTPОтвет.ПолучитьТелоКакСтроку();
    Исключение
        ЗаписатьЛогОшибок("Ошибка связи с ККМ-Сервером: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции

Вариант 4. Переход на облачную фискализацию (АТОЛ Онлайн)

Давайте критически оценим исходные условия задачи: 60 удаленных подразделений и одна касса АТОЛ 30Ф. Использование физической настольной кассы эконом-сегмента для обслуживания такой крупной сети несет огромные риски:

Для решения этих проблем на системном уровне рекомендуем рассмотреть переход на облачную кассу. Фирма 1С предлагает встроенный сервис «1С-Облачная касса», работающий совместно со специализированными фермами касс, такими как АТОЛ Онлайн.

При такой схеме:

  1. Физическая касса АТОЛ 30Ф в офисе больше не нужна.
  2. Все ваши 60 подразделений отправляют данные о продажах из 1С в облачный сервис АТОЛ Онлайн по защищенным каналам связи API.
  3. Облачный сервис разворачивает виртуальные кассы в высоконадежных дата-центрах. Система сама выстраивает идеальную и бесперебойную очередь чеков.
  4. Покупателям отправляются электронные чеки на Email или по SMS, что полностью освобождает вас от необходимости закупки кассовой ленты, обслуживания принтеров и контроля замятия бумаги.

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

Резюме и рекомендации

Подведем итоги анализа возможных решений:

← На главную