05.12.2007, 15:39 | #1 |
Участник
|
Как проверить целостность данных
Задача: Нужно перенести настройки в новую компанию из уже работающей компании.
Я создала группу отпределения, в которую внесла все таблицы по моему мнению являющиеся настроечными, но разумеется выплыли ошибки, что в группу определения попали таблички, которые должны будут заполнятся в новой компании (несколько косвенно ссылавшихся на план счетов, а он будет новый). Содержимое нескольких подобных таблиц я вычистила. НО остались таблицы, который ссылались на неимпортированные таблицы. Вопрос: Есть ли какие-то средства осуществить проверку ссылочной целостности и вычислить мне те таблицы, которые тоже нужно грохнуть? |
|
05.12.2007, 16:47 | #2 |
Злыдни
|
А разве при выгрузке и загрузке в двоичном формате что-то проверяется?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
05.12.2007, 17:07 | #3 |
Участник
|
Проверяется.
Ссылки по RecId проверяются. Если не находит ссылку, то ругается при импорте, но импорт все равно проходит. |
|
06.12.2007, 06:10 | #4 |
Участник
|
Меня интересует, а есть ли проверка не по RecId, их я могу выверить, это ладно.
А вот именно ситуации, например таблица RpayHRMOrganization у неё есть поля CorrAccount и CorrAccount_Tax которые ссылаются на таблицу LedgerTable. Так вот можно ли проверить, есть ли такая запись в LedgerTable? Или никто такой задачей никогда не озадачивался? |
|
06.12.2007, 11:49 | #5 |
Участник
|
Есть стандартный механизм проверки целостности данных компании (класс SysConsistencyCheck). Для многих модулей есть проверки, реализованные с его помощью, но даже если для интересующих вас таблиц таких проверок нет, их легко приделать самостоятельно. Метод SysConsistencyCheck.kernelCheckTable() для всех полей каждой записи проверяемой таблицы вызывает метод validateField(), который в общем случае (если он не перекрыт на таблице) проверяет содержимое поля на основе relation'ов таблицы и EDT этого поля. Соотв., к примеру, если у EDT для указанных полей RpayHRMOrganization или у тех EDT, от которых EDT полей наследуются (sorry, я указанных полей не нашел, видимо, это ваши доработки), прописан relation на поле LedgerTable, то при проверке в validateField() Аксапта по значениям этих полей будет искать, согласно с relation'ам, соотв. записи в LedgerTable - и ругаться, если таковых не найдет. Примеры создания наследников SysConsistencyCheck и использования метода kernelCheckTable() вы легко найдете по перекрестным ссылкам.
|
|
|
За это сообщение автора поблагодарили: gefr (1), ledenezz (1). |
07.12.2007, 05:35 | #6 |
Участник
|
To gl00mie
Огромное спасибо, именно об этом я и спрашивала, а сама нигде не смогла обнаружить.
Еще раз, БОЛЬШУЩЕЕ спасибо!!!! |
|