AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.10.2008, 13:37   #1  
Grape is offline
Grape
Участник
 
5 / 10 (1) +
Регистрация: 30.10.2008
Создала датапорт на импорт.
Если запись с ключевым полем в таблицеуже существовала, датапорт очищает поля, которые не были импортированы. Мне же нужно, чтобы импортированные поля перезаписались, а остальные остались без изменения. Это возможно?
Спасибо за помощь.
Старый 30.10.2008, 14:09   #2  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Посмотрите на свойства DataItem:

AutoUpdate = Yes
AutoReplace = No
Старый 30.10.2008, 14:11   #3  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Вам должно помочь установить следующие свойства в строке датапорта: AutoUpdate = Yes, AutoReplace = No
Долго набирал, apanko уже ответил
Старый 30.10.2008, 15:55   #4  
Grape is offline
Grape
Участник
 
5 / 10 (1) +
Регистрация: 30.10.2008
Хм... вообще-то, эти свойства именно так и установлены...
Старый 31.10.2008, 09:25   #5  
Grape is offline
Grape
Участник
 
5 / 10 (1) +
Регистрация: 30.10.2008
У меня на OnAfterImportReport такой код:

ServItem.RESET;
ServItem.VALIDATE("No.",SERIALNO);
IF ServItem.INSERT(TRUE) THEN;
ServItem.VALIDATE("Customer No.",CUSTNO);
.........
ServItem.MODIFY(TRUE);


На OnBeforeImportReport - обнуление переменных.
Старый 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;
Старый 31.10.2008, 10:39   #7  
Grape is offline
Grape
Участник
 
5 / 10 (1) +
Регистрация: 30.10.2008
Нет, меня в первую очередь интересует как раз первый вариант, когда импортируются не все поля. Эти поля поля проходят импорт нормально, не пойму, почему обнуляются остальные?
А второй вариант тоже необходимо будет осуществить, спасибо за идею!
Старый 31.10.2008, 15:42   #8  
Grape is offline
Grape
Участник
 
5 / 10 (1) +
Регистрация: 30.10.2008
Проблема была в INSERT.
С FIND все работает

Всем спасибо за отклик!
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:15.