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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.08.2013, 07:20   #1  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Баг или не баг?
ax 2009 метод dictEnum.index2Symbol не работает если какому то значение enum назначить значение в разрыв. т.е. было 1,2,3,4 добавили новое со значением 100. Метод перестает работать и выдает что то по китайски.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 28.08.2013, 07:50   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Используйте value2Symbol. Ведь вы по значению хотите определять. А то что index2Symbol не работает для такого случая, это вполне логично ведь 100 элемента нет, есть значение 100.
__________________
Sergey Nefedov
Старый 28.08.2013, 08:39   #3  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от SRF Посмотреть сообщение
Используйте value2Symbol. Ведь вы по значению хотите определять. А то что index2Symbol не работает для такого случая, это вполне логично ведь 100 элемента нет, есть значение 100.
index2Symbol используется в системе(gls слой).. например на форме заполенения подписей в складских журналах. Править код gls?
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 28.08.2013, 08:50   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Murlin Посмотреть сообщение
Править код gls?
Вообще да, а что это делать запрещено? Не ошибается тот, кто ничего не делает.
И в 2012 в методах определения должностных лиц по складским журналам используется index2Symbol, тоже приходилось править.

Класс InventJournalPrintForm_RU метод run, в 2х местах (это dax2012)
X++:
...
        //dsName = dictEnum.index2Symbol(report.reportType());
        dsName = dictEnum.value2Symbol(report.reportType());
...
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: Murlin (1).
Старый 28.08.2013, 11:56   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Кажется в Колумбусе было даже правило, чтобы не задеть случаем какой сервис-пак, в стандартные енумы добавлять значения, начиная с 32 позиции. Так что используйте value2symbol() как Сергей сказал.
__________________
// no comments
Старый 28.08.2013, 12:05   #6  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от dech Посмотреть сообщение
Кажется в Колумбусе было даже правило, чтобы не задеть случаем какой сервис-пак, в стандартные енумы добавлять значения, начиная с 32 позиции. Так что используйте value2symbol() как Сергей сказал.
Не надо про коламбус... У меня больная тема. Теперь из за этого правила надо переписывать неизвестно сколько кода... Наверное при внесении сервис-паков было бы легче просто сравнивать enumы, переназначая значения там где необходимо.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 28.08.2013 в 12:11.
Старый 29.08.2013, 08:57   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
енумы иногда хранятся в табличных полях, так что с очередным SP пришлось бы данные перебивать, а это не так тривиально, как заменить вызов одного метода на другой.
Старый 29.08.2013, 09:22   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Murlin Посмотреть сообщение
Наверное при внесении сервис-паков было бы легче просто сравнивать enumы, переназначая значения там где необходимо.
И писать апгрейд скрипты
Старый 29.08.2013, 18:34   #9  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от belugin Посмотреть сообщение
И писать апгрейд скрипты
А какой смысл, все равно надо будет при занесении сравнивать те классы даже системные которые в принципе никакой модификации не подвергались при обычном ходе вещей.. Лучше уж и правда апгрейд скрипты написать... Или заносить новые энамы сравнением и назначением нового номера... Я чета не знаю где в системы бы вместо енама использовалось число.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 29.08.2013 в 18:38.
Старый 29.08.2013, 18:40   #10  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от gl00mie Посмотреть сообщение
енумы иногда хранятся в табличных полях, так что с очередным SP пришлось бы данные перебивать, а это не так тривиально, как заменить вызов одного метода на другой.
По всей системе? а факт того что в SP не будет использоваться этот же метод есть? Зачем это нужно? Усложнить жизнь человеку который будет вносить новые SP???
SP - или энам занести переназначив значение, или не переназначать но каждый раз учитывать те изменения которые внесены в классы или функции там во многих местах... а вдруг забудет занесет случайно... опять выискивать ошибку исправлять и тп.
Новый enum новое значение. Как то так... Его все равно не было.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 29.08.2013 в 18:50.
Старый 29.08.2013, 18:59   #11  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от belugin Посмотреть сообщение
И писать апгрейд скрипты
Хотя нет знаю relation на таблице...
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 29.08.2013, 19:53   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Хорошая у вас подпись. Верная
Старый 29.08.2013, 20:03   #13  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Хорошая у вас подпись. Верная
Наверное. Но вопрос открыт или кто то что то делает неправильно, или это баг требующий правки по всей системе. Просто поиском по AOT я нашел штук 10-20 вызовов этого метода. Все остальное про апгрейд скрипты несуществующих записей я не понял.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 29.08.2013, 20:30   #14  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от SRF Посмотреть сообщение
Используйте value2Symbol. Ведь вы по значению хотите определять. А то что index2Symbol не работает для такого случая, это вполне логично ведь 100 элемента нет, есть значение 100.
Это не баг, как было выше сказано. В тех местах, которые Вы нашли - необходимо убедиться, что в в качестве аргумента передается именно значение, а не номер по порядку в цикле, в котором перебираются все значения енума. Если передается значение - то это баг (причем только в этом месте, а не в ядре), если передается номер по порядку в цикле - то это не баг - это нормальное поведение работы в системе.

Что же касается апгрейд-скриптов - то речь идет о следующей ситуации:
имеем АХ сервис-пак N. В этом приложении имеется енум со значениями 1,2,3,4.
Выпускается сервис-пак N+1. В нем Микрософт добавил новое значение, допустим 5.
Но Вы в своей модификации тоже добавили значение 5. Возникает конфликт - т.к. в БД хранится число 5 и БД заведомо не знает - это 5 для функционала от Микрософта или 5 для функционала Вашего. Требуется выполнение некоторых действий (=написание апгрейд скриптов), которые "разведут" в Вашей БД число 5 от Микрософта и число 5 от Вашей модификации.

Поэтому было принято негласное соглашение. Микрософт добавляет номера енумов по порядку (1,2,3,4,5), а партнеры / клиенты - делают некоторый резерв по номерам и начинают нумеровать с 32-го, 100-го или еще какого-то большого номера.

К сожалению, в 2012-й эта практика была нарушена и уже внутри Микрософта появились вот такие вот "дырки" вида 1,2,3,4,100. Тем не менее - использование номеров енума не по порядку - есть нормальное явление, а номера енумов прописываются как было верно подмечено в БД и релейшнах. А местами еще (к сожалению) используются знаки сравнения "больше" и "меньше" применительно к значениям енумов.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 30.08.2013, 01:05   #15  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Murlin Посмотреть сообщение
Лучше уж и правда апгрейд скрипты написать...
Так ведь их мало написать (и по возможности обеспечить идемпотентность, что в данном случае непросто) - их ещё надо выполнить, а это гарантированный простой рабочей системы, если у вас база не игрушечная; не везде лишние простои приветствуются.
Цитата:
Сообщение от Murlin Посмотреть сообщение
Я чета не знаю где в системы бы вместо енама использовалось число.
В тех же сохраненных запросах пользвотели могут забить число вместо метки, а сохраненные запросы могут использоваться для пакетных заданий или отчетов; в кубах и вообще любой внешней системе, которая читает БД Аксапты напрямую, также используют числовые значения полей-енумов.
Старый 30.08.2013, 06:30   #16  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Это не баг, как было выше сказано. В тех местах, которые Вы нашли - необходимо убедиться, что в в качестве аргумента передается именно значение, а не номер по порядку в цикле, в котором перебираются все значения енума. Если передается значение - то это баг (причем только в этом месте, а не в ядре), если передается номер по порядку в цикле - то это не баг - это нормальное поведение работы в системе.

