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


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Приведение типов ссылок
02. Августа 2007 :: 08:26
Печать  
В общем у меня такая задача. Есть 2 регистра. В первом клиент хранится как ссылка на справочник Контрагенты, во втором клиент хранится как справочник ККМ или Контрагенты.
Как такую весчь можно написать? Помогите ))

Код
Выбрать все
SELECT
	Клиент,
	Долг
FROM (
	SELECT
		$ОстаткиПер.Клиент,
		$ОстаткиПер.Долг as Долг
	FROM
		$РегистрИтоги.ВзаиморасчетыПокупателей as ОстаткиПер    
	WHERE
		period = {d :КонецПрошПериода}	    

	UNION ALL

	SELECT
		$ОстаткиПер2.Клиент,
		$ОстаткиПер2.Долг
	FROM
		$РегистрИтоги.ВзаиморасчетыПоставщиков as ОстаткиПер2
	WHERE
		period = {d :КонецПрошПериода}
	) as Остатки 



Этот запрос вернёт поле Клиент, где будет храниться либо просто ссылка на клиента, либо ссылка на справочник + ссылка на клиента (ккм... но ккм не используется в данном случае) Надо как-то привести к одинаковому виду...
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #1 - 02. Августа 2007 :: 08:55
Печать  
Типизацию забыл
  
Наверх
 
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #2 - 02. Августа 2007 :: 09:04
Печать  
При типизации получается:

Код
Выбрать все
|SELECT
|	Клиент,
|	Долг as Долг
|FROM (
|	SELECT
|		$ОстаткиПер.Клиент as [Клиент $Справочник],
|		$ОстаткиПер.Долг as Долг
|	FROM
|		$РегистрИтоги.ВзаиморасчетыПокупателей as ОстаткиПер
|	WHERE
|		period = {d :КонецПрошПериода}    
|
|	UNION ALL
|
|	SELECT
|		$ОстаткиПер2.Клиент as [Клиент $Справочник.Контрагенты],
|		$ОстаткиПер2.Долг as Долг
|	FROM
|		$РегистрИтоги.ВзаиморасчетыПоставщиков as ОстаткиПер2
|	WHERE
|		period = {d :КонецПрошПериода}
|	) as Остатки  



А обработчик это переписывает как
Код
Выбрать все
SELECT
	Клиент,
	Долг as Долг
FROM (
	SELECT
		ОстаткиПер.sp170 as [Клиент_1c_type_Справочник],
		ОстаткиПер.sp171 as Долг
	FROM
		rg169 as ОстаткиПер
	WHERE
		period = {d '2007-03-01'}	    

	UNION ALL

	SELECT
		ОстаткиПер2.sp934 as [Клиент_1c_type_Справочник_Контрагенты],
		ОстаткиПер2.sp936 as Долг
	FROM
		rg933 as ОстаткиПер2
	WHERE
		period = {d '2007-03-01'}
	) as Остатки  


То есть в двух таблицах два разных поля Клиент_1c_type_Справочник и Клиент_1c_type_Справочник_Контрагенты, и в итоге в верхнем SELECT Клиент писать некорректно, так как во внутр. таблицах такого поля нет, там два разных поля......
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #3 - 02. Августа 2007 :: 10:47
Печать  
Типизацию напиши в верхнем селекте, а в нижнем убери
  
Наверх
 
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #4 - 02. Августа 2007 :: 12:13
Печать  
Нельзя. В верхнем селекте в поле Клиент попадают значения типа "Ссылка на элемент" и сюда же "Ссылка на справочник + ссылка на элемент".. Или иначе "AB356F", "1B   FG45FC" в одном стобце  ))) Короче, пишет элемент не найден) Пробовал..
  
Наверх
 
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #5 - 02. Августа 2007 :: 12:40
Печать  
Вот если бы как-то можно было написать условие, типа:
если тип справочник тогда $справочник иначе $справочник.контрагенты
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #6 - 02. Августа 2007 :: 12:48
Печать  
SELECT $ВидСправочника36.Контрагенты + $ОстаткиПер2.Клиент [Клиент $Справочник]
  

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


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #7 - 02. Августа 2007 :: 13:20
Печать  
Спасибо большое )).
  
