При входе на терминальный сервер у кассира сразу запускается 1С и предлагается авторизация. Т.к. мышек у них нет и клавиаткры специализированные, то это немного затруднительно. Пришла мысь авторизовать их карточкой со штрих-кодом. Сканер всё равно клавиатуру эмулирует, почему бы нет?
Использовать будем самый распространенный Code 128 (ISO 15417). Его поддерживают практически все генераторы и там широкий набор символов. Я для генерации использовал беслатный Zint Barcode Generator.
Выглядеть должно всё это примерно так: сразу после старта на пустом экране появляется окно с сообщением и система не реагирует ни на что кроме "правильных" штрих-кодов. После запуска 1С табличка меняется. На ней отображается имя зарегистрированного кассира и она прячется . Если 1С закрыть, то всё опять вернется в режим ожидания штрих-кода.
Приступим.
Для начала нужно создать конфиг с названием settings.ini и вашими настройками. Это понятно из комментариев:
Код: Выделить всё
var run1c = "D:\\RemoteApp\\1Cv77-0027\\BIN_net\\1cv7.exe ENTERPRISE /DD:\\1C_Bases\\Shop"; // Строка запуска приложения
var winWidth=450; // ширина окна приветствия
var winHeight=70; // высота окна приветствия
// положние окна - в центр экрана
var winPosX=screen.width/2-winWidth/2;
var winPosY=screen.height/2-winHeight/2;
Код: Выделить всё
var barcode = {
mtX4U74qKDn7 : { // Это штрихкод
user : "Кассир", // Это юзер 1С
pass : "iIH667" // Это пароль, назначенный юзеру в 1С
},
BCcfJ725ft4E : {
user : "ReIndex",
pass : "DDD /M" // Это значит, что 1С запустится в монопольном режиме
},
qwe : { // а в этом случае можно будет войти Админом просто набрав на клавиатуре qwe
user : "Admin", // ..но об этом ведь никто не узнает )))
pass : "DDD"
}
}
Далее самое интересное! Нужно сделать html-приложение, которое будет запускаться при стате и творить всё это безобразие.
Очень просто. Создаем какой-нибудь файл с расширением .hta например launcher.hta и помещаем в него следующий текст:
Код: Выделить всё
<html><head>
<hta:application id=logon_id
applicationName=logon_1c
showInTaskBar=no
caption=no
innerBorder=no
selection=no
scroll=no
contextmenu=no />
<script type = "text/javascript" src = "users.ini"></script>
<script type = "text/javascript" src = "settings.ini"></script>
<script language=javascript>
var str = ""; // введенная строка
var works = 0; // флаг открытой сессии
window.resizeTo(winWidth, winHeight); // изменяем размер
window.moveTo(winPosX, winPosY); // позиционируем окно
function getChar(event) {
if (works) return 0; // сессия открыта - на кнопки не реагируем
var key = String.fromCharCode(event.keyCode);
if (event.keyCode == 27) close(); // нажат Esc - закрыть программу
if (event.keyCode == 13) { // нажат Enter - начинаем проверку баркода
if (str in barcode) { // есть такой баркод
document.getElementById('msg').innerHTML = "Работает кассир " + barcode[str].user;
document.getElementById('esc').innerHTML = "";
works = 1;
var run1cUser = run1c + " /N" + barcode[str].user + " /P" + barcode[str].pass;
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run (run1cUser, 3, 1);
document.getElementById('msg').innerHTML = "Авторизуйтесь для работы с ККМ";
document.getElementById('esc').innerHTML = "<strong>ESC</strong> - выключить";
works = 0;
str = "";
return 0;
}
// нет такого баркода
str = ""; // занулить ввод и выйти
return 0;
}
if (event.keyCode < 32) return null; // спец. символ
str = str + key
//document.getElementById('msg').innerHTML = str;
return 0;
}
</script>
</head>
<title>Авторизация 1С</title>
<style type="text/css">
#msg {
align : center;
}
#esc {
color: #FF0040;
position: absolute;
bottom: 6px;
right: 6px;
font: 8pt;
}
</style>
<body bgcolor=buttonface text=buttontext style="padding: 2px;font: 18pt 'MS Sans serif'" onkeypress = "getChar(event)">
<div id="msg" align="center">Авторизуйтесь для работы с ККМ</div>
<div id="esc"><strong>ESC</strong> - выключить</div>
</body></html>
Следующим шагом нужно добавить C:\Windows\System32\mshta.exe в RemoteApp сервера с разрешением аргументов.
Ну а конфиг терминала может выглядеть примерно так:
Код: Выделить всё
user=domain\user[Кассир]:password
clienthostname=KASSA
serial=COM1(usb)
turnoffmenu=poweroff
shell=mshta d:\remoteapp\launcher\launcher.hta
server=192.168.0.100
connection
Да, как принято говорить: если у кого-то что-то не работает, значит вы чего-то не поняли. у меня работает.
зы
есть один известный баг. при двойном срабатывании сканера всё безжалостно виснет
..но вас ведь это не смущает, правда?