Страница 1 из 1

Как задать значение по умолчанию

Добавлено: 03 июн 2008, 13:08
Nikos
Добрый день!
Требуется при создании документа задать некоторые значения. В частности, при создании накладной нужно поле SROKRES установить в текущую дату. Как это можно сделать?
Первым делом решил, что сделаю с помощью триггера. Почитал документацию - вроде как не для этого они, но тем не менее написал следующий триггер:

Код: Выделить всё

handler ib1 on trigger KATSOPR after insert [99]
action
{
  var buf : record as table KATSOPR;
  GetTableBuffer(buf);
  buf.SROKRES := cur_date;
  SetTableBuffer(buf);
  result := true;
}
Не работает... Хотя и выполняется. Подскажите, как быть?

Добавлено: 03 июн 2008, 13:38
Алексей
попробуйте через
Set buf.SROKRES := cur_date;

Добавлено: 03 июн 2008, 13:39
Nikos
Пробовал - не помогает

Добавлено: 03 июн 2008, 14:23
edward_K
GetTableBufferP почитайте.
объявлять тогда тоже нужно по другому
var buf : record as table KATSOPR with x$position ;
и в SetTableBuffer четко написано, что применять можно тока в before тригерах.

Добавлено: 03 июн 2008, 14:26
Ged
after - Это уже после вставки записи в БД и смысла не имеет.

Добавлено: 03 июн 2008, 15:01
Nikos
edward_K, большое спасибо! Заработало следующим образом:

Код: Выделить всё

handler ib1 on trigger KATSOPR before insert [99]
action
{
  var buf : record as table KATSOPR with x$position;
  GetTableBufferP(buf);
  set buf.SROKRES := cur_date;
  SetTableBuffer(buf);
  result := true;
}
через GetTableBuffer не работает:

Код: Выделить всё

handler ib1 on trigger KATSOPR before insert [99]
action
{
  var buf : record as table KATSOPR;
  GetTableBuffer(buf);
  set buf.SROKRES := cur_date;
  SetTableBuffer(buf);
  result := true;
}
хотя в примере используется она.

Добавлено: 04 июн 2008, 15:29
aleks1232321
А если использовать настройку
AddTune (ttSysTune, 'Reserv.SrokReserv','OPER.Reserv','Срок резерва (дней) по умолчанию',ftWord,'3','',hcPeriod_SrokReserv), поставив срок резерва = 0?

Добавлено: 04 июн 2008, 17:04
Nikos
У нас резервирование вообще не используется, зато остро встает вопрос даты ввода документов в Галактику. Нужно, чтобы эта дата формировалась автоматически и всем была видна. В накладной выбрал неиспользуемое (в нашем случае) поле SROKRES, вывел конфигуратором для просмотра. Поэтому автоматическое резервирование не включаю, а с выключенным ничего не происходит - у нас и так стоит 0.

Добавлено: 04 июн 2008, 18:59
aleks1232321
База у вас случайно не SQL?
Если да, то проще не проще ли изменить триггер на insert?
Объявить переменную, присвоить ей текущую дату и записать ее в требуемое поле


-- Force update header fields:
UPDATE T$KATSOPR SET
F$Atl_LastDate=@LastDate,
F$Atl_LastTime=@LastTime,
F$Atl_LastUser=@LastUser,
F$Atl_OriginOffice=@OriginOffice
<где-нибудь здесь>
FROM Inserted WHERE T$KATSOPR.F$NREC=Inserted.F$NREC

Добавлено: 05 июн 2008, 08:46
Nikos
База Oracle.
Можно, конечно, написать на PL/SQL, но зачем, если заработало хорошо и на випе?