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


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Как организ. отбор док-тов разных видов по складу?
24. Июля 2006 :: 13:05
Печать  
Конфигурация ТиС для Украины.
Переписываю отчет "Продажи"!
Склад есть только в шапке документа.
Как правильно запросом выбрать и отфильтровать те документы, которые необходимы?

|SELECT
|      $Рег.Товар as [Товар $Справочник.Номенклатура],
|      $СпрНом1.ТорговаяМарка as [ТорговаяМарка $Справочник.ТорговыеМарки],
|      $Рег.ОстатокТовара as ОстатокТовара,
|      $Рег.Оборот as Оборот,
|      $Рег.Прибыль as Прибыль,
|      Жур.IDDoc as [Док $Документ],
|      Жур.IDDocDef as Док_вид,
|      CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
|
|FROM
|      $Регистр.ПартииТоваров as Рег
|      INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
|      INNER JOIN $Справочник.Номенклатура as СпрНом1 ON
|            СпрНом1.ID = $Рег.Товар
|WHERE
|      (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~) AND
|      ($Рег.Фирма = :услФирма)

Что правильней и эффективней использовать?
1)
|      COALESCE($ДокРасходнаяНакладная.Склад, $ДокРасходнаяРозничная.Склад, $ДокПриходнаяНакладная.Склад,
|            $ДокЧекКА.Склад, $ДокОтчетКА.Склад, $ДокРасходнаяРозничная_ТТ.Склад, $ДокЧекКА_ТТ.Склад) as
|            [Склад $Справочник.МестаХранения]
и
     |      LEFT JOIN
     |            $Документ.РасходнаяНакладная as ДокРасходнаяНакладная ON ДокРасходнаяНакладная.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.РасходнаяРозничная as ДокРасходнаяРозничная ON ДокРасходнаяРозничная.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.ПриходнаяНакладная as ДокПриходнаяНакладная ON ДокПриходнаяНакладная.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.ЧекКА as ДокЧекКА ON ДокЧекКА.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.ОтчетКА as ДокОтчетКА ON ДокОтчетКА.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.РасходнаяРозничная_ТТ as ДокРасходнаяРозничная_ТТ ON ДокРасходнаяРозничная_ТТ.IDDoc = Жур.IDDoc
|      LEFT JOIN
|            $Документ.ЧекКА_ТТ as ДокЧекКА_ТТ ON ДокЧекКА_ТТ.IDDoc = Жур.IDDoc
и фильтр на Склад
2)
|INNER JOIN
|      $Документ.ЧекКА_ТТ as ДокЧекКА_ТТ ON ДокЧекКА $ДокЧекКА_ТТ.Склад = :ВыбСклад?

  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Как организ. отбор док-тов разных видов по скл
Ответ #1 - 24. Июля 2006 :: 13:17
Печать  
Лучше все же через графу отбора.
Глянь в РасшЖурнале или в доке, там есть пример.
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #2 - 24. Июля 2006 :: 13:30
Печать  
какая информация еще нужна?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Как организ. отбор док-тов разных видов по скл
Ответ #3 - 24. Июля 2006 :: 13:33
Печать  
Тьфу ты ...
Ты же про отчет, ну тогда никуда не деться от джойнов ...
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #4 - 24. Июля 2006 :: 15:02
Печать  
Алгоритм следующий!
отбираю по регистру "ПартииТоваров",
присоединяю "_1Sjourn",
а через него нужно отобрать документы разного вида с конкретным значением Склад!!!
каким образом это реализовать???
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #5 - 24. Июля 2006 :: 15:04
Печать  
какая последовательность джоинов и на каком этапе ставить фильтр по складу???
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #6 - 24. Июля 2006 :: 15:18
Печать  
Код
Выбрать все
|FROM (SELECT ПриходнаяНакладная.IDDOC
|		FROM $Документ.ПриходнаяНакладная AS ПриходнаяНакладная
|		WHERE ($ПриходнаяНакладная.Склад = :ВыбСклад)
|		UNION ALL
|		SELECT РасходнаяНакладная.IDDOC
|		FROM $Документ.РасходнаяНакладная AS РасходнаяНакладная
|		WHERE ($РасходнаяНакладная.Склад = :ВыбСклад)) AS Подзапрос
|	INNER JOIN $Регистр.ПартииТоваров AS ПартииТоваров ON Подзапрос.IDDOC = ПартииТоваров.IDDOC 


Типа того..
  

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


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #7 - 24. Июля 2006 :: 16:23
Печать  
а куда тогда воткнуть период???
ведь дата есть только у журнала!!!
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Как организ. отбор док-тов разных видов по скл
Ответ #8 - 25. Июля 2006 :: 04:55
Печать  
А что мешает добавить еще один джойн с _1sjourn со всеми вытекающими последствиями?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #9 - 25. Июля 2006 :: 06:17
Печать  
mc писал(а) 24. Июля 2006 :: 16:23:
а куда тогда воткнуть период???
ведь дата есть только у журнала!!!

