Всем доброго дня. Мой первый пост - надеюсь кому-то поможет, просто времени на все это потрачено неимоверно.
Проблема как у всех - с этим пресловутым "p" файлом при работе через терминальную сессию RDP с сервером, с терминалами сбербанка (заодно и с ККМ - у нас стоят АТОЛ 30Ф).
1.Кассы. Нормальную работу и приемлемую скорость печати удалось получить только реализовав проброс портов через VSPE.
На локальных станциях - все ККТ подключены на 10 и 11 порты, в клиентской части VSPE ставится для каждого компьютера уникальный порт - например 5001, 5002 и т.д., на сервере VSPE слушает их же. В 1с (у нас КА1.1) создается для каждой кассы свое устройство и выбирается нужный порт. Т.е. в торговом оборудовании много ККТ. Немного доработана конфа, чтобы была привязка конкретного экземпляра ККТ к подразделению.
2. Эквайринг. (сразу выскажу незачот Сберу и той конторе, которая занимается наладкой и обслуживанием оборудования). С самого начала задача стояла так, чтобы продавцы не могли руками вводить цифры на терминал, а данные для операции поступали из 1с. Эквайрер был один - Сбер, т.к. онлайн ККТ еще не планировались - необходимы были интегрированные (управляемые извне) терминалы с принтером чека. Нам на все точки (около 100) поставили аппараты Ingenico IPP480. На сервер было установлено ПО - папка sc552, из нее зареганы dll, в 1с создано одно оборудование с 1 фиксированным com портом (7). Проброс идет средствами RDP - в каждой сессии ком порт свой, путаницы нет. После установки ККМ никаких проблем не возникло - эквайринговый чек печатался на терминале, а кассовый - на кассе.
Через какое-то время я примерно половину терминалов перевел на другой банк (по причине полной неклиентоориентированности банка - по полгода (это не преувеличение) - они меняли мне юрлицо, на котором работает точка. У меня ИП давно закрыто - а на р/с деньги поступают от эквайринга... ) У нового эквайрера - система Arcus2 терминалы Ingenico IPP320 без принтера. Поковырявшись - добились нормальной печати эквайринговых чеков на ККТ. С одним нюансом - эта система по аналогии со сбером создает в директории сервера C:\Arcus2\ файлы cheq.out и chek.out - которые содержат текст для печати чека, обработка оборудования цепляет их и передает на ККТ для печати. Обычно файлы появляются при проведении платежа и потом сами удаляются. Понятно что при одновременном обращении будет ошибка (они и есть - но редко), также иногда файл подвисает и не удаляется по непонятной причине. Все терминалы перестают работать из-за ошибки доступа к файлу. Для таких случаев написан батник, который каждые 10 минут проверяет время текущее и время создания cheq - если разница больше 10 минут - значит файл завис и батник удаляет cheq.out. В 20% случаев - не удаляет и его приходится удалять руками. Плохо - но работает.
Возникла потребность еще в 3х терминалах именно сбера - IPP480 сказали больше не производят, привезли 3 Verifone VX820 без принтера естественно. Работа установщиков конечно умиляет - ставят папку SC552 на локальный комп, USB драqвер на устройство запускают loadparm - сверка итогов - видишь окошечки пробежали, сверка прошла? видишь файлик "p" появился? Ну все - готово!! А то что 1с их терминал в упор не видит и мне надо не 9 com а 7й, и то что чек на ККТ не печатается - им глубоко фиолетово...
Дальше собственно по теме:
На клиентском компе в нашей ситуации - работа через RDP с терминальным сервером - нужно установить только USB дрова на сам аппарат. SC552 нужна только для первичного (или дальнейшего) тестирования самого терминала без 1с. Т.е. ее можно смело удалять и никакие библиотеки регистрировать не надо. Даже если эта папка существует на локальном компе - никаких обращений к ней не происходит при работе с RDP - т.е. например файл pinpad.ini там редактировать бесполезно - при запуске с сервера - работает только папка на сервере C:\SC552\ и настройки читаются оттуда. Никаких разбрасываний папок SC552 по папкам пользователей и регистраций библиотек оттуда делать не надо. Все делается из 1й папки на сервере.
Т.к. у нас папка на сервере уже была - первый терминал стартанул успешно - создал на сервере в папке C:\SC552\p файл. Сверка прошла, оплаты прошли - не было чека на RRN/
На сервере стояла версия DLL примерно 23 - а новые терминалы заточены под 29 (версия их прошивки должна совпадать с версией DLL - это в теории, на практике - как пойдет - может работать, а может и нет). Рискнули - обновили DLL на сервере - боялись старые терминалы перестанут работать. Нет, повезло - работают. И новый VX820 начал печатать чеки на ККТ.
Но оказалось, что после того как один терминал создал файл p - при попытке провести операцию на другом - доступа к этому файлику не было. Немного увеличили права для всех юзеров на папку SC552 - и доступ появился - поочередно терминалы проводили операции, создавали p файл и выдавали чек на ККТ.
Старые терминалы, которые с принтером - им на этот файлик по барабану - они его не используют.
Далее работа с pinpad.ini на сервере:
ComPort=7
PinpadLog=1
PrinterFile=p
;PinpadIPAddr=10.10.10.24
;PinpadIPPort=8888
;TerminalID=02000000
;MerchantID=000000000000
;Header=Заголовок чека строка 1|Строка 2|Строка 3|Строка 4
;CardHolderSignatureImage=sign\<date}\<t_id}\<tn}-<time}.png
PrinterEnd=01
Speed=115200
ShowScreens=1
NewProtocol=1
WorkingDir=%UserProfile%\SC552
TlvDir=%UserProfile%\SC552
Показать
Вот так выглядел наш файл изначально.
Если закомментировать PrinterFile=p - печати чека на ККТ не будет.
Если написать что-то другое - например PrinterFile=p22 - будет создан файл p22.
Задача - развести эти файлы - каждому терминалу - свой.
Установлено, что %UserProfile% у нас не работает - причина почти сразу стала очевидна - у нас юзеры заданы кириллицей.
Например прописав PrinterFile=Ваня1 - я получил файл "1".
Почитав про системные переменные windows я начал пробовать разные варианты - чтобы файлы как-то могли отличаться друг от друга.
Наткнулся на %CLIENTNAME% - имя компа, подключенного к RDP сессии. У нас оно во-первых задано латинскими буквами и уникально - т.е. каждый терминал можно идентифицировать по %CLIENTNAME%. И это взлетело. Теперь строка выглядит так:
PrinterFile=%CLIENTNAME%
Вместо гемороя со всякими SUBST, созданием каждому пользователю папок SC552 по пути %UserProfile% и переименования пользователей в латинские имена - в одной папке все печатные файлы, но с разными именами.
Еще бы в Arcus так сделать - но там пока не вышло.
PS - и еще момент - есть программка TLvEdit - которая читает и пишет параметры прошивки самого терминала - так вот там есть настройка - порядок взаимодействия с ККТ - там обязательно должна стоять правильная галка - на пункте (не помню дословно) - "Печать чека на ККТ" - если галка не стоит - чека на кассе не дождетесь.
-