Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) можно ли в запросе получить значение реквизита регистра? (число прочтений - 6937 )
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
можно ли в запросе получить значение реквизита регистра?
11. Ноября 2009 :: 15:50
Печать  
можно ли в запросе получить значение реквизита регистра, как это делается в обычном 1с-овском запросе?


в примерах указываются лишь измерения и ресурсы, а как получить значение реквизита ни слова:
(в регистре "Партии" у меня в реквизитах хранится "Доход" по партии)

ТекстЗапроса = "
|SELECT
|      Рег.Товар as [Товар $Справочник.Номенклатура],
|      Рег.КоличествоОстаток as Количество
|FROM
|      $РегистрОстатки.ОстаткиТоваров(:ВыбДата,,
|                               Склад = :ВыбСклад,
|                               (Товар), (Количество)) as Рег";

$РегистрОбороты.<ИмяРегистра>([<НачалоПериода>][, <КонецПериода>][, <Периодичность>][, <Соединение>][,<Условие>][,<Измерение>][,<Ресурс>]) [as <Алиас>]


P.S. я тут совсем недавно, поиском темы про это не нашёл.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #1 - 11. Ноября 2009 :: 18:32
Печать  
Реквизиты регистров хранятся только в таблице движения регистров, т.е. только в оборотах. В остатках их нет и быть не может, на то они и реквизиты.
  
Наверх
 
IP записан
 
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #2 - 11. Ноября 2009 :: 20:31
Печать  
JohnyDeath писал(а) 11. Ноября 2009 :: 18:32:
Реквизиты регистров хранятся только в таблице движения регистров, т.е. только в оборотах. В остатках их нет и быть не может, на то они и реквизиты.

т.е. не существует способов получить значения реквизитов регистров остатков?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #3 - 11. Ноября 2009 :: 20:38
Печать  
alexey-simf писал(а) 11. Ноября 2009 :: 20:31:
JohnyDeath писал(а) 11. Ноября 2009 :: 18:32:
Реквизиты регистров хранятся только в таблице движения регистров, т.е. только в оборотах. В остатках их нет и быть не может, на то они и реквизиты.

т.е. не существует способов получить значения реквизитов регистров остатков?


из таблицы движений регистра  ничто не мешает
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #4 - 12. Ноября 2009 :: 05:51
Печать  
Запрос, который у нас работает:
Код
Выбрать все
	| SELECT
	| $РегО.Фирма as [Фирма $Справочник.Фирмы],
	| $РегО.Товар as [Товар $Справочник.Номенклатура],
	| $РегО.Реквизит as [Реквизит $Справочник.Реквизиты],
	| $РегО.Клиент as [Клиент $Справочник.Контрагенты],
	| $РегО.Статус as [Статус $Число],
	| ASCII($РегО.КодОперации) as [Вид $Число],
//данные - расход
	| SUM(case when РегО.debkred = 1 then $РегО.СуммаРублевая else 0 end) as [РасходСуммаРублевая $Число],
	| SUM(case when РегО.debkred = 1 then $РегО.СуммаВалютная else 0 end) as [РасходСуммаВалютная $Число],
	| SUM(case when РегО.debkred = 1 then $РегО.СуммаНДС else 0 end) as [РасходНДСПокупки $Число],
	| SUM(case when РегО.debkred = 1 then $РегО.Количество else 0 end) as [РасходКоличество $Число],
//данные - приход
	| SUM(case when РегО.debkred = 0 then $РегО.СуммаРублевая else 0 end) as [ПриходСуммаРублевая $Число],
	| SUM(case when РегО.debkred = 0 then $РегО.СуммаВалютная else 0 end) as [ПриходСуммаВалютная $Число],
	| SUM(case when РегО.debkred = 0 then $РегО.СуммаНДС else 0 end) as [ПриходНДСПокупки $Число],
	| SUM(case when РегО.debkred = 0 then $РегО.Количество else 0 end) as [ПриходКоличество $Число],
//данные - остаток
	| 0 as [ОстатокСуммаРублевая $Число],
	| 0 as [ОстатокСуммаВалютная $Число],
	| 0 as [ОстатокНДСПокупки $Число],
	| 0 as [ОстатокКоличество $Число],
//данные - суммы продаж (реквизиты регистра)
	| SUM($РегО.СуммаПродажиРуб) as [СуммаПродажиРуб $Число],
	| SUM($РегО.СуммаПродажиВал) as [СуммаПродажиВал $Число],
	| SUM($РегО.СуммаНДСПродажи) as [СуммаНДСПродажи $Число]
	|	FROM $Регистр.ПартииТоваров as РегО (nolock)
	|	inner join _1sjourn as j_vt (nolock) on j_vt.iddoc = РегО.iddoc
//Условие на дату
	| WHERE
	| 	j_vt.date_time_iddoc > :ДатаПакета and j_vt.date_time_iddoc < :ДатаПакета~
	|and j_vt.$ФлагРегистра.ПартииТоваров = 0x1
//Группировка
	| GROUP BY $РегО.Фирма, $РегО.Товар, $РегО.Реквизит, $РегО.Клиент, $РегО.Статус, ASCII($РегО.КодОперации)
//Убираем нулевые продажи
	//|having
	//|sum($РегО.СуммаПродажиРуб) <> 0 or
	//|sum($РегО.СуммаПродажиВал) <> 0 or
	//|sum($РегО.СуммаНДСПродажи) <> 0
	| UNION ALL
//Остатки
	| SELECT
//ключ - переменные
	| Рег.Фирма 						as [Фирма $Справочник.Фирмы],
	| Рег.Товар 						as [Товар $Справочник.Номенклатура],
	| Рег.Реквизит 						as [Реквизит $Справочник.Реквизиты],
	| Рег.Клиент 						as [Клиент $Справочник.Контрагенты],
	| Рег.Статус 						as [Статус $Число],
	| 48 								as [Вид $Число],
//данные - расход
	| 0 								as [РасходСуммаРублевая $Число],
	| 0 								as [РасходСуммаВалютная $Число],
	| 0 								as [РасходНДСПокупки $Число],
	| 0 								as [РасходКоличество $Число],
//данные - приход
	| 0 								as [ПриходСуммаРублевая $Число],
	| 0 								as [ПриходСуммаВалютная $Число],
	| 0 								as [ПриходНДСПокупки $Число],
	| 0 								as [ПриходКоличество $Число],
//данные - остаток
	| Рег.СуммаРублеваяКонечныйОстаток 	as [ОстатокСуммаРублевая $Число],
	| Рег.СуммаВалютнаяКонечныйОстаток 	as [ОстатокСуммаВалютная $Число],
	| Рег.СуммаНДСКонечныйОстаток 		as [ОстатокНДСПокупки $Число],
	| Рег.КоличествоКонечныйОстаток 	as [ОстатокКоличество $Число],
//данные - суммы продаж (реквизиты регистра)
	| 0 								as [СуммаПродажиРуб $Число],
	| 0 								as [СуммаПродажиВал $Число],
	| 0 								as [СуммаНДСПродажи $Число]
	|	FROM $РегистрОстаткиОбороты.ПартииТоваров(:ДатаПакета, :ДатаПакета~,,,,,
//Измерения
	|	(Фирма, Товар, Реквизит, Клиент, Статус)
//Ресурсы
	|	) as Рег
	|	";
 


Выделенное - это реквизит регистра ПартииТоваров
  
Наверх
ICQ  
IP записан
 
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #5 - 02. Декабря 2009 :: 16:12
Печать  
kiruha писал(а) 11. Ноября 2009 :: 20:38:
alexey-simf писал(а) 11. Ноября 2009 :: 20:31:
JohnyDeath писал(а) 11. Ноября 2009 :: 18:32:
Реквизиты регистров хранятся только в таблице движения регистров, т.е. только в оборотах. В остатках их нет и быть не может, на то они и реквизиты.

т.е. не существует способов получить значения реквизитов регистров остатков?


из таблицы движений регистра  ничто не мешает


спасибо за совет, данный метод работает, но у меня возникла сложность в другом:
если делать выборку из таблицы движений регистров, я не могу ограничить период, за который мне необходимо выбирать данные; точнее, данные выбираются за весь период, что меня не устраивает...
а в конструкциях $РегистрОбороты.<ИмяРегистра> / $РегистрОстаткиОбороты.<ИмяРегистра> можно было указывать периоды выборки.

P.S. пытаюсь получить информацию (из регистра ПартииТоваров) о продажах за выбранный период по выбранным складам и выбранным товарам в разрезе до товаров, при том, что информация о доходе (РозничнаяСумма - ЗакупочнаяСумма) хранится в реквизите.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #6 - 02. Декабря 2009 :: 17:03
Печать  
alexey-simf писал(а) 02. Декабря 2009 :: 16:12:
kiruha писал(а) 11. Ноября 2009 :: 20:38:
alexey-simf писал(а) 11. Ноября 2009 :: 20:31:
JohnyDeath писал(а) 11. Ноября 2009 :: 18:32:
Реквизиты регистров хранятся только в таблице движения регистров, т.е. только в оборотах. В остатках их нет и быть не может, на то они и реквизиты.

т.е. не существует способов получить значения реквизитов регистров остатков?


из таблицы движений регистра  ничто не мешает


спасибо за совет, данный метод работает, но у меня возникла сложность в другом:
если делать выборку из таблицы движений регистров, я не могу ограничить период, за который мне необходимо выбирать данные; точнее, данные выбираются за весь период, что меня не устраивает...
а в конструкциях $РегистрОбороты.<ИмяРегистра> / $РегистрОстаткиОбороты.<ИмяРегистра> можно было указывать периоды выборки.

P.S. пытаюсь получить информацию (из регистра ПартииТоваров) о продажах за выбранный период по выбранным складам и выбранным товарам в разрезе до товаров, при том, что информация о доходе (РозничнаяСумма - ЗакупочнаяСумма) хранится в реквизите.




Так в посте №4 показано как надо делать inner join
к таблице _1sjourn и как  ограничивать период

