Переход на онлайн-кассы по стандарту 54-ФЗ в среде устаревших конфигураций 1С 7.7 создает ряд технических вызовов, особенно если работа ведется в терминальном режиме (через RDP). Основная задача заключается в том, чтобы научить систему различать кассовые аппараты, находящиеся в разных городах, и обеспечить бесконфликтную работу нескольких пользователей с одной базой данных. Разберем подробно, как реализовать эту схему на примере популярных касс АТОЛ 30Ф.
Первое, что нам необходимо осознать: в 1С 7.7 (в частности, в типовой конфигурации «Торговля и Склад») настройки торгового оборудования зачастую привязаны к конкретному сеансу пользователя. Проанализируем механизм хранения этих данных. В отличие от современных версий 1С, где существует справочник «Подключаемое оборудование», в 7.7 параметры подключения (номер COM-порта, модель, скорость) сохраняются либо во внешних файлах настроек, либо в реестре Windows в ветке конкретного пользователя HKEY_CURRENT_USER.
Рассмотрим по шагам, как настроить оборудование для разных городов:
fdsvc (Frontol Device Service) или веб-сервера драйвера АТОЛ 10. В этом случае в настройках 1С указывается не номер порта, а IP-адрес удаленного компьютера и номер TCP-порта.Важной проблемой при работе в терминале является использование временных файлов для формирования чека. Многие обработки обслуживания 1С 7.7 используют промежуточный XML-файл, который передается драйверу. Если несколько пользователей одновременно нажмут кнопку «Пробить чек», может возникнуть ситуация, когда один файл будет занят несколькими процессами. Выясним, как этого избежать.
Проанализируем типичную ошибку в коде обработок обслуживания. Часто путь к файлу жестко прописан или берется из общего каталога. Для решения проблемы нам необходимо принудительно использовать КаталогПользователя(). Рассмотрим пример кода, который гарантирует уникальность файла:
// Определяем путь к уникальному файлу для текущего пользователя
ПутьКФайлуЧека = КаталогПользователя() + "atol_check_data.xml";
// Пример формирования структуры чека через XML
Если ФС.СуществуетФайл(ПутьКФайлуЧека) = 1 Тогда
ФС.УдалитьФайл(ПутьКФайлуЧека);
КонецЕсли;
// Дальнейшая логика записи XML в файл
// ...
// Загрузка сформированного файла в драйвер
АдоДБСтрим.LoadFromFile(ПутьКФайлуЧека);
Важный момент: Убедитесь, что в настройках пользователей 1С (в конфигураторе) для каждого сотрудника прописан индивидуальный «Каталог пользователя». Если это поле оставить пустым, временные файлы будут создаваться в каталоге базы данных, что неизбежно приведет к ошибкам при одновременной печати.
При использовании АТОЛ 30Ф мы сталкиваемся с необходимостью передачи данных в ОФД через службу EoU (Ethernet over USB). Посмотрим на специфику настройки в RDP:
Если служба EoU запущена на RDP-сервере, она может пытаться занять проброшенные COM-порты всех пользователей сразу, что вызовет ошибку «Порт занят». Проанализируем два способа решения этой задачи:
EoU на локальных компьютерах в городах. В этом случае касса сама будет отправлять данные в интернет, минуя RDP-канал для ОФД. 1С на сервере будет использовать только один порт (для команд), а второй порт (для данных) будет обслуживаться локально. Это самый стабильный вариант.Таймаут до 5000–10000 мс. Это предотвратит обрыв связи, если интернет-канал на мгновение «просядет».Рассмотрим ситуацию, когда стандартных средств настройки недостаточно. В 1С 7.7 справочник «Кассы» часто не содержит привязки к конкретному оборудованию. Чтобы сделать работу прозрачной, мы можем добавить в справочник «Кассы» или «Пользователи» дополнительный реквизит, в котором будет храниться идентификатор рабочего места.
Для идентификации в коде удобно использовать системную переменную CLIENTNAME, которая в RDP-сессии содержит имя удаленного компьютера. Выясним, как ее получить:
// Получаем имя клиентской машины в терминальной сессии
КомандаСистемы = СоздатьОбъект("WScript.Shell");
ИмяКлиента = КомандаСистемы.ExpandEnvironmentStrings("%CLIENTNAME%");
Если ПустаяСтрока(ИмяКлиента) = 1 Тогда
// Если работаем не в RDP, берем обычное имя компьютера
ИмяКлиента = ИмяКомпьютера();
КонецЕсли;
Сообщить("Вы подключены с рабочего места: " + ИмяКлиента);
Используя этот идентификатор, мы можем программно подставлять нужные настройки в объект Драйвер перед открытием чека. Это позволит избежать ручной перенастройки оборудования при смене рабочего места пользователем.
Современным и наиболее правильным подходом является отказ от старых COM-объектов в пользу драйверов АТОЛ 10.x. Эти драйверы поддерживают работу через JSON-запросы и могут функционировать как веб-сервис. Разберем преимущества этого метода:
КаталогПользователя() и временными XML-файлами.Для реализации этого метода в 1С 7.7 потребуется внешняя компонента (например, AddIn.AtolKKM_10), которую нужно зарегистрировать на сервере. После этого работа с кассой превращается в отправку структурированного текста, что значительно упрощает отладку и поддержку системы в нескольких городах одновременно.
Подведем итог: Работа 1С 7.7 с несколькими ККТ в RDP вполне возможна. Главное — обеспечить изоляцию настроек через индивидуальные учетные записи, правильно распределить временные файлы по каталогам пользователей и, по возможности, использовать современные методы связи через IP-протокол, чтобы минимизировать влияние нестабильности RDP на процесс печати чеков.