Добрый вечер, коллеги.
Задался вопросом как можно обнвлять записи в таблице при стандартном импорте данных(Администрирование/Период. операции/Экспорт Импорт данных).
Судя по функционалу обновление возможно только для групп определений с типом "Стандарт". Там при импорте в диалоге можно выбрать из 3х значений параметр обновления.
А вот в группах определения Ексель и Произвольная нигде не нашел никакого параметра похожего
![Frown](/forums/images/smilies/frown.gif)
при нажатии на кнопу импорт начинается сразу импортирование данных без всяких доп. диалогов. На форме настройка таблиц тоже ничего похожего не обнаружил
![Frown](/forums/images/smilies/frown.gif)
Как же быть...
Что больше всего смутило, так это то что вот здесь:
http://axapta.mazzy.ru/lib/import/
написано как раз что возможен импорт данных с обновлением.
вот кусок из статьи, описывающий импорт из txt:
Возможности импорта из текстового файла
Возможно позиционное определение полей или определение с помощью разделителя;
Импорт записывает информацию о каждой импортированной и неимпортированной записи в лог;
Можно создать произвольные функции проверки, фильтрации и преобразования импортируемых данных на языке X++;
Можно создать произвольные функции проверки и преобразования данных для каждого поля на языке X++;
Непосредственно в определении импорта можно указать начальные значения для каждого поля;
Для каждого поля можно указать символы к удалению, а также префикс и суффикс, которые будут удалены из текстовых данных перед записью в таблицу;
Перед импортом можно автоматически удалить все записи, существующие в таблице;
Можно указать поле, которое является идентификатором. В этом случае импорт будет не добавлять, а изменять записи.
думал что вот она - панацея...Однако ж как выяснилось что не совсем она, или возможно одного этого недостаточно...
Вообщем, по поводу этого поля уникального на форме настройки таблиц...
1) Оно возможно поможет только если:
а) на таблице есть действительно уникальное поле
б) это уникальное поле есть в файле импорта.
А если на таблице составной индекс, то как здесь быть?
2) Посмотрел код метода validateRecord() на классе SysDataImportDefBase, который собственно делает проверку этого волшебного поля:
X++:
boolean validateRecord(
SysExpImpTable _expImpTable,
DictTable _dictTable,
Common _common
)
{
fieldId primaryKeyId;
Common primaryTableCopy;
primaryKeyId = _expImpTable.PrimaryKeyId;
if (primaryKeyId)
{
// This to declare it as the same table as common
primaryTableCopy = _dictTable.makeRecord();
select firstonly RecId from primaryTableCopy
where primaryTableCopy.(primaryKeyId) == _common.(primaryKeyId);
}
if (primaryTableCopy)
return false;
return true;
}
метод вернет 0 всякий раз когда найдет запись по этому ключу.
А далее результат этого метода анализируется след.образом:
X++:
if (this.canImportRecord(_expImpTable,dictTable,common,line))
validateRecord()
{
if (this.importData(common,_expImpTable.ValidationLevel,dictTable))
{
anyImported = true;
}
else
{
this.logNotOk(line);
}
}
else
{
this.logNotOk(line);
}
то есть ни фига ничего не импортируется и не обновляется...
более того, в метод importData() передается всего 3 параметра, а 4ый (
отвечающий за тип обработки: вставка/обновление) берется по дефаулту = false
В итоге система пытается вставить записи и тут же естесственно ругается на то что такая запись уже есть!!!
В итоге я вообщем не вижу реализованной возможности импорта данных с обновлением
![Frown](/forums/images/smilies/frown.gif)
Поправьте меня если я не прав... И стоит ли подкручивать механизм импорта дабы он давал возможность обновления