|
16.10.2007, 10:41 | #1 |
Участник
|
Это обсуждалось уже в http://forum.mazzy.ru/index.php?showtopic=...art=#entry23794, но вопрос так и не был выяснен. У меня схожая проблема.
Мне необходимо заполнять определенные поля таблицы из некоего шаблона, содержащего номера таблиц, полей и их содержимого по умолчанию. Для этой операции я, естественно, использую RecordRef, нахлобучивая на нее Rec. Если на форме задать кнопку, вызывающую соотв. функцию, то после ввода новой строки и нажатии кнопки все отрабатывает нормально. Но необходимо вызывать эту ф-ю автоматически после ввода новой строки. В какой бы триггер формы я не поместил вызов ф-ии, выводиться все то же сообщение об ошибке (см. заголовок). Никакие коммиты, модифаи, апдейты формы не помогают. Похоже, что нави не закончила все свои дела с новой записью, а я пытаюсь ее смодифить через ссылку на нее. И, увы, нет триггера, что-то вроде OnAfterInsert. Можно ли как-то все же начать эту транзакцию, никто не разобрался? |
|
16.10.2007, 12:50 | #2 |
Участник
|
Я бы попробовал через временную таблицу.
Например в Тригере OnInsert сделал код такого содержания: TempRec := Rec; TempRec.INSERT; RecRef.GETTABLE(TempRec); Your_Func(RecRef); TempRec.SETRECFILTER; TempRec.FINDFIRST; Rec := TempRec; |
|
17.10.2007, 04:28 | #3 |
Участник
|
У нас есть таблица-шаблон, содержащая номера таблиц, некоторых из полей с тексами значения по умолчанию. Пользователь их заполняет и, к примеру, при заведении нового клиента (из формы 21) или поставщика уже имеет некоторые поля заполненными. Так как имеем дело с номерами полей и таблиц, приходится использовать RecRef и FieldRef. Это я к пояснению задачи.
Впрочем, то, что предложил golyshev подошло, большое ему спасибо с респектом. Спасибо также и всем другим, кто откликнулся. |
|
16.10.2007, 13:20 | #4 |
Участник
|
1. Поставьте в свойстве формы Delayed Insert - No (решение быстрое но кривоватое :-)
|
|
16.10.2007, 14:14 | #5 |
Участник
|
Gennady Antropov, а можно поподробнее?
Я так понял, у вас списочная форма? На какой таблице она основана, если вы вводите данные в разные таблицы? Может быть, код надо расположить в триггере этой таблицы? |
|
17.10.2007, 09:04 | #6 |
Участник
|
Возможно exit(false) на триггере поможет
|
|
18.10.2007, 04:42 | #7 |
Участник
|
На каком триггере? OnInsert? Так он просто вставить не даст и все. Впрочем, как я уже писал, моя проблема была решена благодаря совету golyshev. Толко я вызов ф-ии вставил не в триггер OnInsert (там я только поставил флаг: WasInsered := TRUE), а в триггер OnBeforePutRecord, естесственно, с вызовом ее по этому флагу.
|
|