Проверка торгового оборудования только у определенного пользователя!!!!

Настраиваем проверку торгового оборудования только на том пользователе который с ним работает!

Давно раздражало когда заходишь в 1с под пользователем который не работает с торговым оборудованием а тебе!

 

«

************: Ошибка при подключении устройства.
Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением.
Произошла ошибка при подключении торгового оборудования

«

Настройки средствами 1с для этих целей в УТ 8.2 10.3 НЕТ! что очень раздражает!!! Вот мое решение:

 

Способ первый:

 

1: Делаем резервную копию базы!

2: Открываем конфигуратор/Обработки/ТОСервер/МодульОбъекта

3: Находим функцию «ПодключитьОборудование(Вид, Клиент)»

4: Находим следующие строки «

Запрос.УстановитьПараметр(«Вид» , Вид);
Запрос.УстановитьПараметр(«Компьютер», ПолучитьИмяКомпьютераТО());
СтрокиТО = Запрос.Выполнить().Выгрузить();
СтрокаТО = Неопределено;
Для Каждого СтрокаТО Из СтрокиТО Цикл»

5: Сразу после этих строк добавляем:

Если НЕ ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(«*****») Тогда
Продолжить;
КонецЕсли;

Вместо «*****» указываем Имя пользователя для которого торговое оборудование так же будет проверяться! А всем остальным можно радоваться)))

6: Сохраняем конфигурацию «F7» Все готово, запускаем и радуемся)

 

Способ второй:

 

1: Открываем конфигуратор и находим «Планы видов характеристик»

2: Далее открываем «НастройкиПользователей/Прочее/Предопределенные»

3: Добавляем новый вид и называем его к примеру

Имя: «ПроверкаТорговогоОборудования»

Тип: «Булево»

Наименование: «Проверка подключения торгового оборудования»

 

Так, с этим все =)

 

4: Далее идем «Обработки/ТОСервер»

5: Жмем «Действие/Открыть модуль объекта»

6: В открывшемся модули ищем строки:

 

                        Запрос.УстановитьПараметр(«Вид»      , Вид);

                        Запрос.УстановитьПараметр(«Компьютер», ПолучитьИмяКомпьютераТО());

                        СтрокиТО = Запрос.Выполнить().Выгрузить();

                        СтрокаТО = Неопределено;

                        Для Каждого СтрокаТО Из СтрокиТО Цикл

 

И после них вставляем:

мТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;

Проверка = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, «ПроверкаТорговогоОборудования»);

 Если НЕ Проверка Тогда

             Продолжить;

     КонецЕсли;

 

7: Сохраняем конфигурацию =)

 

Теперь в «Настройках пользователя» можно выбрать нужно этому пользователю проверять подключение или нет =)

 

Всем удачи)

