Задача следующая, есть две розничные точки и центральная оптовая. Пользователи работают в терминале на Win Server 2003, база находится на центральной точке, розничные подключаются по интернету. Необходимо подключить сканеры штрих-кода в центральной точке на складе и Сканеры и ФР в розничных точках. При чем в розничных точках один сканер должен переподключаться между кассовым узлом и компьютером в приёмке. Сканеры ШК - Datalogic QuickScan I QM2100 (беспроводной), Honeywell Eclipse 5145, ФР - Штрих-М-ФР-К. Все устройства с интерфейсом USB.
На прямую. По сути, как я понимаю сервер нужен для работы с несколькими источниками, тут такой задачи не было. Не большая задержка при печати есть, но не критичная.
"В типовых конфигурациях до сих пор не реализован механиз разделения оборудования по сессиям, и в нашем случае при открытии товарных документов любым пользователем, 1С пытается включить всё подключенное к текущему компьютеру оборудование (в нашем случае это 8 сканеров и два ФР) естественно сделать этого не может, о чём радостно сообщает пользователю несметным количеством ошибок. "
Брешете. В УТ11 (и других конфигурациях на базе БСП) эта проблема давно решена. Но предложенное Вами решение я по умолчанию использовал на всех внедрениях УТ10.
Согласен.. Как-то про БСП даже не подумал. Спасибо за дополнение :) Последнее время всё комплексная, да УПП, для них собственно и писал. По-моему на обычных формах нигде ещё не сделано.
Ещё делали не некоторых проектах аналогичную привязку к пользователю, но тут надо было именно к клиенту привязаться, т.к. пользователи меняются.
Для теста перекидки на сервер СОМ портов я использовал команду на серваке "change port". Для теста устройств программу "HYPERTERMINAL". Может кому пригодится.
(5) MsDjuice, к сожалению, по-моему, начиная с Win Vista HYPERTERMINAL не включен в стандартные. Не пробовали его запускать от старых версий на новых? Работает?
И по "change port", там проблема в том, что нам надо знать номер ком порта на клиенте. А т.к. у нас USB в эмуляции, то иногда номер ком порта может меняться. Решается исправлением ключей реестра.
HYPERTERMINAL от старых на новых не пробовал, качал триал версию, на сайте пишется что подходит для Вин 7,8. Ну так узнать номер Ком порта на клиенте не проблема.
(7) MsDjuice, Ну не проблема, если посмотреть в диспетчер задач. А если неопытный пользователь вытащил сканер и воткнул вместо него флешку и порт поменялся, то он сам не перенастроит потом всё. Т.е. нужен какой-то универсальный механизм, без перенастройки. Была идея сделать скрипт, который бы проверял все номера портов. Но в итоге остановились на изменении реестра.
(9) fieryfist, никто не жаловался, точно не могу сказать, но раз не жалуются, то работает. Обрывы связи точно были. Думаю тут может ещё от настроек терминала зависеть, разрешает ли в новый сеанс подключиться или новое соединение делает.
Ну, кстати, зря вы пишите, что нет гипертерминала в windows, начиная с Висты. Насчет именно Висты не могу точно сказать - может действительно там нет, но и в windows 7 и в 8 есть. Просто он отключен.
Самое лучшее решение, это разделять оборудование не по сессиям, а по пользователям и запрещать для пользователя несколко сессий.
Проброс портов - это тривиальное решение.
(13) berator37, Разделять оборудование по пользователям - это полный бред, а не решение. Оборудование подключено к компьютеру, а не к пользователю. И ЛЮБОЙ пользователь входящий в терминал с этого компьютера должен иметь возможность работать с подключенным оборудованием. Это может и применимо для каких-то задач, но явно, не в описанной задаче.
Проброс может и тривиальное решение, за то рабочее. На научную диссертацию и не претендую, просто описал узкие места с которыми столкнулся сам и сталкиваются коллеги.
Здравствуйте!
Воспользовался вашим постом - все заработало, Спасибо!
Но почему-то после перезагрузки сервера оборудование становится недоступным из 1С.
Пишет что Порт недоступен (System Error. Code: 2.Не удается найти указанный файл)
Хотя при этом я открываю "драйвер ккм"(на удаленном рабочем столе) - там указываю порт нужный и нажимаю "Проверка связи" - успешно!
Это на терминальном сервере так.
Может дело в том что кассир(у которого ФР подключен) - заходит в 1С на терминале далеко не первый?
Может кому пригодится идея: В моём случае связь по rdp была настолько плохой, что чек или выходил через минуту или не выходил вообще. Был сделан костыль - данные чека записывались в файл на фтп, у клиента небольшая программа проверяла наличие файла и если он появлялся, то данные отправлялись на ккм.
Костыль, но уже год работает:)
(19) Tarlich, Опять же привязка по пользователю. И если пользователю разрешено несколько сессий и они могут входить с других компьютеров, то не будет работать. Один и тот же пользователь будет подключаться к терминалу с разных рабочих станций - имя компьютера будет одинаковое. А в данном случае это постоянно, т.к. сотрудники меняются между магазинами. Нужно что б подключенное к рабочей станции оборудование работало для ЛЮБОГО пользователя.
Решаю на Linux + RDP, подтверждаю ФР от Штрих так работают, даже с сервером ФР. C принтерами чеков, сканерами COM->TCP софтом на терминалах, на серве или в обратку TCP->COM (довольно устойчиво порты видны не только в сессии) или вовсе использую из 1с как IP:port.
Классная статья.
Спасибо, что подсказали, где в реестре посмотреть, какие ком-порты подключены.
Хочу добавить, что в процедуре Подключить оборудование нужно менять и запрос:
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РегТО.Идентификатор КАК Идентификатор,
| РегТО.Модель.Наименование КАК Наименование,
| РегТО.Модель КАК Модель,
| РегТО.ИмяКлиента КАК ИмяКлиента,
| РегТО.Параметры КАК Параметры
|ИЗ
| РегистрСведений.ТорговоеОборудование КАК РегТО
|ГДЕ
| РегТО.Вид = &Вид
| И РегТО.Компьютер = &Компьютер
| И РегТО.Подключено
|");
Показать
А также, чтобы удобно было настраивать в обработке ТОНастройка в процедуре ОткрытьФормуНастройки нужно дописать:
Обработка.НастроитьОборудование(ТП.ТекущиеДанные.Модель, Параметры);
Набор[0].Параметры = ЗначениеВСтрокуВнутр(Параметры);
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
Набор[0].ИмяКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
Исключение КонецПопытки;
Набор.Записать();
А вообще конечно плохо что не почитал сразу комменты, вариант с виртуальным именем компьютера мне больше понравился. ;-)
Кто-нибудь с ФР от Штрихов решил проблему с медленной печатью чеков.
Проверял просто из драйвера.
Тестовый стих из драйвера "Мой дядя самых честных правил..." печатается с очень большой задержкой. Пользовался только драйвером 4.10, Новые 4.11 и 4.12 еще не пробовал.
Короткие одиночные команды типа "печать x-отчета" проходят быстро, а с методом "Печать строки" какая-то борода...
Чек ККМ с длинными наименованиями, с именами клиентов и прочей строковой информацией печатается мелкими рывками.
Почему драйвер штриха так сильно критичен к пингу?
(24) sancho86,
если еще актуально, то скорее всего дело в скорости.
х-отчет скорее всего уходит на ФР как команда, а строка печатается возможно в графике - тогда вероятно выбрана скорость маленькая
(24)
Наш вариант решения проблемы печати из RDP сессий: http://infostart.ru/public/544687/ Также попутно получаем возможность печати с нескольких рабочих мест на одном ККМ.
Реализована очередь печати, виртуальная контрольная лента, которую можно просмотреть через браузер (реализован мини-вебсервер для контроля и управления настройками по сети).
Коллеги кто сталкивался с проблемой печати ФР:
Пытаемся подключить удаленные магазины к работе в 1С:ERP. Пользователь подключается к терминальному серверу, пробрасываем com порт по VPN каналу. Настраиваем фискальный регистратор, оборудование проходит тестирование, при создании чека ККМ появляется сообщение, что фискальник подключен(зеленая галка), но когда пробиваем чек - печать чека не происходит.
В чем может быть причина?
Мой вариант:
1.снимаем галку ТолькоПросмотр с формы списка регистра сведений Торговое оборудование
2.в обработке ТОСервер меняем:
Функция ПолучитьИмяКомпьютераТО()
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
WshShell = Новый COMОбъект("WScript.Shell");
ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
ИмяСессии = WshShell.expandEnvironmentStrings("%SESSIONNAME%");
Если ИмяСессии="Console" Тогда
//Имя Компьютера будет равно имени терминального сервера
Иначе
//Терминальный клиент
мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента;
КонецЕсли;
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции
Показать
редактируем в регистре ИмяКомпьютера по правилу: если это локальное подключение, то остается просто ИмяСервера, если терминал, то ИмяСервера_ИмяКомпаКлиента
(28) понравилась идея использовать тоже поле с разделителем. Но только в моём случае хоть сессия и терминальная, правильнее вышел разрез именно пользователя
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
WshShell = Новый COMОбъект("WScript.Shell");
ИмяПользователя = WshShell.expandEnvironmentStrings("%USERNAME%");
мИмяКомпьютера = мИмяКомпьютера + "_" + ИмяПользователя;
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции
Статья писал очень давно. И метод не совем уже актуален. По этому кто прочитал комментарии тот молодец.
В связи с вводом новых документов кассовая смена, демонстрация кода (28) Сергея Капустина более актуальная, так как совершенно без болезненно для для документов кассовой смены работает.
Кто-нибудь встречался с такой проблемой.
При подключение пользователя к УТ 10 режим кассира через RDP и при наличии оборудования, 1С вылетает с записью в дамп.
Пользователь RDP входит только в группу Пользователи удаленного рабочего стола.
При добавлении в группу Администраторы все работает нормально.
(29) bashhhh, попробуй отладчиком отловить в какой момент падает, скорее всего, думаю, не получается какую-нт дллельку драйвера подключить и падает в бесконечный цикл или самой длл не хватает прав для работы. Скоррее всего длл какую-то надо зарегистрировать в системе. В общем желательно отловить попытаться. Там правда есть нюанс с тем, что обработки обслуживания как внешние запускаются.
А как будет понятно в какой момент падает, там можно будет подумать что делать )
А группа обычные пользователи есть у него? Если опытного пользователя добавить тоже падает?
(29) У меня на 7.7 была такая ситуация с подключением сканера ШК.
Пришлось найти в реестре ветку
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\1C\TradeWare\ScanOPOS]
и добавить пользователя терминала, который работает с ТО, с правами на запись в данную ветку.
После этого все заработало.
Лучше выполнить этот кода в попытке, т.к. переменная среды доступна только в контексте терминального подключения и при вызове из локальных подключений может вызвать ошибку.
в попытку оборачивать может и не надо
при обращении к несуществующей переменной окружения вернется просто это заданное имя переменной, т.е. при выполнении на локальном ПК
ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
в ИмяКомпьютераКлиента будет тупо содержаться строка "%CLIENTNAME%"
Странно готовое решение было в комментариях здесь, решил резюмировать и актуализировать отдельно - https://infostart.ru/public/679048/ на мой взгляд самый простой вариант и без сильных травм для конфиги