Как получить данные в cmSetDefault

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Как получить данные в cmSetDefault

Сообщение 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 может прочитать данные, а присвоить их нельзя.
Как получить данные?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Как получить данные в cmSetDefault

Сообщение galover »

Интересное поведение. Добавляется запись для таблицы FpCo? Если так, то оно в принципе и понятно, nRec буфера новой для новой записи компилятор обнуляет (неясно почему читает по другому принципу). А для чего нужен nRec? Как вариант можно получать nRec текущей записи в cmPositionChanged
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: Как получить данные в cmSetDefault

Сообщение Nikos »

Запись добавляется в таблицу SPBDR (связь с FPCO по SPBDR.CFPCO == FPCO.NREC)
Сделаю через cmPositionChanged. Просто подумал, что если Message может получить данные, то и вытянуть как-то можно.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как получить данные в cmSetDefault

Сообщение edward_K »

связка у вас с не стой стороны. В этом случае, если вы вставляете новую запись то FPCO становится не валидна. Но буфер ее показывается в message. Заведите синоним где то спозиционируйтесь на него - наверняка покажет.
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Как получить данные в cmSetDefault

Сообщение Semi-bit »

Тоже сталкивался с таким поведением. Здесь кроется маленькая хитрость: после вызова Message FPCO.NREC уже можно будет читать. Конечно, это годится только для отладки. Для рабочей версии можно попробовать сделать запись FPCO валидной, сбросив текущие ограничения с помощью ReSetBounds.

Кстати, а чем вас не устраивает SPBDR.CFPCO вместо FPCO.NREC? Имхо, намного логичнее при создании новой записи присваивать ей значения из ограничений. Тогда и ухищряться не надо никоим образом.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: Как получить данные в cmSetDefault

Сообщение Nikos »

SPBDR.CFPCO тоже не валидна (т.к. эта запись в эту таблицу добавляется). Я бы и не стал долго разбираться с этим (не валидна и ладно), но вот это смутило:

Код: Выделить всё

tek_co_tmp         := FPCO.NREC
    Message(tek_co_tmp);
    Message(FPCO.NREC);
Теперь более менее понятно почему такое поведение (хотя и не кажется мне оно очень логичным). Ну а сделал как предложил galover - запоминаю через cmPositionChanged, все отлично работает. Спасибо.
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Как получить данные в cmSetDefault

Сообщение Semi-bit »

А, ну точно :) Получается, вы заводите спецификацию документа, сделав ограничение документа по ней же. Больше так не делайте ;)
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
Ответить