Как устранить ошибку «Порт занят» и «Нет связи» при работе с АТОЛ 22Ф в 1С:УТ 10.3

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

При использовании конфигурации 1С:Управление торговлей 10.3 (релизы 10.3.50.1 и выше) многие пользователи сталкиваются с неприятной ситуацией: при открытии документа «Реализация товаров и услуг» вторым или третьим пользователем система выдает ошибку: «АТОЛ: ККТ с передачей данных: Ошибка при подключении устройства. Порт занят другим приложением». Это происходит потому, что программа по умолчанию пытается захватить управление кассой сразу при открытии формы документа, блокируя доступ другим сотрудникам.

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

Причина блокировки порта: почему 1С «захватывает» кассу

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

Происходит следующее: драйвер АТОЛ открывает COM-порт (или виртуальный USB-порт) в монопольном режиме. Пока окно документа открыто на одном компьютере, порт считается занятым. Если в этот момент другой пользователь попытается открыть документ или пробить чек, он получит сообщение «Нет связи». Наша задача — сделать так, чтобы 1С обращалась к кассе только в момент непосредственного нажатия кнопки печати чека.

Способ 1. Программная доработка (Перенос подключения на событие печати)

Это самый эффективный метод, если вы не хотите использовать сторонние платные обработки. Нам необходимо изменить логику работы формы документа РеализацияТоваровИУслуг (или ЧекККМ, ПКО), чтобы оборудование подключалось только «по требованию».

Рассмотрим по шагам, что нужно сделать в конфигураторе:

  1. Найдите в модуле формы документа процедуру ПриОткрытии().
  2. Найдите в ней вызов функции, отвечающей за подключение торгового оборудования (обычно это ПодключитьОборудование() или аналогичная функция из общего модуля МенеджерОборудования).
  3. Закомментируйте этот вызов. Теперь при открытии формы порт заниматься не будет.
  4. Перейдите к процедуре, которая обрабатывает нажатие кнопки «Чек». Обычно она называется ОсновныеДействияФормыПечатьЧека или КнопкаВыполнитьНажатие.
  5. Вставьте код подключения оборудования непосредственно перед началом формирования чека и код отключения сразу после завершения печати.

Примерный алгоритм кода может выглядеть так:


// В обработчике печати чека
РезультатПодключения = МенеджерОборудованияКлиент.ПодключитьУстройство(ИдентификаторУстройства);

Если РезультатПодключения Тогда
    // Выполняем фискализацию чека
    ПечататьЧекНаККТ(); 
    
    // Обязательно освобождаем порт после печати!
    МенеджерОборудованияКлиент.ОтключитьУстройство(ИдентификаторУстройства);
Иначе
    Предупреждение("Не удалось подключить кассу: " + ОписаниеОшибки);
КонецЕсли;

Важный момент: если вы используете типовой механизм, убедитесь, что в настройках торгового оборудования для данного пользователя не стоит галочка «Занимать устройство при открытии», если такая опция доступна в вашей версии обработки обслуживания.

Способ 2. Настройка «Сервера ККТ» в драйвере АТОЛ 10

Если вы используете современный драйвер АТОЛ версии 10.х, проблему можно решить на уровне системного администрирования. Драйвер 10-й версии поддерживает работу через TCP/IP.

Разберем этот вариант подробнее:

  1. На компьютере, к которому физически подключена касса, в «Тесте драйвера ККТ» настройте связь и убедитесь, что флаг «Включено» работает.
  2. Запустите службу Atol TCP Server (входит в комплект поставки драйвера).
  3. На других компьютерах в настройках торгового оборудования 1С выберите тип подключения не «COM-порт», а «TCP/IP».
  4. Укажите IP-адрес главного компьютера и порт (по умолчанию 5555).

При такой схеме драйвер сам берет на себя роль диспетчера очереди. Если два пользователя нажмут «Печать» одновременно, драйвер выстроит их запросы друг за другом, а не выдаст ошибку блокировки порта.

Способ 3. Проблема с НДС 20% и отображением ставок

В процессе настройки ККТ в УТ 10.3 часто возникает сопутствующая проблема: НДС 20% не печатается или заменяется на «Без НДС». Проанализируем причину в сообщении 8 форума: «Печатаются только 10%, 20% просто выкидывается».

Это происходит из-за несоответствия индексов налогов в 1С и в таблицах кассового аппарата. В старых версиях 1С была зашита ставка 18%. После перехода на 20% индексы в драйвере изменились.

Для решения необходимо проверить следующие настройки:

Рекомендации по использованию Web-сервера АТОЛ

Если программная доработка 1С кажется слишком сложной, рассмотрим использование Web-сервера АТОЛ. Это современная надстройка над драйвером, которая позволяет отправлять задания на печать через HTTP-запросы.

При таком подходе 1С вообще не «захватывает» порт. Она отправляет JSON-пакет с данными чека на локальный веб-сервер, который сам ставит чек в очередь и печатает его, как только касса освободится. Это полностью исключает ошибку «Порт занят» при открытии документов несколькими пользователями одновременно.

Резюме: Чтобы избавиться от ошибок связи в 1С:УТ 10.3, мы рекомендуем в первую очередь внедрить доработку по освобождению порта сразу после печати чека. Это позволит вашим менеджерам работать в документах параллельно, не мешая друг другу и не блокируя кассовое оборудование.

← На главную