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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.11.2008, 18:24   #1  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
чудеса компиляции
axapta 3.0 sp5
Класс PBAWebParseForm2WebForm родной чистенький.
Компилируем, ошибка!
X++:
str                     exportFile,test;
Простое объявление переменных. Меняем на
X++:
str                     test, exportFilet;
Ошибки нет, барабашки нет, в чем дело?
Старый 25.11.2008, 18:46   #2  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
Такое бывает когда в качестве имени переменной используется объявленный класс/таблица и т.д.
Например:
X++:
    InventTrans      inventTrans1, inventTrans; // ошибка
    InventTrans      inventTrans, inventTrans1; // ок
Скорее всего у вас объявлен класс/таблица test.

В 4-ке этот баг исправлен.
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.

Последний раз редактировалось e@gle; 25.11.2008 в 18:59.
За это сообщение автора поблагодарили: NetBus (1).
Старый 25.11.2008, 21:23   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Надо запомнить, что переменные через запятую в трешке обявлять нельзя. Совсем. Причина правильно описана выше. Любое такое объявление переменных - мина замедленного действия. Если даже сейчас код компилируется, то это совсем не означает, что он будет компилироваться в будущем. Стоит кому-нибудь когда-то создать тип с именем, совпадающим с вашей переменной, и все. Код компилироваться перестанет.
За это сообщение автора поблагодарили: glibs (1), ZVV (1), Logger (1), NetBus (1).
Старый 26.11.2008, 15:46   #4  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от e@gle Посмотреть сообщение
В 4-ке этот баг исправлен.
А в 2009 похоже опять поломали или это уже что-то другое. Попробуйте такое откомпилировать
X++:
InventTable pt;
Старый 26.11.2008, 15:57   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
pt - это же функция. Не можете же вы написать, например,
X++:
InventTable max;
То есть здесь совсем другое. В первом случае просто рвет башню компилятору, а во втором система не позволяет называть переменные так же, как встроенные функции. Хотя таблицу, например, можно "максом" обозвать. Только из кода потом к ней не обратишься.
Старый 26.11.2008, 16:02   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Действительно... затупил...
Старый 26.11.2008, 18:59   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от oip Посмотреть сообщение
То есть здесь совсем другое. В первом случае просто рвет башню компилятору, а во втором система не позволяет называть переменные так же, как встроенные функции. Хотя таблицу, например, можно "максом" обозвать. Только из кода потом к ней не обратишься.
Похожий баг из этой серии :
Создал табличку, завел в ней поля с именами Begin, end

На оракле синхронизация нормально проходит, а MS SQL ругается на зарезервированное слово.
Старый 26.11.2008, 23:52   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от oip Посмотреть сообщение
Надо запомнить, что переменные через запятую в трешке обявлять нельзя. Совсем. Причина правильно описана выше.
Баян
http://axcoder.blogspot.com/2006/03/...semicolon.html
Цитата:
There are simple rules to avoid such errors:
  • don't use multivariable declarations
  • insert extra semicolon after declarations end (but you can ommit it if the first non-declaration is a keyword for example return)
  • dont use simple name for classes ('i', for example) which can be name of the variable in existing code
Цитата:
Сообщение от Logger Посмотреть сообщение
Похожий баг из этой серии : Создал табличку, завел в ней поля с именами Begin, end. На оракле синхронизация нормально проходит, а MS SQL ругается на зарезервированное слово.
Еще бывает весело, когда поля совпадают с ключевыми словами X++, например, поле с названием date. Созданию таких полей в MorphX'е Аксапта сопротивляется, но при импорте из XPO пропускает. Потом к этим полям фиг обратишься

Последний раз редактировалось gl00mie; 26.11.2008 в 23:58.
За это сообщение автора поблагодарили: ZVV (1).
Старый 27.11.2008, 00:33   #9  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
Цитата:
Сообщение от Logger Посмотреть сообщение
Похожий баг из этой серии :
Создал табличку, завел в ней поля с именами Begin, end

На оракле синхронизация нормально проходит, а MS SQL ругается на зарезервированное слово.
Да есть такое.
Причины следующие:

В документации описано:
Цитата:
Naming of database objects

Naming of tables and indexes in Axapta must follow the general naming
conventions used by Axapta.

• Tables
Only non-temporary tables are created in the database.
Tables are given the same name as in Axapta. If the
name is a reserved word in the actual database system,
then the name is delimited by the values given in system
variables “QUOTEPRE” and “QUOTEPOST”. As an
example, if the value for QUOTEPOST was an
underscore “_” and you defined a table by a reserved
name such as “DATE” then Axapta would automatically
change the name of the table to be called “DATE_” in the
database.
• Columns
Columns are given the same name as in Axapta. If the
name is a reserved word in the actual database system,
then the name is delimited by the values given in system
variables “QUOTEPRE” and “QUOTEPOST”.
А вот список этих самых "reserved word in the actual database system" находится там же, в таблице SQLSYSTEMVARIABLES, в параметре KEYWORDS.
Лучше, конечно, смотреть в таблице СУБД, но можно и в Администрирование-Запросы-БД-Информация БД.
Так вот, это самый список зарезервированных слов является (что естественно) разным для Oracle и Сиквела, но при этом он мягко говоря не является полным, особенно для MS SQL, на мой взгляд. Как вариант, видимо, можно добавить их туда вручную, если очень хочется, но лучше наверное не использовать такие названия.

И ещё дополнение про список зарезервированных слов в параметре KEYWORDS
Цитата:
Comma-separated list of keywords to handle
specially (these are appended to a similar list in
the message file, axsys??.ktd). Object names
appearing from any of these lists, appear by
another name in the database.
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Logger (4).
Старый 27.11.2008, 00:58   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Баян
Это называется не "баян", а "классика". Но кто спорит-то? Да, это давно известно. Еще задолго до того, как Максим написал. Например, мне о таком поведении компилятора рассказали еще три года назад, в первую же неделю моей работы с Аксаптой.

Цитата:
Сообщение от gl00mie Посмотреть сообщение
Но при импорте из XPO пропускает. Потом к этим полям фиг обратишься
А еще Аксапта при импорте русские буквы в названиях чего угодно пропускает.
Теги
баг, компиляция, ax3.0, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка времени выполнения при компиляции проекта nicko DAX: Администрирование 4 30.08.2006 11:38
Перекрестные ссылки при компиляции Wamr DAX: Администрирование 6 16.06.2005 15:28
Установка СП2 ошибки компиляции chel DAX: Администрирование 55 06.05.2004 21:08
Help! Axapta 3.0 SP2 падает при компиляции. VadimVN DAX: Функционал 7 20.01.2004 20:43
Нужны ошибки глобальной компиляции Vasilenko Alexsandr DAX: Программирование 7 22.10.2003 16:30
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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