8.х Простой сложный запрос...

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sergey-kisa, 7 авг 2009.

  1. TopicStarter Overlay
    sergey-kisa
    Offline

    sergey-kisa

    Регистрация:
    6 авг 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Помогите с запросом.
    Надо сделать выборку за последние 6 мес. по ценам Поступления для выбранной в Реализации номенклатурной единицы, найти Максимум цены и выставить в цену Реализации.


    Примерно так, но ничего не работает:

    Процедура ТоварыНоменклатураПриИзменении(Элемент)

    //ПриИзмененииНоменклатурыТовары(Элемент);

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

    // Если ошибка в запросе, то выход из процедуры
    Если Запрос1.Выполнить().Выбрать() = 0 Тогда
    Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса

    МаксимальнаяЦена = 0;
    Запрос1.УстановитьПараметр("ДатаНач",ДобавитьМесяц(ТекущаяДата(),-6));
    Запрос1.УстановитьПараметр("ДатаКон",ТекущаяДата());

    Пока Запрос1.Выполнить().Выбрать().НайтиСледующий() Цикл
    МаксимальнаяЦена = Максимум(ВыбЦена);
    КонецЦикла;

    Если МаксимальнаяЦена = 0 Тогда
    Сообщить("Товар не закупался в течение последних шести месяцев");
    Иначе
    Документ.РеализацияТоваровУслуг.Товары.Цена = МаксимальнаяЦена;
    КонецЕсли;

    КонецПроцедуры // ТоварыНоменклатураПриИзменении()
  2. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    а почему не обращаетесь к регистру партии товаров там стоимость и выбирай первый максимальный...
  3. TopicStarter Overlay
    sergey-kisa
    Offline

    sergey-kisa

    Регистрация:
    6 авг 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Как я понял нужно обращаться к Регистру накопления
    ПартииТоваровПереданные?

    в таком случае как сваять сам запрос?
    что-то у меня с синтаксисом проблемы...
  4. DmitryS
    Offline

    DmitryS Опытный в 1С

    Регистрация:
    20 июл 2007
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Можна и из регистров и из документов, Ваш запрос по документам думаю должен выглядеть гдето так:

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

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Если РезультатЗапроса.Пустой() Тогда
    Сообщить("Товар не закупался в течение последних шести месяцев");
    Возврат;
    КонецЕсли;

    Думаю тут просто 0 писать..

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