Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) поможите с триггером на изменение таблички (число прочтений - 11102 )
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #30 - 10. Января 2008 :: 08:15
Печать  
в sql нигде не подцепишь в том то и дело что в приначалеработы
вызывается процедура которая определяет текущий pid и пишет в ту табличку имя пид и время входа
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: поможите с триггером на изменение таблички
Ответ #31 - 10. Января 2008 :: 08:22
Печать  
А кинуть не можешь код, как это при Начале работы происходит?  Подмигивание
А то тут по любому надо кое что забахать, никак не соображу, как это сделать...
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #32 - 10. Января 2008 :: 08:47
Печать  
у меня в инфо аська есть постукай туда я тебе расскажу
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #33 - 10. Января 2008 :: 13:03
Печать  
Довай сюда выкладывай  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #34 - 11. Января 2008 :: 01:37
Печать  
да я там просто объяснил попобдробнее.

в общем
в sql в EM сделал дополнительную табличку для конкретной базы. (можно просто в отдельной базе) с полями
User as Char, PID as int, intime as datetime

в 1с добавлены 2 процедуры

Процедура глДобавитьИнфуОПользователе()  Экспорт
     Запрос=СоздатьОбъект("ODBCRecordSet");
     ТЗ_пид = "
     |Select convert(varchar(10), @@SPID) PID
     |";
     Запрос.Открыть(ТЗ_пид);
     Запрос.ВНачало();
     ПИД = Сокрлп(Запрос.ПолучитьЗначение(1));
     //-----------Сначала удаляем------------------------------------    
     ТЗ = "Delete from Users Where (Users.User_1c='"+Сокрлп(глПользователь.Код)+"') or ([Users.PID = "+ПИД+")";
     Запрос.Выполнить(ТЗ);
     //-----------------А теперь добавляем-------------------------------------
     т(ДатаЧисло(ТекущаяДата()),"Ч(0)2");
     ДатаТек = ДатаТек+" "+ТекущееВремя()+".000";
     ТЗ = "insert into Users values("+ПИД+", '"+Сокрлп(глПользователь.Код)+"', Convert(datetime, '"+Сокрлп(ДатаТек)+"', 102))";
     Если Запрос.Выполнить(ТЗ)=0 Тогда
           Сообщить(Запрос.ПолучитьОписаниеОшибки());
     Конецесли;  
     //------------------------------------------------------------------
КонецПроцедуры
Процедура глУдалитьИнфуОПользователе()  Экспорт
     Запрос=СоздатьОбъект("ODBCRecordSet");
     ТЗ_пид = "
     |Select convert(varchar(10), @@SPID) PID
     |";
     Запрос.Открыть(ТЗ_пид);
     Запрос.ВНачало();
     ПИД = Сокрлп(Запрос.ПолучитьЗначение(1));
     //-----------Сначала удаляем------------------------------------    
     ТЗ = "Delete from Users Where (Users.User_1c='"+Сокрлп(глПользователь.Код)+"') or (Users.PID = "+ПИД+")";
     Запрос.Выполнить(ТЗ);
КонецПроцедуры

которые вызываются из ПриНачалеРаботы и ПриЗавершенииРаботы

данные процедуры добавляют (и удаляют из таблицы при выходе)  в табличку Users соответствия PID и имени пользователя в 1С
в общем просто добавляются и удаляются записи текущего пользователя и его PID
далее из этой таблицы можно выявлять кто из пользователей.
мне это понадобилось для того что бы знать кто из пользователей 1С инициировал запуск триггера...


код процедур любезно предоставил Mikaware (www.mista.ru) за что ему большое спасибо
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: поможите с триггером на изменение таблички
Ответ #35 - 11. Января 2008 :: 06:19
Печать  
Хорошо! Чисто конкретный вопрос, а если юзеры работают в терминале, можно ли как-то определить из  1С с какого именно компа они зашли в терминал и запустили 1С, и добавить в эту самую табличку данную инфу?
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #36 - 11. Января 2008 :: 06:30
Печать  
скорее всего возможно. я не задавался таким вопросом.
ну так как запись пишется из самой 1С то думаю там же и можно попробовать вычислить эту инфу
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #37 - 11. Января 2008 :: 07:52
Печать  
Цитата:
Хорошо! Чисто конкретный вопрос, а если юзеры работают в терминале, можно ли как-то определить из  1С с какого именно компа они зашли в терминал и запустили 1С, и добавить в эту самую табличку данную инфу?

Например так
Код
Выбрать все
	Перем ЗначениеКлюча;

	ИмяПользователяWindows = "";
	Реестр = СоздатьОбъект("РеестрWin");
	Если Реестр.ОткрытьКлюч("HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE") = 1 Тогда
		Реестр.ЗапроситьЗначение("CLIENTNAME", ИмяПользователяWindows);
	КонецЕсли;

	Если Реестр.ОткрытьКлюч("HKEY_CURRENT_USER", "Software\Microsoft\Windows\CurrentVersion\Explorer", "KEY_QUERY_VALUE") = 1 Тогда
		Если Реестр.ЗапроситьЗначение("Logon User Name", ЗначениеКлюча) = 1 Тогда
			Если ПустаяСтрока(ИмяПользователяWindows) = 0 Тогда
				ИмяПользователяWindows = ИмяПользователяWindows + "\";
			КонецЕсли;
			ИмяПользователяWindows = ИмяПользователяWindows + ЗначениеКлюча;
		КонецЕсли;
	КонецЕсли;
 

  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: поможите с триггером на изменение таблички
Ответ #38 - 11. Января 2008 :: 07:59
Печать  
Круто! Однако, работает! Спасибо!
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #39 - 11. Января 2008 :: 08:09
Печать  
что за объект
Реестр = СоздатьОбъект("РеестрWin");
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #40 - 11. Января 2008 :: 08:36
Печать  
skom писал(а) 11. Января 2008 :: 08:09:
что за объект
Реестр = СоздатьОбъект("РеестрWin");

Это встроенный доп. класс из состава 1С++
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #41 - 11. Января 2008 :: 08:43
Печать  
а с какой версии он.
что то я написал твой код во внешней обработке - ругается
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #42 - 11. Января 2008 :: 08:56
Печать  
все разобрался. на локальном компе быстренько заработало
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: поможите с триггером на изменение таблички
Ответ #43 - 04. Февраля 2008 :: 12:21
Печать  
А существует все-таки способ сделать так, чтобы откатило то, что вызвало триггер, но что-то при этом сделать внутри триггера (например, сделать запись в какую-то табличку)?

Когда ставлю ROLLBACK TRAN, он откатывает все сразу  Со сжатыми губами
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 
ОтправитьПечать