Имя: Пароль:
1C
1С v8
Обход результата запроса
0 triviumfan
 
15.01.18
23:50
Доброго дня (ночи!).

Первый раз вижу, что метод Следующий() обходит не все элементы выборки из результата запроса. В чём прикол?!
Справочник "Контрагенты", ~30к элементов.


Запрос = Новый Запрос("Выбрать Ссылка, Наименование Из Справочник." + СправочникДляПоиска);
Выборка = Запрос.Выполнить().Выбрать();

Индикатор1 = 0;
ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество();

Пока Выборка.Следующий() Цикл
//...
КонецЦикла;

На 27% выполнения цикл останавливается. Никогда такого ранее не встречал. Хотя помнится, некоторые жаловались на похожее поведение платформы при работе с ado recordset. Куда копать? Выгружать результат в ТЗ? Дико звучит...
1 Darych
 
16.01.18
01:07
ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Выборка.Количество();
Задвинь это и наслаждайся
2 triviumfan
 
16.01.18
07:57

    Пока Выборка.Следующий() Цикл
                
        УИД_Источника = Выборка.Ссылка.УникальныйИдентификатор();
        УИД_Приемника = ТекCOMОбъект.NewObject("УникальныйИдентификатор", Строка(УИД_Источника));
        НайденныйЭлемент = ВнешнийСправочник.ПолучитьСсылку(УИД_Приемника);
        
        Если Найти(ТекCOMОбъект.String(НайденныйЭлемент),"не найден") = 0 Тогда
            
            Если ТолькоРазныеНаименования И НайденныйЭлемент.Наименование = Выборка.Наименование Тогда
                Продолжить;
            КонецЕсли;
            
            НоваяСтрока = СписокОбъектов.Добавить();
            НоваяСтрока.Источник = Выборка.Ссылка;
            НоваяСтрока.НаименованиеПриемника = НайденныйЭлемент.Наименование;
            НоваяСтрока.Приемник = ТекCOMОбъект.String(УИД_Приемника);
            
        КонецЕсли;
        
                Индикатор1 = Индикатор1 + 1;
        ОбработкаПрерыванияПользователя();
        
    КонецЦикла;

Ошибка в том, что индикатор не всегда инкрементируется. Нет никакой ошибки) Автор сам дурак, плюс противопоказано ночью обработки писать. Отбой, всем печенек)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн