Сразу оговорюсь, что в 1cv8 есть специальные конфиги для ККМ, поэтому речь пойдет о старенькой 1cv77, перепиленой под кассу.
При входе на терминальный сервер у кассира сразу запускается 1С и предлагается авторизация. Т.к. мышек у них нет и клавиаткры специализированные, то это немного затруднительно. Пришла мысь авторизовать их карточкой со штрих-кодом. Сканер всё равно клавиатуру эмулирует, почему бы нет?
Использовать будем самый распространенный Code 128 (ISO 15417). Его поддерживают практически все генераторы и там широкий набор символов. Я для генерации использовал беслатный 
Zint Barcode Generator.
Выглядеть должно всё это примерно так: сразу после старта на пустом экране появляется окно с сообщением и система не реагирует ни на что кроме "правильных" штрих-кодов.
			
		
				
			 
- Окно приветствия
- logon_screen.png (5.21 КБ) 23061 просмотр
 
После запуска 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;
Следующим шагом будет файл с описанием пользователей, которые у вас заведены в 1Цэ. Примерно так, 
users.ini
Код: Выделить всё
var barcode = {
  mtX4U74qKDn7 : {     // Это штрихкод
    user  : "Кассир",  // Это юзер 1С
    pass  : "iIH667"   // Это пароль, назначенный юзеру в 1С
  },
  BCcfJ725ft4E : {
    user  : "ReIndex",
    pass  : "DDD /M"   // Это значит, что 1С запустится в монопольном режиме
  },
  qwe : {              // а в этом случае можно будет войти Админом просто набрав на клавиатуре qwe
    user  : "Admin",   // ..но об этом ведь никто не узнает )))
    pass  : "DDD"
  }
}
Обратите внимание, что 
в штрих-кодах нельзя использовать спец.символы и начинаться они должны с буквы, потому что это переменные javascript, да-да  
 
 
Далее самое интересное! Нужно сделать 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
Ну вы поняли, что все три файлика нужно сложить в d:\remoteapp\launcher\ или куда вам понравится, но не забудьте указать нужный путь в конфиге.
Да, как принято говорить: 
если у кого-то что-то не работает, значит вы чего-то не поняли. у меня работает.
зы
есть один известный баг. при двойном срабатывании сканера всё безжалостно виснет  
 
 
..но вас ведь это не смущает, правда?  

Сразу оговорюсь, что в 1cv8 есть специальные конфиги для ККМ, поэтому речь пойдет о старенькой 1cv77, перепиленой под кассу.
При входе на терминальный сервер у кассира сразу запускается 1С и предлагается авторизация. Т.к. мышек у них нет и клавиаткры специализированные, то это немного затруднительно. Пришла мысь авторизовать их карточкой со штрих-кодом. Сканер всё равно клавиатуру эмулирует, почему бы нет?
Использовать будем самый распространенный Code 128 (ISO 15417). Его поддерживают практически все генераторы и там широкий набор символов. Я для генерации использовал беслатный [url=http://sourceforge.net/projects/zint/]Zint Barcode Generator[/url].
Выглядеть должно всё это примерно так: сразу после старта на пустом экране появляется окно с сообщением и система не реагирует ни на что кроме "правильных" штрих-кодов.
[attachment=0]logon_screen.png[/attachment]
После запуска 1С табличка меняется. На ней отображается имя зарегистрированного кассира и она прячется . Если 1С закрыть, то всё опять вернется в режим ожидания штрих-кода.
Приступим.
Для начала нужно создать конфиг с названием [b]settings.ini[/b] и вашими настройками. Это понятно из комментариев:
[code]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;[/code]
Следующим шагом будет файл с описанием пользователей, которые у вас заведены в 1Цэ. Примерно так, [b]users.ini[/b]
[code]var barcode = {
  mtX4U74qKDn7 : {     // Это штрихкод
    user  : "Кассир",  // Это юзер 1С
    pass  : "iIH667"   // Это пароль, назначенный юзеру в 1С
  },
  BCcfJ725ft4E : {
    user  : "ReIndex",
    pass  : "DDD /M"   // Это значит, что 1С запустится в монопольном режиме
  },
  qwe : {              // а в этом случае можно будет войти Админом просто набрав на клавиатуре qwe
    user  : "Admin",   // ..но об этом ведь никто не узнает )))
    pass  : "DDD"
  }
}[/code]
Обратите внимание, что [color=#BF0000]в штрих-кодах нельзя использовать спец.символы и начинаться они должны с буквы[/color], потому что это переменные javascript, да-да  :lol: 
Далее самое интересное! Нужно сделать html-приложение, которое будет запускаться при стате и творить всё это безобразие.
Очень просто. Создаем какой-нибудь файл с расширением .hta например [b]launcher.hta[/b] и помещаем в него следующий текст:
[code]<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>[/code]
Все три файлика должны лежать в одном месте.
Следующим шагом нужно добавить C:\Windows\System32\mshta.exe в RemoteApp сервера с разрешением аргументов.
Ну а конфиг терминала может выглядеть примерно так:
[code]user=domain\user[Кассир]:password
clienthostname=KASSA
serial=COM1(usb)
turnoffmenu=poweroff
shell=mshta d:\remoteapp\launcher\launcher.hta
server=192.168.0.100
connection[/code]
Ну вы поняли, что все три файлика нужно сложить в d:\remoteapp\launcher\ или куда вам понравится, но не забудьте указать нужный путь в конфиге.
Да, как принято говорить: [i]если у кого-то что-то не работает, значит вы чего-то не поняли. у меня работает.[/i]
[b]зы[/b]
есть один известный баг. при двойном срабатывании сканера всё безжалостно виснет  :lol: 
..но вас ведь это не смущает, правда?  :wink: