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


1C++ rocks!

Сообщений: 9
Зарегистрирован: 11. Ноября 2009
Re: можно ли в запросе получить значение реквизита регистра?
Ответ #15 - 11. Декабря 2009 :: 20:04
Печать  
pvase писал(а) 11. Декабря 2009 :: 09:59:
Реквизит регистра остатки находиться в таблице движений и поэтому получение Остатков по Реквизиту ни стандартными методами 1С ни виртуальной таблицей 1С++ нельзя. В Вашем случаеш надо просто получить итоги по движениям регистра Остатки. Кстати почти во сех конфигурациях есть еще регистр "Обороты" которым Вы можете воспользоваться для вашей задачи.

конфигурация писалась на заказ и в ней регистр "обороты" не используется (почти).
---------------------

появилась необходимость увеличить скорость формирования отчётов; я попробовал начать своё изучение 1С++ попыткой разобраться на конкретном рабочем примере
"в лоб" решить не получилось...
изучение не обошлось одной небольшой статьёй - пришлось просмотреть несколько десятков публикаций и сотню тем на форумах... в итоге более менее понял принцип (не без помощи этой темы).

Спасибо всем откликнувшимся Улыбка

P.S. возможности компоненты понравились, буду изучать дальше.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать