Как-то на проекте переносили данные прямым запросом.
Не так ужасно -) И очень быстро -))
X++:
SOURCE #RHRMImportCalendarDate
#static void RHRMImportCalendarDate(Args _args)
#{
# ODBCConnection odbcConnection;
# Statement statement;
# str sqlQueryString;
# SqlStatementExecutePermission permission;
# ResultSet resultSet;
# LoginProperty loginProperty;
# str serverName = "SUPER";
# //str dataBaseName = "BASE";
# str dataBaseName = "DT";
# DataAreaId dataAreaId;
# int counter;
#
# void import()
# {
# RPayCalendarDate rpayCalendarDate;
# ;
#
# rpayCalendarDate.clear();
# rpayCalendarDate.TransDate = resultSet.getDate(1);
# rpayCalendarDate.CalendarId = resultSet.getString(2);
# rpayCalendarDate.PayDayType = resultSet.getInt(3);
#
# if(!RPayCalendarDate::exist(rpayCalendarDate.CalendarId, rpayCalendarDate.TransDate))
# {
# rpayCalendarDate.doInsert();
# }
#
#
# counter++;
# }
# ;
#
# try
# {
# loginProperty = new LoginProperty();
# loginProperty.setServer(serverName);
# loginProperty.setDatabase(dataBaseName);
#
# odbcConnection = new ODBCConnection(loginProperty);
#
# if (!odbcConnection)
# {
# info("Ошибка при подключении к базе данных");
# }
# }
# catch (Exception::Internal)
# {
# info("Возникла ошибка при подключении к базе данных. Операция отменена.");
# }
# catch (Exception::Error)
# {
# info("Ошибка при подключении к базе данных!");
# }
#
# statement = odbcConnection.createStatement();
#
#
# sqlQueryString = strfmt("SELECT RPAYCALENDARDATE.TRANSDATE"//1
# + ", RPAYCALENDARDATE.CALENDARID"//2
# + ", RPAYCALENDARDATE.PAYDAYTYPE"//3
# + " FROM RPAYCALENDARDATE"
# + " WHERE RPAYCALENDARDATE.DATAAREAID = 'dat'"
# + " AND RPAYCALENDARDATE.TRANSDATE > '20091231'");
#
# permission = new SqlStatementExecutePermission(sqlQueryString);
# permission.assert();
# resultSet = statement.executeQuery(sqlQueryString);
#
# while (resultSet.next())
# {
# ttsbegin;
#
# import();
#
# ttscommit;
# }
#
# statement.close();
#
# info(strfmt("Импортировано %1", counter));
#}
ENDSOURCE