Как решить проблемы с открытием и закрытием смен ККТ при работе в терминальном режиме (RDP)?

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

В практике автоматизации торговых предприятий мы часто сталкиваемся с ситуацией, когда работа пользователей организована через терминальный доступ (RDP), а торговое оборудование (ККТ, сканеры) подключено непосредственно к локальным машинам пользователей или используется сетевое подключение. В данной статье мы подробно разберем проблему, описанную пользователями 1С:Комплексная автоматизация 2 (но актуальную и для 1С:Розница, 1С:УТ, 1С:ERP), когда при работе в терминале возникают следующие ошибки:

  1. Смена открывается "не на том" устройстве (например, команда уходит на кассу соседа).
  2. Смена в 1С не закрывается, хотя команда была отправлена.
  3. Возникают сложности с просмотром свойств оборудования.
  4. Приходится закрывать смену через "Тест драйвера", минуя 1С.

Давайте проанализируем причины этого поведения и рассмотрим надежные способы решения.

Корень проблемы: Определение рабочего места в терминале

Чтобы понять, почему команда открытия смены уходит на другую кассу, нам необходимо разобраться, как платформа 1С определяет, где именно находится пользователь. В конфигурациях на управляемых формах (УТ 11, КА 2, ERP) существует справочник РабочиеМеста. При запуске сеанса система пытается сопоставить текущую сессию с элементом этого справочника. Идентификация обычно происходит по связке: Имя компьютера + Имя пользователя Windows. При работе через RDP возникает коллизия:

  1. Для 1С, запущенной в терминале, имя компьютера — это имя сервера (например, SERVER-1C), а не локального ПК, за которым сидит кассир.
  2. Если несколько пользователей работают под одной учетной записью Windows (что является плохой практикой, но встречается) или механизм проброса имени клиента RDP (Client Name) не срабатывает, 1С видит их как одно и то же "Рабочее место".

В результате, когда Пользователь А нажимает "Открыть смену", 1С смотрит в настройки оборудования для "Рабочего места Сервер", находит там первую попавшуюся активную ККТ (которая может принадлежать Пользователю Б) и отправляет команду туда.

Решение №1: Использование Тонкого клиента (Рекомендуемое)

Самое надежное и профессиональное решение, которое устраняет 99% проблем с торговым оборудованием — это отказ от проброса оборудования в терминал. Мы рекомендуем установить платформу 1С локально на компьютер кассира и использовать режим Тонкого клиента. Почему это помогает?

  1. Локальная работа с железом: Драйвер ККТ устанавливается на локальный ПК. 1С обращается к оборудованию напрямую, без сетевых задержек и капризов RDP-протокола.
  2. Корректная идентификация: ИмяКомпьютера() возвращает реальное имя локальной машины. 1С безошибочно определяет "Рабочее место" и подтягивает именно ту ККТ, которая стоит на столе у пользователя.
  3. Стабильность: Исключаются проблемы с отваливающимися COM-портами при кратковременных разрывах связи.

Если база файловая, ее можно опубликовать на веб-сервере (IIS/Apache). Если база серверная — подключаемся напрямую по протоколу TCP/IP или http.

Решение №2: Настройка для работы в терминале (Если Тонкий клиент невозможен)

Если по каким-то причинам (политика безопасности, слабые локальные ПК) мы вынуждены работать в RDP, нам придется выполнить ряд настроек для стабилизации работы.

1. Фиксация идентификаторов рабочих мест

Нам нужно убедиться, что 1С различает сессии разных пользователей. В настройках RDP-клиента (файл .rdp) убедитесь, что включена передача имени компьютера. Однако надежнее всего привязать оборудование к конкретным пользователям 1С, а не к абстрактным ID системы. В разделе НСИ и Администрирование -> РМК и оборудование -> Рабочие места создайте отдельные элементы для каждого кассового узла вручную. Затем при запуске 1С на конкретном терминальном сеансе используйте параметр запуска (если конфигурация позволяет) или персональные настройки пользователя, чтобы жестко закрепить ID рабочего места.

2. Особенности подключения ККТ по TCP/IP (Ethernet)

Автор темы указал, что одна из касс работает через TCP Socket. Это предпочтительный вариант для терминала, но он имеет нюанс — монопольный захват порта. Большинство драйверов ККТ при подключении занимают порт. Если сеанс 1С завис или был завершен некорректно, порт остается занятым. Второй пользователь (или тот же самый при перезапуске) получит ошибку "Порт занят" или "Нет связи". Что делать:

  1. Использовать "Сервер торгового оборудования" (программная прослойка), если он поддерживается производителем ККТ. Он управляет очередью печати.
  2. При возникновении проблем не просто закрывать 1С, а делать полный Logoff (Завершение сеанса) пользователя на сервере терминалов. Это принудительно разрывает сетевые соединения и освобождает порты.

3. Особенности подключения ККТ через COM-порт (Проброс портов)

Вторая касса у автора подключена по COM-порту. При работе через RDP используется механизм "Port Redirection". Это самое узкое место. Проблема, описанная автором ("смена не закрывается"), часто связана с тайм-аутами. Разберем цепочку событий при закрытии смены:

  1. 1С отправляет команду ЗакрытьСмену.
  2. Команда идет через RDP-канал на локальный ПК -> в COM-порт -> в ККТ.
  3. ККТ печатает Z-отчет (это занимает время, фискальный накопитель думает).
  4. ККТ отправляет ответ "Успешно".
  5. Ответ идет обратно через RDP в 1С.

Если в сети есть задержки ("лаги"), стандартного тайм-аута драйвера (обычно 1000–3000 мс) не хватает. Драйвер в 1С считает, что устройство не ответило, и выдает ошибку. При этом сама ККТ смену уже закрыла! Как исправить: Зайдите в настройки подключаемого оборудования в 1С -> Параметры драйвера. Найдите параметр Тайм-аут (Timeout). Увеличьте его значение минимум до 10 000 мс (10 секунд), а лучше до 15 000 мс для терминальных сессий. Это даст "запаздывающим" пакетам шанс дойти до сервера.

Синхронизация статусов смены (Рассинхрон)

Рассмотрим ситуацию, когда в ККТ смена закрылась, а в 1С осталась открытой. Это происходит из-за описанного выше разрыва связи в момент получения ответа. При попытке повторно нажать "Закрыть смену" 1С получает от ККТ ошибку: "Смена не открыта" (или "Неверный режим"), так как касса уже в Z-режиме. 1С обрабатывает это как сбой и не проводит документ "Кассовая смена". Порядок действий для исправления:

  1. Не пытайтесь снова закрыть смену штатной кнопкой, если ККТ уже выдала Z-отчет.
  2. В 1С откройте документ КассоваяСмена, который имеет статус "Открыта".
  3. В некоторых конфигурациях есть возможность принудительно перевести статус в "Закрыта" (через меню "Еще" или используя редактирование Чеков ККМ и Кассовых смен).
  4. Если такой возможности нет, необходимо программно изменить статус документа или реквизиты регистра сведений, отвечающего за состояние кассовой смены.
  5. Убедитесь, что отчет о розничных продажах сформировался. Если нет — сформируйте его вручную на основании чеков за период смены.

Различие методов открытия смены

Автор заметил разницу между открытием из списка чеков и из обработки "Управление фискальным устройством".

Список документов "Чек ККМ": Использует логику привязки Касса ККМ -> Рабочее место -> Подключаемое оборудование. Именно здесь возникают ошибки "не то устройство", если идентификатор рабочего места определен неверно.

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

Резюме

Чтобы раз и навсегда забыть о "фокусах" с ККТ в 1С:Комплексная автоматизация:

  1. Приоритет: Переведите пользователей на Тонкий клиент. Это исключит слой абстракции RDP и проблемы с пробросом портов.
  2. Если RDP неизбежен:
    • Увеличьте тайм-ауты в драйвере ККТ до 10-15 секунд.
    • Используйте подключение ККТ по Ethernet (TCP/IP), а не через проброс COM-портов.
    • Четко настройте справочник РабочиеМеста, привязав оборудование к конкретным пользователям 1С.
← На главную