Имя: Пароль:
1C
1С v8
Помогите с запросом
0 AlvlSpb
 
10.02.17
20:07
ломал голову, но так и не сообразил как сделать. Задача - отобрать заказы покупателя и номенклатуру где в ТЧ Запасы есть резервирование товара, но на дату заказа нет этого товара на складах. Казалось бы просто. Сделал запрос:

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


Но параметр &Дата в вирт таблице Запасы.Остатки должна быть дата заказа, т.е. результат этой же выборки - Выборка.Дата
  Как можно получить нужную дату в данном случае?
1 ГдеСобака Зарыта
 
10.02.17
20:10
В поиск "срез последних на каждую дату".
2 AlvlSpb
 
10.02.17
20:14
(1) Какой срез последних? - регистр накопления а не сведений. И в том и вопрос, что заказов тьма и нужно проверить в каких есть резерв но на ДАТУ заказа этого товара не было на складах
3 jsmith82
 
10.02.17
20:22
(2) ты его не понял
4 AlvlSpb
 
10.02.17
20:24
(3) Возможно. Тогда нужно разъяснение
5 jsmith82
 
10.02.17
20:28
Да там про логику запроса к РС. Получаем цену на разные даты
В данном случае у нас должна быть таблица ОстаткиИОбороты РН с периодичностью Регистратор
6 AlvlSpb
 
10.02.17
20:33
(5) Кажется начинаю понимать. Сейчас попробую. Спасибо за разъяснение
7 AlvlSpb
 
10.02.17
21:02
Нет. Не разобрался. Вопрос остается
8 jsmith82
 
10.02.17
21:12
Опаньке
9 jsmith82
 
10.02.17
21:12
проблема с соединением двух таблиц?
10 AlvlSpb
 
10.02.17
21:32
(9) Кажется сделал. Соединил таблицы так

Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки
        ПО (ЗаказПокупателяЗапасы.Ссылка = ЗапасыОстатки.ЗаказПокупателя.Ссылка)
11 h-sp
 
10.02.17
21:45
(10) не прокатит
12 AlvlSpb
 
10.02.17
21:50
(11) Да. Проверил отчетами. Врет
13 h-sp
 
10.02.17
21:54
(12) если пишешь

РегистрНакопления.Запасы.Остатки

без параметра &Дата, то это значит остатки на сегодняшний день.
14 AlvlSpb
 
10.02.17
22:03
(13) В первоначальном запросе есть этот параметр, но в том и вопрос как его получить, если он тоже результат выборки.
15 h-sp
 
10.02.17
22:57
(14) откажись от таблицы остатки. Пользуйся таблицей ОстаткиИОбороты
16 mkalimulin
 
10.02.17
23:17
(0) Эта задача называется "Остатки на каждую дату в запросе". Посмотрите поиском - найдете примеры решений.
Пользуйтесь конструктором JUG.
http://catalog.mista.ru/public/569569/
Там есть библиотека шаблонов, и этот случай тоже.
17 AlvlSpb
 
10.02.17
23:24
(15) А почему ОстаткиИОбороты? Логики не понимаю

(16) Спасибо за подсказку. Буду разбираться
18 jsmith82
 
10.02.17
23:55
конфы с собой нет
написал в блокноте


ВЫБРАТЬ
       ЗаказПокупателяЗапасы.Ссылка,
       ЗаказПокупателяЗапасы.Ссылка.Дата КАК Дата,
    ЗаказПокупателяЗапасы.Номенклатура,
        ЗаказПокупателяЗапасы.Резерв
ПОМЕСТИТЬ ВтЗаказы
ИЗ
        Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы  
ГДЕ
        ЗаказПокупателяЗапасы.Резерв > 0
;

ВЫБРАТЬ
    ОО.Период,
    ОО.Номенклатура,
    ОО.КоличествоНачальныйОстаток КАК Остаток
ПОМЕСТИТЬ ВтОО
ИЗ
    РегистрНакопления.Запасы.ОстаткиИОбороты(&НачалоПериода, &КонецПЕриода, Регистратор, Движения, ) КАК ОО

;

ВЫБРАТЬ
    ВтЗаказы.Ссылка,
    ВтЗаказы.Дата,
    ВтЗаказы.Номенклатура,
    ВтЗаказы.Резерв,
    МАКСИМУМ(ЕСТЬNULL(ВтОО.Период, Дата(1, 1, 1)) КАК Период
ПОМЕСТИТЬ ВтЗаказыСПериодомСоединения
ИЗ
    ВтЗаказы КАК ВтЗаказы
    ЛЕВОЕ СОЕДИНЕНИЕ ВтОО КАК ВтОО
        ПО ВтЗаказы.Номенклатура = ВтОО.Номенклатура
        И ВтЗаказы.Дата >= ВтОО.Период
СГРУППИРОВАТЬ ПО
    ВтЗаказы.Ссылка,
    ВтЗаказы.Дата,
    ВтЗаказы.Номенклатура,
    ВтЗаказы.Резерв

;

ВЫБРАТЬ
    ВтЗаказыСПериодомСоединения.Ссылка,
    ВтЗаказыСПериодомСоединения.Дата,
    ВтЗаказыСПериодомСоединения.Номенклатура,
    ВтЗаказыСПериодомСоединения.Резерв,
    ЕСТЬNULL(ВтЗаказыСПериодомСоединения.Остаток, 0) КАК Остаток
ИЗ
    ВтЗаказыСПериодомСоединения КАК ВтЗаказыСПериодомСоединения
    ЛЕВОЕ СОЕДИНЕНИЕ ВтОО КАК ВтОО
        ПО ВтЗаказыСПериодомСоединения.Номенклатура = ВтОО.Номенклатура
        И ВтЗаказыСПериодомСоединения.Период = ВтОО.Период
ГДЕ
    ЕСТЬNULL(ВтЗаказыСПериодомСоединения.Остаток, 0) = 0
19 AlvlSpb
 
11.02.17
00:58
(18) Спасибо большое. Работает! Вызывает уважение как такое можно написать без конфигуратора в блокноте (три незначительные ошибки поправил) Снимаю шляпу и огромная благодарность.
20 AlvlSpb
 
11.02.17
12:13
(18) Еще раз спасибо за помощь. Но.

При детальной проверке
выяснилось, что запрос выдает неверные данные. На основе (точнее на идеи) вашего запроса все-таки сделал свой, который выдал правильный результат (проверил более десятка заказов по отчетам и на разные даты). Сомнения остаются. Посмотрите проф взглядом

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

УПОРЯДОЧИТЬ ПО
    ЗаказПокупателяЗапасы.Ссылка.Дата
21 jsmith82
 
11.02.17
13:13
одну ошибку в (18) нашел
ИЗ
    ВтЗаказыСПериодомСоединения КАК ВтЗаказыСПериодомСоединения
    ЛЕВОЕ СОЕДИНЕНИЕ ВтОО КАК ВтОО
        ПО ВтЗаказыСПериодомСоединения.Номенклатура = ВтОО.Номенклатура
        И ВтЗаказыСПериодомСоединения.Период <= ВтОО.Период

В (20) нерабочий вариант
22 h-sp
 
11.02.17
13:35
(20) вообще очень странный запрос, непонятно зачем он нужен.
Зачем вы выводите

ЗапасыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток

он же всегда равен 0.