Если включить "быструю обработку движений", то дата будет у каждого движения регистра.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #10 - 25. Июля 2006 :: 16:12
Печать  
сделал так!
Код
Выбрать все
|SELECT
|	CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
|	$СпрНом1.ТорговаяМарка as [ТорговаяМарка $Справочник.ТорговыеМарки],
|	$СпрНом1.Артикул as Артикул,
|	$Рег.Товар as [Товар $Справочник.Номенклатура],
|	Подзапрос.Склад as [Склад $Справочник.МестаХранения],
|	$Рег.ОстатокТовара as Кво,
|	$Рег.Оборот as Оборот,
|	$Рег.Прибыль as Наценка
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	$Рег.КодОперации as КодОперации,
|
|FROM (
|		SELECT ДокРасходнаяРозничнаяТТ.IDDoc, $ДокРасходнаяРозничнаяТТ.Склад as Склад
|		FROM $Документ.РасходнаяРозничная_ТТ AS ДокРасходнаяРозничнаяТТ
|		UNION ALL
|		SELECT ДокЧекКАТТ.IDDoc, $ДокЧекКАТТ.Склад as Склад
|		FROM $Документ.ЧекКА_ТТ AS ДокЧекКАТТ
|		UNION ALL
|		SELECT ДокРасходнаяНакладная.IDDoc, $ДокРасходнаяНакладная.Склад as Склад
|		FROM $Документ.РасходнаяНакладная AS ДокРасходнаяНакладная
|		UNION ALL
|		SELECT ДокРасходнаяРозничная.IDDoc, $ДокРасходнаяРозничная.Склад as Склад
|		FROM $Документ.РасходнаяРозничная AS ДокРасходнаяРозничная
|		UNION ALL
|		SELECT ДокПриходнаяНакладная.IDDoc, $ДокПриходнаяНакладная.Склад as Склад
|		FROM $Документ.ПриходнаяНакладная AS ДокПриходнаяНакладная
|		UNION ALL
|		SELECT ДокЧекКА.IDDoc, $ДокЧекКА.Склад as Склад
|		FROM $Документ.ЧекКА AS ДокЧекКА
|		UNION ALL
|		SELECT ДокОтчетКА.IDDoc, $ДокОтчетКА.Склад as Склад
|		FROM $Документ.ОтчетКА AS ДокОтчетКА
|	) as Подзапрос
|	INNER JOIN $Регистр.ПартииТоваров AS Рег ON Подзапрос.IDDOC = Рег.IDDOC
|	INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
|	INNER JOIN $Справочник.Номенклатура as СпрНом1 ON
|		СпрНом1.ID = $Рег.Товар
|WHERE
|	(Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)
|	AND ($Рег.Фирма = :услФирма)
|	AND ($Рег.КодОперации Collate Cyrillic_General_CS_AS in (" + МетаДата.ПолучитьСтрокуИзСЗ(мсзКодыОперацийПродажи) + "))
|	AND %услСклад
|	AND %услТовар
 


может комуто пригодится
еще можно ставить условия на склад на каждый запрос по виду документов
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Как организ. отбор док-тов разных видов по скл
Ответ #11 - 26. Июля 2006 :: 05:29
Печать  
А зачем вот это?

CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)

Разве

LEFT(Жур.Date_Time_IDDoc, 8) [ДатаД $Дата] не достаточно?

И возвращаясь к цитате выше, от этого

INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc

тоже можно избавиться.
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #12 - 26. Июля 2006 :: 11:49
Печать  
Цитата:
А зачем вот это?
CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) 
Разве 
LEFT(Жур.Date_Time_IDDoc, 8) [ДатаД $Дата] не достаточно?

CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) взято из хелпа по 1С++
Цитата:
И возвращаясь к цитате выше, от этого
INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
тоже можно избавиться

а каким образом тогда получить Жур.Date_Time_IDDoc???
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Как организ. отбор док-тов разных видов по скл
Ответ #13 - 26. Июля 2006 :: 12:24
Печать  
Из документации ...

Установка флага БыстраяОбработкаДвижений.
Очень полезен при частых расчетах регистра задним числом, а также при снятии отчета за не полный период.
При установке этого флага в таблицу движений регистра добавляется поле Date_Time_IDDoc и IDDocDef, что убирает необходимость присоединения таблицы _1SJourn для определения даты.
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как организ. отбор док-тов разных видов по скл
Ответ #14 - 26. Июля 2006 :: 16:13
Печать  
Базе уже 3 года! предлагаешь поэкспериментировать?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать