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


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Помогите пож-та!!!!!
16. Июня 2010 :: 06:19
Печать  
Очень нужна помощь! Не получается правильно написать запрос, чтобы получить данные за период (день, неделя, месяц,квартал,год и т.д). Нужно получить количество списанного товара в брак ,сам документ в котором это отражено и количество проданного этого же товара за такой же период. Текст запроса:



SQL = СоздатьОбъект("ODBCRecordset");

SQL.УстановитьТекстовыйПараметр("НачДата",ДатаОтчета1);
SQL.УстановитьТекстовыйПараметр("КонДата",ДатаОтчета2);
SQL.УстановитьТекстовыйПараметр("Подразделение",Подразделение);
SQL.УстановитьТекстовыйПараметр("Автор",ВыбСотрудник.Наименование);
SQL.УстановитьТекстовыйПараметр("Причина",ПричинаСписания);


SQL.УложитьСписокОбъектов(ВыбСклад, "#v_selected_sklad","Склады");
SQL.УложитьСписокОбъектов(ВыбТовар, "#v_selected_tovar","Товары");



ТекстЗапроса = "


|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
|$РегистрОстаткиОбороты.Брак(:НачДата,:КонДата~,Документ,,,,,) as Рег
|LEFT JOIN _1SJOURN AS Жур on Жур.date_time_iddoc=Рег.ПозицияДокумента
|LEFT JOIN $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,,,) as РегПродажи ON
|Рег.Товар = РегПродажи.Товар
|LEFT JOIN
|$Документ.Списание as ДокС ON ДокС.IDDoc = Жур.IDDoc
|LEFT JOIN
|$Документ.Акт_ТМЦ as ДокА ON ДокА.IDDoc= Жур.IDDoc
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+"
|"+?(ВыбСклад.GetListSize()>0,"and (Рег.Склад IN (SELECT val FROM #v_selected_sklad))","")+"
|"+?(ВыбТовар.GetListSize()>0,"and (Рег.Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|"+?(ВыбСотрудник.Выбран() =1 ,"and (ДокС.$ОбщийРеквизит.АвторПроведения =:Автор)","")+"
|"+?(ПричинаСписания.Выбран() =1 ,"and ($ДокС.Причина_списания =:Причина)","")+"
|"+?(ПричинаСписания.Выбран() =1 ," or ($ДокА.Причина_составления_Акта =:Причина)","")+"
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Помогите пож-та!!!!!
Ответ #1 - 16. Июня 2010 :: 07:04
Печать  
а что в этом запросе не устраивает?
  
Наверх
wwwICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите пож-та!!!!!
Ответ #2 - 16. Июня 2010 :: 07:07
Печать  
А эти "ПроцентВ" должны быть в пределах склада или "средние по больнице"?
  

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


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #3 - 16. Июня 2010 :: 07:09
Печать  
Периодичности нет в нем. Не могу с ней сделать таким образом чтобы документ движения был и разворот по периодам. Если ставлю вместо Документ, день ил и месяц или год, то ругается на поле Рег.IDdoc при попытке приджойниться к журналу документов
  
Наверх
 
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #4 - 16. Июня 2010 :: 07:13
Печать  
По поводу процентов -  надо вычислить процентное соотношение по количеству товара и по стоимости списанных позиций по  браку к проданному такому же товару  . Ну например списали в брак 10 штук морковок продали за этот же период со всех складов 40 морковок вычислить процентное соотношение брака к проданному.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите пож-та!!!!!
Ответ #5 - 16. Июня 2010 :: 07:36
Печать  
Если выбросить часть условий, результат этого будет правильным?
Код
Выбрать все
|SELECT
|	Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|	Рег.ПозицияДокумента [ПозицияДокумента],
|	Жур.IDDOC as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) 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_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.GetListSize()>0,"(Товар IN (SELECT val FROM #v_selected_tovar))","")+"
|,Товар,) as РегПродажи ON Рег.Товар = РегПродажи.Товар
|LEFT JOIN $Документ.Списание as ДокС (nolock) ON ДокС.IDDoc = Жур.IDDoc
|LEFT JOIN $Документ.Акт_ТМЦ as ДокА (nolock) ON ДокА.IDDoc= Жур.IDDoc
|WHERE
|(Жур.IDDocDef = $ВидДокумента.Списание or  Жур.IDDocDef = $ВидДокумента.Акт_ТМЦ)
|and Жур.Closed & 1 = 1
|"+?(Подразделение.Выбран() =1 ,"and (Жур.$ОбщийРеквизит.Подразделение =:Подразделение)","")+" 

  

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


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #6 - 16. Июня 2010 :: 07:43
Печать  
Да результат верный. Спасибо большое. А как быть с периодичностью (день, месяц, квартал, год...) Чтобы в отчет можно было вывести результаты по периодам?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите пож-та!!!!!
Ответ #7 - 16. Июня 2010 :: 07:56
Печать  
Тогда с выброшенными условиями, наверно, так:
Код
Выбрать все
|SELECT
|	Cast(Left(Рег.ПозицияДокумента,8) as datetime) [ДатаДок],
|	Рег.ПозицияДокумента [ПозицияДокумента],
|	Жур.IDDOC as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|   Жур.$ОбщийРеквизит.Подразделение as [Подразделение $Справочник.Подразделение],
|   COALESCE(ДокС.$ОбщийРеквизит.АвторПроведения, ДокА.$ОбщийРеквизит.АвторПроведения) 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_sklad))" + ?(ВыбТовар.GetListSize()>0, " and ", ""),"")+"
|"+?(ВыбТовар.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 записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #8 - 16. Июня 2010 :: 08:15
Печать  
Вот заметила ошибку,вернее отсутствие поля склад в запросе... Оно нужно т.к. группировка по складам тоже нужна.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите пож-та!!!!!
Ответ #9 - 16. Июня 2010 :: 08:23
Печать  
Так Anna писал(а) 16. Июня 2010 :: 08:15:
группировка по складам тоже нужна.
или Anna писал(а) 16. Июня 2010 :: 07:13:
продали за этот же период со всех складов 40 морковок

