Имя: Пароль:
1C
1C 7.7
v7: Выгнать пользователей из 1С77
0 Борис_16
 
05.09.13
11:46
Пробовал выгшнать путем записис в глобальный модуль: "Процедура ВыбросПользователя()
                  Польз = СоздатьОбъект("Справочник.Пользователи");
      
              Если Польз.НайтиПоКоду(СОКРЛП(ИмяПользователя()),0) = 1 Тогда
                        Если Польз.Выброс=1 Тогда
                             Польз.Выброс=0;
                          Польз.Записать();
                          ЗавершитьРаботуСистемы(0);
                     КонецЕсли;
           Иначе
               ЗавершитьРаботуСистемы(0);
          КонецЕсли;
КонецПроцедуры // ВыбросПользователя
ОбработкаОжидания("ВыбросПользователя",5);"

Пишет постоянно ошибки "Ошибка глобального модуля", а мне над чтобы работало... в чем проблема не могу понять...
1 povar
 
05.09.13
11:48
напиши служебку
2 Crush
 
05.09.13
12:06
Ну тут несколько путей:
- ЗавершениеРаботы должно запускаться на компе у пользователя. Используй обработчик ожидания.
- Выдернуть сервер из сети
- Поднести источник огня к противопожарному датчику
3 PLUT
 
05.09.13
12:09
(0) на компе, где база 7.7 выполни команду
net use * /delete /yes
4 Rie
 
модератор
05.09.13
12:10
Нажатие на букву "Я" в правом верхнем углу этого экрана - зачастую помогает. Особенно когда тема - баян рваный.
5 be-may
 
05.09.13
12:12
(0) фигня какая-то.


Обычно "выгонялку" вешают на Константу, а обработку ожидания подключают ПриНачалеРаботыСистемы. И еще надо позаботится чтобы они все не смогли зайти.. Опыт показывает, что те, кого выкинули имеют свойство тут-же ломиться обратно :)

Правильно  коллега в (4) говорит. Поиск наше все.
6 varelchik
 
05.09.13
13:26
У мене проще.
Создаем в базе доп таблицу с полями:
скажем ИмяПользователя,Блокировка
ПриНачалеРаботыСистемы

Добавляем если нет запись о входе пользователя

Вешаем ОбработкуОжидания() сканированием это таблички.

При надобности выгнать всех или когось записываем в Блокировать 1.
и все.
7 varelchik
 
05.09.13
13:26
(5) не слишком универсально.
8 Борис_16
 
11.09.13
09:13
Короче если все писать в глобальный модуль, то ничего не сработает.
А be-may,в "Константах" выгонялку я просто прописываю - создаю, а вот с "Обработкой ожидания"  проблем: если ставлю в начало ПриНачале Работы Системы, то ошибки: "Определения процедур и функций должны размещаться перед операторами основной программы", куда лучше, т.е. после чего лучше записать "Обработку Ожидания"?
9 Борис_16
 
11.09.13
09:17
процедура выгнатьвсех();
спрПольз=СоздатьОбъект("справочник.Пользователи");
Если спрПольз.НайтиЭлемент(глПользователь)=1 тогда
глПользователь=СпрПольз.ТекущийЭлемент();
Если глПользователь.РазрешитьРаботу=0 тогда
глПользователь.РазрешитьРаботу=1;
спрПольз.Записать();
Сообщить("Административное отключение системы");
ЗавершитьРаботусистемы();
конецесли;
конецесли;
конецпроцедуры
спрПольз=СоздатьОбъект("справочник.Пользователи");
Если спрПольз.НайтиПоНаименованию(Строка(Имяпользователя()))=1 тогда
    глПользователь=СпрПольз.ТекущийЭлемент();
конецесли;
  ОбработкаОжидания ("Выгнатьвсех",45);
Строка ОбработкаОжидания ("Вырубить",45);

Причем в Константы внес "Выгнатьвсех"
10 Борис_16
 
11.09.13
09:18
Не работает!!!!
11 пипец
 
11.09.13
09:25
ЗавершитьРаботусистемы() работает только если пользователь "свободен" от например временной блокировки или выполнения отчета
12 пипец
 
