Добрый день, многоуважаемый форум! Не понимаю, почему выборка запроса работает по-разному. В первом случае перебираются все сотрудники, а во втором каждый раз цикл пробегается по одному и тому же сотруднику. Укажите, пожалуйста, на ошибку. Заранее спасибо!

1-й случай (в выборке перебираются все сотрудники)

```1c
    Запрос.УстановитьПараметр("НачалоПериода",НачалоГода(ТекущаяДата()));
    Запрос.УстановитьПараметр("КонецПериода",КонецГода(ТекущаяДата()));

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    СТР=2;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    РаздельноФИО = СтрРазделить(ВыборкаДетальныеЗаписи.Сотрудник, " ");
    //Вот эта часть (*) во втором случае вынесена отдельным выполнением запроса и перебором
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,2).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус3]);
    ЛистРазрез3.Cells(СТР,3).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус2]);
    ЛистРазрез3.Cells(СТР,4).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус1]);
    //Конец этой части(*)
    Для Строка = 1 По КоличествоСтрок Цикл

    Если НЕ СтрНайти(Лист.Cells(Строка, 1).Value,Строка(РаздельноФИО[0]))= 0 И НЕ СтрНайти(Лист.Cells(Строка, 1).Value,Строка(РаздельноФИО[1]))=0 Тогда
    Если НЕ ВыборкаДетальныеЗаписи.Январь = 0 тогда
    Лист.Cells(Строка, 2).Value = Число(ВыборкаДетальныеЗаписи.Январь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Февраль = 0 тогда
    Лист.Cells(Строка, 3).Value = Число(ВыборкаДетальныеЗаписи.Февраль);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Март = 0 тогда
    Лист.Cells(Строка, 4).Value = Число(ВыборкаДетальныеЗаписи.Март);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Апрель = 0 тогда
    Лист.Cells(Строка, 5).Value = Число(ВыборкаДетальныеЗаписи.Апрель);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Май = 0 тогда

    Лист.Cells(Строка, 6).Value = Число(ВыборкаДетальныеЗаписи.Май);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Июнь = 0 тогда
    Лист.Cells(Строка, 7).Value = Число(ВыборкаДетальныеЗаписи.Июнь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Июль = 0 тогда
    Лист.Cells(Строка, 8).Value = Число(ВыборкаДетальныеЗаписи.Июль);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Август = 0 тогда
    Лист.Cells(Строка, 9).Value = Число(ВыборкаДетальныеЗаписи.Август);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Сентябрь = 0 тогда
    Лист.Cells(Строка, 10).Value = Число(ВыборкаДетальныеЗаписи.Сентябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Октябрь = 0 тогда
    Лист.Cells(Строка, 11).Value = Число(ВыборкаДетальныеЗаписи.Октябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Ноябрь = 0 тогда
    Лист.Cells(Строка, 12).Value = Число(ВыборкаДетальныеЗаписи.Ноябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Декабрь = 0 тогда
    Лист.Cells(Строка, 13).Value = Число(ВыборкаДетальныеЗаписи.Декабрь);
    КонецЕсли;
    КонецЕсли;

    КонецЦикла;
    СТР = СТР + 1;
    КонецЦикла;
```

2-й случай (в первой выборке перебираются все сотрудники, в той части, которую вынес отдельным перебором, цикл каждый раз выводит одного и того же сотрудника):