?

Как должен выглядеть ожидаемый результат?
  

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


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #10 - 16. Июня 2010 :: 08:33
Печать  
На форме отчета есть поле в котором можно установить порядок группировок.Чтобы получить группировки я после выполнения запроса пишу следующее
оличестве,ПроцентВСумме");

Строка группировки формируется исходя из проставленных на форме галочек в списке. Список следующий: Прична, Автор, Документ, Склад,Подразделение,Товар.
Например выбрали группировки  Прична, Автор, Документ . сейчас все замечательно выводится в таком виде
Товар                Списано           % по товару                % по колву
Причина                 57                  процент                         процент
   Автор                  57                      процент                     процент
     Документ1          30                         ...
     Документ2          5                           ...
     Документ3         23


Но если выбрать в группировку склад,то группировать не будет, т.к. напишет что   Колонка 'Склад' не найдена!
  
Наверх
 
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #11 - 16. Июня 2010 :: 08:38
Печать  
а при попытке добавить в запрос |      Рег.Склад as [Склад $Справочник.Склады] и РегПродажи.Склад as [Склад $Справочник.Склады] пишет ошибку

Invalid column name 'Склад'.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите пож-та!!!!!
Ответ #12 - 16. Июня 2010 :: 08:42
Печать  
Ok.
  • Вернёмся к #2. Получаем списание по складам. Проценты при этом - от продаж по складу или от общих продаж?
  • Где в этом примере вывод результата по периодам?
  • Вопрос на засыпку. Сколько будет 30+5+23?  Улыбка
  

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


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #13 - 16. Июня 2010 :: 08:47
Печать  
Склады нужны именно те которые фигурируют в регистре брак, по регистру продажи отбора по складам не нужно, т.к. нужны продажи по всем складам.Получается что запросом к регистру БРАК  я смотрю по выбранному складу сколько списали в брак, а по продажам по всем складам смотрю сколько этого товара продали по всем складам. Фильтр к регистру ПРОДАЖИ может быть товар ну и период. И высчитываю процентное соотношение брака к проданному
  
Наверх
 
IP записан
 
Anna
Junior Member
**
Отсутствует


1C++

Сообщений: 39
Зарегистрирован: 02. Декабря 2009
Пол: Женский
Re: Помогите пож-та!!!!!
Ответ #14 - 16. Июня 2010 :: 08:49
Печать  
от общих продаж
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать