gifts2017

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

Опубликовал Альберт Борисевич (mob51) в раздел Администрирование - Защита, права, пароли

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

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

 

"

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

"

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

 

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

 

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

 

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

 

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

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

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

 

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

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

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

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

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

 

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

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

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

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

             Продолжить;

     КонецЕсли;

 

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

 

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

 

Всем удачи)

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Антон (anton.fly7) 05.04.12 12:10
Ну очень универсальное решение!
Особенно если пользователей >100
2. Альберт Борисевич (mob51) 05.04.12 12:22
(1) anton.fly7, А вы бы вместо упреков свое решение выложите!
3. Антон (anton.fly7) 05.04.12 12:27
(2) у меня в плане видов характеристик ПраваПользователей добавил предопределнное булево значение НеПодключатьОборудование
если у пользователя это значение Ложь, то проверка отключена, примерно там же где и у вас
4. Альберт Борисевич (mob51) 05.04.12 12:36
(3) anton.fly7, Вот видите, лучше людям помочь=) Если вы не против добавлю в статью с ссылкой на автора.
5. Антон (anton.fly7) 05.04.12 12:49
6. Роман Мишкин (smilejka) 05.04.12 13:43
(3) anton.fly7,
Аналогичное решение и у меня. Только я не предопределенное значение указывал, а в пользовательском режиме добавил и ищу по коду. При обновлениях план видов характеристик может обновится и придется перетирать изменения. В пользовательском режиме обязательно нужно создавать с префиксом, чтобы после обновления, если добавятся новые предопределенные значения, небыло элементов с одинаковым кодом.
7. Levran123 05.04.12 13:55
3: Находим функцию "ПодключитьОборудование(Вид, Клиент)"

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

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

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

а почему бы не проверить пользователя на право пользования торговым оборудованием в начале функции???
Рамзес; yku; +2 Ответить
8. Александр Гладких (yku) 07.04.12 23:39
А я регистр сведений создал: какому пользователю, какое оборудование подключается.
9. Альберт Борисевич (mob51) 08.04.12 15:48
(8) yku, напишите подробнее, добавлю в статью для других людей
10. Доржи Балбаров (Angeros) 10.04.12 03:47
Лучше скажите как быть когда люди пересаживаются и у всех терминал сервер.?!
11. Альберт Борисевич (mob51) 13.04.12 02:40
Не вижу проблемы, все в любом случае заходят под своим Логином и паролем. Если я вас не правильно понял то прошу описать проблему развернуто.
12. Еlen Jatsenko (alenakrr) 25.04.12 10:57
У меня какая-то неправильная стандартная конфигурация?
потому что у меня есть в обработках пользователей ТО возможность указать список пользователей, которых на подключение ТО проверяют.
13. Альберт Борисевич (mob51) 27.04.12 00:37
(12) alenakrr, У вас скорее всего более ранняя версия конфигурации в которой есть такая возможность.
14. Максим Безруков (bzmax) 27.04.12 02:11
Была аналогичная проблемка. Это у старых конфигураций. Новые уже учитывают пользователя.
Итак.
Задача стояла в том, что нужно было к серверу терминалов подключить сеть розничных магазинов. Основная заковырка была в том что на клиентских машинах стоял линукс.
Пришлось com-порты с линуксоидных машин на сервер RDP перебрасывать утилитами com-tcp.
В итоге на сервере терминалов образовалось аж 24 com-порта. И вот тут и возникла потребность в подключении оборудования с учетом пользователя. Т.к. например один и тот же драйвер ФР для разных пользователей должен обращаться к разным com-портам.
Решение нашлось быстро и легко. Посмотрите на регистр сведений "Торговое оборудование" ресурс "Компьютер" - это строка 100 символов. В которую записывается имя компа к которому подключается оборудование. Кто мешает в этот ресурс вписывать строку такого формата [имя_компа]\\[имя_пользователя]. Таким образом вы получите оборудование и в разрезе компов и пользователей. Для этого достаточно отредактировать одну сроку в конфигурации -
Обработка.ТОСервер (модуль объекта)

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

	Если мИмяКомпьютера = Неопределено Тогда
		//мИмяКомпьютера = ВРег(ИмяКомпьютера());	// старая строка
		мИмяКомпьютера = ВРег(ИмяКомпьютера()+"\\"+ИмяПользователя()); // новая строка
	КонецЕсли;

	Возврат мИмяКомпьютера;

КонецФункции // ПолучитьИмяКомпьютераТО()
...Показать Скрыть

Вот и вся хитрость :).
Тем же пользователям которым не нужно торговое оборудование, его в настройках торгового оборудования просто не нужно включать(настраивать).
Прикрепленные файлы:
Spacer; Leoon; smolyakov; Shomak; PONOM; Рамзес; DimaP; Alexey55; LudmilaFP; avega; +10 Ответить 1
15. Renat Sitdikov (renmy) 04.10.13 10:54
(14) bzmax,
Немного переделал, т.к. один и тот же пользователь может заходить в 1с с разных рабочих мест, оборудование может быть недоступно или он захватит оборудование с другого компьютера. В данном случае лучше привязывать оборудование к терминальному пользователю.

Функция ПолучитьИмяКомпьютераТО() Экспорт

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

	Возврат мИмяКомпьютера;

КонецФункции // ПолучитьИмяКомпьютераТО()
...Показать Скрыть
Nefertary; Miket78; smolyakov; +3 Ответить 1
16. Максим Безруков (bzmax) 04.10.13 11:40
(15) renmy,
Можно и так :)
Но технологически неправильно что бы с разных "мест" один и тот же пользователь заходил (!)Одновременно.
17. Михаил Тебеньков (Miket78) 02.12.13 14:37
А как узнать работает в терминальном режиме пользователь или в обычном? У меня 50/50 работают. Хочу чтоб для обычного режима имя компьютера формировалось по прежнему, только по имени компа, чтобы не перенастраивать на всех компах, да и не зависело от того, кто запустил 1с.
18. andrey P (andrey314) 28.05.14 17:49
(17) Miket78, Можно так:

Функция ПолучитьИмяКомпьютераТО() Экспорт

	Если мИмяКомпьютера = Неопределено Тогда
		мИмяКомпьютера = ВРег(ИмяКомпьютера());
	КонецЕсли;

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

КонецФункции // ПолучитьИмяКомпьютераТО()
...Показать Скрыть
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа