Имя: Пароль:
1C
 
Условие на максимальную дату в запросе
0 tatoshka0403
 
29.10.14
10:36
Подскажите пожалуйста, делаю запрос на вычисление себестоимости товара( у нас себестоимость= последняя цена поступления)

ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Количество,
    ВозвратТоваровОтПокупателяТовары.Себестоимость,
    ПоступлениеТоваровУслугТовары.Цена КАК Цена,
    ПоступлениеТоваровУслугТовары.Ссылка.Дата
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ПО ВозвратТоваровОтПокупателяТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
    И ВозвратТоваровОтПокупателяТовары.Ссылка.Дата >= ПоступлениеТоваровУслугТовары.Ссылка.Дата

В запрос попадают все документы поступления а мне нужен только один который "ближе" всего к моему возврату.
1 vicof
 
29.10.14
10:38
Максимум по дате, соединение по дата поступления меньше даты возврата.
2 Крошка Ру
 
29.10.14
10:40
(0) А если это поступение не проведено или на удаление помечено?
Может быть искать себестоимость стоит не в документах?
3 Ненавижу 1С
 
гуру
29.10.14
10:42
>> у нас себестоимость= последняя цена поступления

это почему?
4 John83
 
29.10.14
10:43
5 John83
 
29.10.14
10:43
(3) ну захотелось им так - тебе жалко что ли?
6 tatoshka0403
 
29.10.14
10:44
(2) Спасибо, что напомнил про эти условия, но все документы проведены
(3) Я понимаю что это не всегда правильно, но клиенту так удобней.
7 PePaRiTB
 
29.10.14
10:45
(0) Если нужны последние цены из поступлений/возвратов по номенклатуре, разумнее будет создать регистр сведений и делать движения документом поступления/возврата. Ах, да и LIFO запрещено законодательно, а тут даже лучше чем LIFO :)
8 tatoshka0403
 
29.10.14
10:49
Все же пойду в сторону партий товаров. Спасибо)
9 tatoshka0403
 
29.10.14
11:20
Думал думал и все же решил оставить так
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Ссылка,
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Цена,
    ПродажиСебестоимость.Стоимость,
    ПродажиСебестоимость.Регистратор
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
        ПО ВозвратТоваровОтПокупателяТовары.Номенклатура = ПродажиСебестоимость.Номенклатура
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
    И ВозвратТоваровОтПокупателяТовары.Ссылка.Дата >= ПродажиСебестоимость.Регистратор.Дата
Так как же сделать чтобы только одно(максимальное выводилась) выводилась?
10 Крошка Ру
 
29.10.14
11:27
(9) в (1) же написано.
11 Крошка Ру
 
29.10.14
11:28
+(10) Группируешь по полям ссылка, номенклатура. По дате поступления - максимум, потом по дате (и номенклатуре со ссылкой) соединяешь с этой же таблицей.
12 tatoshka0403
 
29.10.14
11:31
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Ссылка,
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Цена,
    ПродажиСебестоимость.Стоимость,
    ПродажиСебестоимость.Регистратор,
    МАКСИМУМ(ПродажиСебестоимость.Регистратор.Дата) КАК РегистраторДата
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
        ПО ВозвратТоваровОтПокупателяТовары.Номенклатура = ПродажиСебестоимость.Номенклатура
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
    И ВозвратТоваровОтПокупателяТовары.Ссылка.Дата >= ПродажиСебестоимость.Регистратор.Дата

СГРУППИРОВАТЬ ПО
    ВозвратТоваровОтПокупателяТовары.Ссылка,
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Цена,
    ПродажиСебестоимость.Стоимость,
    ПродажиСебестоимость.Регистратор
Ну если я все правильно понял, то не помогает
13 tatoshka0403
 
