Имя: Пароль:
1C
1С v8
Не работает запрос
0 Альбатрос
 
05.07.13
07:35
Запрос:

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


Результат пустой. Косячная строка вот эта:
|    И ТоварыВНТТОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслугВНТТ

Фишка в том, что абсолютно идентичный запрос в другой обработке на этой же базе работает правильно. Где моя ошибка? (кроме ДНК)
1 chelentano
 
05.07.13
07:37
(0) если "абсолютно идентичный запрос в другой обработке на этой же базе работает правильно", значит дело в параметрах
2 shuhard
 
05.07.13
07:42
(0)[ Где моя ошибка]
строка № 15
3 Альбатрос
 
05.07.13
07:49
(1) Вобщем, разобрался. Для начала поясню, что я хочу от этого запроса: мне нужно выбрать последние даты поступлений в НТТ по складу и некоторой таблице, содержащей в себе номенклатуру и значение розн. цены, исключая все остальные док-ты. Если перед использованием этого запроса сделать переоценку склада - результат пустой. Это значит, что запрос сначала отобрал регистратор с макс. датой (в моем случае это оказалась переоценка), проверил по условию и отбросил найденный результат. Как сделать, чтобы запрос проигнорировал все регистраторы с видом НЕ поступлениеВНТТ?
4 Альбатрос
 
05.07.13
07:50
(2) Юмор такой?
5 Альбатрос
 
05.07.13
07:58
надо было указать периодичность "запись"? =)
6 Альбатрос
 
05.07.13
08:00
(5) не, неправильно
7 chelentano
 
05.07.13
08:04
(3) во вложенном запросе отбираешь все записи с нужным регистратором, потом из него выбираешь максимум
8 Альбатрос
 
05.07.13
08:05
ааа, мужики, ну как сразу отобрать из вирт. таблицы только определенный вид регистратора? Неужто 2 таблицы корячить надо?
9 Альбатрос
 
05.07.13
08:05
(7) ок, щас попробую
10 chelentano
 
05.07.13
08:12
ну и вообще, по тексту запроса, непонятно, зачем тебе тут нужна виртуальная таблица оборотов
11 viktor_vv
 
05.07.13
08:15
(10)+1. Делай по физической таблице движений. В конечном итоге виртуальная в данном случае все равно разворачивается в запрос к физической движений.
12 PiterPrg
 
05.07.13
08:23
Ну попробуй, что-ли условия добавить в параметры виртуальной таблцы Обороты (тот-самый пропущеный последний параметр)
13 chelentano
 
05.07.13
08:25
(12) условия по регистратору в параметрах ВТ?!
14 Альбатрос
 
05.07.13
08:53
(11) А есть существенная разница? Время выполнения?
15 chelentano
 
05.07.13
08:54
(14) имхо, в данном случае обращение к физической таблице должно ускорить выполнение запроса
16 Альбатрос
 
05.07.13
09:01
(15) ок, учту, спасибо!
17 Альбатрос
 
05.07.13
09:16
переделал вот так, не взлетело:

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

ТоварыВНТТ.Регистратор.Дата <= &Дата

на


ТоварыВНТТ.Период <= &Дата

Правда дату передавай конец дня или границу периода.
20 zak555
 
05.07.13
09:21
что такое ТабНом ?
21 Альбатрос
 
05.07.13
09:21
(20) ТЗ с колонками номенклатура и РозничнаяЦена
22 Альбатрос
 
05.07.13
09:21
(19) Спасибо, учту
23 viktor_vv
 
05.07.13
09:23
Посмотри еще, что тебе возвращает без внутреннего соединения с таблицей в том и другом случае.
24 Альбатрос
 
05.07.13
09:24
Мля, десятый раз перечитываю (17). Вроде же все правильно? Ну окромя Периода...
25 Альбатрос
 
05.07.13
09:29
(23) Хм... без соединения выводит все правильно, только поступленияВНТТ
26 viktor_vv
 
05.07.13
09:35
Ну значит не выполняется вот это

ПО ВложенныйЗапрос.Номенклатура = ТабЦен.Номенклатура
                           |            И ВложенныйЗапрос.ЦенаВРознице = ТабЦен.ЦенаВРознице

смотри, что там с данными.
27 viktor_vv
 
05.07.13
09:36
Убери для начала

|            И ВложенныйЗапрос.ЦенаВРознице = ТабЦен.ЦенаВРознице


и посмотри. Скорее всего тут что-то.
28 viktor_vv
 
05.07.13
09:38
Скорее всего в табНом ты берешь актуальные цены, а поступления были по другим. Поэтому только переоценка и попадает.
29 viktor_vv
 
05.07.13
09:40
(28)+ Хотя вроде бы движения по переоценке и не должны попадать. Ну хз че там у тебя.
30 viktor_vv
 
05.07.13
09:42
Сделай для проверки так

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

и смотри ч е там получилось.
31 Альбатрос
 
05.07.13
09:44
(27) (28) Абсолютно верно! Спасибо. табном.ЦенаВРозниице  я получал из другого запроса, а там как раз бралась цена с переоценки. Еще раз спасибо, все работает.
Закон Брукера: Даже маленькая практика стоит большой теории.