Многие пользователи и разработчики, работающие с конфигурациями на базе 1С:Управление торговлей 10.3, сталкиваются с неприятной ошибкой: при попытке печати чека из второго сеанса 1С или при параллельной работе двух баз система выдает сообщение «Порт занят». Давайте разберем, почему это происходит и как устранить данную проблему, обеспечив стабильную работу торгового оборудования.
Основная причина заключается в несовпадении архитектурных подходов. Старые механизмы ТорговоеОборудование в 1С 8.2/8.3 (особенно в УТ 10.3) проектировались во времена, когда драйверы касс работали иначе. Современные драйверы Атол (ДТО 10 и выше) при инициализации через COM-порт требуют монопольного доступа к ресурсу.
В чем заключается технический конфликт:
УТ 10.3 часто подразумевает «сквозное» подключение: оборудование инициализируется при открытии формы и остается в активном состоянии до её закрытия.Рассмотрим несколько подходов, которые помогут нам наладить корректную работу оборудования.
Это самое надежное и рекомендуемое производителем решение. Вместо прямой работы с COM-портом 1С подключается к локальному или сетевому веб-серверу (службе), который распределяет запросы от нескольких приложений.
Преимущества решения:
Если внедрение сервера ККТ по каким-то причинам невозможно, необходимо переработать код обработки обслуживания. Нам нужно добиться того, чтобы порт освобождался сразу после выполнения операции печати.
Разберем типичный алгоритм правильной работы с драйвером:
Вместо удержания оборудования активным, нам следует реализовать принцип: «Подключил — Напечатал — Отключил».
// Пример логики для реализации в модуле обработки
Процедура ПечатьЧека()
// 1. Инициализация и подключение
ПодключитьОборудование();
// 2. Выполнение операции
Драйвер.ПечатьЧека();
// 3. Явное освобождение ресурса
ОтключитьОборудование();
КонецПроцедуры
Важно обратить внимание на то, что объект драйвера Драйвер, хранящийся в экспортных переменных модуля приложения, должен быть очищен или принудительно освобожден. В ДТО 10 используйте метод Release для явного освобождения интерфейса компоненты.
Проанализируем шаги, которые необходимо предпринять системному администратору или программисту для стабилизации системы:
ОтключитьКлиента в обработчик события формы ПриЗакрытии. Это гарантирует, что при закрытии формы ПКО порт будет принудительно освобожден.ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма). Проверьте, не блокируется ли выполнение этого кода какими-либо исключениями или условиями, из-за которых процедура отключения просто не вызывается.Помните, что архитектура УТ 10.3 требует внимательного обращения к ресурсам. Если вы видите, что переменная Драйвер остается заполненной после закрытия всех документов, значит, где-то в коде происходит утечка соединения, которую необходимо устранить явным вызовом методов очистки.