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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2006, 10:37   #1  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Angry
Люди, помогите. Я в программировании на C/AL новичок. С толкнулся вот с чем.

На форме есть таблица и текстовые поля, связанные с полями таблицы. Нужно содержание текстового поля передать в глобальную переменную. Не знаю как это сделать.
Старый 12.09.2006, 11:11   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Люди, помогите. Я в программировании на C/AL новичок. С толкнулся вот с чем.

На форме есть таблица и текстовые поля, связанные с полями таблицы. Нужно содержание текстового поля передать в глобальную переменную. Не знаю как это сделать.
Можно узнать зачем, а не как вы это пытаетесь сделать? Условие задачи ..
Старый 12.09.2006, 11:23   #3  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
У формы есть переменная Rec которая ссылается на запись таблицы на которой стоит курсор - и соответсвенно присвоить переменной значение поля будет Переменная = Rec.Поле
Старый 12.09.2006, 11:27   #4  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Переменная (не важно какая глобальная или локальная) должна содержать значение текстового поля (Text Box), a не значение поля в таблице. Затем значение этой переменной передать во внешний модуль.
Старый 12.09.2006, 11:30   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Переменная (не важно какая глобальная или локальная) должна содержать значение текстового поля (Text Box), a не значение поля в таблице. Затем значение этой переменной передать во внешний модуль.
На OnFormat поля передавайте значение в переменную.
Стремно все у вас там как-то...
Старый 12.09.2006, 12:36   #6  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Как именно это сделать: передать значение и где написать?

Например. Есть глобальная переменная N. И поле Number в таблице Blanck Table. На форме есть Text Box, который отображает значения этого поля. Его св-во SourceExpr установлено - Number.

Заранее спасибо.
Старый 12.09.2006, 12:48   #7  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Ну на том же OnAfterGetRecord пишите: N := Rec.Number (я правильно понимаю, что таблица отображается в TableBox?)
Затем передавайте во внешний модуль... (ВнешнийМодуль.SetValue(N))
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 12.09.2006, 12:53   #8  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Как именно это сделать: передать значение и где написать?

Например. Есть глобальная переменная N. И поле Number в таблице Blanck Table. На форме есть Text Box, который отображает значения этого поля. Его св-во SourceExpr установлено - Number.

Заранее спасибо.
Не знаю в какой момент вам нужно иметь в переменной N значение поля Number таблицы Blanck Table, но достаточно просто написать N := Rec.Number. И все. Переменная Rec представляет записи таблицы, лежащей в соурсе формы (Blanck Table). Если мы обращаемся к ней, указав имя поля, то получаем значение этого поля той записи, на которой находится в данный момент курсор (либо, если обрабатываем в коде, то записи, которую обрабатываем в данный момент).
ПС. Смотрите код других форм. Ваши задачи наверное будут не сильно отличаться от тех, что уже реализованы в нави. Делайте по аналогии, стараясь понять почему так.
И .. потом у вас есть наставник -) А вы его ученик, насколько я понял -)
Старый 12.09.2006, 13:42   #9  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Ваши решения работают. Спасибо за консультацию. Опишу более подробно ситуацию.

Таблица отображается в Table Box. Она работает только на чтение. Text Box содержит значения поля Number. Изменения данных, производящиеся в Text Box, не должны происходить в таблице. Измененные данные должны попасть в переменную N.
Старый 12.09.2006, 14:20   #10  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Ваши решения работают. Спасибо за консультацию. Опишу более подробно ситуацию.

Таблица отображается в Table Box. Она работает только на чтение. Text Box содержит значения поля Number. Изменения данных, производящиеся в Text Box, не должны происходить в таблице. Измененные данные должны попасть в переменную N.
Предложил бы использовать для этого поле, не привязанное к полю таблицы. Свободный текстбокс со своей переменной в качестве Sourc'a. На OnValidate() этого поля (на OnValidate() нормально отрабатывает ошибку без схлопывания формы) повесить передачу введенного значения во внешний модуль. На OnAfterGetRecord() формы присваивать значение текстбокса из значения поля Number таблицы.
Старый 12.09.2006, 15:37   #11  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Ваше предложение работает.

Но все же желательно, чтобы текстбокс был один, который был бы привязан к полю таблицы и можно было бы изменять эти данные не внося изменений в таблицу, а отправляя это изменение в переменную.
Старый 12.09.2006, 15:51   #12  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Ну расположите текстбокс (сорс - переменная) не на тейблбоксе, в где-нибудь мимо него.
В остальном - все то же самое.
На OnAfterGetRecord получаете в переменную значение поля, на OnValidate отправляете изменение значения переменной в свой "внешний модуль".
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 12.09.2006, 15:56   #13  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Дуд Посмотреть сообщение
Ну расположите текстбокс (сорс - переменная) не на тейблбоксе, в где-нибудь мимо него.
Почему мимо? Можно и в гриде ..
Старый 12.09.2006, 16:20   #14  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Как имеено получить значение текстбокса, который связан с таблицей, в переменную?
Старый 12.09.2006, 19:34   #15  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Значение текстбокса - это его соурсэкспрешн (может переменная, может поле таблицы...).
Переменная N
Соурсэкспрешн S
N := S;
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 13.09.2006, 12:34   #16  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Огромное спасибо за помощь и предложенные варианты. Разобрался как делать.
Появился еще один вопрос: как получить ID строки?

Со столбцом все понятно. Код будет следующий:

P:=xRec.FIELDNO(xRec."Number office");

где P - переменная, а Number office - второй столбец в таблице Table_2. В результате P содержит 2.

Как примерно тоже самое сделать со сторокой?
Старый 13.09.2006, 12:39   #17  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Вы о чем?
Зачем Вам FIELDNO, что Вы собираетесь с ним делать?
Что Вы подразумеваете под ID строки?
Есть понятие "первичный ключ", который однозначно определяет запись в таблице. Вы об этом?
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 13.09.2006, 12:45   #18  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Появился еще один вопрос: как получить ID строки?
Ниччего не понимаю ... Ненавижен это. Не навижен )
Старый 13.09.2006, 12:49   #19  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Дуд правильно понял!!!

Переменная P должна содержать значение "первичного ключа" строки, а не столбца.

Извениите! Вновь опечатался.

Переменная P должна содержать "первичный ключ" записи.
Старый 13.09.2006, 12:52   #20  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Programmer Посмотреть сообщение
Дуд правильно понял!!!

Переменная P должна содержать значение "первичного ключа" строки, а не столбца.

Извениите! Вновь опечатался.

Переменная P должна содержать "первичный ключ" записи.
Создайте временную переменную типа Record, пусть будет ВремКопияРек и делайте вставку в нее, если нужны данные по массиву строк или просто присвоение, то есть :
ВремКопияРек := Rec;
ВремКопияРек.INSERT;
И будет у вас массив ID строк таблицы ...
 


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

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

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