11.09.13
09:26
+ и вообще, фигня какая то (с) ... некто
13 oslokot
 
11.09.13
09:33
(9) Обработку ожидания размести в конце глобального модуля
14 Борис_16
 
11.09.13
09:33
Блин, почему тогда у одних получается и все работает при выложенном таком модуле?
15 Борис_16
 
11.09.13
09:34
Вообще уже не понимаю как заставить это работать!
16 cw014
 
11.09.13
09:38
Пишет постоянно ошибки "Ошибка глобального модуля"

Ты бы хоть ошибки бы постоянные озвучил бы тут... А то все уже телепатировать начинают
17 Борис_16
 
11.09.13
09:41
ошибки: "Определения процедур и функций должны размещаться перед операторами основной программы"
18 oslokot
 
11.09.13
09:43
(17) -> (13)
19 Борис_16
 
11.09.13
09:44
Пошел по ссылкам и наткнулся на примеры выгона пользователей и эти примеры записал в Глобальный модуль, а при контроле ошибки: Определения процедур и функций должны размещаться перед операторами основной программы"
В конец Глобального модуля уже это разместить...
20 dk
 
11.09.13
09:44
(17) вроде вполне четко пишет - перенеси текст обработки ожидания выше
21 Борис_16
 
11.09.13
09:45
Перенес! Ошибка: "<<?>>Функция глОборудованиеКоманда(Вид, Обработка, Параметры) Экспорт
{Глобальный модуль(241)}: Определения процедур и функций должны размещаться перед операторами основной программы"
22 dk
 
11.09.13
09:46
кинь скрин куда перенес )))
23 KUBIK
 
11.09.13
09:47
(21) :))))))
Найди последнюю строку КонецПроцедуры ГМ и вставляй после нее
24 KUBIK
 
11.09.13
09:49
{Глобальный модуль(241)}: чтото в начале ГМ плохо у тя, судя по номеру строки
25 Борис_16
 
11.09.13
09:51
Самый конец ГМ заканчивается "глПечатьДокумента(ДокДляПечати, Способ)" после нее это не совсем корректно писать

ОбработкаОжидания ("Выгнатьвсех",45);
Строка ОбработкаОжидания ("Выгнатьвсех",45);
26 KUBIK
 
11.09.13
09:52
Тады см (22)
27 cw014
 
11.09.13
09:54
(25) Ты как определил, что не совсем корректно?
28 Zakarum
 
11.09.13
09:58
моя имха:
в районе строки 241 ненужная точка с запятой, скорее всего в конце предыдущей строки
29 oslokot
 
11.09.13
10:00
ужасть
30 oslokot
 
11.09.13
10:08
В конец глобальника это:
Процедура Выгнатьвсех()

    ...

КонецПроцедуры

а _под_ ней пиши это:
ОбработкаОжидания("Выгнатьвсех", 45);
31 Борис_16
 
11.09.13
10:10
Щас по-пробую
32 Борис_16
 
11.09.13
10:11
Написал, кидаю часть:

Процедура ПриУдаленииДокумента(докум,режим)
    Если докум.вид() = "КомплектовочнаяТестСистема" Тогда
        спр = создатьобъект("Справочник.СерияГотовойПродукции");
        Если   спр.найтипореквизиту("документ", докум,1) = 1 Тогда
                спр.текущийэлемент();
                спр.удалить(0);
        КонецЕсли;
    КонецЕсли;

конецПроцедуры


глПрефиксШтучногоШтрихкода = "20";
глКаталогОписаний = КаталогИБ() + "ExtForms\Equip\";  


глФлагРасшифровки = 0;
глРасшифровка = 0;
глОбновить = 0;    


