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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.01.2007, 16:35   #1  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Всегда ли пользовательские поля добавляются в середину?
Пользователи постоянно присылают нам MS SQL базы со своими полями, которые добавлены случайным образом в середину существующих таблиц. Акзапта всегда добавляет поля в середину или существует какой-то трюк, позволяющий добавлять поля в конец?
Старый 04.01.2007, 17:51   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Пользователи постоянно присылают нам MS SQL...
Извините за вопрос, но спам задолбал вконец...
Кому это "нам"?
Что за пользователи рассылают базы?
Чьи базы присылают?
__________________
полезное на axForum, github, vk, coub.
Старый 04.01.2007, 17:55   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
По сути вопроса...
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Акзапта всегда добавляет поля в середину или существует какой-то трюк, позволяющий добавлять поля в конец?
Насколько я помню, Аксапта добавляет поля в конец.

Если новое поле записано, то его порядок изменить нельзя - Аксапта не делает Alter Table для изменения порядка полей в самой таблице.

Однако! Если у таблицы определен кластерный индекс и этот кластерный индекс содержит пользовательские поля, то синхронизация/rebuild может привести к тому, что порядок полей будет изменен.
__________________
полезное на axForum, github, vk, coub.
Старый 04.01.2007, 19:56   #4  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
А если пользовательские поля все-таки рассыпаны по SALESTABLE или там SALESLINE как горох, то что надо сказать клиенту, чтобы он смог добавлять поля именно в конец таблицы? Экстракты, написанные через SELECT * ломаются, хотя мы от них и избавляемся по мере возможности. Проблема в том, что эта возможность есть не всегда. Кажется, в Акзапте нет своих кластерных индексов, а клиенты наши новых не создают. Получается какая-то фигня, раз поля добавляются посредине.

Я не понял про спам, поясните если это важно.
Старый 09.01.2007, 18:48   #5  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Ну вот, очередной клиент прислал свою кастомизированную базу. Мало того, что новые поля рассыпаны по таблицам где попало, так и существующие поля изменили свое расположение примерно в 20% измененных таблиц. Есть даже таблицы, которые отличаются только положением 1-3х стандартных полей. Это Axapta 4.0.
Старый 09.01.2007, 19:35   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Экстракты, написанные через SELECT * ломаются
это, простите, проблема не Аксапты, а культуры разработки (или в данном случае - ее отсутствия)

учитывая, что от клиента к клиенту состав закупленных лицензий будет отличаться, а процедуру включения-отключения лицензионных ключей можно повторять многократно, на порядок следования столбцов в результатах запроса SELECT * FROM могут полагаться только законченные оптимисты
__________________
-ТСЯ или -ТЬСЯ ?
Старый 10.01.2007, 12:11   #7  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Пользователи постоянно присылают нам MS SQL базы со своими полями, которые добавлены случайным образом в середину существующих таблиц. Акзапта всегда добавляет поля в середину или существует какой-то трюк, позволяющий добавлять поля в конец?
Помоему Аксапата всегда выстраивает поля по значению Id, по убыванию. Таким образом при создании поля, оно добавляется в начало списка, а после перезапуска Аксапты выстраивается по Id поля (может есть другой способ но у меня работает только после перезапуска), т.е. помещятся по порядку создания т.к. даже если поле удалить новое Id будет продолжать максимальное значение в этой таблице.

Нарушение этой последовательности происходит при удалении и импорте таблицы заново. Если таблица переписывается то Id не меняется.

Тут есть еще такая загвоздка что если импорт экспорт идет без указания Id, то при экспорте поля записываются в XPO в той последовательности в которой они отображаются на текущий момент в Аксапте, а при импорте Id поля принимается по порядку начиная с 50001. Т.е. если Вы создадите новое поле в табличке, экспортируете ее, удалите и заново импортируете то Id будут заданы сизнова.

Таким образом можно выставить последовательность полей как это требуется и пересоздать табличку через импорт-удаление-экспорт.
Очевидно что бы не было проблем с положением полей нужно делать экспорт и импорт с Id.
В Сиквеле поля хранятся в такой же последовательности как и в Аксапте (т.е. по возрастанию Id поля)
Старый 10.01.2007, 12:22   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Подправьте в первом предложении, по возрастанию.
Старый 10.01.2007, 12:32   #9  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Подправьте в первом предложении, по возрастанию.
Упс именно так
Старый 10.01.2007, 13:08   #10  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Link
...
(может есть другой способ но у меня работает только после перезапуска)
...
По-моему, правой кнопкой мыши по названию таблицы и выбрать Восстановить должно вам помочь. Методы точно выстраивает по порядку (по алфавиту), а вот поля — не помню.
__________________
С уважением,
glibs®
Старый 11.01.2007, 00:25   #11  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Это вы ведете речь об объектах интерфейса АОС, а я о физических полях в базах.

Конечно было бы здорово, если бы вместо SELECT * везде использоваись вызовы интерфейсов или SELECT по списку полей, но не все в этом мире совершенно и существуют программы, написанные до нас.

Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет.
Старый 11.01.2007, 00:36   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Решения этой проблеме нет.
А какое решение вы считали бы решением этой проблемы?

Jab Straight, либо читайте матчасть про конфигурационные и лицензионные ключи...
Либо подумайте еще раз над сообщением Vadik.
__________________
полезное на axForum, github, vk, coub.
Старый 11.01.2007, 16:11   #13  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от glibs Посмотреть сообщение
По-моему, правой кнопкой мыши по названию таблицы и выбрать Восстановить должно вам помочь. Методы точно выстраивает по порядку (по алфавиту), а вот поля — не помню.
Да срабатывает как Вы говорите, спасибо!
Старый 11.01.2007, 17:50   #14  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
Это вы ведете речь об объектах интерфейса АОС, а я о физических полях в базах.
В Сиквеле поля хранятся в такой же последовательности как и в Аксапте (т.е. по возрастанию Id поля)

Цитата:
Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет.
Не понял как поля добавляются не средствами самой Аксапты я попробовал через Enterprise Manager но они просто не отображаются в Аксапте. Если же делать через Аксапту то не наблюдал вставку поля в середину при его добавлении.
Старый 11.01.2007, 18:03   #15  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Link Посмотреть сообщение
В Сиквеле поля хранятся в такой же последовательности как и в Аксапте (т.е. по возрастанию Id поля)
это не так
Вы обозревателем таблиц проверяете? если да - напрасно
__________________
-ТСЯ или -ТЬСЯ ?
Старый 11.01.2007, 18:18   #16  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Vadik Посмотреть сообщение
это не так
Вы обозревателем таблиц проверяете? если да - напрасно
Смотрел через Enterprise Manager. А как можно убедться что это не так?
Старый 15.01.2007, 11:10   #17  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Link Посмотреть сообщение
Смотрел через Enterprise Manager. А как можно убедться что это не так?
- Добавляем в произвольную таблицу два поля: Field1 и Field2
- Убеждаемся, что добавленные поля имеют идентификатор (colid в syscolumns или ordinal_position в INFORMATION_SCHEMA.COLUMNS) больше, чем RecId и DataAreaId. О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может.
- Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects
- Включаем его обратно

О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
__________________
-ТСЯ или -ТЬСЯ ?
Старый 15.01.2007, 16:03   #18  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Спасибо Vadik за ответ. Попробовал как Вы написали, получил :

Цитата:
Сообщение от Vadik Посмотреть сообщение
- Добавляем в произвольную таблицу два поля: Field1 и Field2
- Убеждаемся, что добавленные поля имеют идентификатор (colid в syscolumns или ordinal_position в INFORMATION_SCHEMA.COLUMNS) больше, чем RecId и DataAreaId.
Значения полученные из syscolumns:
name colid
FIELD1 1
FIELD2 2

И из view:
name ordinal_position
FIELD1 1
FIELD2 2

В Аксапте эти поля имеют такие Id:
FIELD1 5001
FIELD2 5002

Что я делаю не так?

Цитата:
О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может.
- Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects
- Включаем его обратно
Ничего не изменилось.

Цитата:
О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
Пробовал найти поиском неполучилось. Буду благодарен за ссылочку.
Старый 15.01.2007, 17:53   #19  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А когда вы со своей табличкой экспериментировали в ней данные были?

Axapta, если данных в таблице нет, просто пересоздает ее заново (drop table ..., create table ... ), выстраивая поля в ней в порядке FieldId. Если данные есть, то добавляет или удаляет столбцы (alter table ... add column ..., alter table ... drop column ...).
__________________
Axapta v.3.0 sp5 kr2
Старый 15.01.2007, 17:55   #20  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Нет только с пустой эксперментировал. Спасибо AndyD, попробую.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Лукап, содержащий поля нескольких таблиц matew DAX: Программирование 4 30.11.2006 16:02
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Недопустимая комбинация поля/поля ссылки Berty Wooster DAX: Программирование 2 29.05.2003 16:31

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

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

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