Показать сообщение отдельно
Старый 31.10.2008, 10:01   #6  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Те рекомендации, которые дал Milk и я они подходят если в таблицу импортуются не все поля. Т.е. в справочник товаров импортируются только цены (в датапорте два поля Товар Но. и Цена). В этом случае датапорт обновит в таблице только поле Цена, а остальные не тронет.

Я так понял вы хотите хотите, чтобы если в поле есть не пустое значение, а в датапорте в этом поле пусто, то нужно оставить старое значение, и не импортировать "путое" из датапорта.

Тут мне в голову пришло такое решение, возможно есть варианты по красивше:
Объявляем такую же переменную Record как и импортируемая таблица (например, 27 - товары).
Объявляем переменную такого же типа как поле первичного ключа этой табицы (считаем, что в первичный ключ входит одно поле). Например cNo code 20.
И еще одну переменную типа Boolean (bExist)
В триггере OnBeforeEvaluateField(VAR Text : Text[1024]) поля первичного ключа (в нашем случае "Но.") пишем такой код:
Код:
//EVALUATE(cNo,Text);  //это если поле типа интежер, для code думаю хватит:
cNo:=Text; //возможно придется отрезать пробелы вручную (т.к. длина явно не совпадает). не проверял.

IF rItem.GET(cNo) THEN
  bExist:=TRUE;
Далее в триггере OnAfterImportRecord()датаайтема пишем

Код:
IF bExist THEN BEGIN
  IF (Поле1='')AND(rItem.Поле1<>'') THEN
	Поле1:=rItem.Поле1;  //или Валидейт, что больше нравится.
  ....

  MODIFY;
END;