Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема UNION ALL для поля с разными типами... (число прочтений - 2888 )
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
UNION ALL для поля с разными типами...
06. Июля 2006 :: 08:24
Печать  
Тренируюсь с прямыми запросами.
вот такая проблемка, делаю запросы, объединяю с пом UNION ALL и получаю вот такой результ (на картинке). Хотелось бы получить конечно в колонке товары, пока не знаю как сделать.
В Документестроки.Счет - Товар - неопределенного типа, может быть как строкой так и рядом справочников,
в Расходной и розничых накладных тип Справочник.Номенклатура. Посоветуйте как это нормализовать пожалуйста.
Тесты запросов:
Код
Выбрать все
	SELECT
		$СчетСтроки.Товар [Товар as $Неопределенный]
		, 0 as Отгружено
		, $СчетСтроки.Количество * $СчетСтроки.Коэффициент КоличествоВДок

	FROM
		$ДокументСтроки.Счет AS СчетСтроки
	WHERE (	СчетСтроки.IDDOC = :ВыбДокумент )
UNION ALL
		SELECT
			Товар as [Товар $Неопределенный],
			КолОтгрузки Отгружено,
			0 as КоличествоВДок
		FROM (

		SELECT
			$РН_Строки.Товар as Товар,
			($РН_Строки.Количество*$РН_Строки.Коэффициент) КолОтгрузки,
			РН_Строки.IDDOC as Док
		FROM
			$ДокументСтроки.РасходнаяНакладная РН_Строки

		UNION ALL
		SELECT
			$РР_Строки.Товар as Товар,
			($РР_Строки.Количество*$РР_Строки.Коэффициент) as КолОтгрузки,
			РР_Строки.IDDOC as Док
		FROM
				$ДокументСтроки.РасходнаяРозничная РР_Строки
		) Строки

		WHERE
			Док IN (
	SELECT
		iddoc
	FROM
		_1SJOURN JOURN(NOLOCK), _1SCRDOC CRDOC(NOLOCK)
	WHERE
		JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC
		and CRDOC.MDID=0
		and CRDOC.PARENTVAL = :ВыбДокумент*

)

============================================

	SELECT
		СчетСтроки.sp206 [Товар as $Неопределенный]
		, 0 as Отгружено
		, СчетСтроки.sp207 * СчетСтроки.sp210 КоличествоВДок

	FROM
		dt196 AS СчетСтроки
	WHERE (	СчетСтроки.IDDOC = '  2GW3   ' )
UNION ALL
		SELECT
			Товар as [Товар $Неопределенный],
			КолОтгрузки Отгружено,
			0 as КоличествоВДок
		FROM (

		SELECT
			РН_Строки.sp423 as Товар,
			(РН_Строки.sp424*РН_Строки.sp427) КолОтгрузки,
			РН_Строки.IDDOC as Док
		FROM
			dt410 РН_Строки

		UNION ALL
		SELECT
			РР_Строки.sp3445 as Товар,
			(РР_Строки.sp3446*РР_Строки.sp3449) as КолОтгрузки,
			РР_Строки.IDDOC as Док
		FROM
				dt3436 РР_Строки
		) Строки

		WHERE
			Док IN (
	SELECT
		iddoc
	FROM
		_1SJOURN JOURN(NOLOCK), _1SCRDOC CRDOC(NOLOCK)
	WHERE
		JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC
		and CRDOC.MDID=0
		and CRDOC.PARENTVAL = 'O1  5G  2GW3	     '

)
 


  

_.JPG ( 14 KB | Загрузки )
_.JPG
Наверх
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: UNION ALL для поля с разными типами...
Ответ #1 - 06. Июля 2006 :: 08:43
Печать  
Примерно так:
LEFT($СчетСтроки.Товар,4) - даст тебе толи вид, толи тип (путаюсь Подмигивание) того что у тебя есть в счете, отфильтруй по тип Справочник.Номенклатура и RIGHT($СчетСтроки.Товар,9) даст собственно Справочник.Номенклатура
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: UNION ALL для поля с разными типами...
Ответ #2 - 06. Июля 2006 :: 09:15
Печать  
Точно. Вот так срослось....
Код
Выбрать все
	SELECT
		SUBSTRING($СчетСтроки.Товар,7,9) as [Товар $Справочник.Номенклатура]
		, 0 as Отгружено
		, $СчетСтроки.Количество * $СчетСтроки.Коэффициент КоличествоВДок

	FROM
		$ДокументСтроки.Счет AS СчетСтроки
	WHERE (
			СчетСтроки.IDDOC = :ВыбДокумент AND
			LEFT($СчетСтроки.Товар,2) = 'B1'

 


PS. А вот бы интеллиценз с автокомплитом замутить в тексте запроса......
  
Наверх
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: UNION ALL для поля с разными типами...
Ответ #3 - 06. Июля 2006 :: 10:32
Печать  
trdm писал(а) 06. Июля 2006 :: 09:15:
PS. А вот бы интеллиценз с автокомплитом замутить в тексте запроса......

Да...это было б круть неимоверная  Ужас
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: UNION ALL для поля с разными типами...
Ответ #4 - 06. Июля 2006 :: 16:10
Печать  
Ну пока какой-нить кудесник сотворит сие чудо, маленький скрипт,
http://www.1cpp.ru/forum/YaBB.pl?num=1152202083
позволяющий делать следующее в тексте запроса к примеру:
     |SELECT
     |СчетСтроки.IDDOC [Ссылка $Документ.Счет]
     |, СчетСтроки.LINENO_ НомерСтроки
     |, $СчетСтроки.Товар [Товар as $Неопределенный]
     |, $СчетСтроки.Количество * $СчетСтроки.Коэффициент Количество
     |, 0 as Отгружено
     |, 0 as Остатки
     |
     |FROM
     |$ДокументСтроки.Счет AS СчетСтроки
     |WHERE (      СчетСтроки.IDDOC = :ВыбДокумент )
можно с пом макросов StringTab и StringUnTab оттабулировать текст за "|" например так:
     |SELECT
     |      СчетСтроки.IDDOC [Ссылка $Документ.Счет]
     |      , СчетСтроки.LINENO_ НомерСтроки
     |      , $СчетСтроки.Товар [Товар as $Неопределенный]
     |      , $СчетСтроки.Количество * $СчетСтроки.Коэффициент Количество
     |      , 0 as Отгружено
     |      , 0 as Остатки
     |
     |FROM
     |      $ДокументСтроки.Счет AS СчетСтроки
     |WHERE (      СчетСтроки.IDDOC = :ВыбДокумент )

Табулируем просто заменой "|" на "|"+СимволТабуляции
в обратную сторону соотв. заменим "|"+СимволТабуляции на просто "|"
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать