Вернуться   Андрей Панько. Заметки про Dynamics NAV > Dynamics NAV (Navision)
Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Dynamics NAV (Navision) Заметки про Dynamics NAV (ранее Navision) и аддон LS Retail

Ответ
 
Опции темы Поиск в этой теме
  #1  
Старый 03.04.2008, 15:26
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Преобразование типов данных [Programming]

Автоматическое преобразование типов


Само собой разумеется, что при присваивании переменной значения, тип значения должен соответствовать типу переменной. Однако, некоторые типы (с рядом ограничений) могут быть автоматически преобразованы в процессе присваивания.

Строковые типы данных
Тип данных code, так же как и тип данных text, могут автоматически преобразовываться друг в друга.Например, если Description– это переменная типа text, а "Code Number" – переменная типа code, система сможет выполнить следующее выражение:
"Code Number" := Description
Текстовое значение переменной Description будет преобразовании в тип code перед выполнением операции присваивания переменной "Code Number". Это значит, что все буквы в нижнем регистре будут переведены в верхний, а также будут удалены крайние правые и левые пробелы (если они есть).
Итак, значение, присвоенное переменной типа code, будет того же типа, т.е. code. Заметим, что процесс преобразования не затронул значения хранящегося в переменной Description. Переменные, расположенные справа от оператора присваивания не изменяются. Изменению подвергаются только переменные, расположенные слева от оператора присваивания.
Примечание: При автоматическом преобразовании типов есть ряд ограничений. Например, предположим, что значение переменной Description содержит больше символов, что можно поместить в переменную "Code Number". В этом случае, в результате выполнения операции будет получена ошибка Run-TimeError.

Числовые типы данных
Все числовые типы данных (integer, decimal, option и char) могут быть преобразованы друг в друга со следующими ограничениями:
  • • Значение типа decimal должно быть целым числом (не иметь дробной части).
  • • Значение типа decimal не может быть преобразовано в integer или в option пока его значение за пределами диапазона -2147483647..2147483647.
  • • Значения типа decimal, integer или option не могут быть преобразованы в char пока их значения за пределами диапазона 0..255.
Иначе выполнение операций будет остановлено с ошибкой Run-TimeError.

Другие типы данных
Хотя строковые типы данных автоматически преобразовываются друг в друга, и числовые типы данных также автоматически преобразовываются друг в друга, никакие другие типы данных не могут преобразовываться автоматически.

Для прочих преобразований следует использовать функции Evaluateи Format.



__________
Перевод отрывка из учебного пособия

Ответить с цитированием
  #2  
Старый 21.04.2008, 11:17
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
EVALUATE (Variable)

Используйте данную функцию, чтобы преобразовать текстовое представление значения в его нормальное представление. Система присвоит результат переменной.
[Ok :=] EVALUATE(Variable, String[, Number])

Ok
Тип данных: boolean
Возвращаемое значение:

TRUE: В процессе выполнения преобразования текстовое представление значения ошибок не было. Система присвоила полученное значение переменной Variable.

FALSE: В процессе выполнения преобразования текстовое представление значения произошла ошибка. Значение переменной Variable осталось прежним.



Если опустить обработку возвращаемого значения (это необязательный параметр) и во время выполнения преобразования текстового представления значения произойдет ошибка, выполнение кода прекратится с Run-Time Error.


Variable
Тип данных: boolean, integer, option, date, time, text constant, code или GUID.
Любая переменная. Значение, полученное преобразованием строки будет присвоено данной переменной.


String
Тип данных: text constant or code
Строка, содержащая значение любого простого типа данных C/AL.


Number
Тип данных: integer
Необязательный параметр, может быть использован, при экспорте данных с помощью XMLport. Единственное возможное значение данного параметра – 9, которое сообщает, что данные должны быть преобразованы из XML формата в C/SIDE формат.


Пример
Этот пример продемонстрирует работы функции EVALUATE с тремя переменными различных типов данных.
Код:
Value := '010196'; Ok1 := EVALUATE(VarInteger, Value); Ok2 := EVALUATE(VarDate, Value); Ok3 := EVALUATE(VarYesNo, Value); MESSAGE(Text000 + Text001 + Text002,VarInteger, Ok1, VarDate, Ok2, VarYesNo, Ok3)

Создайте следующие текстовые константы в окне C/AL Globals:


Цитата:
Text000 'VarInteger = #1######, и результат выполнения: %2\'

Text001 'VarDate = #3######, и результат выполнения: %4\'
Text002 'VarYesNo = #5######, и результат выполнения: %6'




В сообщение будет следующий текст::
Цитата:
VarInteger = 10196 , и результат выполнения: Yes
VarDate = 01/01/96, и результат выполнения: Yes
VarYesNo = No , и результат выполнения: No

Этот пример показывает, что система проинтерпретировала значение переменной Value ('010196') и как integer (целое) и как date (дата), но не смогла преобразовать в значение типа boolean. Это вызвало ошибку, и изменило значение переменной Ok3 (=FALSE).
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 16:57.

Контакты: e-mail, телефон: +7(926)1805967 - Архив - Вверх

Microsoft Most Valuable Professional
vBulletin v3.5.4, Copyright ©2000-2019, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co
Права на все материалы, опубликованные на блогофоруме принадлежат Андрею Панько, если в самом материале не указано иное.
Рейтинг@Mail.ru Rambler's Top100