![]() |
#1 |
Участник
|
Стандартный импорт данных. Обновление
Добрый вечер, коллеги.
Задался вопросом как можно обнвлять записи в таблице при стандартном импорте данных(Администрирование/Период. операции/Экспорт Импорт данных). Судя по функционалу обновление возможно только для групп определений с типом "Стандарт". Там при импорте в диалоге можно выбрать из 3х значений параметр обновления. А вот в группах определения Ексель и Произвольная нигде не нашел никакого параметра похожего ![]() ![]() Что больше всего смутило, так это то что вот здесь: 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; } А далее результат этого метода анализируется след.образом: 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 В итоге система пытается вставить записи и тут же естесственно ругается на то что такая запись уже есть!!! В итоге я вообщем не вижу реализованной возможности импорта данных с обновлением ![]() Поправьте меня если я не прав... И стоит ли подкручивать механизм импорта дабы он давал возможность обновления |
|
|
![]() |
||||
Тема | Ответов | |||
Стандартный импорт данных... | 0 | |||
Тормозит Экспорт/Импорт данных | 28 | |||
Импорт данных из ODBC источника | 4 | |||
Импорт на данных из 2.5 в 3.0 | 14 | |||
Импорт данных | 2 |
|