```1c
    //Здесь перебираются все сотрудники
    Запрос.УстановитьПараметр("НачалоПериода",НачалоГода(ТекущаяДата()));
    Запрос.УстановитьПараметр("КонецПериода",КонецГода(ТекущаяДата()));
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    РаздельноФИО = СтрРазделить(ВыборкаДетальныеЗаписи.Сотрудник, " ");
    Для Строка = 1 По КоличествоСтрок Цикл
    Если НЕ СтрНайти(Лист.Cells(Строка, 1).Value,Строка(РаздельноФИО[0]))= 0 И НЕ СтрНайти(Лист.Cells(Строка, 1).Value,Строка(РаздельноФИО[1]))=0 Тогда
    Если НЕ ВыборкаДетальныеЗаписи.Январь = 0 тогда
    Лист.Cells(Строка, 2).Value = Число(ВыборкаДетальныеЗаписи.Январь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Февраль = 0 тогда
    Лист.Cells(Строка, 3).Value = Число(ВыборкаДетальныеЗаписи.Февраль);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Март = 0 тогда
    Лист.Cells(Строка, 4).Value = Число(ВыборкаДетальныеЗаписи.Март);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Апрель = 0 тогда
    Лист.Cells(Строка, 5).Value = Число(ВыборкаДетальныеЗаписи.Апрель);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Май = 0 тогда

    Лист.Cells(Строка, 6).Value = Число(ВыборкаДетальныеЗаписи.Май);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Июнь = 0 тогда
    Лист.Cells(Строка, 7).Value = Число(ВыборкаДетальныеЗаписи.Июнь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Июль = 0 тогда
    Лист.Cells(Строка, 8).Value = Число(ВыборкаДетальныеЗаписи.Июль);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Август = 0 тогда
    Лист.Cells(Строка, 9).Value = Число(ВыборкаДетальныеЗаписи.Август);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Сентябрь = 0 тогда
    Лист.Cells(Строка, 10).Value = Число(ВыборкаДетальныеЗаписи.Сентябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Октябрь = 0 тогда
    Лист.Cells(Строка, 11).Value = Число(ВыборкаДетальныеЗаписи.Октябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Ноябрь = 0 тогда
    Лист.Cells(Строка, 12).Value = Число(ВыборкаДетальныеЗаписи.Ноябрь);
    КонецЕсли;
    Если НЕ ВыборкаДетальныеЗаписи.Декабрь = 0 тогда
    Лист.Cells(Строка, 13).Value = Число(ВыборкаДетальныеЗаписи.Декабрь);
    КонецЕсли;
    КонецЕсли;

    КонецЦикла;
    СТР = СТР + 1;
    КонецЦикла;
    //Здесь цикл не перебирает всех сотрудников, каждый раз один и тот же. Эта самая часть(*) из первого случая.
    СТР=2;
    Запрос3 = Запрос;
    Запрос3.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус3+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,2).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус3]);
    СТР = СТР + 1;
    КонецЦикла;

    Запрос2 = Запрос;
    СТР=2;
    Запрос2.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус2+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,3).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус2]);
    СТР = СТР + 1;
    КонецЦикла;

    Запрос1 = Запрос;
    СТР=2;
    Запрос1.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус1+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,3).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус1]);
    СТР = СТР + 1;
    КонецЦикла;
```

Заранее спасибо!!!
---
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Для Строка = 1 По КоличествоСтрок Цикл
...
        КонецЦикла; // по Строка
        СТР = СТР + 1;
    КонецЦикла; //по ВыборкаДетальныеЗаписи

ну а дальше у вас остается последнее значение Сотрудник из цикла ВыборкаДетальныеЗаписи с которым вы и работаете
чтобы и оно менялось, надо внутрь цикла по ВыборкаДетальныеЗаписи размещать
как в первом варианте
---
Запрос3 = Запрос;
    Запрос3.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус3+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,2).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус3]);
    СТР = СТР + 1;
    КонецЦикла;

Запрос переопределили, но выбираете из старого
И выборку используете уже ранее определенную, она остается на последней записи, отсюда и один сотрудник
---
смотрите, что сделали.
Создали запрос Запрос. Выполнили. Обошли выборку ВыборкаДетальныеЗаписи.
Далее создаете новый запрос Запрос1 и т.д. Выполняете первоначальный Запрос еще раз. Обходите его, но данные получаете из ВыборкаДетальныеЗаписи первоначального запроса, в котором хранится указатель на последнюю строку выборки.
Т.е. обходите одну выборку, но данные выбираете всегда одни и те же.
---
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Для Строка = 1 По КоличествоСтрок Цикл
...
        КонецЦикла; // по Строка
        СТР = СТР + 1;
    КонецЦикла; //по ВыборкаДетальныеЗаписи

ну а дальше у вас остается последнее значение Сотрудник из цикла ВыборкаДетальныеЗаписи с которым вы и работаете
чтобы и оно менялось, надо внутрь цикла по ВыборкаДетальныеЗаписи размещать
как в первом варианте
---
Так я же заново выполняю запрос, делаю новую выборку, также как и в первом варианте, счетчик Строка используется для указания ячейки экселя. Я наверное просто не понял Вас(
---
Запрос3 = Запрос;
 Запрос3.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус3+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
Выборку не по тому запросу делаете.
---
Спасибо, изменил. Не помогло. это я в процессе поиска ошибки переопределил запрос и забыл выполнить переопределенный. Сейчас изменил, но не помогло.
---
смотрите, что сделали.
Создали запрос Запрос. Выполнили. Обошли выборку ВыборкаДетальныеЗаписи.
Далее создаете новый запрос Запрос1 и т.д. Выполняете первоначальный Запрос еще раз. Обходите его, но данные получаете из ВыборкаДетальныеЗаписи первоначального запроса, в котором хранится указатель на последнюю строку выборки.
Т.е. обходите одну выборку, но данные выбираете всегда одни и те же.
---
Спасибо!
---
Запрос3 = Запрос;
    Запрос3.Текст = СтрЗаменить(Запрос.Текст,"СУММА(ВТПоМесяцам.Январь) УБЫВ","СУММА(ВТПоМесяцам."+МесяцМинус3+") УБЫВ");
    Рез = Запрос.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЛистРазрез3.Cells(СТР,1).Value = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
    ЛистРазрез3.Cells(СТР,2).Value = Число(ВыборкаДетальныеЗаписи[МесяцМинус3]);
    СТР = СТР + 1;
    КонецЦикла;

Запрос переопределили, но выбираете из старого
И выборку используете уже ранее определенную, она остается на последней записи, отсюда и один сотрудник
---
Не помогло. это я в процессе поиска ошибки переопределил запрос и забыл выполнить переопределенный. Сейчас изменил, но не помогло.
---
да не может быть такого ))
в подобных случаях делают так
запрос в консоль, параметры задаю вручную и смотрю на результат
если при изменении параметров результат меняется - значит запрос верный
переношу запрос в обработку обратно
если в обработке все по прежнему, т.е. результат не меняется, значит дело в параметрах - они НЕ меняются
и начинаю искать, почему не меняются
---
Да, меня уже тут на форуме научили так делать. Но ничего не меняется, в консоли выводятся все сотрудники, т.е. работает, как надо
---
У вас в коде ошибки. Вам это сказали не раз. Если после исправления все еще не работает, значит исправлены не все.
Телепатов тут нет, и что у вас в итоге после исправления осталось, есть только у вас на экране.
Либо приводите код, который у вас есть и который не работает, либо исправляйте сами, но не надо ныть.
---
Спасибо, но не понял, где я ныл?
---
Везде где пишите что у вас не работает, без указания кода.
---
Понял, но я не с посылом нытья пишу. Сори, если вызвал у Вас раздражение.
---
Не могли бы Вы как-нибудь переформулировать немного понятнее свой первый ответ, для особо одаренных))))
---
ВыборкаДетальныеЗаписи заменили на Выборка после переопределения?
---
Проявил свою невнимательность даже здесь. Извините, прочел только первую часть Вашего ответа. Спасибо огромное, заработало. Я так понимаю, в первом ответе говорится про то же самое))
---
Покажите тот кусок кода, в котором все еще один сотрудник выводится
---
Я подозреваю Вы зря переопределяете переменную Запрос.
---
И без переопределения не работает, это я в процессе поиска ошибки переопределил.