Показать сообщение отдельно
Старый 03.06.2002, 09:44   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Работа с номерными сериями.
Понадобилась возможность работать с номерными сериями из кода прогораммы, а именно - я програмно создаю новую закупку, при этом в соответствии с настроенной номерной серией ей должен присваиваться Id.

В результате экспериментов, я дошел до такого варианта:

PHP код:
    NumberSequenceReference _numberSecuenceReference;
    
NumberSequenceTable _numberSequenceTable;
    
PurchId    tmpPurchId;
    
PurchTable oldTbl;
    
str mask;
    
int ps;
    ;

    
super();


// ....................................................

//  a) Получаю новый номер закупки
    
_numberSecuenceReference purchParameters::numRefPurchId();
    
_numberSequenceTable NumberSequenceTable::find(_numberSecuenceReference.NumberSequence,true);

//  б) Составляю Id
    
mask _numberSequenceTable.Mask;
    
ps strscan(mask,'#'1strlen(mask));
    
tmpPurchId substr(mask,1,ps-1) + strrep('0',strlen(mask)-ps-2) + int2str(_numberSequenceTable.NextRec);

//  в) Увеличиваю счетчик в номерной серии
    
_numberSequenceTable.NextRec++;
    
_numberSequenceTable.update();

//----------------------------------------------------------------------------------------------------

    
oldTbl.PurchId tmpPurchId;
// .................................................... 
Не уверен, что делаю правильно, так как:

- пункт б) выглядит коряво. Наверное есть класси метод, который делает то же самое, но в общем случае, но я его не нашел.

- пункт в) - интуиция подсказывает мне, что должен быть метод, возвращающий очередной номер серии и увеличивающий его на единицу. Причем все это в одной транзакции. Конечно это могу делать и я, причем в транзакции, но неужели такого метода действительно нет ,