![]() |
#1 |
Участник
|
Всегда ли пользовательские поля добавляются в середину?
Пользователи постоянно присылают нам MS SQL базы со своими полями, которые добавлены случайным образом в середину существующих таблиц. Акзапта всегда добавляет поля в середину или существует какой-то трюк, позволяющий добавлять поля в конец?
|
|
![]() |
#2 |
Участник
|
Извините за вопрос, но спам задолбал вконец...
Кому это "нам"? Что за пользователи рассылают базы? Чьи базы присылают? |
|
![]() |
#3 |
Участник
|
По сути вопроса...
Цитата:
Если новое поле записано, то его порядок изменить нельзя - Аксапта не делает Alter Table для изменения порядка полей в самой таблице. Однако! Если у таблицы определен кластерный индекс и этот кластерный индекс содержит пользовательские поля, то синхронизация/rebuild может привести к тому, что порядок полей будет изменен. |
|
![]() |
#4 |
Участник
|
А если пользовательские поля все-таки рассыпаны по SALESTABLE или там SALESLINE как горох, то что надо сказать клиенту, чтобы он смог добавлять поля именно в конец таблицы? Экстракты, написанные через SELECT * ломаются, хотя мы от них и избавляемся по мере возможности. Проблема в том, что эта возможность есть не всегда. Кажется, в Акзапте нет своих кластерных индексов, а клиенты наши новых не создают. Получается какая-то фигня, раз поля добавляются посредине.
Я не понял про спам, поясните если это важно. |
|
![]() |
#5 |
Участник
|
Ну вот, очередной клиент прислал свою кастомизированную базу. Мало того, что новые поля рассыпаны по таблицам где попало, так и существующие поля изменили свое расположение примерно в 20% измененных таблиц. Есть даже таблицы, которые отличаются только положением 1-3х стандартных полей. Это Axapta 4.0.
|
|
![]() |
#6 |
Модератор
|
это, простите, проблема не Аксапты, а культуры разработки (или в данном случае - ее отсутствия)
учитывая, что от клиента к клиенту состав закупленных лицензий будет отличаться, а процедуру включения-отключения лицензионных ключей можно повторять многократно, на порядок следования столбцов в результатах запроса SELECT * FROM могут полагаться только законченные оптимисты
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#7 |
Британский учённый
|
Цитата:
Нарушение этой последовательности происходит при удалении и импорте таблицы заново. Если таблица переписывается то Id не меняется. Тут есть еще такая загвоздка что если импорт экспорт идет без указания Id, то при экспорте поля записываются в XPO в той последовательности в которой они отображаются на текущий момент в Аксапте, а при импорте Id поля принимается по порядку начиная с 50001. Т.е. если Вы создадите новое поле в табличке, экспортируете ее, удалите и заново импортируете то Id будут заданы сизнова. Таким образом можно выставить последовательность полей как это требуется и пересоздать табличку через импорт-удаление-экспорт. Очевидно что бы не было проблем с положением полей нужно делать экспорт и импорт с Id. В Сиквеле поля хранятся в такой же последовательности как и в Аксапте (т.е. по возрастанию Id поля) |
|
![]() |
#8 |
Участник
|
Подправьте в первом предложении, по возрастанию.
![]() |
|
![]() |
#9 |
Британский учённый
|
|
|
![]() |
#10 |
Member
|
Цитата:
Сообщение от Link
...
(может есть другой способ но у меня работает только после перезапуска) ...
__________________
С уважением, glibs® |
|
![]() |
#11 |
Участник
|
Это вы ведете речь об объектах интерфейса АОС, а я о физических полях в базах.
Конечно было бы здорово, если бы вместо SELECT * везде использоваись вызовы интерфейсов или SELECT по списку полей, но не все в этом мире совершенно и существуют программы, написанные до нас. Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет. |
|
![]() |
#12 |
Участник
|
А какое решение вы считали бы решением этой проблемы?
Jab Straight, либо читайте матчасть про конфигурационные и лицензионные ключи... Либо подумайте еще раз над сообщением Vadik. |
|
![]() |
#13 |
Британский учённый
|
|
|
![]() |
#14 |
Британский учённый
|
Цитата:
Цитата:
Похоже вырисовывается такая картина: если поля добавляются через SQL и делаются доступными в Акзапте, то они добавляются в конец. Если же их добавляют через Enterprise Manager или в самой Акзапте, то их размазывает по таблице. Решения этой проблеме нет.
|
|
![]() |
#15 |
Модератор
|
Цитата:
Вы обозревателем таблиц проверяете? если да - напрасно
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#16 |
Британский учённый
|
|
|
![]() |
#17 |
Модератор
|
- Добавляем в произвольную таблицу два поля: Field1 и Field2
- Убеждаемся, что добавленные поля имеют идентификатор (colid в syscolumns или ordinal_position в INFORMATION_SCHEMA.COLUMNS) больше, чем RecId и DataAreaId. О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может. - Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects - Включаем его обратно О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#18 |
Британский учённый
|
Спасибо Vadik за ответ. Попробовал как Вы написали, получил :
Цитата:
name colid FIELD1 1 FIELD2 2 И из view: name ordinal_position FIELD1 1 FIELD2 2 В Аксапте эти поля имеют такие Id: FIELD1 5001 FIELD2 5002 Что я делаю не так? Цитата:
О порядке вывода полей в порядке, определяемом аксаптовским FieldId речи уже быть не может.
- Отключаем Field1, присвоив ему конфигурационный ключ SysDeletedObjects - Включаем его обратно Цитата:
О разных лицензиях в "клиентских базах" (и разной структуре таблиц) уже отписал раньше
|
|
![]() |
#19 |
Участник
|
А когда вы со своей табличкой экспериментировали в ней данные были?
Axapta, если данных в таблице нет, просто пересоздает ее заново (drop table ..., create table ... ), выстраивая поля в ней в порядке FieldId. Если данные есть, то добавляет или удаляет столбцы (alter table ... add column ..., alter table ... drop column ...).
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#20 |
Британский учённый
|
Нет только с пустой эксперментировал. Спасибо AndyD, попробую.
|
|