процедура выгнатьвсех();
спрПольз=СоздатьОбъект("справочник.Пользователи");
Если спрПольз.НайтиЭлемент(глПользователь)=1 тогда
глПользователь=СпрПольз.ТекущийЭлемент();
Если глПользователь.РазрешитьРаботу=0 тогда
глПользователь.РазрешитьРаботу=1;
спрПольз.Записать();
Сообщить("Административное отключение системы");
ЗавершитьРаботусистемы();
конецесли;
конецесли;
конецпроцедуры
спрПольз=СоздатьОбъект("справочник.Пользователи");
Если спрПольз.НайтиПоНаименованию(Строка(Имяпользователя()))=1 тогда
    глПользователь=СпрПольз.ТекущийЭлемент();

КонецЕсли;

Строка ОбработкаОжидания ("Выгнатьвсех",45);
ОбработкаОжидания ("Выгнатьвсех",45);

Ошибка, блин ее!!! "<<?>>процедура выгнатьвсех();
{Глобальный модуль(1237)}: Определения процедур и функций должны размещаться перед операторами основной программы"
33 oslokot
 
11.09.13
10:14
(32) епрст... подними процедуру выше переменных! )))
34 oslokot
 
11.09.13
10:16
(32) А это что за хрень?

Строка ОбработкаОжидания ("Выгнатьвсех",45);
35 Борис_16
 
11.09.13
10:21
Сработало! Только теперь ругается на"Строка<<?>> ОбработкаОжидания ("Выгнатьвсех",45);
{Глобальный модуль(1265)}: Ожидается символ '('"

Вот что здесь не верно? Строка ОбработкаОжидания ("Выгнатьвсех",45); ??
36 dk
 
11.09.13
10:21
школота detected
37 Борис_16
 
11.09.13
10:26
Не понял "школота detected"?
38 Zakarum
 
11.09.13
10:28
(35) убей эту строку
39 Борис_16
 
11.09.13
10:32
Блииин! реально без ошибок!
40 Борис_16
 
11.09.13
10:33
Так, поскольку Спавочник Пользователи -созда, то там надо прописывать имеющихся пользователей, отключать я должен выборочно, правильно, сидя под админом через Монитор?
41 Мимохожий Однако
 
11.09.13
10:35
Зачем пользователей мучить? Перейди на ночной график обслуживания.
42 Борис_16
 
11.09.13
10:38
Ночью не могу - надо спать тоже)
43 Борис_16
 
11.09.13
10:39
Теперь надо реализовать выключение, есть Тест - он сидит, я захожу в Монитор под админом и... ничего...
44 пипец
 
11.09.13
10:43
та йо , твайо занаху ;))
пользователь выключает себя САМ через обработку ожидания при проверке параметра на выключение (например реквизит - выйти - У ДАННОГО конкретного пользователя который проверяется в обработке ожидания и потом завершаетработусистемы ИМЕННО под ЭТИМ пользователем) а кто ЕМУ реквизит поставит на выход - монопенисуально
45 Мимохожий Однако
 
11.09.13
10:44
Если спрПольз.НайтиЭлемент(глПользователь)=1 тогда
глПользователь=СпрПольз.ТекущийЭлемент();
Если глПользователь.РазрешитьРаботу=0 тогда
глПользователь.РазрешитьРаботу=1;
//спрПольз.Записать();
Сообщить("Административное отключение системы");
ЗавершитьРаботусистемы();
Иначе
Сообщить("Пользователь на нейден. Административное отключение системы");
ЗавершитьРаботусистемы();
конецесли;
46 Борис_16
 
11.09.13
10:51
Понял! Спасибо МимохожийОднако!

Но это не дают мне пускать других пользователей, а если надо заново их впустить?

Надо же чтобы они работали и оба! все вырубилось и не могли зайти минут 10 в систему, а я пока обновлю что надо
47 vtolga
 
11.09.13
11:02
Слушай, а может, не надо на живой базе? А то есть сомнения, что получится "что надо". Пробуй на тестовой.
48 vtolga
 
11.09.13
11:05
А вообще поставь себе права администратора, в твоей процедуре выкидывания проверяй их и администраторов не трогай. Тогда сможешь войти в базу и снять галочки.
49 Борис_16
 
11.09.13
11:20
Я на тестовой и пробую
50 Борис_16
 
11.09.13
11:21
Я захожу как админ, а вот скажем лаборант вообще войти не может, я хочу понять как я могу под админом отключать не админов когда они работают?
51 Voronve
 
11.09.13
11:30
(50) Терминальный сеанс сруби
52 Мимохожий Однако
 
11.09.13
11:31
Добавь при входе проверку на права в случае включения ограничений.
Однако, нехорошо мешать людям работать. Днём можно отработать на копии, а после работы за полчаса обновить без геморроя для пользователей. ))
53 Борис_16
 
11.09.13
11:31
Тогда вообще на фиг я все писал в ГМ???
54 Voronve
 
11.09.13
11:32
(53) Мы не знаем ;)
55 Борис_16
 
11.09.13
11:33
при входн на права написать вроде этого?

Процедура глобального модуля!!!

Процедура ПриНачалеРаботыСистемы()
User=ИмяПользователя();
Если User="Иванов" Тогда
Предупреждение("Доступ закрыт!")
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
56 Борис_16
 
11.09.13
11:34
Но опять же это отключает, а как мне будучи админом взять и выключить всех когда мне надо? а потом включить?
57 Мимохожий Однако
 
11.09.13
12:02
(50)Гарантированного вывода пользователя из 1С средствами только 1С практически нет.
58 AllJoke
 
11.09.13
12:05
Если ТекПользователь = Админ  Тогда
//игнорировать твою процедуру.
59 Борис_16
 
11.09.13
12:09
т.е. если в начале перед процедурой:

Если спрПольз.НайтиЭлемент(глПользователь)=1 тогда
глПользователь=СпрПольз.ТекущийЭлемент();
Если глПользователь.РазрешитьРаботу=0 тогда
глПользователь.РазрешитьРаботу=1;
//спрПольз.Записать();
Сообщить("Административное отключение системы");
ЗавершитьРаботусистемы();
Иначе
Сообщить("Пользователь на нейден. Административное отключение системы");
ЗавершитьРаботусистемы();
конецесли;

написать"Если ТекПользователь = Админ  Тогда
//игнорировать твою процедуру."

То это запустить проверку пользователей, а следовательно и допуск к системе и, если это пусть будет Тест, то он после подтвеждения выключится, так?
60 Борис_16
 
11.09.13
13:36
Кто-нибудь может подсказать, что делать-то. что зря в ГМ все написано?
61 AllJoke
 
11.09.13
14:02
Если ИмяПользователя = "Администратор" Тогда
//здесь ты админ и заходишь спокойно в систему,
//правишь справочник Пользователей
Иначе
ВыбросПользователя()
КонецЕсли;
62 varelchik
 
11.09.13
17:51
(60) Стучись в аську.
Поделюсь своей выгонялкой.
63 Zhuravlik
 
11.09.13
19:36
(0) Вроде патч был для bkend.dll на инфостарте, для таких целей. Я пользовал год назад, удобно. И морочи нет. Почти))
64 КонецЦикла
 
11.09.13
19:46
Рекомендую стартер Ромикса
Позволяет выгонять с определенным таймаутом и миганием в трее
И что самое нужное - не позволяет бесконечно ломиться и блокировать файлы
65 КонецЦикла
 
11.09.13
19:47
+ Ничего в конфигурации менять не надо
Кроме этого он может прописывать базы пользователю
66 Борис_16
 
12.09.13
07:54
вот косчно и есть ошибки с циклом:
функция ПриНачалеРаботыСистемы()  
Для ИмяПользователя = Администратор тогда
    СтатусВозврата(1);
если пользователь=ИмяПользователя(Лаборант)тогда    

Сообщить("Административное отключение системы");
    СтатусВозврата(0);
конецесли;  
Иначе
ВыбросПользователя();

Конецфункции

хочу пока я под админом, чтобы другие не админы вылетали и все, подскажите как корректно это реализовать
67 Scanvir
 
12.09.13
15:31
Борис, раз ты такой настойчивый напиши мне на почту [email protected]
68 Борис_16
 
19.09.13
12:17
Спасибо! Scanvir! короче, пока я под админом никто не входит и это устраивает моего бухгалтера! :)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн