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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2001, 21:09   #1  
sguryev is offline
sguryev
Участник
 
24 / 13 (1) ++
Регистрация: 07.12.2001
Адрес: Сергиев Посад
? Автоматическое увеличение индекса
X++:
   ,         InitValue   .

public void initValue()
{
    HB_Tutorial_Company company;

    super();

    select maxof(ID) from company;
    this.ID = company.ID + 1;

}
При этом если несколько раз подряд (без каких либо промежуточных действий) создать новую запись (Ctrl+N несколько раз) возникает несколько идентичных записей и счетчик в них не увеличиваеться. Как этого избежать?
__________________
Гурьев Сергей
Старый 07.12.2001, 22:34   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
RE: Автоматическое увеличение индекса
Дело в том, что когда ты вставляешь новую запись используя стандартные функции, вызывается только метод initValue. Метод insert, вставляющий запись в таблицу физически (а не в буфер), не вызывается.

Попробуй вставить insert в initValue, но это может привести к дополнительным проблемам. Например, запись может не вставится, т. к. заполнены не все необходимые поля (такими являются поля со свойством Mandatory и поля, включенные в индексы).

А вообще, лучше не вставляй вторую запись, пока полностью не заполнил первую
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 10.12.2001, 07:12   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Для таких вещей предусмотрены нумераторы (номерные серии, NumberSequence).
Пользуйте их и не изобретайте велосипед.
__________________
полезное на axForum, github, vk, coub.
Старый 10.12.2001, 13:00   #4  
Роман Кошелев is offline
Роман Кошелев
Продавец игрушек
Аватар для Роман Кошелев
 
433 / 73 (3) ++++
Регистрация: 22.11.2001
Адрес: Москва
?
Сергей, хотелось бы узнать подробнее о NumberSequence, но не смог найти где.
Может вкратце расскажешь?
__________________
С уважением, Роман Кошелев.
Старый 10.12.2001, 23:19   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1. В презентациях с форума DBD 2000. Презентации идут на партнерском диске.
2. В Best Practice - Number sequence framework. Очень коротко
3. Чуть-чуть есть в техничекой информации
__________________
полезное на axForum, github, vk, coub.
Старый 11.12.2001, 01:40   #6  
sguryev is offline
sguryev
Участник
 
24 / 13 (1) ++
Регистрация: 07.12.2001
Адрес: Сергиев Посад
Lightbulb
Цитата:
Иногда требуется, чтобы значение, какого либо поля увеличивалось автоматически, например поле индекса, при вставке новой записи в таблицу, например в Grid control нажатием Ctrl+N. Так вот как это сделать…

Необходимо переопределить метод InitValue у таблицы, к которой хотелось бы добавить эту функциональность, следующим образом:

public void initValue()
{
HB_Tutorial_Company company;

super();

select maxof(ID) from company;
this.ID = company.ID + 1;
this.insert();
}
В данном случае эта функциональность добавляется к таблице HB_Tutorial_Company. Новый индекс будет равен максимальному существующему индексу в таблице, увеличенному на единицу. В принципе можно ставить и другие более сложные условия создания нового индекса. Если не добавлять в конце this.insert(), то при многократном создании записи, например при нажатии Ctrl+N несколько раз подряд, будут создаваться идентичные записи и индекс не будет увеличиваться.

Все бы хорошо, но при работе с другой таблицей HB_Tutorial_Employee, одно поле которой (CompanyID) связано (by relation) с полем HB_Tutorial_Company.ID, возникла следующая проблема. Была создана форма для отображения компаний и их сотрудников, при выборе в одном Grid control компании во втором выводились ее сотрудники, т.е. два Data Source и у того который относится к HB_Tutorial_Employee стоит joint source:HB_Tutorial_Company. К HB_Tutorial_Employee также была добавлена функция автоматического увеличения индекса. Так вот в чем проблема при вставке нескольких записей подряд проблем не возникает, но при вставке одной и тут же ее редактировании, даже просто понажимав enter, CompanyID правильно заполненный автоматом (ID текущей компании) сбрасывается в 0 или любое другое значение, если это поле проинициализировать в InitValue до инсерта. К счастью этого можно избежать, перенеся insert в метод InitValue Data Source’a относящегося к данной таблице.

X++:
public void initValue()
{
    HB_Tutorial_Employee employeeCurrent = this.cursor();
    HB_Tutorial_Employee employee;

    super();

    select maxof(EmployeeID) from employee;
    employeeCurrent.EmployeeCurrent = employee.EmployeeID + 1;

    employeeCurrent.insert();
}
В таком виде все отлично работает, но не является функциональностью таблицы, а лишь функциональностью формы.
__________________
Гурьев Сергей
Старый 01.07.2004, 21:23   #7  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Цитата:
А вообще, лучше не вставляй вторую запись, пока полностью не заполнил первую
А как запретить добавление в грид записи, если не заполнена предыдущая?
Старый 02.07.2004, 05:50   #8  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
сделать какое нить поле обязательным для заполнения

P.S. вот судя по шквалу вопросов вы яростно взялись программировать. Вы уверены что это вам нужно? Рекомендации лучших аксаптоведов гласят что "НЕ НУЖНО ПРОГРАММИРОВАТЬ". Подумайте над этим
__________________
И все они создания природы...
Старый 02.07.2004, 14:23   #9  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Спасибо!
Теги
номерная серия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как формируется в Axapta название табличного индекса для СУБД? dn DAX: База знаний и проекты 4 09.10.2007 16:21
Автоматическое резервирование: на тропе войны aevi82 DAX: Функционал 11 29.08.2007 16:35
Волшебное превращение неуникального индекса... IPv6 DAX: База знаний и проекты 4 10.01.2007 16:46
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00
Отображение связных таблиц. Сплиттер. Автоувеличение индекса. Delete Action. sguryev DAX: База знаний и проекты 0 14.12.2001 06:15

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:44.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.