При использовании конфигурации 1С:Управление торговлей 10.3 (релизы 10.3.50.1 и выше) многие пользователи сталкиваются с неприятной ситуацией: при открытии документа «Реализация товаров и услуг» вторым или третьим пользователем система выдает ошибку: «АТОЛ: ККТ с передачей данных: Ошибка при подключении устройства. Порт занят другим приложением». Это происходит потому, что программа по умолчанию пытается захватить управление кассой сразу при открытии формы документа, блокируя доступ другим сотрудникам.
В этой статье мы подробно разберем, почему возникает эта проблема, и рассмотрим несколько способов ее решения — от программной доработки до изменения архитектуры подключения через драйвер.
Давайте проанализируем ситуацию. В устаревших конфигурациях на обычных формах логика работы с торговым оборудованием встроена в процедуру ПриОткрытии() формы документа. Как только менеджер открывает реализацию, чтобы просто посмотреть состав товаров или проверить цену, 1С вызывает функции глобального модуля для инициализации ККТ.
Происходит следующее: драйвер АТОЛ открывает COM-порт (или виртуальный USB-порт) в монопольном режиме. Пока окно документа открыто на одном компьютере, порт считается занятым. Если в этот момент другой пользователь попытается открыть документ или пробить чек, он получит сообщение «Нет связи». Наша задача — сделать так, чтобы 1С обращалась к кассе только в момент непосредственного нажатия кнопки печати чека.
Это самый эффективный метод, если вы не хотите использовать сторонние платные обработки. Нам необходимо изменить логику работы формы документа РеализацияТоваровИУслуг (или ЧекККМ, ПКО), чтобы оборудование подключалось только «по требованию».
Рассмотрим по шагам, что нужно сделать в конфигураторе:
ПриОткрытии().ПодключитьОборудование() или аналогичная функция из общего модуля МенеджерОборудования).ОсновныеДействияФормыПечатьЧека или КнопкаВыполнитьНажатие.Примерный алгоритм кода может выглядеть так:
// В обработчике печати чека
РезультатПодключения = МенеджерОборудованияКлиент.ПодключитьУстройство(ИдентификаторУстройства);
Если РезультатПодключения Тогда
// Выполняем фискализацию чека
ПечататьЧекНаККТ();
// Обязательно освобождаем порт после печати!
МенеджерОборудованияКлиент.ОтключитьУстройство(ИдентификаторУстройства);
Иначе
Предупреждение("Не удалось подключить кассу: " + ОписаниеОшибки);
КонецЕсли;
Важный момент: если вы используете типовой механизм, убедитесь, что в настройках торгового оборудования для данного пользователя не стоит галочка «Занимать устройство при открытии», если такая опция доступна в вашей версии обработки обслуживания.
Если вы используете современный драйвер АТОЛ версии 10.х, проблему можно решить на уровне системного администрирования. Драйвер 10-й версии поддерживает работу через TCP/IP.
Разберем этот вариант подробнее:
При такой схеме драйвер сам берет на себя роль диспетчера очереди. Если два пользователя нажмут «Печать» одновременно, драйвер выстроит их запросы друг за другом, а не выдаст ошибку блокировки порта.
В процессе настройки ККТ в УТ 10.3 часто возникает сопутствующая проблема: НДС 20% не печатается или заменяется на «Без НДС». Проанализируем причину в сообщении 8 форума: «Печатаются только 10%, 20% просто выкидывается».
Это происходит из-за несоответствия индексов налогов в 1С и в таблицах кассового аппарата. В старых версиях 1С была зашита ставка 18%. После перехода на 20% индексы в драйвере изменились.
Для решения необходимо проверить следующие настройки:
1 или 6 (зависит от прошивки).ATOLKKT.epf, которая умеет передавать новые коды налоговых ставок.Если программная доработка 1С кажется слишком сложной, рассмотрим использование Web-сервера АТОЛ. Это современная надстройка над драйвером, которая позволяет отправлять задания на печать через HTTP-запросы.
При таком подходе 1С вообще не «захватывает» порт. Она отправляет JSON-пакет с данными чека на локальный веб-сервер, который сам ставит чек в очередь и печатает его, как только касса освободится. Это полностью исключает ошибку «Порт занят» при открытии документов несколькими пользователями одновременно.
Резюме: Чтобы избавиться от ошибок связи в 1С:УТ 10.3, мы рекомендуем в первую очередь внедрить доработку по освобождению порта сразу после печати чека. Это позволит вашим менеджерам работать в документах параллельно, не мешая друг другу и не блокируя кассовое оборудование.