1C8.1Бух Запрос бухгалтерский (ошибка)

Новая тема
"Здравствуйте.
Дано: 1С:Предприятие 8.1 (8.1.9.57) "Бухгалтерия" редакция 1.6 (1.6.15.6) (пока что не ломаная, но прогресс неизбежен)
Требуется: запросом выбрать остатки товара на 41-м счету.
Паяльной лампой наваял:
ЗапросОстаткиТовара=Новый Запрос("ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| СУММА(ХозрасчетныйОстатки.СуммаОборотДТ) КАК ОборотДТ,
| СУММА(ХозрасчетныйОстатки.СуммаКонечныйОстатокДт) КАК СуммаКонечныйОстатокДт,
| СУММА(ХозрасчетныйОстатки.СуммаКонечныйОстатокКт) КАК СуммаКонечныйОстатокКт,
| ХозрасчетныйОстатки.Счет КАК Счет
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода,&КонецПериода) КАК ХозрасчетныйОстатки
|ГДЕ
| Счет=41.01
|СГРУППИРОВАТЬ ПО
| Счет,
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.СуммаКонечныйОстатокДт,
| ХозрасчетныйОстатки.СуммаКонечныйОстатокКт,
| ХозрасчетныйОстатки.СуммаОборотДТ
|");
ЗапросОстаткиТовара.УстановитьПараметр("НачалоПериода",ДатаНачала);
ЗапросОстаткиТовара.УстановитьПараметр("КонецПериода",ДатаКонца);
ОстаткиТовара=ЗапросОстаткиТовара.Выполнить();

Если ОстаткиТовара.Пустой()=Ложь Тогда
Сообщить("!");
ОстаткиТовара.Выбрать();
Пока ОстаткиТовара.Следующий() Цикл
Сообщить("!");
КонецЦикла;
КонецЕсли;

1С не дает никаких результатов.
Вопрос: Что делать? Кто виноват сам знаю, давеча в зеркале видел."
"Ошибка в строке
| Счет=41.01
Варианта 2:
1. Возможно требуется уточнить код
| Счет.Код=""""41.01""""
2.
| Счет.Код=&Счет
ЗапросОстаткиТовара.УстановитьПараметр("Счет",...);  //Либо передать выбранный в форме, либо найти по коду, либо ..."
> ГДЕ
> Счет=41.01

И где вы видели чтобы так условие задавалось.
Совет. поставьте условие в виртуальной таблице, запрос будет работает быстрее.

> Паяльной лампой наваял:
Лучше конструктором запросов.

"Вариант 1. не прокатил, а вариант
| Счет.Код=&Счет
ЗапросОстаткиТовара.УстановитьПараметр("Счет",...);
что-то получает, так как срабатывает условие Если ОстаткиТовара.Пустой()=Ложь Тогда

Но вылетает при ошибке в строке Пока ОстаткиТовара.Следующий() Цикл
Говорит, что "Метод объекта не обнаружен (Следующий)"
Что сделал не так?"
> Но вылетает при ошибке в строке Пока ОстаткиТовара.Следующий() Цикл
> Говорит, что "Метод объекта не обнаружен (Следующий)"
> Что сделал не так?

Сначала нужно выбрать
Метод следующий() у объекта выборки.
Вы хоть синтаксис-помощник посмотрите.
"Обновленный код:
ЗапросОстаткиТовара=Новый Запрос("ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| СУММА(ХозрасчетныйОстатки.СуммаОборотДТ) КАК ОборотДТ,
| СУММА(ХозрасчетныйОстатки.СуммаКонечныйОстатокДт) КАК СуммаКонечныйОстатокДт,
| СУММА(ХозрасчетныйОстатки.СуммаКонечныйОстатокКт) КАК СуммаКонечныйОстатокКт,
| ХозрасчетныйОстатки.Счет КАК Счет
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода,&КонецПериода) КАК ХозрасчетныйОстатки
//|ГДЕ
//| Счет=""""41.01""""
|СГРУППИРОВАТЬ ПО
| Счет,
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.СуммаКонечныйОстатокДт,
| ХозрасчетныйОстатки.СуммаКонечныйОстатокКт,
| ХозрасчетныйОстатки.СуммаОборотДТ
|");
ЗапросОстаткиТовара.УстановитьПараметр("НачалоПериода",ДатаНачала);
ЗапросОстаткиТовара.УстановитьПараметр("КонецПериода",ДатаКонца);
ЗапросОстаткиТовара.УстановитьПараметр("Счет",СчетОстатков);
ОстаткиТовара=ЗапросОстаткиТовара.Выполнить();

Если ОстаткиТовара.Пустой()=Ложь Тогда
Сообщить("!");
 ОстаткиТовара.Выбрать();//***** ВРОДЕ КАК ВЫБРАЛ
 Пока ОстаткиТовара.Следующий() Цикл
   Сообщить("!");
 КонецЦикла;
КонецЕсли;

Но выдает ошибку в цикле."
"Так далеко я не смотрел:
лВыборка = ОстаткиТовара.Выбрать();
Пока лВыборка.Следующий() Цикл
...

У результата запроса нет Следующего."
Вот и верь потом учебникам... И что ж делать? На 41-м остатки есть.
Мысль... у регистра измерение "Организация" и "Валюта", которые я в запросе не указывал. В этом может быть косяк?

p.s. Извиняюсь за глупые вопросы, ибо это мой первый запрос на 8.1
"Догнал. Массивы - сила.

МассивОстаткиТовара=ОстаткиТовара.Выгрузить();
Для Каждого СтрокаИзМассива Из МассивОстаткиТовара Цикл
 Сообщить(Строка(СтрокаИзМассива["Номенклатура"])+" "+Строка(СтрокаИзМассива["СуммаКонечныйОстатокДт"]));
КонецЦикла;

Непонимаю только, почему ни в одном учебнике нет нормального примера. Очень съэкономило бы время и нервы."
"> Догнал. Массивы - сила.
>
> МассивОстаткиТовара=ОстаткиТовара.Выгрузить();
> Для Каждого СтрокаИзМассива Из МассивОстаткиТовара Цикл
>   Сообщить(Строка(СтрокаИзМассива["Номенклатура"])+" "+Строка(СтрокаИзМассива["СуммаКонечныйОстатокДт"]));
> КонецЦикла;
>
Если ОстаткиТовара - это результат запроса (Запрос.Выполнить()), то Выгрузить это не Масиив, а ТаблицаЗначений :)
А Выборку я и сам не люблю, хотя она должна быть быстрее.

>   Сообщить(Строка(СтрокаИзМассива["Номенклатура"])+" "+Строка(СтрокаИзМассива["СуммаКонечныйОстатокДт"]));
Можно и так написать:
Сообщить(Строка(СтрокаИзМассива.Номенклатура)+" "+Строка(СтрокаИзМассива.СуммаКонечныйОстатокДт));"
Читают тему
(гостей: 1)

Быстрый переход