30.07.2008, 19:11 | #1 |
Участник
|
Ax 3.0 выравнивание влево
Коллеги поделитесь информацией как безболезненно перевести базу с правого выравнивания строковых полей на левое.
Мы попробовали стандартный способ, тот который идет в поставке с Ax 4.0 - 5.0 в файле PrivateProject_LeftJustified.xpo Но есть непонятки. Указанный скрипт, выдает к базе данных запросы которые применяют к полям операцию ltrim и меняет выравнивание в АОТ на расширенных типах и полях таблиц. При этом не меняется свойство rightJustify в таблице SqlDictionary Это приводит к тому, что при следующей синхронизации ядро аксапты генерит запросы вида Select From Insert Into ... Ltrim() ... т.е. делает то же самое что и PrivateProject_LeftJustified.xpo более тяжелым для БД способом. Что это ? недоработка программистов ? Или так и нужно и нельзя пропускать запросы, которые напрямую к БД генерит скрипт? Мне кажется что правильный скрипт по переводу на левое выравнивание должен еще и сбрасывать флажок rightJustify в SqlDictionary - чтобы не было проблем с последующей синхронизацией. |
|
30.07.2008, 19:22 | #2 |
Участник
|
Цитата:
Правильно и безболезненно можно так - в Аксапте изменить свойство выравнивание у типа num, сохранить изменения. Запустится одна большая транзакция с блокировкой схемы данных. В этот момент transaction log может вырасти до размеров самой базы. Работающих пользователей в этот момент лучше выгнать поскольку с огромной вероятностью работающие пользователи дадут deadlock. Тип num является базовым для большинства кодов в Аксапте. Изменение выравнивания в базовом типе приведет к изменению выравнивания очень многих типов (см. иерархию объектов, начиная с num). После изменения num, стоит поискать среди типов свойство Align со значением Right при помощи стандартного поиска. В стандартном приложении останется с десяток типов (среди них коды журналов), которые также перещелкнуть влево. См. также http://axapta.mazzy.ru/lib/adjustment/ и примечания внизу. |
|
|
За это сообщение автора поблагодарили: Logger (2). |
30.07.2008, 19:27 | #3 |
Участник
|
Цитата:
Я так понимаю что скрипт был сделан для того чтобы можно было перейти на Ax 4.0 - 5.0 Но ведь они тоже используют информацию из SQLDictionary и в контрольном списке обновления для них есть пункт Синхронизация. Так что даже если старое приложение не работает, проблема остается. Единственное возможное решение - то что процедура обновления Ax 4.0 принудительно меняет свойства в SQLDictionary. Но проверить так это или нет я сейчас не могу. |
|
30.07.2008, 19:30 | #4 |
Участник
|
Я думаю что скрипт скорее всего кривой. Забыли про SQLDictionary
Он не делает запросы select from Insert Into, а просто обновляет записи в таблицах. По идее это должно работать быстрее - меньше нагрузка на БД. |
|
30.07.2008, 19:43 | #5 |
Участник
|
Пардон, поспешил - ядро тоже генерит запросы вида Update... ltrim
Никаких Select from Insert into в нем нет. Так что скрипт получается нафиг не нужен. |
|
30.07.2008, 19:52 | #6 |
Участник
|
Угу.
Я промолчу про разработчиков, которые зачастую Аксапты не знают. Хотя очень хочется что-нибудь гадкое сказать |
|
31.07.2008, 09:03 | #7 |
Administrator
|
Скрипт нужен. Но только для обновления. Дело в том, что согласно процедуре обновления после выполнения скрипта на старой БД - необходимо запустить файл AxDbUpgrade.exe - код которого скрыт в EXE-шнике. По своему опыту скажу - что этот EXE-шник в основном только что и делает - как переливает таблицы из одной БД в другую. Т.е. тупо CREATE TABLE ..., INSERT INTO ... Нюанс состоит в том, что он делает не только переливание. Он еще правит SQLDictionary и еще делает ряд отметок. Что конкретно - не изучал - но то что он делает еще что-то - с этим сталкивался.
Зачем разработчики в MS сделали именно так? Не знаю. Пусть это останется на их совести. Нам лишь нужно знать, как выполнять процедуру обновления и что этот скрипт LeftJustify больше применять нигде нельзя кроме как при обновлении. Кстати - еще один момент - о котором забыли разработчики этого скрипта. Декларировав, что в 4-ке (я говорю о переходе 3->4) нет типов с выравниванием вправо разработчики "забыли" о российских модулях (Зарплата и Кадры, ОСы). Там ничего не поменялось. В связи с этим этот скрипт пришлось дописывать, чтобы исключить выравнивание влево типов данных из российских модулей.
__________________
Возможно сделать все. Вопрос времени |
|
31.07.2008, 12:02 | #8 |
Member
|
Цитата:
Сообщение от sukhanchik
...
В связи с этим этот скрипт пришлось дописывать, чтобы исключить выравнивание влево типов данных из российских модулей. ...
__________________
С уважением, glibs® |
|
31.07.2008, 14:34 | #9 |
Administrator
|
В идеологии буржуйского МС - да. Но как раз лучше ничего не трогать. Ибо нечего делать работу за сотрудников российского МСа. Они же все равно рано или поздно эту работу проделают. А если проделают - то сами же будем мучаться - удалять код из слоя из приложения. Если не проделают - значит и нам трудиться не надо. Нам - пользователям системы - какая фиг разница куда все выровнено?
__________________
Возможно сделать все. Вопрос времени |
|
31.07.2008, 14:42 | #10 |
Member
|
Цитата:
Сообщение от sukhanchik
...
Нам - пользователям системы - какая фиг разница куда все выровнено? ... Насчет не трогать... да, действительно. Есть места. В кассе, например, строковые типы сравниваются на "<", ">" (больше или меньше).
__________________
С уважением, glibs® |
|
Теги |
ax2009, ax3.0, ax4.0 |
|
|