24 Comments

  1. anton.fly7

    Ну очень универсальное решение!

    Особенно если пользователей >100

    Reply
  2. mob51

    (1) anton.fly7, А вы бы вместо упреков свое решение выложите!

    Reply
  3. anton.fly7

    (2) у меня в плане видов характеристик ПраваПользователей добавил предопределнное булево значение НеПодключатьОборудование

    если у пользователя это значение Ложь, то проверка отключена, примерно там же где и у вас

    Reply
  4. mob51

    (3) anton.fly7, Вот видите, лучше людям помочь=) Если вы не против добавлю в статью с ссылкой на автора.

    Reply
  5. anton.fly7

    вот вам еще картинка

    Reply
  6. smilejka

    (3) anton.fly7,

    Аналогичное решение и у меня. Только я не предопределенное значение указывал, а в пользовательском режиме добавил и ищу по коду. При обновлениях план видов характеристик может обновится и придется перетирать изменения. В пользовательском режиме обязательно нужно создавать с префиксом, чтобы после обновления, если добавятся новые предопределенные значения, небыло элементов с одинаковым кодом.

    Reply
  7. Levran123

    3: Находим функцию «ПодключитьОборудование(Вид, Клиент)»

    4: Находим следующие строки »

    Запрос.УстановитьПараметр(«Вид» , Вид);

    Запрос.УстановитьПараметр(«Компьютер», ПолучитьИмяКомпьютераТО());

    СтрокиТО = Запрос.Выполнить().Выгрузить();

    СтрокаТО = Неопределено;

    Для Каждого СтрокаТО Из СтрокиТО Цикл»

    5: Сразу после этих строк добавляем:

    а почему бы не проверить пользователя на право пользования торговым оборудованием в начале функции???

    Reply
  8. yku

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

    Reply
  9. mob51

    (8) yku, напишите подробнее, добавлю в статью для других людей

    Reply
  10. Angeros

    Лучше скажите как быть когда люди пересаживаются и у всех терминал сервер.?!

    Reply
  11. mob51

    Не вижу проблемы, все в любом случае заходят под своим Логином и паролем. Если я вас не правильно понял то прошу описать проблему развернуто.

    Reply
  12. alenakrr

    У меня какая-то неправильная стандартная конфигурация?

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

    Reply
  13. mob51

    (12) alenakrr, У вас скорее всего более ранняя версия конфигурации в которой есть такая возможность.

    Reply
  14. bzmax

    Была аналогичная проблемка. Это у старых конфигураций. Новые уже учитывают пользователя.

    Итак.

    Задача стояла в том, что нужно было к серверу терминалов подключить сеть розничных магазинов. Основная заковырка была в том что на клиентских машинах стоял линукс.

    Пришлось com-порты с линуксоидных машин на сервер RDP перебрасывать утилитами com-tcp.

    В итоге на сервере терминалов образовалось аж 24 com-порта. И вот тут и возникла потребность в подключении оборудования с учетом пользователя. Т.к. например один и тот же драйвер ФР для разных пользователей должен обращаться к разным com-портам.

    Решение нашлось быстро и легко. Посмотрите на регистр сведений «Торговое оборудование» ресурс «Компьютер» — это строка 100 символов. В которую записывается имя компа к которому подключается оборудование. Кто мешает в этот ресурс вписывать строку такого формата [имя_компа]\[имя_пользователя]. Таким образом вы получите оборудование и в разрезе компов и пользователей. Для этого достаточно отредактировать одну сроку в конфигурации —

    Обработка.ТОСервер (модуль объекта)

    // Функция возвращает строку c именем компьютера для нужд торгового оборудования.
    //
    // Возвращаемое значение:
    //  Строка — имя компьютера для торгового оборудования.
    //
    Функция ПолучитьИмяКомпьютераТО() Экспорт
    
    Если мИмяКомпьютера = Неопределено Тогда
    //мИмяКомпьютера = ВРег(ИмяКомпьютера()); // старая строка
    мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+ИмяПользователя()); // новая строка
    КонецЕсли;
    
    Возврат мИмяКомпьютера;
    
    КонецФункции // ПолучитьИмяКомпьютераТО()
    

    Показать

    Вот и вся хитрость :).

    Тем же пользователям которым не нужно торговое оборудование, его в настройках торгового оборудования просто не нужно включать(настраивать).

    Reply
  15. renmy

    (14) bzmax,

    Немного переделал, т.к. один и тот же пользователь может заходить в 1с с разных рабочих мест, оборудование может быть недоступно или он захватит оборудование с другого компьютера. В данном случае лучше привязывать оборудование к терминальному пользователю.

    Функция ПолучитьИмяКомпьютераТО() Экспорт
    
    //ren
    ПользовательРДП = «»;
    Попытка
    WshShell = Новый COMОбъект («WScript.Network»);
    ПользовательРДП = WshShell.UserName;
    WshShell = Неопределено;
    Исключение
    КонецПопытки;
    Если ПустаяСтрока(ПользовательРДП) Тогда
    ПользовательРДП = ИмяПользователя();
    КонецЕсли;
    //ren
    
    Если мИмяКомпьютера = Неопределено Тогда
    //ren мИмяКомпьютера = ВРег(ИмяКомпьютера());
    мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+ПользовательРДП);//ren
    КонецЕсли;
    
    Возврат мИмяКомпьютера;
    
    КонецФункции // ПолучитьИмяКомпьютераТО()

    Показать

    Reply
  16. bzmax

    (15) renmy,

    Можно и так 🙂

    Но технологически неправильно что бы с разных «мест» один и тот же пользователь заходил (!)Одновременно.

    Reply
  17. Miket78

    А как узнать работает в терминальном режиме пользователь или в обычном? У меня 50/50 работают. Хочу чтоб для обычного режима имя компьютера формировалось по прежнему, только по имени компа, чтобы не перенастраивать на всех компах, да и не зависело от того, кто запустил 1с.

    Reply
  18. andrey314

    (17) Miket78, Можно так:

    Функция ПолучитьИмяКомпьютераТО() Экспорт
    
    Если мИмяКомпьютера = Неопределено Тогда
    мИмяКомпьютера = ВРег(ИмяКомпьютера());
    КонецЕсли;
    
    // РДП сессия
    ШелСкрипт=Новый COMОбъект(«WScript.Shell»);
    ИмяТерминальногоКлиента = ШелСкрипт.ExpandEnvironmentStrings(«%clientname%»);
    Если ИмяТерминальногоКлиента <> «%clientname%» Тогда
    мИмяКомпьютера = ВРЕГ(ИмяТерминальногоКлиента);
    КонецЕсли;
    //
    
    Возврат мИмяКомпьютера;
    
    КонецФункции // ПолучитьИмяКомпьютераТО()

    Показать

    Reply
  19. Daniayr

    нужно ли что то менять когда отключаем оборудование в коде?

    Процедура ОтключитьОборудование(Клиент)
    
    ТО              = ПолучитьТО();
    Клиенты         = ПолучитьПараметрСервераТО(«Клиенты»,      «Соответствие»);
    ВидТО           = Неопределено;
    СтруктураПоиска = Новый Структура(«Вид»);
    
    Для Каждого ВидТО Из Перечисления.ВидыТорговогоОборудования Цикл
    Если Клиент.ПоддерживаетсяВидТО(ВидТО) Тогда
    СтруктураПоиска.Вид = ВидТО;
    СтрокиТО            = ТО.НайтиСтроки(СтруктураПоиска);
    СтрокаТО            = Неопределено;
    Для Каждого СтрокаТО Из СтрокиТО Цикл
    Если      СтрокаТО.Ссылки = 1 Тогда
    СтрокаТО.Ссылки = 0;
    СтрокаТО.Обработка.Отключить(СтрокаТО.Объект);
    ИначеЕсли СтрокаТО.Ссылки > 1 Тогда
    СтрокаТО.Ссылки = СтрокаТО.Ссылки — 1;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    
    Клиенты.Удалить(Клиент);
    
    КонецПроцедуры // ОтключитьОборудование()
    

    Показать

    у меня это не происходит

    Reply
  20. Amur_MVS

    Спасибо! Выручил)

    Reply
  21. ЮлияМ

    Все сделало в УПП и ничего не получается .

    АТОЛ: ККТ с передачей данных: Ошибка при подключении устройства.

    Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением.

    Reply
  22. Sakh1CPRO

    (21)у меня такая же проблема ( Атол1Ф , вы нашли решение?

    Reply
  23. Veika

    Коллеги, та же проблема.

    Обновила сегодня УТ 10.3 и драйвер Атол 10.5.0 и …

    При попытке открыть документ Чек ККМ,

    АТОЛ: ККТ с передачей данных: Ошибка при подключении устройства.

    Необходимо убедиться, что устройство правильно настроено и соответствующий порт не занят другим приложением.

    К

    Reply
  24. Veika

    Коллеги, все-таки методом тыка разобралась с проблемой.

    Кому если поможет:

    В Торговом оборудовании в параметрах надо снять галочку в строке

    Не отключаться от ККТ и все … сообщение об ошибке перестало выходить…

    Reply

Leave a Comment

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