В продолжение темы
Импорт бинарных данных
Столкнулся еще с одной проблемой при импорте из 1С а AX. Буду благодарен, если кто-нибудь поможет..
Нужно сделать выборку из нескольких таблиц (в данном случае из четырех). Т.е. нужно выбрать все образования для физических лиц из таблицы Справочник.ФизическиеЛица.Образование и для выбранных образований вытащить из таблиц Справочник.ФизическиеЛица, Справочник.УчебныеЗаведения и ФизическиеЛицаОбразование.ВидОбразования код сотрудника, название учебного заведения и вид образования соответственно. Код следующий:
X++:
Text = "ВЫБРАТЬ "
+" ФизическиеЛица.Код КАК Код,"
+" УчебныеЗаведения.Наименование КАК УчебноеЗаведение,"
+" ВидыОбразованияФизЛиц.Наименование КАК ВидОбразования,"
+" ФизическиеЛицаОбразование.Диплом как Диплом, "
+" ФизическиеЛицаОбразование.ГодОкончания как ГодОкончания,"
+" ФизическиеЛицаОбразование.Квалификация как Квалификация"
+" ИЗ"
+" Справочник.ФизическиеЛица.Образование КАК ФизическиеЛицаОбразование"
+" ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица"
+" ПО ФизическиеЛицаОбразование.Ссылка = ФизическиеЛица.Ссылка"
+" ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчебныеЗаведения КАК УчебныеЗаведения"
+" ПО ФизическиеЛицаОбразование.УчебноеЗаведение = УчебныеЗаведения.Ссылка"
+" ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыОбразованияФизЛиц КАК ВидыОбразованияФизЛиц"
+" ПО ФизическиеЛицаОбразование.ВидОбразования = ВидыОбразованияФизЛиц.Ссылка"
+" ГДЕ"
+" ФизическиеЛица.Ссылка <> \"000000001\"";
Query.Text(Text);
// Выполнение запроса
Result = Query.Execute();
Choose = Result.Choose();
// Выборка результата выполнения запроса
While (Choose.Next())
{
i++;
info(strFmt('%1 - %2 - %3', i, Choose.(), Choose.(), Choose.()));
}
Код вылетает на строчке с info(), т.е. при обращении к Choose.УчебноеЗаведение() с ошибкой "Ошибка времени выполнения. : Вариантный тип, возвращенный методом COM-объекта, не поддерживается.".
Вылетает, как я понимаю, из-за того, что не у всех строчек таблицы Справочник.ФизическиеЛица.Образование заполнено поле УчебноеЗаведение
Пробовал делать так:
X++:
While (Choose.Next())
{
i++;
if (Choose.())
info(strFmt('%1 - %2 - %3', i, Choose.(), Choose.(), Choose.()));
}
но тогда код вываливается на if (Choose.УчебноеЗаведение()). Как же от этого избавиться?
Пробовал также делать эту выборку за несколько заходов:
1. Сначала выбирать из таблицы Справочник.ФизическиеЛица.Образование все записи, у которых заполнено поле УчебноеЗаведение (точнее ссылка на таблицу Справочник.УчебныеЗаведения).
2. Потом выбирать все записи, у которых заполнено поле ВидОбразования (ссылка на таблицу Справочник.ВидыОбразованияФизЛиц)
3. Связывать эти 2 выборки по ссылке из этой таблицы (типа аксаптовского RecId), но ссылка опять же имеет бинарный формат, который мне не удается как-либо обработать (преобразовать в текст или сравнить например). В общем опять все уперлось в то, с чего я и начал. Как обработать binary в ax