Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Обращение к реквизиту регистра (число прочтений - 4544 )
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Обращение к реквизиту регистра
02. Июля 2010 :: 05:27
Печать  
Доброе утро. Подскажите пожалуйста такой вопрос. Есть запрос, нужно добавить в него условие по следующему признаку, если реквизит ТипБрак = 1 тогда считать  сумму РегПродажи.КоличествоОборот as ПродалиБракКоличество иначе если движение с ТипБрак = 0 Тогда
РегПродажи.КоличествоОборот as ПродалиКоличество

Соотвтетственно в результирующей таблице получить отдельно количество проданного бракованного товара и не бракованного из регистра Продажи.


|SELECT
|      Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|      Рег.ПозицияДокумента [ПозицияДокумента],
|      Жур.IDDOC as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) as Автор,
|      "+?(ПериодичностьСтр <> "Пусто" ,"$НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,","")+"
//|      $НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,
|      Рег.Склад as [Склад $Справочник.Склады],
|      Рег.Товар as [Товар $Справочник.Товары],
|      Рег.ОстатокТовараКонечныйОстаток as Количество,
|      Рег.СтоимостьКонечныйОстаток as Сумма,
|      РегПродажи.Товар as [ТоварПродажи $Справочник.Товары],
|      РегПродажи.СебестоимостьОборот as ПродалиНаСумму,
|      РегПродажи.КоличествоОборот as ПродалиКоличество,
|      РегПродажи.ТипБрак asБрак,
|      ((Рег.ОстатокТовараПриход*100)/РегПродажи.КоличествоОборот) as ПроцентВКоличестве,
|      ((Рег.СтоимостьПриход*100)/РегПродажи.СебестоимостьОборот) as ПроцентВСумме,
|   COALESCE($ДокС.Причина_списания,$ДокА.Причина_составления_Акта ) as [ПричинаСписания $Перечисление.Причина_Акта]
|FROM
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,Движения,,
|"+?(ВыбСклад.GetListSize()>0,"(Склад IN (SELECT val FROM #v_selected_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,(Товар,Склад),) as Рег
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокА.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокА.Причина_составления_Акта =:Причина)","")+"
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|and not COALESCE(ДокС.IDDOC, ДокА.IDDOC) is null
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к реквизиту регистра
Ответ #1 - 02. Июля 2010 :: 06:41
Печать  
Условие на реквизит регистра есть только в виртуальной табличке РегистрОбороты.

А для тебя выход - отказаться от РегистрОстаткиОбороты,
и либо всё развернуть через юннионы + условие на реквизит при получении Прихода/расхода, либо соединять отдельно запрос к Останкам и Оборотам с условием на реквизит.
  
Наверх
 
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Обращение к реквизиту регистра
Ответ #2 - 02. Июля 2010 :: 06:54
Печать  
т.е. что то типа такого?  Я только учусь....многое непонятно
|SELECT
|      Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|      Рег.ПозицияДокумента [ПозицияДокумента],
|      Жур.IDDOC as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) as Автор,
|      "+?(ПериодичностьСтр <> "Пусто" ,"$НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,","")+"
|      Рег.Склад as [Склад $Справочник.Склады],
|      Рег.Товар as [Товар $Справочник.Товары],
|      Рег.ОстатокТовараКонечныйОстаток as Количество,
|      Рег.СтоимостьКонечныйОстаток as Сумма,
|      РегПродажи.Товар as [ТоварПродажи $Справочник.Товары],
|      РегПродажи.СебестоимостьОборот as ПродалиНаСумму,
|      РегПродажи.КоличествоОборот as ПродалиКоличество,
|      ((Рег.ОстатокТовараПриход*100)/РегПродажи.КоличествоОборот) as ПроцентВКоличестве,
|      ((Рег.СтоимостьПриход*100)/РегПродажи.СебестоимостьОборот) as ПроцентВСумме,
|   COALESCE($ДокС.Причина_списания,$ДокА.Причина_составления_Акта ) as [ПричинаСписания $Перечисление.Причина_Акта]
|FROM
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,Движения,,
|"+?(ВыбСклад.GetListSize()>0,"(Склад IN (SELECT val FROM #v_selected_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,(Товар,Склад),) as Рег
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокА.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокА.Причина_составления_Акта =:Причина)","")+"
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|and not COALESCE(ДокС.IDDOC, ДокА.IDDOC) is null 
|union all
|SELECT
|      Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|      Рег.ПозицияДокумента [ПозицияДокумента],
|      Жур.IDDOC as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) as Автор,
|      "+?(ПериодичностьСтр <> "Пусто" ,"$НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,","")+"
|      Рег.Склад as [Склад $Справочник.Склады],
|      Рег.Товар as [Товар $Справочник.Товары],
|      Рег.ОстатокТовараКонечныйОстаток as Количество,
|      Рег.СтоимостьКонечныйОстаток as Сумма,
|      РегПродажи.Товар as [ТоварПродажи $Справочник.Товары],
|      РегПродажи.СебестоимостьОборот as ПродалиНаСуммуБрака,
|      РегПродажи.КоличествоОборот as ПродалиКоличествоБрака,
|      ((Рег.ОстатокТовараПриход*100)/РегПродажи.КоличествоОборот) as ПроцентВКоличестве,
|      ((Рег.СтоимостьПриход*100)/РегПродажи.СебестоимостьОборот) as ПроцентВСумме,
|   COALESCE($ДокС.Причина_списания,$ДокА.Причина_составления_Акта ) as [ПричинаСписания $Перечисление.Причина_Акта]
|FROM
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,Движения,,
|"+?(ВыбСклад.GetListSize()>0,"(Склад IN (SELECT val FROM #v_selected_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,(Товар,Склад),) as Рег
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|ТипБрак = 1,Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокА.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокА.Причина_составления_Акта =:Причина)","")+"
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|and not COALESCE(ДокС.IDDOC, ДокА.IDDOC) is null 
|";
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к реквизиту регистра
Ответ #3 - 02. Июля 2010 :: 07:27
Печать  
Неее... Улыбка
Возьми из FAQ статью по прямым запросом, там есть разворот ВТ для дбф, сделай по аналогии.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к реквизиту регистра
Ответ #4 - 02. Июля 2010 :: 08:28
Печать  
Anna писал(а) 02. Июля 2010 :: 05:27:
Есть запрос, нужно добавить в него условие по следующему признаку, если реквизит ТипБрак = 1 тогда считать  сумму РегПродажи.КоличествоОборот as ПродалиБракКоличество иначе если движение с ТипБрак = 0 Тогда
РегПродажи.КоличествоОборот as ПродалиКоличество  

Замени ВТ $РегистрОбороты.Продажи на таблицу движений - $Регистр.Продажи. Тогда сможешь писать в списке выбора

Код
Выбрать все
sum(case when $РегПродажи.ТипБрак = 1
then case when РегПродажи.debkred = 0
	then $РегПродажи.Количество
	else -$РегПродажи.Количество
	end
else 0
end) as ПродалиБракКоличество 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Обращение к реквизиту регистра
Ответ #5 - 02. Июля 2010 :: 08:59
Печать  
а как быть с условием ко торе сейчас есть в ВТ
....

|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+",Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к реквизиту регистра
Ответ #6 - 02. Июля 2010 :: 09:35
Печать  
$РегПродажи.Товар IN (SELECT val FROM #v_selected_tovar)

Период - зависит от того, включена ли быстрая обработка движений. Если нет - нужно соединить его с таблицей _1sjourn. Дальше - условие на date_time_iddoc.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Обращение к реквизиту регистра
Ответ #7 - 02. Июля 2010 :: 09:42
Печать  
Быстрая обработка движений включена..
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к реквизиту регистра
Ответ #8 - 02. Июля 2010 :: 09:54
Печать  
$РегПродажи.Товар IN (SELECT val FROM #v_selected_tovar)
and РегПродажи.date_time_iddoc between :НачДата and :КонДата~


в секцию where
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Обращение к реквизиту регистра
Ответ #9 - 02. Июля 2010 :: 10:00
Печать  
Получился запрос
|SELECT
|      Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|      Рег.ПозицияДокумента [ПозицияДокумента],
|      Жур.IDDOC as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) as Автор,
|      "+?(ПериодичностьСтр <> "Пусто" ,"$НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,","")+"
|      Рег.Склад as [Склад $Справочник.Склады],
|      Рег.Товар as [Товар $Справочник.Товары],
|      Рег.ОстатокТовараКонечныйОстаток as Количество,
|      Рег.СтоимостьКонечныйОстаток as Сумма,
//*** брак ***//
|      sum(case when $РегПродажи.ТипБрак = 1
|                  then case when РегПродажи.debkred = 0
|                        then $РегПродажи.Количество
|                  else -$РегПродажи.Количество
|                  end
|            else 0
|      end) as ПродалиБракКоличество,
//***//
|      РегПродажи.Товар as [ТоварПродажи $Справочник.Товары],
|      РегПродажи.Себестоимость as ПродалиНаСумму,
|      РегПродажи.Количество as ПродалиКоличество,
|      ((Рег.ОстатокТовараПриход*100)/РегПродажи.Количество) as ПроцентВКоличестве,
|      ((Рег.СтоимостьПриход*100)/РегПродажи.Себестоимость) as ПроцентВСумме,
|   COALESCE($ДокС.Причина_списания,$ДокА.Причина_составления_Акта ) as [ПричинаСписания $Перечисление.Причина_Акта]
|FROM
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,Движения,,
|"+?(ВыбСклад.GetListSize()>0,"(Склад IN (SELECT val FROM #v_selected_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,(Товар,Склад),) as Рег
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
//|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
//|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
//|ТипБрак =1,Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Регистр.Продажи as РегПродажи
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокА.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокА.Причина_составления_Акта =:Причина)","")+"
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|"+?(ВыбТовар.GetListSize()>0,"($РегПродажи.Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|and РегПродажи.date_time_iddoc between :НачДата and :КонДата~
|and not COALESCE(ДокС.IDDOC, ДокА.IDDOC) is null
|";

Но выдfет ошибку перед секцией Where. Такое впечатление что проблема в этом соединении....
|LEFT JOIN $Регистр.Продажи as РегПродажи   не совс
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к реквизиту регистра
Ответ #10 - 02. Июля 2010 :: 10:05
Печать  
Anna писал(а) 02. Июля 2010 :: 10:00:
Но выдfет ошибку перед секцией Where. Такое впечатление что проблема в этом соединении....
|LEFT JOIN $Регистр.Продажи as РегПродажи   не совс

Да, там не хватает

ON Рег.Товар = $РегПродажи.Товар

Но, чтобы меньше переписывать остальной запрос, проще будет в первоначальном запросе поменять это Цитата:
$РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,Товар,) as РегПродажи


на это
Код
Выбрать все
(select
	sum(case when $РегПродажи.ТипБрак = 1
	then case when РегПродажи.debkred = 0
		then $РегПродажи.Количество
		else -$РегПродажи.Количество
		end
	else 0
	end) as ПродалиБракКоличество,
	sum(case when $РегПродажи.ТипБрак = 0
	then case when РегПродажи.debkred = 0
		then $РегПродажи.Количество
		else -$РегПродажи.Количество
		end
	else 0
	end) as ПродалиКоличество,
	$РегПродажи.Товар as Товар
from $Регистр.Продажи РегПродажи (nolock)
where "+?(ВыбТовар.GetListSize()>0,"($РегПродажи.Товар IN (SELECT val FROM #v_selected_tovar)) and ","")+"
	РегПродажи.date_time_iddoc between :НачДата and :КонДата~
group by $РегПродажи.Товар) as РегПродажи  

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Обращение к реквизиту регистра
Ответ #11 - 02. Июля 2010 :: 10:16
Печать  
Если пишу таким образом, то ошибка ncorrect syntax near the keyword 'select'.

|SELECT
|      Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|      Рег.ПозицияДокумента [ПозицияДокумента],
|      Жур.IDDOC as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) as Автор,
|      "+?(ПериодичностьСтр <> "Пусто" ,"$НачалоПериода." + ПериодичностьСтр + "(Рег.ПозицияДокумента) Период,","")+"
|      Рег.Склад as [Склад $Справочник.Склады],
|      Рег.Товар as [Товар $Справочник.Товары],
|      Рег.ОстатокТовараКонечныйОстаток as Количество,
|      Рег.СтоимостьКонечныйОстаток as Сумма,
|      РегПродажи.Товар as [ТоварПродажи $Справочник.Товары],
|      РегПродажи.Себестоимость as ПродалиНаСумму,
|      РегПродажи.Количество as ПродалиКоличество,
|      ((Рег.ОстатокТовараПриход*100)/РегПродажи.Количество) as ПроцентВКоличестве,
|      ((Рег.СтоимостьПриход*100)/РегПродажи.Себестоимость) as ПроцентВСумме,
|   COALESCE($ДокС.Причина_списания,$ДокА.Причина_составления_Акта ) as [ПричинаСписания $Перечисление.Причина_Акта]
|FROM
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,Движения,,
|"+?(ВыбСклад.GetListSize()>0,"(Склад IN (SELECT val FROM #v_selected_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,(Товар,Склад),) as Рег
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|(select
|      sum(case when $РегПродажи.ТипБрак = 1
|      then case when РегПродажи.debkred = 0
|            then $РегПродажи.Количество
|            else -$РегПродажи.Количество
|            end
|      else 0
|      end) as ПродалиБракКоличество,
|      sum(case when $РегПродажи.ТипБрак = 0
|      then case when РегПродажи.debkred = 0
|            then $РегПродажи.Количество
|            else -$РегПродажи.Количество
|            end
|      else 0
|      end) as ПродалиКоличество,
|      $РегПродажи.Товар as Товар
|from $Регистр.Продажи РегПродажи (nolock)
|where "+?(ВыбТовар.GetListSize()>0,"($РегПродажи.Товар IN (SELECT val FROM #v_selected_tovar)) and ","")+"
|      РегПродажи.date_time_iddoc between :НачДата and :КонДата~
|group by $РегПродажи.Товар) as РегПродажи
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокА.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокА.Причина_составления_Акта =:Причина)","")+"
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|and not COALESCE(ДокС.IDDOC, ДокА.IDDOC) is null
|";
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к реквизиту регистра
Ответ #12 - 02. Июля 2010 :: 10:17
Печать  
Цитата:
sum(case when $РегПродажи.ТипБрак = 1
     then case when РегПродажи.debkred = 0
           then $РегПродажи.Количество
           else -$РегПродажи.Количество
           end
     else 0
     end) as ПродалиБракКоличество,


можно и попроще написать:


Код
Выбрать все
sum($РегПродажи.ТипБрак* $РегПродажи.Количество * (1 -  РегПродажи.debkred * 2) )	 as ПродалиБракКоличество, 



тип того

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к реквизиту регистра
Ответ #13 - 02. Июля 2010 :: 10:19
Печать  
Anna писал(а) 02. Июля 2010 :: 10:16:
Если пишу таким образом, то ошибка ncorrect syntax near the keyword 'select'.


|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|(select


вот тут у тебя нет связи никакой... т.е вложенный селект непонятно к чему..
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к реквизиту регистра
Ответ #14 - 02. Июля 2010 :: 10:23
Печать  
Anna писал(а) 02. Июля 2010 :: 10:16:
|LEFT JOIN _1SJOURN AS Жур (nolock) on Жур.date_time_iddoc=Рег.ПозицияДокумента
|left join (select
...
|group by $РегПродажи.Товар) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать