Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Помогите с условием в прямом запросе. (число прочтений - 2258 )
an20077
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 16. Февраля 2021
Помогите с условием в прямом запросе.
23. Февраля 2021 :: 09:03
Печать  
Всем добрый день. Помогите с условием в прямом запросе, нужно выбрать элементы согласно списка:
     стрЗапроса = "
     |select
     |  Рег.Аналог as [Аналог $Справочник.НовАналоги],
     |  Рег.КоличествоНачальныйОстаток as НачКол,
     |  Рег.КоличествоПриход as ПрхКол,
     |  Рег.КоличествоРасход as РсхКол,
     |  Рег.КоличествоКонечныйОстаток as КонКол
     |from
     |  $РегистрОстаткиОбороты.Остатки(:ДатаНач, :ДатаКон~, , , ,Магазин=:ВыбМагаз, (Аналог,Магазин), Количество) as Рег
     |where
     |  $Рег.Аналог (select val from #спАналогов)";
В этом случае ошибка: Meta name parser error: неизвестное метаимя или алиас "$Рег"
Если последнюю строку напишу так:
     |  Рег.Аналог (select val from #спАналогов)";
или так:
     |  Аналог (select val from #спАналогов)";
выдает пустой ответ.
Исходный запрос на 1с работает:
     ТекстЗапроса = ЗапросПериода(ДатаКон) + "
           |Магазин=Регистр.Остатки.Магазин;Условие (Магазин=ВыбМагаз);
           |Аналог=Регистр.Остатки.Аналог;Условие (Аналог в спАналогов);
           |к1=Регистр.Остатки.Количество;
           |Функция НачКол=НачОст(к1);
           |Функция ПрхКол=Приход(к1);
           |Функция РсхКол=Расход(к1);
           |Функция КонКол=КонОст(к1);
           |Группировка Аналог Без Групп;";
     Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
           Возврат;
     КонецЕсли;
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #1 - 23. Февраля 2021 :: 11:47
Печать  
an20077 писал(а) 23. Февраля 2021 :: 09:03:
Если последнюю строку напишу так:
     |  Рег.Аналог (select val from #спАналогов)";


Рег.Аналог IN (select val from #спАналогов)";
  
Наверх
www  
IP записан
 
an20077
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 16. Февраля 2021
Re: Помогите с условием в прямом запросе.
Ответ #2 - 23. Февраля 2021 :: 12:33
Печать  
Djelf писал(а) 23. Февраля 2021 :: 11:47:
an20077 писал(а) 23. Февраля 2021 :: 09:03:
Если последнюю строку напишу так:
     |  Рег.Аналог (select val from #спАналогов)";


Рег.Аналог IN (select val from #спАналогов)";

Да, пропустил IN в письме, но все равно не работает.
     стрЗапроса = "
     |select
     |  Рег.Аналог as [Аналог $Справочник.НовАналоги],
     |  Рег.КоличествоНачальныйОстаток as НачКол,
     |  Рег.КоличествоПриход as ПрхКол,
     |  Рег.КоличествоРасход as РсхКол,
     |  Рег.КоличествоКонечныйОстаток as КонКол
     |from
     |  $РегистрОстаткиОбороты.Остатки(:ДатаНач, :ДатаКон~, , , ,Магазин=:ВыбМагаз, (Аналог,Магазин), Количество) as Рег
     |where
     |  Рег.Аналог in (select val from #спАналогов)";
     спАналогов = СоздатьОбъект("СписокЗначений");
     док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
     RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов");      
  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #3 - 23. Февраля 2021 :: 13:19
Печать  
an20077 писал(а) 23. Февраля 2021 :: 12:33:
     док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
     RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов");      

И получается ID13, а для Рег.Аналог видимо нужен ID9 (отсюда не видать, но по типизации видимо ID9).
Вырезай первые 4 символа из val.
  
Наверх
www  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #4 - 24. Февраля 2021 :: 17:28
Печать  
Какой тип в регистре у измерения "Аналог"?
  
Наверх
IP записан
 
an20077
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 16. Февраля 2021
Re: Помогите с условием в прямом запросе.
Ответ #5 - 24. Февраля 2021 :: 18:04
Печать  
Djelf писал(а) 23. Февраля 2021 :: 13:19:
an20077 писал(а) 23. Февраля 2021 :: 12:33:
     док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
     RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов");      

И получается ID13, а для Рег.Аналог видимо нужен ID9 (отсюда не видать, но по типизации видимо ID9).
Вырезай первые 4 символа из val.

Не совсем понял про типизацию: ID13 или ID9. Пытаюсь запросы писать по статье http://script-coding.com/Direct_queries.html#2., там есть примеры, но не всё получается.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #6 - 25. Февраля 2021 :: 06:17
Печать  
where
Рег.Аналог

тут $ не нужен
РегистрОстаткиОбороты - виртуальная таблица, не физическая
  

1&&2&&3
Наверх
 
IP записан
 
an20077
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 16. Февраля 2021
Re: Помогите с условием в прямом запросе.
Ответ #7 - 25. Февраля 2021 :: 07:38
Печать  
leshik писал(а) 24. Февраля 2021 :: 17:28:
Какой тип в регистре у измерения "Аналог"?

Справочник
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #8 - 25. Февраля 2021 :: 14:10
Печать  
Код
Выбрать все
select
Рег.Аналог as [Аналог $Справочник.НовАналоги],
Рег.КоличествоНачальныйОстаток as НачКол,
Рег.КоличествоПриход as ПрхКол,
Рег.КоличествоРасход as РсхКол,
Рег.КоличествоКонечныйОстаток as КонКол
	from
$РегистрОстаткиОбороты.Остатки(:ДатаНач, :ДатаКон~, , , ,(Магазин=:ВыбМагаз) and (Аналог in (Select Val From #спАналогов)), (Аналог,Магазин), Количество) as Рег";

 спАналогов = СоздатьОбъект("СписокЗначений");
 док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
 RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов"); 



1) Условие на измерение надо отражать внутри виртуальной таблицы.
2) Какая ошибка, что не работает?
  
Наверх
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #9 - 26. Февраля 2021 :: 07:00
Печать  
an20077 писал(а) 24. Февраля 2021 :: 18:04:
Djelf писал(а) 23. Февраля 2021 :: 13:19:
an20077 писал(а) 23. Февраля 2021 :: 12:33:
     док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
     RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов");      

И получается ID13, а для Рег.Аналог видимо нужен ID9 (отсюда не видать, но по типизации видимо ID9).
Вырезай первые 4 символа из val.

Не совсем понял про типизацию: ID13 или ID9. Пытаюсь запросы писать по статье http://script-coding.com/Direct_queries.html#2., там есть примеры, но не всё получается.


У меня нет базы на mssql. Вот объяснение на типовой базе, правда на sqlite.
Код (SQL)
Выбрать все
SELECT
	ЮрФизЛицо [ID13 $Справочник]
	,substr(ЮрФизЛицо,5)	[ФизЛицаID9 :Справочник.ФизЛица]
	,substr(ЮрФизЛицо,5)	[ЮрЛицаID9 :Справочник.ЮрЛица]
FROM Справочник_Контрагенты
 


Видишь разницу? RS.УложитьСписокОбъектов13 дает ID13 IDСправочника+IDЭлементаСправочника, а тебе нужно IDЭлементаСправочника.
Т.е. Рег.Аналог IN (select substr(val,5,9) from #спАналогов)";
  
Наверх
www  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #10 - 27. Февраля 2021 :: 06:49
Печать  
Djelf писал(а) 26. Февраля 2021 :: 07:00:
an20077 писал(а) 24. Февраля 2021 :: 18:04:
Djelf писал(а) 23. Февраля 2021 :: 13:19:
an20077 писал(а) 23. Февраля 2021 :: 12:33:
     док.ВыгрузитьТабличнуюЧасть(спАналогов, "Аналог");
     RS.УложитьСписокОбъектов13(спАналогов, "#спАналогов");      

И получается ID13, а для Рег.Аналог видимо нужен ID9 (отсюда не видать, но по типизации видимо ID9).
Вырезай первые 4 символа из val.

Не совсем понял про типизацию: ID13 или ID9. Пытаюсь запросы писать по статье http://script-coding.com/Direct_queries.html#2., там есть примеры, но не всё получается.


У меня нет базы на mssql. Вот объяснение на типовой базе, правда на sqlite.
Код (SQL)
Выбрать все
SELECT
	ЮрФизЛицо [ID13 $Справочник]
	,substr(ЮрФизЛицо,5)	[ФизЛицаID9 :Справочник.ФизЛица]
	,substr(ЮрФизЛицо,5)	[ЮрЛицаID9 :Справочник.ЮрЛица]
FROM Справочник_Контрагенты
 


Видишь разницу? RS.УложитьСписокОбъектов13 дает ID13 IDСправочника+IDЭлементаСправочника, а тебе нужно IDЭлементаСправочника.
Т.е. Рег.Аналог IN (select substr(val,5,9) from #спАналогов)";

Не соглашусь, так как в Автор указал, что тип у измерения "Аналог" в Регистре "Справочник". Не конкретного вида, а просто "Справочник". Следовательно в регистре тоже ID13
  
Наверх
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Помогите с условием в прямом запросе.
Ответ #11 - 27. Февраля 2021 :: 11:27
Печать  
leshik писал(а) 27. Февраля 2021 :: 06:49:
Не соглашусь, так как в Автор указал, что тип у измерения "Аналог" в Регистре "Справочник". Не конкретного вида, а просто "Справочник". Следовательно в регистре тоже ID13

Ну сказал и что? У справочника НовАналоги тоже тип Справочник. А про Вид ты не спрашивал!
Он же типизирует из ID9. Очень сильно сомневаюсь что Аналог это ID13.
Код (SQL)
Выбрать все
|  Рег.Аналог as [Аналог $Справочник.НовАналоги], 

« Последняя редакция: 27. Февраля 2021 :: 12:49 - Djelf »  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать