В практике автоматизации торговых предприятий мы часто сталкиваемся с ситуацией, когда работа пользователей организована через терминальный доступ (RDP), а торговое оборудование (ККТ, сканеры) подключено непосредственно к локальным машинам пользователей или используется сетевое подключение. В данной статье мы подробно разберем проблему, описанную пользователями 1С:Комплексная автоматизация 2 (но актуальную и для 1С:Розница, 1С:УТ, 1С:ERP), когда при работе в терминале возникают следующие ошибки:
Давайте проанализируем причины этого поведения и рассмотрим надежные способы решения.
Чтобы понять, почему команда открытия смены уходит на другую кассу, нам необходимо разобраться, как платформа 1С определяет, где именно находится пользователь.
В конфигурациях на управляемых формах (УТ 11, КА 2, ERP) существует справочник РабочиеМеста. При запуске сеанса система пытается сопоставить текущую сессию с элементом этого справочника. Идентификация обычно происходит по связке: Имя компьютера + Имя пользователя Windows.
При работе через RDP возникает коллизия:
SERVER-1C), а не локального ПК, за которым сидит кассир.В результате, когда Пользователь А нажимает "Открыть смену", 1С смотрит в настройки оборудования для "Рабочего места Сервер", находит там первую попавшуюся активную ККТ (которая может принадлежать Пользователю Б) и отправляет команду туда.
Самое надежное и профессиональное решение, которое устраняет 99% проблем с торговым оборудованием — это отказ от проброса оборудования в терминал. Мы рекомендуем установить платформу 1С локально на компьютер кассира и использовать режим Тонкого клиента. Почему это помогает?
ИмяКомпьютера() возвращает реальное имя локальной машины. 1С безошибочно определяет "Рабочее место" и подтягивает именно ту ККТ, которая стоит на столе у пользователя.Если база файловая, ее можно опубликовать на веб-сервере (IIS/Apache). Если база серверная — подключаемся напрямую по протоколу TCP/IP или http.
Если по каким-то причинам (политика безопасности, слабые локальные ПК) мы вынуждены работать в RDP, нам придется выполнить ряд настроек для стабилизации работы.
Нам нужно убедиться, что 1С различает сессии разных пользователей. В настройках RDP-клиента (файл .rdp) убедитесь, что включена передача имени компьютера. Однако надежнее всего привязать оборудование к конкретным пользователям 1С, а не к абстрактным ID системы. В разделе НСИ и Администрирование -> РМК и оборудование -> Рабочие места создайте отдельные элементы для каждого кассового узла вручную. Затем при запуске 1С на конкретном терминальном сеансе используйте параметр запуска (если конфигурация позволяет) или персональные настройки пользователя, чтобы жестко закрепить ID рабочего места.
Автор темы указал, что одна из касс работает через TCP Socket. Это предпочтительный вариант для терминала, но он имеет нюанс — монопольный захват порта. Большинство драйверов ККТ при подключении занимают порт. Если сеанс 1С завис или был завершен некорректно, порт остается занятым. Второй пользователь (или тот же самый при перезапуске) получит ошибку "Порт занят" или "Нет связи". Что делать:
Вторая касса у автора подключена по COM-порту. При работе через RDP используется механизм "Port Redirection". Это самое узкое место. Проблема, описанная автором ("смена не закрывается"), часто связана с тайм-аутами. Разберем цепочку событий при закрытии смены:
ЗакрытьСмену.Если в сети есть задержки ("лаги"), стандартного тайм-аута драйвера (обычно 1000–3000 мс) не хватает. Драйвер в 1С считает, что устройство не ответило, и выдает ошибку. При этом сама ККТ смену уже закрыла! Как исправить: Зайдите в настройки подключаемого оборудования в 1С -> Параметры драйвера. Найдите параметр Тайм-аут (Timeout). Увеличьте его значение минимум до 10 000 мс (10 секунд), а лучше до 15 000 мс для терминальных сессий. Это даст "запаздывающим" пакетам шанс дойти до сервера.
Рассмотрим ситуацию, когда в ККТ смена закрылась, а в 1С осталась открытой. Это происходит из-за описанного выше разрыва связи в момент получения ответа. При попытке повторно нажать "Закрыть смену" 1С получает от ККТ ошибку: "Смена не открыта" (или "Неверный режим"), так как касса уже в Z-режиме. 1С обрабатывает это как сбой и не проводит документ "Кассовая смена". Порядок действий для исправления:
КассоваяСмена, который имеет статус "Открыта".Автор заметил разницу между открытием из списка чеков и из обработки "Управление фискальным устройством".
Список документов "Чек ККМ": Использует логику привязки Касса ККМ -> Рабочее место -> Подключаемое оборудование. Именно здесь возникают ошибки "не то устройство", если идентификатор рабочего места определен неверно.
Обработка "Управление фискальным устройством": Работает более прямолинейно, обращаясь к драйверу по текущим сохраненным настройкам для текущего сеанса. Поэтому она может срабатывать успешнее, но это не решает проблему системно.
Чтобы раз и навсегда забыть о "фокусах" с ККТ в 1С:Комплексная автоматизация:
РабочиеМеста, привязав оборудование к конкретным пользователям 1С.