кусок кода из 4
Код
Выбрать все
	|	FROM $Регистр.ПартииТоваров as РегО (nolock)
	|	inner join _1sjourn as j_vt (nolock) on j_vt.iddoc = РегО.iddoc
//Условие на дату
	| WHERE
	| 	j_vt.date_time_iddoc > :ДатаПакета and j_vt.date_time_iddoc < :ДатаПакета~
 



  
Наверх
 
IP записан
 
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #7 - 03. Декабря 2009 :: 06:57
Печать  
Z1 писал(а) 02. Декабря 2009 :: 17:03:
...
Так в посте №4 показано как надо делать inner join
к таблице _1sjourn и как  ограничивать период

кусок кода из 4
Код
Выбрать все
	|	FROM $Регистр.ПартииТоваров as РегО (nolock)
	|	inner join _1sjourn as j_vt (nolock) on j_vt.iddoc = РегО.iddoc
//Условие на дату
	| WHERE
	| 	j_vt.date_time_iddoc > :ДатаПакета and j_vt.date_time_iddoc < :ДатаПакета~
 





пасиб, буду разбираться.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #8 - 04. Декабря 2009 :: 10:04
Печать  
alexey-simf писал(а) 02. Декабря 2009 :: 16:12:
спасибо за совет, данный метод работает, но у меня возникла сложность в другом:
если делать выборку из таблицы движений регистров, я не могу ограничить период, за который мне необходимо выбирать данные; точнее, данные выбираются за весь период, что меня не устраивает...
а в конструкциях $РегистрОбороты.<ИмяРегистра> / $РегистрОстаткиОбороты.<ИмяРегистра> можно было указывать периоды выборки.

P.S. пытаюсь получить информацию (из регистра ПартииТоваров) о продажах за выбранный период по выбранным складам и выбранным товарам в разрезе до товаров, при том, что информация о доходе (РозничнаяСумма - ЗакупочнаяСумма) хранится в реквизите.


Раскажите а какой финансвый смысл получать остатки дохода? Просто интересно, кому понадобилось видеть остатки по когда то купленным оприходованым товарам, который есть на склады с доходом, который был при прошлых продажах?
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #9 - 04. Декабря 2009 :: 10:21
Печать  
продажи за выбранный период - это оборот а не остатки.
  
Наверх
 
IP записан
 
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #10 - 04. Декабря 2009 :: 15:21
Печать  
pvase писал(а) 04. Декабря 2009 :: 10:04:
...
Раскажите а какой финансвый смысл получать остатки дохода? Просто интересно, кому понадобилось видеть остатки по когда то купленным оприходованым товарам, который есть на склады с доходом, который был при прошлых продажах?


Остатки дохода никому не нужны. Хочется видеть доход за период. Просто информация о доходе хранится в реквизите регистра ПартииТоваров, тип которого "Остатки".

Стандартный для 1С язык запросов безразличен к тому реквизит ли это или ресурс, а в SQL я столкнулся со сложностями в получении данных по реквизитам регистров.
  
Наверх
 
IP записан
 
alexey-simf
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #11 - 04. Декабря 2009 :: 15:23
Печать  
Z1 писал(а) 04. Декабря 2009 :: 10:21:
продажи за выбранный период - это оборот а не остатки.

может быть и такая формулировка:
продажи за выбранный период - движения регистра ПартииТоваров (тип "Остатки") за выбранный период.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #12 - 08. Декабря 2009 :: 14:14
Печать  
alexey-simf писал(а) 04. Декабря 2009 :: 15:21:
Стандартный для 1С язык запросов безразличен к тому реквизит ли это или ресурс, а в SQL я столкнулся со сложностями в получении данных по реквизитам регистров.


Бред какой-то. Чудес не бывает Улыбка
Не надо лезть в виртуальные таблицы не прочитав доку


  

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


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #13 - 08. Декабря 2009 :: 14:59
Печать  
Вадимко писал(а) 08. Декабря 2009 :: 14:14:
alexey-simf писал(а) 04. Декабря 2009 :: 15:21:
Стандартный для 1С язык запросов безразличен к тому реквизит ли это или ресурс, а в SQL я столкнулся со сложностями в получении данных по реквизитам регистров.


Бред какой-то. Чудес не бывает Улыбка
Не надо лезть в виртуальные таблицы не прочитав доку




в первом сообщении этой темы приведено описание функции из документации.
судя по описанию, данная функция не позволяет делать выборку в том числе по реквизитам регистра.
именно по причинам, что я не нашёл в документации прямого ответа на свои вопросы я и решил обратиться за помощью к пользователям этого форума.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #14 - 11. Декабря 2009 :: 09:59
Печать  
Реквизит регистра остатки находиться в таблице движений и поэтому получение Остатков по Реквизиту ни стандартными методами 1С ни виртуальной таблицей 1С++ нельзя. В Вашем случаеш надо просто получить итоги по движениям регистра Остатки. Кстати почти во сех конфигурациях есть еще регистр "Обороты" которым Вы можете воспользоваться для вашей задачи.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать