Цитата:
Сообщение от
kia
Хочется обойтись средствами самой АХ. Будем считать что нет доступа к БД.
Для АХ 4.0 :
1. Заходим в АХ монопольно.
2. Создаем класс, запускаемый на сервере.
3. Создаем в нем метод main и вносим в него имя нужной таблицы :
X++:
#define.TableName("MyTable")
public static void main(Args _args)
{
Connection con;
Statement stmt;
SqlStatementExecutePermission ssep;
SqlDictionary sqlDictionary;
str sqlStr;
int result;
;
con = new Connection();
stmt = con.createStatement();
select firstonly sqlDictionary where sqlDictionary.TabId == tablenum(#TableName) && !sqlDictionary.fieldId;
if (sqlDictionary)
{
ttsbegin;
sqlStr = "UPDATE SystemSequences \n";
sqlStr += "SET NextVal = (SELECT MAX(RecID) FROM " + sqlDictionary.sqlName + " WITH (TABLOCK)) + 1 \n";
sqlStr += "WHERE DataAreaId = 'dat' AND Id = -1 AND TabId = " + int642str(tablenum(#TableName)) + " \n";
ssep = new SqlStatementExecutePermission(sqlStr);
ssep.assert();
result = stmt.executeUpdate(sqlStr);
CodeAccessPermission::revertAssert();
ttscommit;
}
}
4. Запускаем класс
5. Перезапускаем АОС.
6. Проверяем на всякий случай присвоение нового RecId с помощью вставки строки.
PS. Если нет уверенности, то сначала "тренируемся на кошках"