Добрый день.
Пишу простенький интерфейс и столкнулся с проблемой при добавлении новой записи. Идея следующая: при нажатии F7 по умолчанию заполняются некоторые поля из той записи, на которой в момент нажатия F7 стоял курсор. Но не могу считать данные. Вот пример кода:
Интересное поведение. Добавляется запись для таблицы FpCo? Если так, то оно в принципе и понятно, nRec буфера новой для новой записи компилятор обнуляет (неясно почему читает по другому принципу). А для чего нужен nRec? Как вариант можно получать nRec текущей записи в cmPositionChanged
Запись добавляется в таблицу SPBDR (связь с FPCO по SPBDR.CFPCO == FPCO.NREC)
Сделаю через cmPositionChanged. Просто подумал, что если Message может получить данные, то и вытянуть как-то можно.
связка у вас с не стой стороны. В этом случае, если вы вставляете новую запись то FPCO становится не валидна. Но буфер ее показывается в message. Заведите синоним где то спозиционируйтесь на него - наверняка покажет.
Тоже сталкивался с таким поведением. Здесь кроется маленькая хитрость: после вызова Message FPCO.NREC уже можно будет читать. Конечно, это годится только для отладки. Для рабочей версии можно попробовать сделать запись FPCO валидной, сбросив текущие ограничения с помощью ReSetBounds.
Кстати, а чем вас не устраивает SPBDR.CFPCO вместо FPCO.NREC? Имхо, намного логичнее при создании новой записи присваивать ей значения из ограничений. Тогда и ухищряться не надо никоим образом.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
SPBDR.CFPCO тоже не валидна (т.к. эта запись в эту таблицу добавляется). Я бы и не стал долго разбираться с этим (не валидна и ладно), но вот это смутило:
Теперь более менее понятно почему такое поведение (хотя и не кажется мне оно очень логичным). Ну а сделал как предложил galover - запоминаю через cmPositionChanged, все отлично работает. Спасибо.