Страница 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
А, ну точно :) Получается, вы заводите спецификацию документа, сделав ограничение документа по ней же. Больше так не делайте ;)