Страница 1 из 1
Как получить данные в cmSetDefault
Добавлено: 19 май 2011, 11:53
Nikos
Добрый день.
Пишу простенький интерфейс и столкнулся с проблемой при добавлении новой записи. Идея следующая: при нажатии F7 по умолчанию заполняются некоторые поля из той записи, на которой в момент нажатия F7 стоял курсор. Но не могу считать данные. Вот пример кода:
Код: Выделить всё
cmSetDefault:
{
var tek_co_tmp : comp;
tek_co_tmp := FPCO.NREC
Message(tek_co_tmp);
Message(FPCO.NREC);
}
Программа выдает 2 сообщения: 0 и 247365782463.
Т.е. почему-то Message может прочитать данные, а присвоить их нельзя.
Как получить данные?
Re: Как получить данные в cmSetDefault
Добавлено: 19 май 2011, 12:23
galover
Интересное поведение. Добавляется запись для таблицы FpCo? Если так, то оно в принципе и понятно, nRec буфера новой для новой записи компилятор обнуляет (неясно почему читает по другому принципу). А для чего нужен nRec? Как вариант можно получать nRec текущей записи в cmPositionChanged
Re: Как получить данные в cmSetDefault
Добавлено: 19 май 2011, 12:56
Nikos
Запись добавляется в таблицу SPBDR (связь с FPCO по SPBDR.CFPCO == FPCO.NREC)
Сделаю через cmPositionChanged. Просто подумал, что если Message может получить данные, то и вытянуть как-то можно.
Re: Как получить данные в cmSetDefault
Добавлено: 19 май 2011, 19:00
edward_K
связка у вас с не стой стороны. В этом случае, если вы вставляете новую запись то FPCO становится не валидна. Но буфер ее показывается в message. Заведите синоним где то спозиционируйтесь на него - наверняка покажет.
Re: Как получить данные в cmSetDefault
Добавлено: 20 май 2011, 08:56
Semi-bit
Тоже сталкивался с таким поведением. Здесь кроется маленькая хитрость: после вызова Message FPCO.NREC уже можно будет читать. Конечно, это годится только для отладки. Для рабочей версии можно попробовать сделать запись FPCO валидной, сбросив текущие ограничения с помощью ReSetBounds.
Кстати, а чем вас не устраивает SPBDR.CFPCO вместо FPCO.NREC? Имхо, намного логичнее при создании новой записи присваивать ей значения из ограничений. Тогда и ухищряться не надо никоим образом.
Re: Как получить данные в cmSetDefault
Добавлено: 20 май 2011, 09:06
Nikos
SPBDR.CFPCO тоже не валидна (т.к. эта запись в эту таблицу добавляется). Я бы и не стал долго разбираться с этим (не валидна и ладно), но вот это смутило:
Код: Выделить всё
tek_co_tmp := FPCO.NREC
Message(tek_co_tmp);
Message(FPCO.NREC);
Теперь более менее понятно почему такое поведение (хотя и не кажется мне оно очень логичным). Ну а сделал как предложил galover - запоминаю через cmPositionChanged, все отлично работает. Спасибо.
Re: Как получить данные в cmSetDefault
Добавлено: 20 май 2011, 11:10
Semi-bit
А, ну точно
Получается, вы заводите спецификацию документа, сделав ограничение документа по ней же. Больше так не делайте