Имя: Пароль:
1C
 
Триггер на добавление
0 Greeen
 
03.02.09
13:38
Доброго дня! Помогите люди добрые, всю голову уже сломал =(
Вешаю триггер на таблицу 1SJourn на вставку (при создании документа общие реквизиты записываются в отпределенную таблицу, получаю номер IDDOC, номер документа и дату)

|CREATE TRIGGER [TR_I_DH1SJOURN] ON [_1SJOURN]
|        FOR INSERT
|        AS
|        SET NOCOUNT ON
|        DECLARE @DDEF char(20)
|     SELECT @DDEF = INSERTED.IDDOCDEF FROM INSERTED
|        INSERT INTO _ЖурналСобытий (ДатаСобытия,Пользователь,ТипСобытия,Объект,ИмяОбъекта,ИмяТаблицы)
|        VALUES(GetDate(), @CurrentUser, 'I', 'Док',@DDEF ,'DH")
|        SET NOCOUNT OFF
И вот в чем загвозка - можно ли как то получить на этот момент Вид документа в нормальном виде (в 1SJOURN там числовой код, а нужен там вида "Заявка покупателя")?
1 Sadovnikov
 
03.02.09
13:39
(0) Функцию сделай, которая по IDDOC тебе представление документа вернет.
2 toypaul
 
гуру
03.02.09
13:40
+1 загнать в таблицу iddocdef и вид через метаданные
3 Sadovnikov
 
03.02.09
13:42
(2) Могут доп. данные потребоваться. Типа:
   Для Н = 1 По Метаданные.Документ() Цикл
       ВидДокумента = Метаданные.Документ(Н).Идентификатор;
       ИмяДокумента = Метаданные.Документ(Н).Представление();
       ИДДокумента  = РадугаМД.ИДДокумента(ВидДокумента);
       
       ТекстЗапросаIF_Начало = "
       |    IF @СтрокаРезультата = ''
       |        IF @ВидДок = "+ИДДокумента;
       
       Если ВидДокумента = "ЗакрытиеОстатков" Тогда
           ТекстЗапросаIF = ТекстЗапросаIF + ТекстЗапросаIF_Начало + "
           |            SET @СтрокаРезультата = Case IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @идДокОсн),0)
           |                When $ВидДокумента.ЗаказТовараУПоставщика Then 'Закрытие заказа поставщику'
           |                When $ВидДокумента.ТранзитТовараОтПоставщика Then 'Закрытие транзита'
           |                When $ВидДокумента.ЗаявкаНаКомплектацию Then 'Закрытие заявки на комплектацию'
           |                When $ВидДокумента.Счет Then 'Закрытие счёта'
           |                When $ВидДокумента.ЗаявкаНаСклад Then 'Закрытие заявки на склад'
           |                Else '"+ИмяДокумента+"'
           |                End";
       ИначеЕсли ВидДокумента = "Счет" Тогда
           ТекстЗапросаIF = ТекстЗапросаIF + ТекстЗапросаIF_Начало + "
           |            Begin
           |            DECLARE @ВременноеХранение int
           |            SELECT @ВременноеХранение = Convert(int, $Счет.ВременноеХранение) FROM $Документ.Счет Счет (NoLock) WHERE Счет.IDDoc = @ИдДок9
           |            SET @СтрокаРезультата = Case @ВременноеХранение
           |                When 1 Then 'Счет (консигнация)'
           |                When 2 Then 'Счет (3PL)'
           |                Else 'Счет'
           |                End
           |            End";
4 Greeen
 
03.02.09
13:49
спасибо огромное!
5 Sadovnikov
 
03.02.09
13:50
(4) Ты собственную регистрацию событий мутишь?
6 Greeen
 
03.02.09
13:51
(5) угумс
7 Sadovnikov
 
03.02.09
13:53
(6) Чем от штатного механизма должно отличаться?
8 Greeen
 
03.02.09
13:55
(7)Возможностью просмотра изменений реквизитов.
Далаю по этому
http://1csql.ru/materials/articles/develop.html~49e72144-3910-2323-ade1-bc42f7e4d100
9 Sadovnikov
 
03.02.09
13:59
(8) Ясно. Просто, думал, мало ли, может не знаешь про
Функция Событие_ЗаписьСобытияЖурналаРегистрации(КатегорияСобытия, Событие, Тип, Комментарий, Объект, ПредставлениеОбъекта) Экспорт
Функция Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(КатегорияСобытия, Событие, Тип, Комментарий, Объект, ПредставлениеОбъекта) Экспорт
10 jcage
 
03.02.09
14:04
Самое эффективное и правильное решение - выкинуть 7.7 в топку и заняться 8.х - там не придется изобретать чрезанальные методы для простых вещей.
11 Sadovnikov
 
03.02.09
14:06
(10) Что-то не то покурил? Эк тебя плющит-то.
Основная теорема систематики: Новые системы плодят новые проблемы.