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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2003, 17:39   #1  
Кактус is offline
Кактус
Участник
 
62 / 12 (1) ++
Регистрация: 11.02.2003
Как записать значение в поле, зная его имя
Попробую объяснить.

Предположим у меня в тексте есть такие строчки:
(DestTable - Это некая таблица с полями ID,Name,SurName,Patronimyc,Age)

DestTable.ID:=VarText;
DestTable.Name:=VarText1;
DestTable.SurName:=VarText2;
DestTable.Patronimyc:=VarText3;
DestTable.Age:=VarText4;

А мне необходимо заполнить эти поля, скажем, универсальным способом
(например через процедуру, которой я буду передавать как параметр имя
поля)
Т.е. хотелось бы видеть что-то в таком духе:

Procedure MyChangeFieldValue(FieldName:Text);
Begin
[...]
End;

Вобщем, как, зная имя поля, присвоить ему значение?
Старый 09.04.2003, 12:42   #2  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
помимо имени поля тебе надо в этом случае передавать ссылку на таблицу в которую хочешь записать. В общем решение может быть следующим:

//------------определение ф-ции---------------------------------------------------------------
WriteFileld(VAR RecRef : RecordRef, FieldNo : Integer; Value : Text[30])
{
FldRef := RecRef.FIELD(FieldNo);
FldRef.VALUE := Value; //локальная переменная типа FieldRef
RecRef.MODIFY; //ссылка на таблицу куда пишем

//либо для вставки новой записи:
// FldRef := RecRef.FIELD(FieldNo);
// RecRef.INIT;
// FldRef.VALUE := Value;
// RecRef.INSERT;
}

//---------------пример вызова-------------------------------------------------------------------
DestTable.FIND('-');
RecRef.GETTABLE(DestTable); //RecRef - переменная типа RecordRef
WriteFileld(RecRef, DestTable.FIELDNO(SurName), VarText2);
//номер поля также можно узнать из таблицы Field
//в данном случае WriteFileld запишет значение в уже существующую запись(первую)
//--------------------------------------------------------------------------------------------------------

НО естественно перед присваиванием полю значения необходимо знать тип этого поля -то есть перед FldRef.VALUE := Value необходимо проанализировать тип поля. Это можно сделать заюзав таблицу Field по ключу таблицы куда ты пишешь значение
пример:

Field.TableNo := TableNo;
Field."No," := FieldNo;
//либо Field.FieldName := FieldName;

IF Field.FIND('-') THEN
CASE Field.Type OF
Field.Type::Code :
BEGIN
........//........в зависимости от типа делать преобразование
END;
-----//-------
END

вот в общем и весь подход.
Старый 10.04.2003, 09:46   #3  
Кактус is offline
Кактус
Участник
 
62 / 12 (1) ++
Регистрация: 11.02.2003
Цитата:
WriteFileld(VAR RecRef : RecordRef, FieldNo : Integer; Value : Text[30])
А как сделать эту самую RecRef. Это же, как я понимаю, не просто переменная типа Record (с указанием таблицы). Но как ее сделать? Объясни плс так, как если бы ты объяснял своей бабушке. ;-)
А то у меня не получается заставить работать вот это
Цитата:
FldRef := RecRef.FIELD(FieldNo);
Старый 10.04.2003, 12:20   #4  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
переменная RecRef это переменная типа RecordRef ( ссылка на таблицу причем любую ).
как делать (в редакторе C/AL):
1. заходишь в локальные переменные функции WriteField (Вид->C/AL Locals)
2. пишешь наименование ентой самой новой переменной в поле Name; в поле DataType выбираешь RecordRef

Далее
3. Точно также объявляешь переменную RecRef в функции откуда будешь юзать WriteField.
4. перед вызовом функции WriteField присваиваешь переменой RecRef ссылку на нужную таблицу - в нашем случае на DestTable. Делается енто следующей строкой кода:
RecRef.GETTABLE(DestTable);
5. Далее передаешь ету переменную (RecRef) в WriteField:
WriteFileld(RecRef, DestTable.FIELDNO(SurName), VarText2);

Я сделал форму со всем о чем тебе написал(но без анализа типа поля и естественно облегченный вариант). Она в аттаче.
правила пользования фичей:
1. запускаешь форму
2. в текстовом поле вводишь значение
3. жмакаешь княпу.
4. лицезреешь результат вместе с бабушкой в таблице

по нажатию княпы заменяется значение поля Description таблицы Item Ledger Entry(нравится она мне) для первой записи.
таблица Item Ledger Entry перед запуском должна иметь хоть одну запись иначе выдаст ошибку на FIND('-')
Вложения
Тип файла: zip rulesficha.zip (2.5 Кб, 144 просмотров)
Старый 10.04.2003, 12:31   #5  
Кактус is offline
Кактус
Участник
 
62 / 12 (1) ++
Регистрация: 11.02.2003
Это все для аксапты?
ЫЫыыыыы
У меня аттэйн.
(У меня нет типа RecordRef и fob не открывается.)
Вопрос в догонку. А на аттэйне это реально?

Хотя нет. fob не открывался на редактирование. А просто запуск - прошел. При нажатии на кнопку получаю собщение, что моя програмная лицензия не рулит с каким-то типом данных (наверное ругается на RecordRef). Это значит именно то, что значит, или я чего-то не понимаю?
Старый 10.04.2003, 12:37   #6  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
нет это для attain.
но у меня версия 3.60 - для нее работает. если у тебя 3.10 и ниже то в нем нет этих типов(RecordRef и FieldRef) - соответственно не будет ничего даже грузиться
Старый 10.04.2003, 12:41   #7  
Кактус is offline
Кактус
Участник
 
62 / 12 (1) ++
Регистрация: 11.02.2003
Всеравно очень благодарен. Спасибо.
Бум тянуться к 3.60 ;-)
Старый 10.04.2003, 12:55   #8  
Кактус is offline
Кактус
Участник
 
62 / 12 (1) ++
Регистрация: 11.02.2003
Всеравно очень благодарен. Спасибо.
Бум тянуться к 3.60 ;-)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
получить значение фильтра Tretyakov Igor NAV: Программирование 2 02.11.2005 15:38
Имя сервера Greggy NAV: Программирование 3 14.06.2005 06:44
поле «Свернут. Пр. Мощ. Себест.» в таблице «Товар» intelcraft NAV: Функционал 1 29.03.2005 23:38
Получить значение из формы NickNick NAV: Программирование 1 26.11.2004 17:23
поле OptionString Greggy NAV: Программирование 2 17.11.2004 14:36

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

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

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