Вход | Регистрация


1С:Предприятие ::

Метки: 

Отбор в Построителе Отчета и левое соединение

Я
   МастерВопросов
 
26.12.12 - 15:22
Подскажите, пожалуйста, как сделать отбор средствами ПостроителяОтчета по полю СкладПродаж.
СкладПродаж - это Склад либо в регистраторе ОтчетОРозничныхПродажах, либо в регистраторе ОтчетОРозничныхПродажах.


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.ХарактеристикаНоменклатуры,
    Продажи.Количество * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК ПроданоВСЕГО
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО Продажи.Регистратор = РеализацияТоваровУслуг.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
        ПО Продажи.Регистратор = ОтчетОРозничныхПродажах.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
        ПО Продажи.Регистратор = ВозвратТоваровОтПокупателя.Ссылка
ГДЕ
    Продажи.Период >= &ДатаНачПродаж
    И Продажи.Период <= &ДатаКонПродаж
    И Продажи.ЗаказПокупателя = НЕОПРЕДЕЛЕНО
    И ВозвратТоваровОтПокупателя.Ссылка ЕСТЬ NULL 
{ГДЕ
    Продажи.Номенклатура.* КАК Номенклатура,
    РеализацияТоваровУслуг.Склад КАК СкладПродаж,
    ОтчетОРозничныхПродажах.Склад КАК СкладПродаж}
 
 
   МастерВопросов
 
1 - 26.12.12 - 15:22
Подскажите, пожалуйста, как сделать отбор средствами ПостроителяОтчета по полю СкладПродаж.
СкладПродаж - это Склад либо в регистраторе РеализацияТоваровУслуг, либо в регистраторе ОтчетОРозничныхПродажах.
   kumena
 
2 - 26.12.12 - 15:27
предположу что через "Выбор Когда ...
   kabanoff
 
3 - 26.12.12 - 15:39
Уродский запрос, ну да ладно.

Программный отбор можно сделать так:
ЭлементОтбора = Построитель.Отбор.Добавить("СкладПродаж");
        ЭлементОтбора.ВидСравнения    = ВидСравнения.Равно;
        ЭлементОтбора.Значение        = ЗначениеРеквизита;
        ЭлементОтбора.Использование    = Истина;

   kumena
 
4 - 26.12.12 - 15:45
(3) наверное чтобы использовать поле "СкладПродаж", нужно сначала его выбрать, а в исходном запросе его нет.
   kabanoff
 
5 - 26.12.12 - 15:54
(4) Не обязательно. В отборе поле есть.
   МастерВопросов
 
6 - 26.12.12 - 16:12
(3) я не спрашивал как мне програмно добавить отбор, это я и сам знаю. Мне нужно сформулировать условие в запросе по полю "СкладПродаж". То, что я привел в (0) не рабочее.
   Axel2009
 
7 - 26.12.12 - 16:15
{ГДЕ
    Продажи.Номенклатура.* КАК Номенклатура,
    ЕСТЬNULL(РеализацияТоваровУслуг.Склад, ОтчетОРозничныхПродажах.Склад) КАК СкладПродаж}
   МастерВопросов
 
8 - 26.12.12 - 16:21
(3) " Уродский запрос, ну да ладно."
===============================

Если подскажите как по Складу отфильтровать данные в регистре Продажи, буду благодарен. Нужны данные именно из этого регистра. В (0) только маленький фрагмент.

//Естественно измерения "Склад" в нем нет.
   МастерВопросов
 
9 - 26.12.12 - 16:22
(7) спасибо.
Завтра попробую, думаю то что надо.
   kabanoff
 
10 - 26.12.12 - 16:36
(8) {ГДЕ (ВЫБОР 
КОГДА Регистратор ССЫЛКА Документ.РеализацияТоваровИУслуг 
ТОГДА ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровИУслуг).Склад
КОГДА ...
ТОГДА ...
КОНЕЦ).* КАК СкладПродаж}

Уродский он из-за связей с таблицами документов, которые по сути не нужны, а также из-за использования таблицы движений регистра вместо виртуальной таблицы оборотов.
И условие "И ВозвратТоваровОтПокупателя.Ссылка ЕСТЬ NULL" превращает левое соединение во внутреннее.
 
 Рекламное место пустует
   Axel2009
 
11 - 26.12.12 - 16:38
(10) "И условие "И ВозвратТоваровОтПокупателя.Ссылка ЕСТЬ NULL" превращает левое соединение во внутреннее."
посмеялсо
   kabanoff
 
12 - 26.12.12 - 16:39
(11) Где смеяться? не понял.
   Axel2009
 
13 - 26.12.12 - 16:39
(0)
кстати да
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.ХарактеристикаНоменклатуры,
    Продажи.Количество * Продажи.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Продажи.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК ПроданоВСЕГО
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО Продажи.Регистратор = РеализацияТоваровУслуг.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
        ПО Продажи.Регистратор = ОтчетОРозничныхПродажах.Ссылка
ГДЕ
    Продажи.Период >= &ДатаНачПродаж
    И Продажи.Период <= &ДатаКонПродаж
    И Продажи.ЗаказПокупателя = НЕОПРЕДЕЛЕНО
   И НЕ Продажи.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
   Axel2009
 
14 - 26.12.12 - 16:40
(12) про с левого на внутренний.
   kabanoff
 
15 - 26.12.12 - 16:44
(14) Ну а как его еще назвать? Не левое однозначно.
   Axel2009
 
16 - 26.12.12 - 16:45
(15) а как выбирают такие записи из одной таблицы, которых нет в другой???
   kabanoff
 
17 - 26.12.12 - 16:46
(16) Именно так и выбирают. Мы же говорим про название данного типа соединения. Как его назвать?
   Axel2009
 
18 - 26.12.12 - 16:47
(17) внутреннее соединение это какое?
оно левым и остается.
   МастерВопросов
 
19 - 26.12.12 - 16:48
(10) "Уродский он из-за связей с таблицами документов, которые по сути не нужны"
============================
я подумал что при неявном соединении регистр будет искать поле "Склад" во всех таблицах документов, которые есть в составном типе регистратора. Поэтому написал явное и только с тремя таблицами.


" а также из-за использования таблицы движений регистра вместо виртуальной таблицы оборотов."
=========================

Во первых виртуальная таблица это тот же подзапрос, а я делаю все за один проход. Во вторых и в главных - каким параметром виртульной таблицы задать условие на Склад?
   toypaul
 
20 - 26.12.12 - 16:49
если СкладПродаж есть только в этих документах, то можно попробовать {ГДЕ Регистратор.СкладПродаж}
   Axel2009
 
21 - 26.12.12 - 16:50
(19) правильно все сделал. именно так и надо писать, чтобы другие после тебя все поняли
   kabanoff
 
22 - 26.12.12 - 16:50
(18) Я имею ввиду, что это внутреннее соединение первой таблицы по отношению к пустому множеству второй таблицы. Это уже не левое соединение. Что не так?
   toypaul
 
23 - 26.12.12 - 16:50
(19) все правильно сделал.
   МастерВопросов
 
24 - 26.12.12 - 16:52
(20) нет, Склад есть в том же "ВозвратОтПокупателя" и в других доках тоже.
   Axel2009
 
25 - 26.12.12 - 16:54
(24) если надо только 2 таблицы учесть, добавь отбор на эти 2 вида регистратора..
   kabanoff
 
26 - 26.12.12 - 16:54
(21) "Во первых виртуальная таблица это тот же подзапрос, а я делаю все за один проход"
Глупость. Для чего они (виртуальные таблицы) по твоему мнению тогда нужны?

"Во вторых и в главных - каким параметром виртульной таблицы задать условие на Склад"
Если его нет в измерениях регистра, то никаким. Но это не повод не использовать виртуальные таблицы.
   Axel2009
 
27 - 26.12.12 - 16:55
(22) сколько на форумах читаю про эти соединения и не только в 1с, но такой извращенной мысли не видел.. можешь называть это так
   kabanoff
 
28 - 26.12.12 - 16:55
(20) Так делать нельзя. Разыменование полей составного типа приводит к увеличению соединений в запросе.
   kabanoff
 
29 - 26.12.12 - 16:56
(27) Называй как хочешь, я не против.
   Axel2009
 
30 - 26.12.12 - 16:56
(26)
1. для того, чтобы по регистратору не читать ниче. как бы в виртуальной таблице все свернуто. а если идет периодичность регистратор, то запросы идут в любом случае к основной таблице.
2. вполне себе повод. и причем очень даже правильный
   kabanoff
 
31 - 26.12.12 - 16:58
(30) А как насчет других отборов, например, по номенклатуре? Тоже не повод?
   Axel2009
 
32 - 26.12.12 - 16:58
(29) ты главное на форумах так не говори, а то не поймут сразу то. придется объяснять. либо сразу вот это все и пиши.
   Axel2009
 
33 - 26.12.12 - 16:58
(31) естественно.
 
 
   kabanoff
 
34 - 26.12.12 - 17:05
(33) Т.е. ты считаешь, что использовать таблицу движений РН в случае, если нужна периодичность по регистратору, будет правильно, нежели использовать виртуальную таблицу оборотов?
   Axel2009
 
35 - 26.12.12 - 17:12
(31) открою махонький секрет. в виртуальной таблице итогов нет поля регистратор. да и поле Период там периодичен месяцу. поэтому если ты собираешь данные за 1 день, то может выгоднее взять данные с таблицы движений, чем с виртуальной таблицы.
   kabanoff
 
36 - 26.12.12 - 17:22
(35) Не хочу тебя расстраивать, но это не секрет.
А если пользователь укажет другой период? Да и с чего ты взял, что компоновщику запроса выгоднее, а что нет?
Сделай отбор по таблице движений, это будет быстрее?
   Axel2009
 
37 - 26.12.12 - 17:25
(36)
1. пусть указывает. пользуй обороты, только с периодичностью регистратор все равно к таблице итогов не будет обращений
2. я беру то, что 1с отправляет на скуль сервер.
3. в каком случае? если нужен регистратор или если он не нужен?



Список тем форума
Рекламное место пустует Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует