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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2004, 09:34   #1  
mikma is offline
mikma
Участник
 
22 / 10 (1) +
Регистрация: 01.07.2004
Адрес: Москва
Автонумерация
Не подскажите как создать програмно атонумерацию произвольного поля
Старый 05.08.2004, 09:57   #2  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Аналога identity ( MS SQL ) или автоинкрементного поля, как в Access, в Аксапте нет.
Но есть последовательности, которые называются сериями документов (Основное->Настройки->Серии документов) . Их и можно использовать.
1) Создайте новую последовательность (к примеру Seq1)
2) На закладке "разное" поставьте флажок "непрерывная"
3) Перекройте метод insert() таблицы, для которой делаете счетчик


Я делала так:

PHP код:
public void insert() {
  
NumberSeq MyNewId;
  
ttsbegin;
     
MyNewId NumberSeq::newGetNumFromCode("Seq1");
      
this.BodyId MyNewId.num();
      
super();
  
ttscommit;

P.S. На форуме есть еще примеры по этому поводу, поищите.
Старый 05.08.2004, 10:07   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
все так.

только если вы ставите галочку "непрерывная", то кода должно быть больше.
для начала не ставьте эту галочку. и все будет пучком.
Старый 05.08.2004, 10:12   #4  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
все правильно, но по хорошему нужно бы еще:
- увидеть эту серию в форме "Основное-Настройки-Серии документов-ссылки"
- брать таки имя серии из параметров соответствующего модуля, а не прописывать его в коде

Сумеете?
__________________
И все они создания природы...
Старый 05.08.2004, 10:35   #5  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
В Best Practices есть раздел, в котором достаточно подробно описано, как сделать новую номерную серию по всем правилам Аксапты. Попробуйте поискать по ключевым словам "Number sequence".
Старый 05.08.2004, 10:47   #6  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
В ближайшее время постараюсь улучшить свой код, касающийся серий документов.
А пока просто нет времени на рефакторинг =((
Старый 05.08.2004, 16:07   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ATimTim, может напишете статью или пошаговую инструкцию?
С удовольствием размещу у себя на сайте или здесь.
Старый 05.08.2004, 18:39   #8  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
2mazzy
Могу, но только в том объеме, в котором изложил. Т.е. пока без ссылок
Давайте, я вышлю набросок инструкции на Ваш электронный адрес, а Вы посмотрите и решите размещать ли на сайте или нет,Ok ?
Старый 10.08.2004, 17:56   #9  
mikma is offline
mikma
Участник
 
22 / 10 (1) +
Регистрация: 01.07.2004
Адрес: Москва
Автонумерация
Огромное спасибо за ответ.

Однако после советов доброжелателей, в предлагаемом коде
X++ code:--------------------------------------------------------------------------------
public void insert() {
NumberSeq MyNewId;
ttsbegin;
MyNewId = NumberSeq::newGetNumFromCode("Seq1");
this.BodyId = MyNewId.num();
super();
ttscommit;
}--------------------------------------------------------------------------------

были внесены некоторые изменения

MyNewId =NumberSeq::newGetNum(NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(MyEDT))));

Правда при этом был создан

ExtendedDataType MyEDT

который соответствует полю (которое я собрался нумеровать)
А так же внесены изменения в класс соответствующий необходимому модулю

public class NumberSeqReference_название_модуля extends numberSeqReference
{

}
в методе (правда если вы заглянете в любой из соответсвующих классов там все эти изменения описаны)

loadModule()
{
numRef.dataTypeId = typeId2ExtendedTypeId(typeid(MyEDT));
numRef.configurationKeyId = configurationKeyNum(ledgerBasic);
numRef.referenceHelp = literalStr("текст");
numRef.wizardContinuous = true;
numRef.wizardManual = NoYes::No;
numRef.wizardAllowChangeDown = NoYes::No;
numRef.wizardAllowChangeUp = NoYes::No;
numRef.wizardHighest = 999999;
numRef.sortField = 1;

this.create(numRef);
}

Не знаю на сколько я был прав. Но думаю что такое решение тоже имеет право на жизнь, каким бы оно громозким не казалось бы.
Теги
номерная серия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Gustav: Unsorted, или Записки DAX-дилетанта - II Gustav DAX Blogs 39 20.05.2009 15:34
Автонумерация инвентарных номеров $_kiyra_$ DAX: Функционал 5 26.03.2007 17:54
Автонумерация vitart DAX: Функционал 3 25.03.2003 12:00

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

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

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