Что же касается апгрейд-скриптов - то речь идет о следующей ситуации:
имеем АХ сервис-пак N. В этом приложении имеется енум со значениями 1,2,3,4.
Выпускается сервис-пак N+1. В нем Микрософт добавил новое значение, допустим 5.
Но Вы в своей модификации тоже добавили значение 5. Возникает конфликт - т.к. в БД хранится число 5 и БД заведомо не знает - это 5 для функционала от Микрософта или 5 для функционала Вашего. Требуется выполнение некоторых действий (=написание апгрейд скриптов), которые "разведут" в Вашей БД число 5 от Микрософта и число 5 от Вашей модификации.
Допустим при переносе SP я вместо майкрософтовского 5 сделаю 6... Подниму на Usr слой с этим значением, после этого останется поправить только новые relationы(тем более что relation даже визуально проще найти ошибку)
Какие апгрейд скрипты, какие запросы какие RLS. Передается именно значение
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 30.08.2013 в 06:34.
Старый 30.08.2013, 06:33   #17  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
К сожалению, в 2012-й эта практика была нарушена и уже внутри Микрософта появились вот такие вот "дырки" вида 1,2,3,4,100. Тем не менее - использование номеров енума не по порядку - есть нормальное явление, а номера енумов прописываются как было верно подмечено в БД и релейшнах. А местами еще (к сожалению) используются знаки сравнения "больше" и "меньше" применительно к значениям енумов.
Так значит я выбрал 100 но 100 у меня уже где то используется в новом SP и поэтому при восстановлении очень старой БД(бэкапа) мне нужно будет что то с ней делать...
Выигрыша никакого не вижу совсем.
Но с другой стороны код вида, select a where a.b<C: && a.b>C::B
Работать не будет, но и зачем такой код нужен, по мойму и так и так будет скан таблицы, и с перечислением и без.
Зачем майкрософт пишет такой код?
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!

Последний раз редактировалось Murlin; 30.08.2013 в 06:53.
Старый 30.08.2013, 08:10   #18  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Murlin Посмотреть сообщение
Допустим при переносе SP я вместо майкрософтовского 5 сделаю 6... Подниму на Usr слой с этим значением, после этого останется поправить только новые relationы(тем более что relation даже визуально проще найти ошибку)
Какие апгрейд скрипты, какие запросы какие RLS. Передается именно значение
Вы сейчас рассуждаете только с одной стороны - со стороны программного кода.
Ну вот был у Вас SP N, Вы подготовили приложение (переделали все relation-ы) с SP N+1 (заменили все 5 на 6 и т.д.).
А теперь Вам надо обновить рабочую (!) БД. И очевидно, что в процессе обновления люди работать в рабочей системе не смогут. Вопрос: сколько по времени может длиться Ваше обновление? А если система работает в режиме 24х7? Если нет - то ночью могут запускаться какие-то тяжелые процессы каких-нибудь расчетов / пересчетов. И дело тут не в отдельно взятых енумах. Базу не начинают с нуля при обновлении сервис-пака.
Чтобы грамотно все обновить - нужно составить список таблиц и полей в них - где это значение (5) могло бы использоваться, чтобы его там перебить на новое значение (6).

Можно конечно остановить базу и начать искать. Но для сокращения времени простоя рабочей базы и пишутся скрипты по заранее составленному списку мест. Причем в зависимости от объема данных и скрипты могут выполняться далеко не мгновенно.

А как уже было сказано - эти места могут быть и завуалированы (например, в BLOB-поле, в котором хранится запакованный Query),

Т.е. еще раз повторюсь - проблема не столько в программном коде, который выгружается в XPO - сколько в обновлении данных и сокращении времени простоя рабочей БД.
__________________
Возможно сделать все. Вопрос времени
Старый 30.08.2013, 08:33   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Murlin Посмотреть сообщение
Допустим при переносе SP я вместо майкрософтовского 5 сделаю 6...
Обычно в случае конфликта системного кода и собственного меняют собственный, а не наоборот. Можно конечно и системный переопределить но ... остлеживание коллизий при каждом следующем обновлений, несовместимость с другими модификациями ...

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


Востанавливать на очень старую версию приложения.
А отслеживать вызовы index2Symbol??? Не тоже ли самое, не тяжелее. Код я не меняю я меняю только значение enum. Значение enum по мойму вообще не несет никакого смысла абсолютно
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отображение аналитик в гриде складских журналов. Баг? _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, время: 03:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.