Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 02:15

Ошибка в запросе при попытке получения значения из Табличной части документа

Автор bigrunner, 08 авг 2014, 08:27

0 Пользователей и 1 гость просматривают эту тему.

bigrunner

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

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

    Пока Выборка1.Следующий() Цикл
        НужнаяДата=Выборка1.ПредыдущаяДата;
    КонецЦикла;
    Сообщить("Нужная дата%"+НужнаяДата);
    ПредыдущаяДата=НужнаяДата;
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  | РеализацияТоваровУслуг.Товары.(
                  |     Цена
                  | ) КАК Цена
                  |ИЗ
                  | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                  |ГДЕ
                  | РеализацияТоваровУслуг.Дата = &Дата";
               

    Запрос.УстановитьПараметр("Дата", ПредыдущаяДата);
    Результат=Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
        ПрЦена=Результат.Цена;
        КонецЦикла;
Сообщить("Предыдущая цена на товар равна "+ПрЦена);

LexaK

надо(можно) все сделать в одном запросе и получить следующую таблицу с такими колонками
Контрагент, Товар, ПредыдущаяЦена, ПоследняяЦена

и никаких циклов и запросов в циклах не надо
внутри этого запроса используйте временные таблицы для промежуточных данных, команда Поместить ВременнаяТаблица
если помогло нажмите: Спасибо!

murat1992

Второй запрос должен быть
"ИЗ Документ.РеализацияТоваровУслуг.Товары"

К документу обращайся через Ссылку.

Пример:
ВЫБРАТЬ
Товары.Ссылка.Дата
ИЗ
Документ.РеализацияТоваровУслуг.Товары Как Товары


Не забудь добавить условие про номенклатуру и контрагента!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск