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


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
поможите с триггером на изменение таблички
28. Декабря 2007 :: 03:55
Печать  
постоянно слетает последовательность по неизвестным причинам. в логе 1С нет никакой инфы у всех пользователей все обрублено по максимуму
написал такой триггер

CREATE TRIGGER MyTRIGGER ON _1SJOURN
After UPDATE
AS

DECLARE @User_1c as varchar(40)
DECLARE @newc datetime
DECLARE @dzr datetime
DECLARE @DTDoc datetime
DECLARE @IDDoc9 char(9)
SELECT @newc = GETDATE()
SELECT @User_1c = User_1c FROM dbo.users where PID = @@SPID --получим пользователя
-- установили формат даты по скулю
-- и получим дату запрета редактирования
SET DATEFORMAT dmy
Select @dzr = left(convert(datetime, value),8)  from _1SCONST
Where id = 27

SET NOCOUNT ON;

SELECT @IDDoc9 = IDDoc, @DTDoc = Left(Date_Time_IDDoc,8) From inserted

IF @DTDoc < @dzr

--rollback tran

INSERT INTO dbo.tr
     (UsersOfAction, TimeOfAction,IDDoc,SPID) values (@User_1c, @newc, @IDDoc9, @@spid)



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

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #1 - 28. Декабря 2007 :: 04:15
Печать  
Попробуй так:



INSERT INTO dbo.tr
     (UsersOfAction, TimeOfAction,IDDoc,SPID)  ( Select @User_1c, @newc, IDDoc, @@spid  From inserted)
правда может 1с заткнутся, но попробуй если не сработает напишешь предложу другой вариант
  
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #2 - 28. Декабря 2007 :: 04:20
Печать  
он в инсерт инто не даеж конструкции типа @@spid и выражения какие то вставлять
  

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


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #3 - 28. Декабря 2007 :: 04:22
Печать  
о сорри разницу не заметил между тем как я пробовал и тем что ты предложил...счас попробую
  

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


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

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #4 - 28. Декабря 2007 :: 04:26
Печать  
Штука в том, что Inserted  - это не обязательно одна строка. Это м.б. и таблица.  Т.е. я бы сказал так
Код
Выбрать все
INSERT INTO dbo.tr
     (UsersOfAction, TimeOfAction,IDDoc,SPID)
SELECT
     @User_1c, @newc, IDDoc
FROM
     Inserted
WHERE
     Left(Date_Time_IDDoc,8) < @dzr
  

  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #5 - 28. Декабря 2007 :: 04:38
Печать  
ADirks прикольно сработало...
тока записи через одну идут с пустым IDDoc и SPID не проставляется.
  

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


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #6 - 28. Декабря 2007 :: 04:39
Печать  
и еще вопрос. если я хочу отменить данную транзакцию то простой rollback тут подойдет?
  

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


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

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #7 - 28. Декабря 2007 :: 04:55
Печать  
skom писал(а) 28. Декабря 2007 :: 04:38:
ADirks прикольно сработало...
тока записи через одну идут с пустым IDDoc и SPID не проставляется.

Видимо 1С пишет чего-то в _1SJourn с пустыми IDDoc.  Забавно...  Надо значит в условие добавить RTrim(IDDoc) != '' или IDDoc != $ПустойИД
Цитата:
... и SPID не проставляется

Это я просто в select-листе  @@spid  забыл  Улыбка
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #8 - 28. Декабря 2007 :: 05:02
Печать  
тока что то из 1С стало выкидывать ругается на курсоры смещенные
  

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


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

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #9 - 28. Декабря 2007 :: 05:02
Печать  
skom писал(а) 28. Декабря 2007 :: 04:39:
и еще вопрос. если я хочу отменить данную транзакцию то простой rollback тут подойдет?

1) Советую почитать BOL, раздел  triggers, rollbacks
2) Там много чего написано, и я лично не до конца понимаю, хотя всё по английски  Улыбка
Но вот видимо нужная выдержка
Цитата:
You must use the SAVE TRANSACTION statement to do a partial rollback in a trigger, even if it is always called in autocommit mode. This is illustrated by the following trigger:

CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
SAVE TRANSACTION MyName
INSERT INTO TestAudit
   SELECT * FROM inserted
IF (@@error <> 0)
BEGIN
  ROLLBACK TRANSACTION MyName
END
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #10 - 28. Декабря 2007 :: 05:09
Печать  
skom писал(а) 28. Декабря 2007 :: 05:02:
тока что то из 1С стало выкидывать ругается на курсоры смещенные

Это после rollback, или просто при инсерте?
  
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #11 - 28. Декабря 2007 :: 06:45
Печать  
Nick писал(а) 28. Декабря 2007 :: 05:09:
skom писал(а) 28. Декабря 2007 :: 05:02:
тока что то из 1С стало выкидывать ругается на курсоры смещенные

Это после rollback, или просто при инсерте?


rollback выключен
просто при инсерте

кстати вылетает когда в журнале документов меняешь активный док то есть просто при переходе на новый док
а если закрыть журнал и снова открыть тогда нормально
хотя вру это у меня происходило с доками когда я изменял триггер при включенной базе 1С
  

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


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #12 - 28. Декабря 2007 :: 06:47
Печать  
ADirks писал(а) 28. Декабря 2007 :: 05:02:
skom писал(а) 28. Декабря 2007 :: 04:39:
и еще вопрос. если я хочу отменить данную транзакцию то простой rollback тут подойдет?

1) Советую почитать BOL, раздел  triggers, rollbacks
2) Там много чего написано, и я лично не до конца понимаю, хотя всё по английски  Улыбка
Но вот видимо нужная выдержка
Цитата:
You must use the SAVE TRANSACTION statement to do a partial rollback in a trigger, even if it is always called in autocommit mode. This is illustrated by the following trigger:

CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
SAVE TRANSACTION MyName
INSERT INTO TestAudit
  SELECT * FROM inserted
IF (@@error <> 0)
BEGIN
 ROLLBACK TRANSACTION MyName
END


не совсесм понял (с англицким тож гуд)
тут он откатит транзакцию по вставке в мою таблицу или ту которая привела к изменениям и срабатыванию триггера???
в скуле я не особо силен пока

вчера тестировал на первоначальном варианте триггера и там стоял простой роллбэк
в итоге тот документ который я пытался изменить/провести/отменить проведение отменялся полностью....затем я проверял он отменил только в 1СДЖОРН - оказалось нет
все регистры тоже отменились то есть в отчетах все осталось по прежнему все движения старые. пытаешься провести док непроведенный - 1с-ка типа проводит док но в журнале он стоит непроведенный.....
но один момент огорчил....этот док все же регистрируется в таблице для урбд выгрузки и пытаясь удалить записи по данному IDDoc в этом триггере она не удаляется...я подумал может в УРБД табличку регится после ...то енсть на момент срабатывания триггера в таблице для УРБД еще нет этих записей и они генерятся туда потом
  

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


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #13 - 28. Декабря 2007 :: 09:41
Печать  
Так нужно видимо триггер и на таблицу апдейтов, зачем искать то чего нет?

Ты задай тут вопрос который на мисте обсуждали - проведение/запись доков в транзакции 1С (при этом в толпе доков есть пара плохих)
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #14 - 28. Декабря 2007 :: 09:47
Печать  
Цитата:
Так нужно видимо триггер и на таблицу апдейтов, зачем искать то чего нет?

Ты задай тут вопрос который на мисте обсуждали - проведение/запись доков в транзакции 1С (при этом в толпе доков есть пара плохих)

Что есть таблица "апдейтов"?  в тригере FOR UPDATE только две системных таблицы - inserted  и deleted
  
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #15 - 28. Декабря 2007 :: 09:54
Печать  
CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
SAVE TRANSACTION MyName
INSERT INTO TestAudit
  SELECT * FROM inserted
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION MyName
END

вот так не откатывает назад транзакцию почему то
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #16 - 28. Декабря 2007 :: 10:04
Печать  
Попробуй явно начть транзакцию
  
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #17 - 28. Декабря 2007 :: 10:15
Печать  
где именно явно начать ее?
мне надо что бы отменилось не то что в триггере происходит и то что вызвало триггер
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #18 - 28. Декабря 2007 :: 10:21
Печать  
skom писал(а) 28. Декабря 2007 :: 10:15:
где именно явно начать ее?
мне надо что бы отменилось не то что в триггере происходит и то что вызвало триггер

Тогда тебе не нужно делать SAVE
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #19 - 28. Декабря 2007 :: 10:43
Печать  
Nick писал(а) 28. Декабря 2007 :: 09:47:
Что есть таблица "апдейтов"?  в тригере FOR UPDATE только две системных таблицы - inserted  и deleted


_1supdts
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #20 - 28. Декабря 2007 :: 10:50
Печать  
Цитата:
Nick писал(а) 28. Декабря 2007 :: 09:47:
Что есть таблица "апдейтов"?  в тригере FOR UPDATE только две системных таблицы - inserted  и deleted


_1supdts


Это какая то служебная таблица 1с? Чего там хранится?
  
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #21 - 28. Декабря 2007 :: 11:00
Печать  
в общем на данный момент то что было подсказано в начальных постах отлично срабатывает
в триггере ставишь rollback tran и никакие изменения не проходят в 1сДЖОРН и похоже в 1СУПДТС вроде тоже но это пока не подтверждено
  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #22 - 28. Декабря 2007 :: 11:35
Печать  
может у тебя условие не срабатывает ? IF (@@error <> 0)
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #23 - 28. Декабря 2007 :: 12:49
Печать  
Про транзакции.

Если ты говоришь ROLLBACK TRANSACTION, то это отменяет все вышестоящие транзакции. Т.е. такой код
Код
Выбрать все
Begin Transaction
Insert into #test 1
...
Begin Transaction
Insert into #test 2
ROLLBACK Transaction

Commit Transaction
 


приведёт к тому, что таблица #test будет в итоге пустой.  С SAVE TRANSACTION играться не пробовал, но если верить таки документации, то это как раз и должно обеспечивать частичный откат транзакции. Т.е. откатится всё, что между SAVE и ROLLBACK.   Но, повторюсь, сам не пробовал.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #24 - 28. Декабря 2007 :: 12:55
Печать  
вот такая вот фигня
Код
Выбрать все
create table #test (i int)

Begin Transaction
	Insert into #test (i) values (1)
	save transaction A
		Insert into #test (i) values (2)
	ROLLBACK Transaction A
Commit Transaction

select * from #test

drop table #test 


выдаёт ожидаемый результат - т.е. одна строка с i = 1.  Но это вне триггера.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #25 - 28. Декабря 2007 :: 14:06
Печать  
Nick писал(а) 28. Декабря 2007 :: 10:50:
Это какая то служебная таблица 1с? Чего там хранится?


Список измененных объектов для обмена УРБД. Просто автор на это жаловался. Имеет смысл там отсекать где это происходит
  

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


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: поможите с триггером на изменение таблички
Ответ #26 - 10. Января 2008 :: 06:54
Печать  
> SELECT @User_1c = User_1c FROM dbo.users where PID = @@SPID --получим пользователя

- А можно тут поподробнее, что хранится в табличке dbo.users? Имена пользователей 1С? Откуда можно вытащить эти данные? Максимум, что смог получить - это PID из БД Master таблицы sysprocesses...  Печаль
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: поможите с триггером на изменение таблички
Ответ #27 - 10. Января 2008 :: 08:04
Печать  
не мое мне подсказали как сделать
в базе добавил свою таблицу Users
в ней имя пользователя, pid и время входа ( на всякий случай) и при входе пользователя в 1С в эту таблицу пишется сопоставление pid и имени его пользователя в 1С.
короче таблица служит для превращения pid'a в реальное имя.
  

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


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: поможите с триггером на изменение таблички
Ответ #28 - 10. Января 2008 :: 08:12
Печать  
А откуда в таблицу USERS имя пользователя вставляется, вот в чем вопрос?  Озадачен
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: поможите с триггером на изменение таблички
Ответ #29 - 10. Января 2008 :: 08:14
Печать  
В SQL где можно подцепить имя пользователя 1С?
  
Наверх
 
IP записан
 
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] 
ОтправитьПечать