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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

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

Сообщение 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;
}
Не работает... Хотя и выполняется. Подскажите, как быть?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

попробуйте через
Set buf.SROKRES := cur_date;
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Пробовал - не помогает
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

GetTableBufferP почитайте.
объявлять тогда тоже нужно по другому
var buf : record as table KATSOPR with x$position ;
и в SetTableBuffer четко написано, что применять можно тока в before тригерах.
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

after - Это уже после вставки записи в БД и смысла не имеет.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение 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;
}
хотя в примере используется она.
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

А если использовать настройку
AddTune (ttSysTune, 'Reserv.SrokReserv','OPER.Reserv','Срок резерва (дней) по умолчанию',ftWord,'3','',hcPeriod_SrokReserv), поставив срок резерва = 0?
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

У нас резервирование вообще не используется, зато остро встает вопрос даты ввода документов в Галактику. Нужно, чтобы эта дата формировалась автоматически и всем была видна. В накладной выбрал неиспользуемое (в нашем случае) поле SROKRES, вывел конфигуратором для просмотра. Поэтому автоматическое резервирование не включаю, а с выключенным ничего не происходит - у нас и так стоит 0.
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение 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
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

База Oracle.
Можно, конечно, написать на PL/SQL, но зачем, если заработало хорошо и на випе?
Ответить