Настройки торгового оборудования в конфигурации «Управление торговлей» ред. 10.3 хранятся в регистре сведений «Торговое оборудование»:
Каждое оборудование привязывается к имени компьютера. Соответственно, если мы работаем в терминальном режиме, имя компьютера у нас получается одно и то же у каждого пользователя. Поэтому оборудования добавленное для одного пользователя получится подключенным к каждому сотруднику, работающему с программой. Это очень часто приводит к ошибкам, таким, как невозможность подключения любого оборудования с одним com портом на разных компьютерах, также если у одного из пользователей будет подключено оборудование (например, com-портовый сканер штрих кодов), то у всех остальных пользователей, работающих с программой, будет выскакивать ошибка, что это устройство у них не подключено.
Решение проблемы становится очевидным, это добавление к имени компьютера информации о пользователе. Это решит проблему и позволит делать независимую настройку торгового оборудования для каждого пользователя. Имя компьютера 1С получает в обработке «ТОСервер», в функции ПолучитьИмяКомпьютераТО. Вот текст этой функции:
// Функция возвращает строку c именем компьютера для нужд торгового оборудования.
//
// Возвращаемое значение:
// Строка - имя компьютера для торгового оборудования.
//
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции // ПолучитьИмяКомпьютераТО()
Штатными средствами 1С получить имя пользователя windows в терминальном сеансе мы не сможем. Поэтому если решать проблему штатными средствами 1С, то можно только получить имя пользователя в программе и прибавить его к имени компьютера, выглядеть это будет так:
// Функция возвращает строку c именем компьютера для нужд торгового оборудования.
//
// Возвращаемое значение:
// Строка - имя компьютера для торгового оборудования.
//
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера()+ИмяПользователя());
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции // ПолучитьИмяКомпьютераТО()
В таком случае, для пользователя с именем «Администратор» и сервером терминалов с именем «Server» данная процедура вернет имя компьютера равное «SERVERАДМИНИСТРАТОР». Это, конечно, решит нашу проблему, но в некоторых случаяюх это будет не совсем удобно. Например если у пользователя нет доступа к настройке торгового оборудования, а ему нужно, например, подключить сканер штрих кодов. В таком случае придется добавлять указанному пользователю права, заходить под ним в программу, настраивать ему необходимое оборудование и заново ограничить права. Поэтому рассмотрим еще один вариант решения данной проблемы.
Получить имя пользователя операционной системы в терминальном сеансе мы можем средствами Windows Script Host. WSH позволит получить имя пользователя в терминале, которое можно также сложить с именем компьютера и получить уникальное значение для каждого пользователя в терминальной сессии. Выглядеть это будет так:
// Функция возвращает строку c именем компьютера для нужд торгового оборудования.
//
// Возвращаемое значение:
// Строка - имя компьютера для торгового оборудования.
//
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
WSHNetwork = Новый ComОбъект("WScript.Network");
ИмяПользователяWindows = WSHNetwork.UserName;
мИмяКомпьютера = ВРег(ИмяКомпьютера()+ИмяПользователяWindows);
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции // ПолучитьИмяКомпьютераТО()
При данной настройке, можно зайти в терминальной сессии пользователя в программу 1С под правами администратора, настроить нужое пользователю оборудование, и у него все будет работать, когда он зайдет под собой в программу.
Вот два простых способа, позволяющих настраивать торговое оборудование иднивидуально под каждого пользователя. Данная проблема актуальна не только для УТ 10.3, но также и Рознице ред 1.0 и БП 2.0 — вобщем всем программным продуктам 1С на «не управляемых формах». В конфигурациях УТ 11, Розница 2.0, УНФ и прочих программных продуктах на управляемых формах работа с торговым оборудованием переделана и использует все новые преимущества БСП, поэтому данная проблема при использовании этих программ не возникает.
Это ккм тоже касается?
да
УТ 10.3 в терминалке? 2017 год? Новая статья? Автор, вы гений. Пишите еще.
(3)Есть клиенты которые еще на 7.5 работают (именно на 7.5, а не на 7.7 версии программы) и да год 2017, но нечего мешать если все работает.
(4) я не про технологии, а про очередное переиздание вами много лет как широко известных решений.
(5) А какая разница переиздание или нет? Вам от этого лучше/хуже? Не пригодилось — проходите мимо, пригодилось — отлично! Кому-то, возможно, поможет, а вот ваш негатив точно никому не поможет =)
Мы решили эту проблему назначением каждому рабочему месту уникального СОМ — порта, 20 рабочих станций 20 СОМ -портов.
(0)Пара мелких замечаний: Навряд ли доставаемый вами параметр будет меняться при открытии каждой формы. Имеет смысл кэшировать. Выполнять один раз при старте системы и запоминать результат. Второе, если уж вы не против использования скриптов, результат работы которых иногда бывает непредсказуемым, то скриптом можно получить имя машины клиента подключенного к терминальному серверу. В таком случае 1С будет получать имя машины как будто она подключена без сервера терминалов. И да согласен с коллегами, вопрос, этот обжеван вроде как уже сотню другую раз. Вы скопировали уже существующее решение или не смогли осилить поиск? Не как предъява, просто интересно.
Я эту проблему решил добавлением прав, например «СканерДоступен» и проверяю в той же процедуре доступность этого права. Если пользователь не работал со сканером и он ему вдруг понадобился, я просто ставлю галку на нужной роли.
(4) да, да у меня такой есть, конфигурация Торговля 8. 1999 года с конвертирована с 7.5. Понятное дело что от оригинала там ничего не осталось тысячи часов доработок от десятка программистов и слезть с неё стоит 1 миллион рублей — вариантов нет.
Спасибо за тему !
У себя сделал с привязкой к имени клиентского компьютера, если он определяется через терминальную сессию
В моём случае получилось более универсально, так как драйверы на ТО ставятся на определённый компьютер.
С одного компьютера могут работать разные пользователи.
Показать
(3) А что? Сейчас 2018, а мне это понадобилось. Да и не только к УТ 10.3 это относится.