8.х Простой запрос

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем ДубВ1С, 19 сен 2009.

  1. TopicStarter Overlay
    ДубВ1С
    Offline

    ДубВ1С

    Регистрация:
    19 сен 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    У меня есть простой запрос:

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

    Подскажите, пожалуйста, как это сделать :unsure:
  2. GoTech
    Offline

    GoTech

    Регистрация:
    1 фев 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    В апросе типа вот так:
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПоступлениеТоваров.Период КАК Перид,
    | ПоступлениеТоваров.Контрагент КАК Контрагент,
    | ПРЕДСТАВЛЕНИЕ(ПоступлениеТоваров.Контрагент),
    | ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
    | ПРЕДСТАВЛЕНИЕ(ПоступлениеТоваровТовары.Номенклатура),
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровТовары.Количество) КАК Количество,
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПоступлениеТоваровТовары.Сумма) КАК Сумма
    |ИЗ
    | Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    | ПО ПоступлениеТоваровТовары.Ссылка = ПоступлениеТоваров.Ссылка
    |ГДЕ
    | ПоступлениеТоваров.Период >= &НачПериода
    | И ПоступлениеТоваров.Период <= &КонПериода
    | И ПоступлениеТоваров.ИмяГруппы = &Контрагент
    |
    |СГРУППИРОВАТЬ ПО
    | ПоступлениеТоваров.Контрагент,
    | ПоступлениеТоваровТовары.Номенклатура
    |ИТОГИ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Количество),
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сумма)
    |ПО
    | Контрагент,
    | Номенклатура";

    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("КонПериода", КонПериода);
    Запрос.УстановитьПараметр("НачПериода", НачПериода);

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

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьКонтрагент = Макет.ПолучитьОбласть("Контрагент");
    ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");

    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();

    ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаКонтрагент.Следующий() Цикл
    ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент);
    ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень());

    ВыборкаНоменклатура = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);

    [/code]

    Ну и на форму документа добавить поля ввода, соответственно: Контрагент, КонПериода, НачПериода.
  3. TopicStarter Overlay
    ДубВ1С
    Offline

    ДубВ1С

    Регистрация:
    19 сен 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Добавила поля ввода периода и контрагента, но при нажатии на кнопку Сформировать выводит ошибку:
    "{Отчет.Закупки.Форма.Закупки(50)}: Ошибка при вызове метода контекста (Выполнить): {(13, 2)}: Синтаксическая ошибка "ПоступлениеТоваров.Период"
    <<?>>ПоступлениеТоваров.Период >= &НачПериода
    Результат = Запрос.Выполнить();
    по причине:
    {(13, 2)}: Синтаксическая ошибка "ПоступлениеТоваров.Период"
    <<?>>ПоступлениеТоваров.Период >= &НачПериода
    "

    А моего опыта мало, чтобы понять в чем дело(
  4. GoTech
    Offline

    GoTech

    Регистрация:
    1 фев 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    :unsure: Пропустил... еще добавь:
    |СГРУППИРОВАТЬ ПО
    | ПоступлениеТоваров.Период,
    | ПоступлениеТоваров.Контрагент,
    | ПоступлениеТоваровТовары.Номенклатура
  5. GoTech
    Offline

    GoTech

    Регистрация:
    1 фев 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Только теперь у тебя и выборка будет уже по 3 группировкам!
  6. TopicStarter Overlay
    ДубВ1С
    Offline

    ДубВ1С

    Регистрация:
    19 сен 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    А теперь у меня ещё того хуже:
    {Отчет.Закупки.Форма.Закупки(49,42)}: Переменная не определена (Контрагент)
    Запрос.УстановитьПараметр("Контрагент", <<?>>Контрагент);

    вроде определяла

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