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


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Поле регистра составного типа
27. Апреля 2020 :: 08:59
Печать  
Поле регистра "Контрагент" имеет тип "Справочник", в нём могут быть как сотрудники, так и контрагенты. Контрагент имеет поле "ВнутреннийКонтрагент". Нужно отобрать все записи регистра у которых поле в поле "Контрагент" находится контрагент и у него поле ВнутреннийКонтрагент = 0.

Подскажите как это правильно сделать.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Поле регистра составного типа
Ответ #1 - 27. Апреля 2020 :: 09:41
Печать  
Код (SQL)
Выбрать все
[font=Courier New]

SELECT
  $reg.Контрагент [Контрагент $Справочник]
FROM
  $Регистр.ТвойРегистр as reg with (nolock)
WHERE
  Left($reg.Контрагент,4) = $ВидСправочника36.Контрагенты AND $reg.ВнутреннийКонтрагент = 0

[/font] 

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


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #2 - 27. Апреля 2020 :: 11:00
Печать  
Не получается

Код (C++)
Выбрать все
SELECT
	     сТовар.ID as [Товар $Справочник.Товар],
	     Реализация.Период as Период,
	     сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
	     SUM(Реализация.СуммаОборот) as Сумма,
	     SUM(Реализация.СуммаУчетнаяОборот) as СуммаУчетная
	FROM
	     нения,Контрагент),(Сумма,СуммаУчетная)) AS Реализация
	LEFT JOIN
         $Справочник.Товар as сТовар
	     ON сТовар.ID = Реализация.Товар
	LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
	     ON сМестаХранения.ID = Реализация.МестоХранения
	WHERE сТовар.ID.ВидТовара.Услуга = 0
	     and Left(Реализация.Контрагент,4) = $ВидСправочника36.Контрагенты
	     and Реализация.Контрагент.ВнутреннийКонтрагент = 0
	GROUP BY
	     сТовар.ParentID,
	     Реализация.Период,
	     сМестаХранения.ParentID 



Не удалось вызвать методы для char.


А вот так

Код (C++)
Выбрать все
      SELECT
	     сТовар.ID as [Товар $Справочник.Товар],
	     $Реализация.Период as Период,
	     сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
	     SUM($Реализация.СуммаОборот) as Сумма,
	     SUM($Реализация.СуммаУчетнаяОборот) as СуммаУчетная
	FROM
	     нения,Контрагент),(Сумма,СуммаУчетная)) AS Реализация
	LEFT JOIN
         $Справочник.Товар as сТовар
	     ON сТовар.ID = $Реализация.Товар
	LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
	     ON сМестаХранения.ID = $Реализация.МестоХранения
	WHERE сТовар.ID.ВидТовара.Услуга = 0
	     and Left($Реализация.Контрагент,4) = $ВидСправочника36.Контрагенты
	     and $Реализация.Контрагент.ВнутреннийКонтрагент = 0
	GROUP BY
	     сТовар.ParentID,
	     $Реализация.Период,
	     сМестаХранения.ParentID 



Meta name parser error: неизвестное метаимя или алиас "$Реализация"
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Поле регистра составного типа
Ответ #3 - 27. Апреля 2020 :: 11:43
Печать  
Код (SQL)
Выбрать все
SELECT
  сТовар.ID as [Товар $Справочник.Товар]
, Реализация.Период as Период
, сМестаХранения.ParentID as [Склад $Справочник.МестаХранения]
, SUM(Реализация.СуммаОборот) as Сумма
, SUM(Реализация.СуммаУчетнаяОборот) as СуммаУчетная
FROM
  нения,Контрагент),(Сумма,СуммаУчетная)) AS Реализация
  LEFT JOIN $Справочник.Товар as сТовар ON сТовар.ID = Реализация.Товар
  LEFT JOIN $Справочник.МестаХранения as сМестаХранения ON сМестаХранения.ID = Реализация.МестоХранения
WHERE
   сТовар.ID.ВидТовара.Услуга = 0 and Left(Реализация.Контрагент,4) = $ВидСправочника36.Контрагенты and Реализация.Контрагент.ВнутреннийКонтрагент = 0
GROUP BY
  сТовар.ParentID, Реализация.Период, МестаХранения.ParentID

 



И не будет так работать
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Поле регистра составного типа
Ответ #4 - 27. Апреля 2020 :: 11:47
Печать  
Выкладывай весь запрос нения,Контрагент),(Сумма,СуммаУчетная)) AS Реализация
  
Наверх
 
IP записан
 
OnePrg
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #5 - 27. Апреля 2020 :: 11:51
Печать  
Вообще убрал это условие - всё равно не работает

Код (C++)
Выбрать все
       SELECT
	     сТовар.ID as [Товар $Справочник.Товар],
	     Реал.Период as Период,
	     сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
	     SUM(Реал.СуммаОборот) as Сумма,
	     SUM(Реал.СуммаУчетнаяОборот) as СуммаУчетная
	FROM
	     нения,Контрагент),(Сумма,СуммаУчетная)) AS Реал
	LEFT JOIN
         $Справочник.Товар as сТовар
	     ON сТовар.ID = Реал.Товар
	LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
	     ON сМестаХранения.ID = Реал.МестоХранения
	WHERE
	     Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
	     and Реал.Контрагент.ВнутреннийКонтрагент = 0
	GROUP BY
	     сТовар.ParentID,
	     Реал.Период,
	     сМестаХранения.ParentID 



Не удалось вызвать методы для char
  
Наверх
 
IP записан
 
OnePrg
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #6 - 27. Апреля 2020 :: 11:52
Печать  
leov-001 писал(а) 27. Апреля 2020 :: 11:47:
Выкладывай весь запрос нения,Контрагент),(Сумма,СуммаУчетная)) AS Реализация



Не знаю почему отрезает - вставляю весь запрос

вот отдельно

     FROM
       $РегистрОбороты.Реализация(:ВыбНачПериода,:ВыбКонПериода,Месяц,  ,  ,(Товар,МестоХранения,Контрагент),(Сумма, СуммаУчетная)) AS Реал


P.S. Понял. Строка без пробелов обрезается. Вставил пару пробелов между запятыми - не отрезает.
  
Наверх
 
IP записан
 
OnePrg
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #7 - 27. Апреля 2020 :: 11:59
Печать  
Код (C++)
Выбрать все
SELECT
	     сТовар.ID as [Товар $Справочник.Товар],
	     Реал.Период as Период,
	     сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
	     SUM(Реал.СуммаОборот) as Сумма,
	     SUM(Реал.СуммаУчетнаяОборот) as СуммаУчетная
	FROM
	     $РегистрОбороты.Реализация(:ВыбНачПериода,:ВыбКонПериода,Месяц, , ,(Товар,МестоХранения,Контрагент),(Сумма, СуммаУчетная)) AS Реал
	LEFT JOIN
         $Справочник.Товар as сТовар
	     ON сТовар.ID = Реал.Товар
	LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
	     ON сМестаХранения.ID = Реал.МестоХранения
	WHERE
	     Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
	     and Реал.Контрагент.ВнутреннийКонтрагент = 0
	GROUP BY
	     сТовар.ID,
	     Реал.Период,
	     сМестаХранения.ParentID 

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


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #8 - 27. Апреля 2020 :: 12:13
Печать  
Вот на этой строке ругается "Не удалось привязать составной идентификатор "сКонтрагенты.ВнутреннийКонтрагент"."

Код (C++)
Выбрать все
	SELECT
	     сТовар.ParentID as [Товар $Справочник.Товар],
	     Реал.Период as Период,
	     сМестаХранения.ParentID as [Склад $Справочник.МестаХранения],
	     SUM(Реал.СуммаОборот) as Сумма,
	     SUM(Реал.СуммаУчетнаяОборот) as СуммаУчетная
	FROM
	     $РегистрОбороты.Реализация(:ВыбНачПериода,:ВыбКонПериода,Месяц, , ,(Товар,МестоХранения,Контрагент),(Сумма,СуммаУчетная)) AS Реал
	LEFT JOIN
         $Справочник.Товар as сТовар
	     ON сТовар.ID = Реал.Товар
	LEFT JOIN
         $Справочник.МестаХранения as сМестаХранения
	     ON сМестаХранения.ID = Реал.МестоХранения
	LEFT JOIN
         $Справочник.Контрагенты as cКонтрагенты
	     ON cКонтрагенты .ID = Реал.Контрагент
	WHERE
	     Left(Реал.Контрагент,4) = $ВидСправочника36.Контрагенты
	     and сКонтрагенты.ВнутреннийКонтрагент = 0
	GROUP BY
	     сТовар.ParentID,
	     Реал.Период,
	     сМестаХранения.ParentID
 

  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поле регистра составного типа
Ответ #9 - 27. Апреля 2020 :: 14:01
Печать  
ON cКонтрагенты .ID = SUBSTRING(Реал.Контрагент, 5, 9)
  

FormEx developer
Наверх
www  
IP записан
 
OnePrg
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #10 - 27. Апреля 2020 :: 14:18
Печать  
Заработало - спасибо.

А в чём смысл?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поле регистра составного типа
Ответ #11 - 28. Апреля 2020 :: 08:29
Печать  
OnePrg писал(а) 27. Апреля 2020 :: 14:18:
Заработало - спасибо.

А в чём смысл?


Смысл в том, что это составной тип. Первые четыре символа - это вид справочника, далее 9 символов - идентификатор элемента.
  

FormEx developer
Наверх
www  
IP записан
 
OnePrg
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 66
Зарегистрирован: 07. Октября 2019
Re: Поле регистра составного типа
Ответ #12 - 29. Апреля 2020 :: 12:27
Печать  
Спасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать