Имя: Пароль:
1C
1С v8
СКД, компоновка и выборка данных
0 Axel2009
 
29.03.13
11:11
есть запрос
ВЫБРАТЬ
               ПродажиОбороты.Контрагент КАК Контрагент,
               ПродажиОбороты.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ втОборотыПродаж
{ВЫБРАТЬ
               Контрагент.*,
               Номенклатура.*}
ИЗ
               РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , {(Номенклатура).*, (Номенклатура.ОсновнойПоставщик).* КАК Поставщик, (Контрагент).*}) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
               ТоварыПереданныеОстатки.Номенклатура КАК Номенклатура,
               ТоварыПереданныеОстатки.Контрагент КАК Контрагент
ПОМЕСТИТЬ втТоварыПереданные
{ВЫБРАТЬ
               Контрагент.*,
               Номенклатура.*}
ИЗ
               РегистрНакопления.ТоварыПереданные.Остатки(&КонецПериода, {(Номенклатура).*, (Номенклатура.ОсновнойПоставщик).* КАК Поставщик, (Контрагент).*}) КАК ТоварыПереданныеОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
               втОборотыПродаж.Контрагент КАК Контрагент,
ЕСТЬNULL(втОборотыПродаж.Номенклатура,втТоварыПереданные.Номенклатура) КАК Номенклатура
{ВЫБРАТЬ
               Контрагент.*,
               Номенклатура.*}
ИЗ
               втОборотыПродаж КАК втОборотыПродаж
                             ЛЕВОЕ СОЕДИНЕНИЕ втТоварыПереданные КАК втТоварыПереданные
                              ПО втОборотыПродаж.Контрагент = втТоварыПереданные.Контрагент
                                              И втОборотыПродаж.Номенклатура = втТоварыПереданные.Номенклатура

в выбранных полях ТОЛЬКО Номенклатура.
как добиться, чтобы СКД не выбирала в первых 2х запросах поле Контрагент?
что-то не получается..
1 SherifSP
 
29.03.13
11:13
(0) В ручную стереть?
2 Axel2009
 
29.03.13
11:19
(1) если понадобится выбор торговой точки в выводе отчета, то куда стирать?
3 Axel2009
 
29.03.13
12:17
костыль найден. решение нет.
4 Defender aka LINN
 
29.03.13
12:20
У тебя ж соединение по контрагенту идет.
5 c00Lo
 
29.03.13
12:36
Ничего не понятно, ты к втОборотыПродаж пытаешься прицепить левым соединением другую таблицу.
У тебя втОборотыПродаж.Номенклатура никогда не будет рана NULL.
6 c00Lo
 
29.03.13
12:42
Попробую протелепатировать.
Сделать отдельно таблицу с контрагентами по 2м регистрам. и уже к ней цеплять втОборотыПродаж и втТоварыПереданные  с левым соединением со связью по контрагенту.
7 Axel2009
 
29.03.13
12:56
(4) да идет. но только когда СКДшка формируется в выбранных полях нет Контрагент, значит их и выбирать не надо и по ним соединять не надо.
однако подобного не происходит, и выбираются ВСЕ колонки. но этого можно избежать, если использовать внутренний запрос:

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТоварыПереданныеОстатки.Номенклатура КАК Номенклатура,
   ТоварыПереданныеОстатки.Контрагент КАК Контрагент
ПОМЕСТИТЬ втТоварыПереданные
{ВЫБРАТЬ
   Контрагент.* КАК Контрагент,
   Номенклатура.*}
ИЗ
   РегистрНакопления.ТоварыПереданные.Остатки(&КонецПериода, {(Номенклатура).*, (Номенклатура.ОсновнойПоставщик).* КАК Поставщик, (Контрагент).* КАК Контрагент}) КАК ТоварыПереданныеОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЕСТЬNULL(втОборотыПродаж.Контрагент, втТоварыПереданные.Контрагент) КАК Контрагент,
   ЕСТЬNULL(втОборотыПродаж.Номенклатура, втТоварыПереданные.Номенклатура) КАК Номенклатура
{ВЫБРАТЬ
   Контрагент.* КАК Контрагент,
   Номенклатура.* КАК Номенклатура}
ИЗ
   втОборотыПродаж КАК втОборотыПродаж
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           втТоварыПереданные.Номенклатура КАК Номенклатура,
           втТоварыПереданные.Контрагент КАК Контрагент
       {ВЫБРАТЬ
           Номенклатура.*,
           Контрагент.*}
       ИЗ
           втТоварыПереданные КАК втТоварыПереданные) КАК втТоварыПереданные
       ПО втОборотыПродаж.Номенклатура = втТоварыПереданные.Номенклатура
           И втОборотыПродаж.Контрагент = втТоварыПереданные.Контрагент

в этом случае результирующий запрос не будет нигде содержать поле "Контрагент", что даст прирост, потому как во временных таблицах не будет среза по контрагентам.
8 Axel2009
 
29.03.13
13:20
(5) вопрос был связан не с ISNULL, а с другой вещью, убрать из выборки лишние колонки, чтобы результирующий запрос выполнялся быстрее
Основная теорема систематики: Новые системы плодят новые проблемы.