29.10.14
11:32
Упс забыл убрать, все спс заработало(11)
ВЫБРАТЬ
    ВозвратТоваровОтПокупателяТовары.Ссылка,
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Цена,
    ПродажиСебестоимость.Стоимость,
    МАКСИМУМ(ПродажиСебестоимость.Регистратор.Дата) КАК РегистраторДата
ИЗ
    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
        ПО ВозвратТоваровОтПокупателяТовары.Номенклатура = ПродажиСебестоимость.Номенклатура
ГДЕ
    ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
    И ВозвратТоваровОтПокупателяТовары.Ссылка.Дата > ПродажиСебестоимость.Регистратор.Дата

СГРУППИРОВАТЬ ПО
    ВозвратТоваровОтПокупателяТовары.Ссылка,
    ВозвратТоваровОтПокупателяТовары.Номенклатура,
    ВозвратТоваровОтПокупателяТовары.Цена,
    ПродажиСебестоимость.Стоимость
14 H A D G E H O G s
 
29.10.14
11:34
(0) Думаю, скоро придет Элли и отмиздит питомца за тормозной запрос.
15 H A D G E H O G s
 
29.10.14
11:37
Дада, там просто адов план запроса получается с Индексным сканом регистра.
16 tatoshka0403
 
29.10.14
11:41
(15)Лучше было брать ПродажиСебестоимость.Обороты ?
17 John83
 
29.10.14
11:58
что-то мне подсказывает, что запрос не только тормозной, но и нерабочий..
18 John83
 
29.10.14
11:59
(16) лучше посмотреть мой пример в (4)
19 tatoshka0403
 
29.10.14
13:29
(17) Запрос рабочий
(18) Мой запрос плох тем что я не использую виртуальные таблицы и не устанавливаю по ним условия?
20 John83
 
29.10.14
13:37
(19) хотя да.. в конце отсекаешь лишние записи..
именно! не стоит без надобности использовать физ. таблицы
21 tatoshka0403
 
29.10.14
13:41
(20)Спасибо сделаю по твоему примеру, а сейчас пока доделаю на этом запросе.
22 tatoshka0403
 
29.10.14
16:33
(20)
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Текст = "ВЫБРАТЬ
                   |    ВозвратТоваровОтПокупателяТовары.Ссылка,
                   |    ВозвратТоваровОтПокупателяТовары.Номенклатура,
                   |    ВозвратТоваровОтПокупателяТовары.Цена,
                   |    ПродажиСебестоимость.Стоимость,
                   |    МАКСИМУМ(ПродажиСебестоимость.Регистратор.Дата) КАК РегистраторДата
                   |ИЗ
                   |    Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
                   |        ПО ВозвратТоваровОтПокупателяТовары.Номенклатура = ПродажиСебестоимость.Номенклатура
                   |ГДЕ
                   |    ВозвратТоваровОтПокупателяТовары.Ссылка.Дата > ПродажиСебестоимость.Регистратор.Дата
                   |    И ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ВозвратТоваровОтПокупателяТовары.Ссылка,
                   |    ВозвратТоваровОтПокупателяТовары.Номенклатура,
                   |    ВозвратТоваровОтПокупателяТовары.Цена,
                   |    ПродажиСебестоимость.Стоимость";

    Выборка = Запрос.Выполнить().Выбрать();
    ДокументОбъект= Ссылка.ПолучитьОбъект();
    Для каждого СтрТабличнойЧасти Из ДокументОбъект.Товары Цикл
            СтрТабличнойЧасти.Себестоимость=Выборка.Стоимость;    
    КонецЦикла;
    ДокументОбъект.Записать();
Запрос пока еще не правил, но процедура не работает, где ошибка?
23 tatoshka0403
 
29.10.14
16:33
(22) к (20)
24 Ёпрст
 
29.10.14
16:44
(22) там же, где и всегда!
25 John83
 
29.10.14
18:25
(22) и где у тебя обход по выборке
PS я уж не говорю про то, что ты даже не удосужился выложить ошибку