Наверх
 
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #8 - 03. Августа 2007 :: 06:35
Печать  
А тут ещё один косяк (((
Код
Выбрать все
SELECT
	ОстаткиПер.sp170 as [Клиент_1c_type_Справочник],
	ОстаткиПер.sp171 as НачОст
FROM
	rg169 as ОстаткиПер
WHERE
	period = {d '2007-02-16'} and
	ОстаткиПер.sp170 = "  1A   EW9CB "
GROUP BY
	Клиент_1c_type_Справочник 



Этот запрос возвращает строку
Клиент1             1000

Если изменить на :
Код
Выбрать все
SELECT
	ОстаткиПер.sp170 as [Клиент_1c_type_Справочник],
	SUM(ОстаткиПер.sp171) as НачОст 


То возвращает строку
Клиент1             2000
((((((((((((
Где в может быть ошибка ?
  
Наверх
 
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #9 - 03. Августа 2007 :: 07:02
Печать  
В общем эта вот вещь дала верный результат (выборка остатки и обороты), но только если все цифры разделить на 2 ((((( Тупость какая-то

Код
Выбрать все
SELECT
	Клиент as [Клиент_1c_type_Справочник],
	Sum(НачОст),
	Sum(Приход),
	Sum(Расход),
	Sum(НачОст)+Sum(Приход)-Sum(Расход) as КонОст
FROM (
	SELECT
		ОстаткиПер.sp170 as Клиент,
		ОстаткиПер.sp171 as НачОст,
		0 as Приход,
		0 as Расход
	FROM
		rg169 as ОстаткиПер
	WHERE
		period = {d '2007-02-16'}

	UNION ALL

	SELECT
		'  1A' + ОстаткиПерПост.sp934,
		ОстаткиПерПост.sp936,
		0,
		0
	FROM
		rg933 as ОстаткиПерПост
	WHERE
		period = {d '2007-02-16'}

	UNION ALL

	SELECT
		ОстаткиНаДату.sp170,
		ОстаткиНаДату.sp171,
		0,
		0
	FROM
		ra169 as ОстаткиНаДату
	INNER JOIN
		1SJourn as Журн On Журн.IDDoc = ОстаткиНаДату.IDDoc
	WHERE
		Журн.Date BETWEEN {d '2007-02-16'} AND {d '2007-03-01'}

	UNION ALL

	SELECT
		'  1A' + ОстаткиНаДату2.sp934,
		ОстаткиНаДату2.sp936,
		0,
		0
	FROM
		ra933 as ОстаткиНаДату2
	INNER JOIN
		1SJourn as Журн On Журн.IDDoc = ОстаткиНаДату2.IDDoc
	WHERE
		Журн.Date BETWEEN {d '2007-02-16'} AND {d '2007-03-01'}

	UNION ALL

	SELECT
		Обороты.sp170,
		0,
		(1-Обороты.debkred)*Обороты.sp171,
		(Обороты.debkred)*Обороты.sp171
	FROM
		ra169 as Обороты
	INNER JOIN
		1SJourn as Журн On Журн.IDDoc = Обороты.IDDoc
	WHERE
		Журн.Date BETWEEN {d '2007-03-01'} AND {d '2007-03-15'}

	UNION ALL

	SELECT
		'  1A' + Обороты2.sp934,
		0,
		(1-Обороты2.debkred)*Обороты2.sp936,
		(Обороты2.debkred)*Обороты2.sp936
	FROM
		ra933 as Обороты2
	INNER JOIN
		1SJourn as Журн On Журн.IDDoc = Обороты2.IDDoc
	WHERE
		Журн.Date BETWEEN {d '2007-03-01'} AND {d '2007-03-15'}
	) as Остатки
WHERE
	Клиент = "  1A   AKXCB "
GROUP BY
	Клиент_1c_type_Справочник,Приход,Расход
ORDER BY Клиент_1c_type_Справочник 

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #10 - 03. Августа 2007 :: 07:17
Печать  
Не тупость а пораскинуть моском надо  Подмигивание
Учитывай коды операций, предварительно посмотрев движения документов
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #11 - 06. Августа 2007 :: 07:27
Печать  
Цитата:
Не тупость а пораскинуть моском надо  Подмигивание
Учитывай коды операций, предварительно посмотрев движения документов


Код
Выбрать все
SELECT
	Клиент as [Клиент $Справочник],
	SUM(НачДолг) as НачДолг,
	SUM(КонДолг) as КонДолг,
	SUM(РасхДолг) as РасхДолг,
	SUM(ПрихДолг) as ПрихДолг,
	SUM(РасхСторноОтгр) as РасхСторноОтгр,
	SUM(ПрихСторноОтгр) as ПрихСторноОтгр,
	SUM(РасхВосстАванса) as РасхВосстАванса,
	SUM(ПрихВосстАванса) as ПрихВосстАванса,
	SUM(ПрихВосстОтгр) as ПрихВосстОтгр,
	SUM(РасхВосстОтгр) as РасхВосстОтгр,
	SUM(ПрихСторноАванса) as ПрихСторноАванса,
	SUM(РасхСторноАванса) as РасхСторноАванса,
	SUM(НачДолгПост) as НачДолгПост,
	SUM(КонДолгПост) as КонДолгПост,
	SUM(РасхДолгПост) as РасхДолгПост,
	SUM(ПрихДолгПост) as ПрихДолгПост
FROM (
	SELECT
		Клиент as Клиент,
		НачОст as НачДолг,
		НачОст+Приход-Расход as КонДолг,
		ICASE(((КодОперации = :СторнированиеОтгрузки) OR
			  (КодОперации = :ВосстановлениеАвансаДругойСтавкой) OR
			  (КодОперации = :ВосстановлениеОтгрузкиДругойСтавкой) OR
			  (КодОперации = :СторнированиеАванса)),0,Расход) as РасхДолг,
		ICASE(((КодОперации = :СторнированиеОтгрузки) OR
			  (КодОперации = :ВосстановлениеАвансаДругойСтавкой) OR
			  (КодОперации = :ВосстановлениеОтгрузкиДругойСтавкой) OR
			  (КодОперации = :СторнированиеАванса)),0,Приход) as ПрихДолг,
		ICASE(КодОперации = :СторнированиеОтгрузки,Расход,0) as РасхСторноОтгр,
		0 as ПрихСторноОтгр,
		ICASE(КодОперации = :ВосстановлениеАвансаДругойСтавкой,Расход,0) as РасхВосстАванса,
		0 as ПрихВосстАванса,
		ICASE(КодОперации = :ВосстановлениеОтгрузкиДругойСтавкой,Приход,0) as ПрихВосстОтгр,
		0 as РасхВосстОтгр,
		ICASE(КодОперации = :СторнированиеАванса,Приход,0) as ПрихСторноАванса,
		0 as РасхСторноАванса,
		0 as НачДолгПост,
		0 as КонДолгПост,
		0 as РасхДолгПост,
		0 as ПрихДолгПост
	FROM (
	//Регистр итогов по покупателям
		SELECT
			$ОстаткиПер.Клиент as Клиент,
			'' as КодОперации,
			$ОстаткиПер.Долг as НачОст,
			0 as Приход,
			0 as Расход
		FROM
			$РегистрИтоги.ВзаиморасчетыПокупателей as ОстаткиПер
		WHERE
			period = {d :КонецПрошПериода}

		UNION ALL

	//Регистр оборотов до даты нач по покупателям
		SELECT
			$ОстаткиНаДату.Клиент,
			$ОстаткиНаДату.КодОперации,
			$ОстаткиНаДату.Долг,
			0,
			0
		FROM
			$Регистр.ВзаиморасчетыПокупателей as ОстаткиНаДату
		INNER JOIN
			1SJourn as Журн On Журн.IDDoc = ОстаткиНаДату.IDDoc
		WHERE
			Журн.Date BETWEEN {d :КонецПрошПериода} AND {d :ДатаНач}

		UNION ALL

	//Обороты по покупателям
		SELECT
			$Обороты.Клиент,
			$Обороты.КодОперации,
			0,
			(1-Обороты.debkred)*$Обороты.Долг,
			(Обороты.debkred)*$Обороты.Долг
		FROM
			$Регистр.ВзаиморасчетыПокупателей as Обороты
		INNER JOIN
			1SJourn as Журн On Журн.IDDoc = Обороты.IDDoc
		WHERE
			Журн.Date BETWEEN {d :ДатаНач} AND {d :ДатаКон}
		) as Остатки

	UNION ALL

	SELECT
		Клиент,
		0,
		0,
		0,
		0,
		0,
		ICASE(КодОперации = :СторнированиеОтгрузки,Приход,0),
		0,
		ICASE(КодОперации = :ВосстановлениеАвансаДругойСтавкой,Приход,0),
		0,
		ICASE(КодОперации = :ВосстановлениеОтгрузкиДругойСтавкой,Расход,0),
		0,
		ICASE(КодОперации = :СторнированиеАванса,Расход,0),
		НачОст,
		НачОст+Приход-Расход,
		Расход,
		Приход
	FROM (
	//Регистр итогов по поставщикам
		SELECT
			$ВидСправочника36.Контрагенты + $ОстаткиПерПост.Клиент as Клиент,
			'' as КодОперации,
			$ОстаткиПерПост.Долг as НачОст,
			0 as Приход,
			0 as Расход
		FROM
			$РегистрИтоги.ВзаиморасчетыПоставщиков as ОстаткиПерПост
		WHERE
			period = {d :КонецПрошПериода}

		UNION ALL

	//регистр оборостов до даты нач по поставщикам
		SELECT
			$ВидСправочника36.Контрагенты + $ОстаткиНаДату2.Клиент,
			$ОстаткиНаДату2.КодОперации,
			$ОстаткиНаДату2.Долг,
			0,
			0
		FROM
			$Регистр.ВзаиморасчетыПоставщиков as ОстаткиНаДату2
		INNER JOIN
			1SJourn as Журн On Журн.IDDoc = ОстаткиНаДату2.IDDoc
		WHERE
			Журн.Date BETWEEN {d :КонецПрошПериода} AND {d :ДатаНач}

		UNION ALL

	//Обороты по поставщикам
		SELECT
			$ВидСправочника36.Контрагенты + $Обороты2.Клиент,
			$Обороты2.КодОперации,
			0,
			(1-Обороты2.debkred)*$Обороты2.Долг,
			(Обороты2.debkred)*$Обороты2.Долг
		FROM
			$Регистр.ВзаиморасчетыПоставщиков as Обороты2
		INNER JOIN
			1SJourn as Журн On Журн.IDDoc = Обороты2.IDDoc
		WHERE
			Журн.Date BETWEEN {d :ДатаНач} AND {d :ДатаКон}
		) as Остатки
GROUP BY
	Клиент_1c_type_Справочник	 



Вот для наглядности... Может всё-таки что не так? Коды Операций я смотрю, а вот насчёт движений что-то не понял, что это значит...
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #12 - 06. Августа 2007 :: 07:33
Печать  
Фин/Упр? Судя по названиям регистров конфа релиз<=8xx
А там в регистрах есть фирма и документы с общим типом учета делают 2 движения.
  
Наверх
IP записан
 
Rubin
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 70
Зарегистрирован: 31. Июля 2007
Re: Приведение типов ссылок
Ответ #13 - 06. Августа 2007 :: 07:37
Печать  
а можно поподробнее )) В выборку из регистра итогов попадают несколько строк по одному контрагенту. Это меня смущает. А так, это стандртная 1с: Торговля+Склад 8.5 - версия
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Приведение типов ссылок
Ответ #14 - 06. Августа 2007 :: 07:45
Печать  
Поподробнее в цвете:
  

dr_001.JPG ( 89 KB | Загрузки )
dr_001.JPG
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать