Понадобилась возможность работать с номерными сериями из кода прогораммы, а именно - я програмно создаю новую закупку, при этом в соответствии с настроенной номерной серией ей должен присваиваться 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,'#', 1, strlen(mask));
tmpPurchId = substr(mask,1,ps-1) + strrep('0',strlen(mask)-ps-2) + int2str(_numberSequenceTable.NextRec);
// в) Увеличиваю счетчик в номерной серии
_numberSequenceTable.NextRec++;
_numberSequenceTable.update();
//----------------------------------------------------------------------------------------------------
oldTbl.PurchId = tmpPurchId;
// ....................................................
Не уверен, что делаю правильно, так как:
- пункт б) выглядит коряво. Наверное есть класси метод, который делает то же самое, но в общем случае, но я его не нашел.
- пункт в) - интуиция подсказывает мне, что должен быть метод, возвращающий очередной номер серии и увеличивающий его на единицу. Причем все это в одной транзакции. Конечно это могу делать и я, причем в транзакции, но неужели такого метода действительно нет ,