Цитата:
Сообщение от
DSPIC
Вот простенький джобец, который позволяет локализовать проблемную таблицу.
По-моему, некорректный джобец. Во-первых, он работает до первой ошибки, во-вторых, имя таблицы с ошибкой как раз не выводится, а в инфологе только куча строк "Table xxx - ОК".
Вчера как раз тоже написал подобный джоб, может кому пригодится:
X++:
// Синхронизация с выводом наименований "неправильных" таблиц
static void DbSynchronize(Args _args)
{
#AviFiles
Dictionary dictionary;
DictTable dictTable;
int i;
SysOperationProgress progress;
;
dictionary = new Dictionary();
progress = SysOperationProgress::newGeneral(#AviUpdate, "Синхронизация", dictionary.tableCnt());
for (i = 1; i <= dictionary.tableCnt(); i++)
{
dictTable = new DictTable(dictionary.tableCnt2Id(i));
if (dictTable.isSql() &&
(
!dictTable.configurationKeyId() ||
isConfigurationkeyEnabled(dictTable.configurationKeyId())
)
)
{
try
{
progress.setText(dictTable.name());
progress.setCount(i);
if (!appl.dbSynchronize(dictTable.id(), false, true, false))
{
warning(strfmt("Проблемы с таблицей %1 (Id = %2)!", dictTable.name(), dictTable.id()));
}
}
catch (Exception::Error)
{
warning(strfmt("Проблемы с таблицей %1 (Id = %2)!", dictTable.name(), dictTable.id()));
}
}
}
info("Синхронизация завершена");
}
По опыту, проблемы при синхронизации возникают в основном в двух случаях:
- некорректные данные в таблице SqlDictionary (чаще всего - их отсутствие),
- нарушение уникального индекса (самая "попса" - табличка InventDim при отключении складской аналитики)