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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.09.2013, 10:19   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А если есть - то как быть?
В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного, вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.

Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно

Последний раз редактировалось S.Kuskov; 03.09.2013 в 10:21.
Старый 03.09.2013, 11:10   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.

Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно
Ааа.... возможно я не так понял. Тогда да, апгрейд-скрипты конечно не нужны и проблемы только в коде. Хотя останется 2 проблемы:
1. Ситуация со знаками > и < (я про это писал) при сравнении значений енумов
2. Ситуация, когда вместо перечисления конкретных значений енума - указывается отрицание оставшихся значений. Ну, к примеру, можно написать:
X++:
switch (x)
{
      case 1,2,3:
..................
      default: 
}
А можно написать так:
X++:
if (x !=4)
Но это все проблемы именно анализа кода, а не данных.
Предопределенные данные могут возникать тогда, когда эти данные выпускает сам МС. Например, шаблоны отчетов для генератора финотчетности (ГФО). Тут конечно нельзя так просто отбросить именно МС-овские енумы.

Также тут надо понимать масштабы обновлений. Одно дело сервис-пак, который вообще могут не ставить, а только вытащить отдельные нужные куски.
Другое дело - апгрейд на новую версию. В новой версии - значения енумов скорее всего сохранятся. И там уже так просто не перебьешь.
И еще момент - с т.з. сравнения элементов в АОТе - удобнее, когда мало объектов, которые расположены на слое от МСа и на своем слое. В этом плане - проще не МСный код править (для исправления значения енума), а свой, чтобы не увеличивать количество объектов, расположенных на нескольких слоях.

Так что если не смотреть вперед на обновление версий - то, в общем-то вариант, когда при конфликте значений берется значение не от МС - вполне жизнеспособен.
__________________
Возможно сделать все. Вопрос времени
Старый 03.09.2013, 11:21   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
2. Ситуация, когда вместо перечисления конкретных значений енума - указывается отрицание оставшихся значений.
Эмм... не понял вас. Я вижу проблему при любом использовании числового значения элемента перечисления вместо его имени.
Старый 03.09.2013, 12:40   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Эмм... не понял вас. Я вижу проблему при любом использовании числового значения элемента перечисления вместо его имени.
Не... я тут имел в виду общую проблему, которая в принципе возникает при любом добавлении нового элемента енума. Это не относится к числовому представлению.

Пример (АХ 2009):
Тип партнера договора (RContractPartnerType). Штатно этот енум имеет 2 значения: Клиент и Поставщик (будем считать, что у нас нет слоя с зарплатой, где еще добавляется сотрудник).
В коде, который относится к обработке клиентских договоров можно встретить 2 варианта:
1.
X++:
if (rcontractTable.RContractPartnerType == RContractPartnerType::Cust)
и
2.
X++:
if (rcontractTable.RContractPartnerType != RContractPartnerType::Vend)
как вариант вот так:
X++:
if (rcontractTable.RContractPartnerType == RContractPartnerType::Cust)
{
}
else
{
}
Теперь представим себе, что мы добавляем новое значение в енум RContractPartnerType.

В зависимости от предназначения этого нового элемента - вышеуказанные конструкции нам придется подправить или возможно вообще видоизменить (например, if ... else преобразовать в switch)

Речь о явно заданных числовых значениях здесь конечно не идет. Данный пример я привел в качестве аргумента тому, что при добавлении нового значения енума придется лопатить существующий код, а вот вопрос - у кого этого кода может быть больше - у МСа в его выпущенном обновлении или в моих собственных разработках - вот этот вопрос и открыт.
Но в пользу моих доработок конечно говорит возможность не трогать мои исторические данные, в отличие от кода от МС. Хотя и закладывает мину для будущего обновления версии (если оно будет).
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 03.09.2013, 15:10   #5  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В этой ветке Murlin предлагает в случае конфликта своего элемента перечисления и нового системного, вместо обновления старых значений в БД, переопределить номер нового системного элемента перечисления.

Почему так делать опасно уже здесь написали, но видимо недостаточно убедительно
что именно опасного? т.е. действительно "опасного" а не то что вы с формы не перейдете на другую форму. relation - да
код вида
inventTrans.TransType > a и inventTrans.TransType < b
по большим сомнением... Т.к. выпуская sp с новым enumом
я думаю в нем будет исправление
inventTrans.transtype>a и inventTrans.TransType<c
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 04.09.2013, 06:25   #6  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Murlin Посмотреть сообщение
что именно опасного? т.е. действительно "опасного" а не то что вы с формы не перейдете на другую форму. relation - да
код вида
inventTrans.TransType > a и inventTrans.TransType < b
по большим сомнением... Т.к. выпуская sp с новым enumом
я думаю в нем будет исправление
inventTrans.transtype>a и inventTrans.TransType<c
Скорее всего вы не найдёте в системе таких енумов, где значение b является последним, а уж тем более, где между a и b есть разрыв. Обновление таких енумов не затрёт старые значения, а только лишь дополнит. Так что такой код ошибку не вызовет, хоть он и написан не очень корректно. Кстати, мне встречался такой код, где был добавлен новый элемент в енум, причем в коде забыли прописать подобную строку:
X++:
inventTrans.transtype>a && inventTrans.TransType<c
Приходилось самому исправлять.
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отображение аналитик в гриде складских журналов. Баг? _scorp_ DAX: Программирование 2 25.10.2012 11:48
Баг при печати налогового кода petr DAX: Программирование 0 25.03.2009 16:33
Баг SysDataImport Logger DAX: База знаний и проекты 2 16.07.2008 15:16
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26
Баг в суммовой разнице? maxx DAX: Функционал 3 23.10.2003 18:06
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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