8.х Итератор для значения не опрежелен?

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Sova123, 27 фев 2008.

  1. TopicStarter Overlay
    Sova123
    Offline

    Sova123

    Регистрация:
    24 фев 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Вот текст запроса, нужно данные из регистра считать в таблицу:Процедура ПоКнопкеЗаполнить(Элемент)


    Код:
    Запрос = Новый Запрос;
    ТекстЗапроса = "ВЫБРАТЬ
    |    КомиссияОтПродажи.Стоимость,
    |    КомиссияОтПродажи.Комиссия,
    |    КомиссияОтПродажи.СуммаПеречисления
    |ИЗ
    |    РегистрНакопления.КомиссияОтПродажи КАК КомиссияОтПродажи
    |ГДЕ
    |    КомиссияОтПродажи.Туроператор = &Туроператор";
    
    
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Туроператор", Туроператор);
    Запрос= Запрос.Выполнить().Выбрать();
    
    Для Каждого ТекСтрока Из Запрос Цикл
    НоваяСтрока=Турпродукт.Добавить();
    НоваяСтрока.Стоимость=ТекСтрока.Стоимость;
    НоваяСтрока.Комиссия=ТекСтрока.Комиссия;
    НоваяСтрока.СуммаПеречисления=ТекСтрока.СуммаПеречисления;
    КонецЦикла
    КонецПроцедуры
    
    
    Выдает такую ошибку? Что нужно изменить?
    Бухгалтеия 8.0
    {Документ.ОтчетАгента.Форма.ФормаДокумента(20)}: Итератор для значения не определен
    Для Каждого ТекСтрока Из Запрос Цикл
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Написать так:

    Код:
        Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Туроператор", Туроператор);
    Выборка= Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() цикл
    НоваяСтрока=Турпродукт.Добавить();
    НоваяСтрока.Стоимость=ТекСтрока.Стоимость;
    НоваяСтрока.Комиссия=ТекСтрока.Комиссия;
    НоваяСтрока.СуммаПеречисления=ТекСтрока.СуммаПеречисления;
    КонецЦикла
    
    
  3. Mimik
    Offline

    Mimik

    Регистрация:
    30 июл 2009
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    приф Фсем, проблема примерно в томже... делаю табоичный документ, для печати, мне нужно из списка строк выводить все строки по порядку, тоесть выводить количество рейсо каждого водителя и после всех рейсов одного водителя выводить промежуточные итоги.. пытаюсь сотворить следущее :
    Процедура Сменный_Отчет() Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ(Сменный_Отчет)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.Рейсовый_учет.ПолучитьМакет("Сменный_Отчет");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
    // Шапка
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Шапка);
    // Рейсы
    Область = Макет.ПолучитьОбласть("РейсыШапка");
    ТабДок.Вывести(Область);
    ОбластьРейсы = Макет.ПолучитьОбласть("Рейсы");
    ПромежИтог = Макет.ПолучитьОбласть("ПромежИтог");

    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | Ссылка,
    | Наименование
    |ИЗ
    | Справочник.СотрудникиОрганизаций
    |АВТОУПОРЯДОЧИВАНИЕ");

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

    Пока Результат.Следующий() Цикл
    Наименование = Результат.Наименование;
    ЗапросРейс = Новый Запрос(" SELECT * from Рейсы where Водитель = @Наименование ");
    РезультатРейс = Запрос.Выполнить().Выбрать();
    ОбластьРейсы.Параметры.аут = Наименование;

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


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

    КонецЦикла;

    // Подвал
    Подвал = Макет.ПолучитьОбласть("Подвал");
    Подвал.Параметры.Заполнить(ЭтотОбъект);
    ТабДок.Вывести(Подвал);

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    //}}_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
    КонецПроцедуры

    но вылетает ошибка, никак не пойму в чем дело....

    Итератор для значения не определен
    {Документ.Рейсовый_учет(85)}: Итератор для значения не определен
    Для Каждого ТекСтрокаРейсы Из РезультатРейс.Следующий() Цикл
  4. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Код:
    [quote]Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    Наименование = Результат.Наименование;
    ЗапросРейс = Новый Запрос(" SELECT * from Рейсы where Водитель = @Наименование ");               РезультатРейс = Запрос.Выполнить().Выбрать(); 
    ОбластьРейсы.Параметры.аут = Наименование;
    
    Для Каждого ТекСтрокаРейсы Из РезультатРейс.Следующий() Цикл  				   
    ОбластьРейсы.Параметры.Заполнить(ТекСтрокаРейсы);          // ТабДок.Вывести            (ОбластьРейсы);	
    КонецЦикла;[/quote]
    
    Попробуйте так

    Код:
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    Наименование = Результат.Наименование;      
    ЗапросРейс = Новый Запрос(" SELECT * from Рейсы where Водитель = @Наименование ");
    РезультатРейс = Запрос.Выполнить().Выгрузить(); // В качестве результата возвращает ТаблицуЗначений 
    ОбластьРейсы.Параметры.аут = Наименование;
    Для Каждого ТекСтрокаРейсы Из РезультатРейс Цикл // Если не использовать ТаблицуЗначений, тогда так | Пока Результатрейс.Следующий() Цикл
    
    ОбластьРейсы.Параметры.Заполнить(ТекСтрокаРейсы);        
    // ТабДок.Вывести(ОбластьРейсы);	
    КонецЦикла;
    
    А вообще использовать в цикле запросы не гуманно и крайне не желательно, при необходимости произвести сложный отбор данных можно пойти любым из ниже перечисленных путей:
    1. Усложнить запрос. Объеденить запросы с использованием команд ЛЕВОЕ, ПРАВОЕ, или ПОЛНОЕ СОЕДИНЕНИЕ.
    2. Использовать временные таблицы.
    2. Использовать механизм СКД (Система компоновки данных).

    Удачи в поиске решений :unsure:
  5. Mimik
    Offline

    Mimik

    Регистрация:
    30 июл 2009
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Спасибо с этим разобрался, возникла другая проблема... пытаюсь фильтровать запрос по данным, запрос возвращает пустое значение...

    РейсЗапрос = новый Запрос;
    РейсЗапрос.УстановитьПараметр("Сотр",Наименование);
    РейсЗапрос.Текст =
    "
    |ВЫБРАТЬ
    | Рейсовый_учетРейсы.Ссылка,
    | Рейсовый_учетРейсы.НомерСтроки,
    | Рейсовый_учетРейсы.Номер_АС,
    | Рейсовый_учетРейсы.Номер_Экскаватора,
    | Рейсовый_учетРейсы.Водитель,
    | Рейсовый_учетРейсы.Порода,
    | Рейсовый_учетРейсы.Путь,
    | Рейсовый_учетРейсы.Высота,
    | Рейсовый_учетРейсы.Количество_рейсов
    |ИЗ
    | Документ.Рейсовый_учет.Рейсы КАК Рейсовый_учетРейсы
    | ГДЕ Рейсовый_учетРейсы.Водитель = &Сотр";


    РезультатРейс = РейсЗапрос.Выполнить().Выбрать();
    Сообщить(РезультатРейс.Количество());
    Сообщить(Наименование);
  6. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Сравниваете шапки с арбузами и удивляетесь: в параметр передали строку, а сравниваете со справочником ссылкой.
  7. Mimik
    Offline

    Mimik

    Регистрация:
    30 июл 2009
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Все, проблема решена, всем спасибо =) :unsure:
  8. Mimik
    Offline

    Mimik

    Регистрация:
    30 июл 2009
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    Уважаемые, новый трабло... хочу сделать выборку в справочнике


    ЗапросЗагрузка = новый запрос;
    ЗапросЗагрузка.УстановитьПараметр("ТипАс",Тип);
    ЗапросЗагрузка.УстановитьПараметр("Порода",РезультатРейс.Порода);
    ЗапросЗагрузка.Текст =
    "ВЫБРАТЬ
    | Паспорта_Загрузки_АМ.Ссылка,
    | Паспорта_Загрузки_АМ.ПометкаУдаления,
    | Паспорта_Загрузки_АМ.Предопределенный,
    | Паспорта_Загрузки_АМ.Код,
    | Паспорта_Загрузки_АМ.Наименование,
    | Паспорта_Загрузки_АМ.Тип_АС,
    | Паспорта_Загрузки_АМ.Паспорта.(
    | Ссылка,
    | НомерСтроки,
    | Порода,
    | Тонны
    | )
    |ИЗ
    | Справочник.Паспорта_Загрузки_АМ КАК Паспорта_Загрузки_АМ
    |ГДЕ
    | Паспорта_Загрузки_АМ.Тип_АС = &ТипАс
    | И Паспорта_Загрузки_АМ.Паспорта.Порода = &Порода";

    РезЗагрузка = ЗапросЗагрузка.Выполнить().Выбрать();
    СубРез = РезЗагрузка.Выбрать();
    Сообщить(СубРез.Количество());
    пока СубРез.Следующий() цикл
    Тонны = СубРез.Тонны;
    конеццикла;

    нада получить тонну загрузки на тип породы, выборка работает, ответ идет, но Тонны не выходят как значение, как это поправить????
  9. Mimik
    Offline

    Mimik

    Регистрация:
    30 июл 2009
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    :unsure:
  10. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Подробнее...

Поделиться этой страницей