Цитата:
Сообщение от
kashperuk
Ну, приближенно можно посчитать с помощью метода fieldSize() на SysDictField:
X++:
static void Job2(Args _args)
{
SysDictTable dictTable = SysDictTable::newName(tableStr(InventTable));
SysDictField dictField;
Counter fieldCnt;
int recordSize;
;
for (fieldCnt = 1; fieldCnt <= dictTable.fieldCnt(); fieldCnt++)
{
dictField = SysDictField::newName(dictTable.name(), dictTable.fieldName(dictTable.fieldCnt2Id(fieldCnt)));
recordSize += dictField.fieldSize();
}
info(int2str(recordSize));
}
p.s. надо конечно учитывать все типы и array поля и т.д.
плюс служебную информацию заголовка сообщения при передаче по сети.
Вообще конечно, есть аналогичный метод на
SysDictTable - recordSize - делает все то, что в
job'е, только вот сильно приближенный результат получается
Например,
fieldSize считает, что поля типа
Enum занимают
1 байт, а в реальности все
4 (
DAX 4.0 MS SQL 2005)
X++:
case Types::Enum:
size = 1;
break;
Для типа
Date и
DateTime - считает, что всего используется по 4 байта
X++:
case Types::Date:
case Types::DateTime:
case Types::Integer:
size = 4;
break;
Но на самом деле там все
8 (в смысле на MS SQL Server)
Так, что я бы с осторожностью считал размер записи данным способом
Кстати, еще есть размер записи в таблице трассировки SQL операторов
Администирование\Запросы\База данных\Журнал трассировки операторов SQL, вкладка Разное, только не понятно, насколько этот параметр соотвествует действительности и пронаблюдать его значение можно, только в случае есть SQL оператор попал в трассировку (но все таки этому параметру я доверяю больше, чем
SysDictTable\recordSize)
P.S. Не видел предыдущего сообщения когда писал