Попробуйте такую обработку. Меняет значения по любому EDT
X++:
//обработка заменяет значения полей в полях таблиц, имеющих определенный расширенный тип.
static void changeValueByEDTId()
{
str oldValue = "сан1";
str newValue = "сан2";
Dictionary dictionary = new Dictionary();
DictTable dictTable;
DictField dictField;
counter counter;
int i, j;
#define.EDT_Id(1564) //в скобках указан идентификатор расширенного типа InventDimId, возможно у Вас он другой.
void update(TableId _tableId, FieldId _fieldId)
{
Query q = new Query();
QueryBuildDataSource qbds;
QueryRun qr;
Common common;
;
qbds = q.addDataSource(_tableId);
qbds.update(true);
qbds.addRange(_fieldId).value(strfmt('\"%1\"', oldValue));
qr = new QueryRun(q);
while (qr.next())
{
common = qr.getNo(1);
common.(_fieldId) = newValue;
common.doUpdate();
counter++;
}
}
;
ttsbegin;
for (i = 1; i <= dictionary.tableCnt(); i++)
{
dictTable = new DictTable(dictionary.tableCnt2Id(i));
if (!dictTable.isTmp() && !dictTable.isSystemTable() && !dictTable.isView() && !dictTable.isMap())
{
for (j = 1; j <= dictTable.fieldCnt(); j++)
{
dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(j));
if (dictField.typeId() == #EDT_Id)
{
counter = 0;
update(dictTable.id(), dictField.id());
if (counter)
info(strfmt("Обработана таблица %1 поле %2 <%3> записей", dictTable.name(), dictField.name(), counter));
}
}
}
}
ttscommit;
info(strfmt('Проведена замена значения %1 на %2', oldValue, newValue));
}