22.11.2011, 18:28 | #1 |
Участник
|
Мне нужно сделать так, чтобы при открытии формы, открывалась форма с новой записью.
Напрмер открывая карточку товара открывалась не существующая карточка, а карточка новая (новая запись в таблице) готовая для заполнения данных. Как при нажатии клавиши F3, только при открытии формы. Подскажите пожалуйста, как это сделать. |
|
23.11.2011, 08:14 | #2 |
Участник
|
Спасибо за минус. Прокомментируйте пожалуйста, за что...
|
|
23.11.2011, 11:16 | #3 |
Участник
|
Да что тебе эти минуса? Тебе ж решение нужно, а не плюс.
Так вот, я в Наве не про, но решение выдумал, правда с ограничениями. Форму для ввода новой записи можно будет открыть только если ты заранее определишь на ней значение первичного ключа. Если у тебя ключевое поле из серии номеров или инкрементное, то это в общем-то не проблема. Что-то мне подсказывает, что открыть форму для не существующей записи нельзя. А как вызвать программно на форме создание новой записи (F3) я тоже не знаю. И ещё одно ограничение, форма должна быть не связанной. На связанной почему-то не получается создать запись на OnOpenForm. В общем, пошагово: Создаёшь не связанную форму (или снимаешь связь у связанной формы), потом на OnOpenForm пишешь: Код: Rec.FINDLAST; Rec.INIT; Rec."Key Field" := GetNewKeyValue; Rec.INSERT; Решение так себе, но лучше чем ничего, если никто не подскажет как программно создать новую запись на форме. Можно конечно вообще создать форму на которой не будет связанных элементов, тогда и первичный ключ не нужно будет заранее инициализировать, но тогда мучений предвижу огромное множество, что бы всё это работало как нормальная форма. |
|
23.11.2011, 12:57 | #4 |
Участник
|
Можно еще сделать таким образом. Перед открытием формы наложить фильтр на ключ с пустым значением. Естественно, в таблице не должно быть такой записи.
Код: Item.SETRANGE("No.",''); FORM.RUNMODAL(0,Item); Код: SETRANGE("No.","No."); |
|
23.11.2011, 13:31 | #5 |
Участник
|
Хм, конечно изврат полный, но стало интересно как такое реализовать
Мое предложение: OnOpenForm: SETRANGE("No.",''); // фильтр на первичный ключ OnInsertRecord(...):Boolean SETRANGE("No."); Таким образом, пустой фильтр выставляет нам форму в режим новой записи. Как только мы переходим на любое поле (или вводим первичный ключ и переходим), запись вставляется, ей присваивается номер, фильтр снимается. |
|
23.11.2011, 13:32 | #6 |
Участник
|
Цитата:
Сообщение от chebv
Можно еще сделать таким образом. Перед открытием формы наложить фильтр на ключ с пустым значением. Естественно, в таблице не должно быть такой записи.
Код: Item.SETRANGE("No.",''); FORM.RUNMODAL(0,Item); Код: SETRANGE("No.","No."); |
|