Настройка торгового оборудования в конфигурации "Управление торговлей" ред. 10.3 при работе в терминальном режиме

У пользователей 1С:Управление торговлей, использующих терминальный доступ для работы в программе, могут возникнуть проблемы при подключении торгового оборудования. Эти проблемы связаны с тем, что в конфигурации УТ 10.3 настройки торгового оборудования хранятся с привязкой к имени компьютера, а работа в режиме терминального доступа означает, что у всех работающих с программой будет одно и тоже имя компьютера. В статье рассмотрим способы решения данной проблемы.

Настройки торгового оборудования в конфигурации «Управление торговлей» ред. 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, УНФ и прочих программных продуктах на управляемых формах работа с торговым оборудованием переделана и использует все новые преимущества БСП, поэтому данная проблема при использовании этих программ не возникает.

12 Comments

  1. Titan-nic@hotmail.ru

    Это ккм тоже касается?

    Reply
  2. @lexandr

    да

    Reply
  3. omut

    УТ 10.3 в терминалке? 2017 год? Новая статья? Автор, вы гений. Пишите еще.

    Reply
  4. @lexandr

    (3)Есть клиенты которые еще на 7.5 работают (именно на 7.5, а не на 7.7 версии программы) и да год 2017, но нечего мешать если все работает.

    Reply
  5. omut

    (4) я не про технологии, а про очередное переиздание вами много лет как широко известных решений.

    Reply
  6. ice-net

    (5) А какая разница переиздание или нет? Вам от этого лучше/хуже? Не пригодилось — проходите мимо, пригодилось — отлично! Кому-то, возможно, поможет, а вот ваш негатив точно никому не поможет =)

    Reply
  7. Saipl

    Мы решили эту проблему назначением каждому рабочему месту уникального СОМ — порта, 20 рабочих станций 20 СОМ -портов.

    Reply
  8. webester

    (0)Пара мелких замечаний: Навряд ли доставаемый вами параметр будет меняться при открытии каждой формы. Имеет смысл кэшировать. Выполнять один раз при старте системы и запоминать результат. Второе, если уж вы не против использования скриптов, результат работы которых иногда бывает непредсказуемым, то скриптом можно получить имя машины клиента подключенного к терминальному серверу. В таком случае 1С будет получать имя машины как будто она подключена без сервера терминалов. И да согласен с коллегами, вопрос, этот обжеван вроде как уже сотню другую раз. Вы скопировали уже существующее решение или не смогли осилить поиск? Не как предъява, просто интересно.

    Reply
  9. Zombi

    Я эту проблему решил добавлением прав, например «СканерДоступен» и проверяю в той же процедуре доступность этого права. Если пользователь не работал со сканером и он ему вдруг понадобился, я просто ставлю галку на нужной роли.

    Reply
  10. Yury1001

    (4) да, да у меня такой есть, конфигурация Торговля 8. 1999 года с конвертирована с 7.5. Понятное дело что от оригинала там ничего не осталось тысячи часов доработок от десятка программистов и слезть с неё стоит 1 миллион рублей — вариантов нет.

    Reply
  11. Designer1C

    Спасибо за тему !

    У себя сделал с привязкой к имени клиентского компьютера, если он определяется через терминальную сессию

    В моём случае получилось более универсально, так как драйверы на ТО ставятся на определённый компьютер.

    С одного компьютера могут работать разные пользователи.

    Функция ПолучитьИмяКомпьютераТО() Экспорт
    
    Если мИмяКомпьютера = Неопределено Тогда
    мИмяКомпьютера = ВРег(ИмяКомпьютера()); // Стандартная функция определения текущего компьютера. Это может быть имя и терминального сервера, в том числе.
    // Если пользователь зашёл через RDP на сервер, то следует определить имя клиентского компьютера, а не имя сервера.
    WSS = Новый COMОбъект(«WScript.Shell»);
    WSSE = WSS.Environment(«Process»);
    мИмяКомпьютераКлиента = ВРег(WSSE.Item(«ClientName»));
    Если ЗначениеЗаполнено(мИмяКомпьютераКлиента) Тогда
    мИмяКомпьютера = мИмяКомпьютераКлиента;
    КонецЕсли;
    КонецЕсли;
    Возврат мИмяКомпьютера;
    
    КонецФункции // ПолучитьИмяКомпьютераТО()
    

    Показать

    Reply
  12. kmvbad

    (3) А что? Сейчас 2018, а мне это понадобилось. Да и не только к УТ 10.3 это относится.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *