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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2011, 19:56   #1  
Freinchman is offline
Freinchman
Участник
 
19 / 10 (1) +
Регистрация: 13.07.2009
Динамическое обращение к полю таблицы по названию(номеру) возможно ли?
(Ведь есть функции возврата номера и имени)

Необходимо динамически изменить значение поля зная его имя (номер), не используя хардкод.

* Могу значения полей поменять через SQL, но триггеры Nav тогда не сработают.
Старый 24.05.2011, 21:58   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Я не понял, что нужно сделать ))
Старый 24.05.2011, 23:22   #3  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
FieldRef/RecordRef - не об этом речь?
Старый 25.05.2011, 13:23   #4  
Freinchman is offline
Freinchman
Участник
 
19 / 10 (1) +
Регистрация: 13.07.2009
Цель: Дать возможность юзеру группового изменения значения любого количества полей в списке строк любой таблицы.

Я хочу дать пользователю список полей(временная табличка). Затем он проставляет напротив них те значения, которые ему нужно.
По кнопке ОК обновляются значения (со всеми триггерами).

Список полей(+ название) у меня есть, как обратиться мне к полю чтобы проставить значение?

Хочу избежать хардкода или дополнительной коррекции, и разместить в нужных формах(списках)
Старый 25.05.2011, 15:02   #5  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Freinchman Посмотреть сообщение
Цель: Дать возможность юзеру группового изменения значения любого количества полей в списке строк любой таблицы.

Я хочу дать пользователю список полей(временная табличка). Затем он проставляет напротив них те значения, которые ему нужно.
По кнопке ОК обновляются значения (со всеми триггерами).

Список полей(+ название) у меня есть, как обратиться мне к полю чтобы проставить значение?

Хочу избежать хардкода или дополнительной коррекции, и разместить в нужных формах(списках)
Я еще не большой спец, но пыталась сделать нечто подобное с помощью след. конструкции:
Fld_ref := FIELD(НомерПоля);
Fld_ref.VALIDATE(НовоеЗначение);
MODIFY;

Fld_Ref - переменная типа FieldRef
Старый 25.05.2011, 23:30   #6  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Я еще не большой спец, но пыталась сделать нечто подобное с помощью след. конструкции:
Fld_ref := FIELD(НомерПоля);
Fld_ref.VALIDATE(НовоеЗначение);
MODIFY;
Fld_Ref - переменная типа FieldRef
Во-первых перед fieldref надо recref'ом "открыть" таблицу.
Во-вторых надо RecRef'ом встать на определёную запись (через GET или FIND)
и потом только изменять требуемыe поля в записи через FieldRef

НО:
Вот здесь и для меня непонятно, в чём конкретно задача:
если надо изменить определённые поля ВО ВСЕХ записях таблицы, тогда всё просто
Код:
RecRef.OPEN('номер таблицы');
IF recref.FINDSET THEN BEGIN
  REPEAT

    FieldRef := recref.FIELD('номер поля 1 ');
    FieldRef.VALIDATE('AAA');
   
    FieldRef := recref.FIELD('номер поля 2 ');
    FieldRef.VALIDATE('12345');

    RecRef.MODIFY;
  UNTIL RecRef.NEXT = 0;
END;
А если НЕ ДЛЯ ВСЕХ записей, а только для некоторых, то как вы себе это представляете? Отфильтровать RecRec конечно возможно, но где Вы собираетесь определить/настроить то, какие определённые записи должны быть изменены?
Какая-то супер форма-список ВСЕХ записей таблицы, где напротив определённой записи user выбирает требуемые поля и к каждому полю проставляет новое значение? Если задача состоит в этом, то осуществить это очень трудоёмко, если вообще возможно.

Остальные техн. дополнения (но без ниx по-моему нельзя) уже давно осущствлены в стандарте (в Mapping), хотя и поверхностно, но партнеры на то и партнеры, чтобы хорошую вещь усовершенствовать:
надо будет руками проверять для каждого поля:
- подходит ли новое значение к типу поля;
- не превышает ли размер нового значения макс. допустимую величину (напр. Техт30 в Техт50)
- подходят ли OptionValue для полей типа Option (напр. допустимые OptionValue в поле: 1,2,3, a user шарахет в него 99).
- то же самое касается BOOLEAN-полей
- Вы хотите не просто присваивать полям значения, а через VALIDATE: а про TableRelation в валидируемом поле подумали?
Старый 26.05.2011, 10:12   #7  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от AlexB Посмотреть сообщение
Во-первых перед fieldref надо recref'ом "открыть" таблицу.
Во-вторых надо RecRef'ом встать на определёную запись (через GET или FIND)
и потом только изменять требуемыe поля в записи через FieldRef
Разумеется! Так и надо! Я просто не стала упоминать о таких очевидных вещах.

Цитата:
Сообщение от AlexB Посмотреть сообщение
Остальные техн. дополнения (но без ниx по-моему нельзя) уже давно осущствлены в стандарте (в Mapping), хотя и поверхностно, но партнеры на то и партнеры, чтобы хорошую вещь усовершенствовать:
надо будет руками проверять для каждого поля:
- подходит ли новое значение к типу поля;
- не превышает ли размер нового значения макс. допустимую величину (напр. Техт30 в Техт50)
- подходят ли OptionValue для полей типа Option (напр. допустимые OptionValue в поле: 1,2,3, a user шарахет в него 99).
- то же самое касается BOOLEAN-полей
- Вы хотите не просто присваивать полям значения, а через VALIDATE: а про TableRelation в валидируемом поле подумали?
Не знаю мне ли Вы это отвечали, но напишу про себя.
Я вставила все эти проверки на совпадение типов и рангов вводимого значения (кроме того, к изменению разрешены поля не всех типов). И есть еще одно но! которое упростило мне задачу: свою процедуру я писала исключительно для себя, чтобы облегчить себе жисть (т.е. предполагается что пользоваться подобной обработкой будет не простой пользователь, а администратор системы, которому иногда, время от времени, приходиится менять значения некоторых полей во всей таблице. Н-р, у нас недавно возникла необходимость удалить из некоторых таблиц лишние поля, а их, как известно, сначала нужно обнулить. И чтобы не писать каждый раз для каждой новой таблицы подобную обратоку, пришлось написать такую..... псевдо универсальную
Было бы конечно удобно иметь подобную функцию с возможностью фильтрации записей таблицы. Но пока передо мной такой задачи не стояло, я и не обдумывала сей вариант.
Старый 30.05.2011, 01:26   #8  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
"Постановка" задачи Автором, видимо, крик души. "У пользователей постоянно возникает потребность что-то менять в любых таблицах. Я уже задолбался рисовать формы и выводить разные поля на них - все равно приходится в каждом случае делать что-то, а я уже устал от этого. Как бы сделать так, чтобы цифры сами менялись как надо пользователю в самых разных таблицах...", примерно так думаю это должно звучать.
Нарисовать можно все, что угодно, но значения тех самых полей либо придется руками вбивать сначала куда-то, а потом в любые поля любой таблицы, либо привлекать искусственный интеллект для этого.
 


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

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

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