Переключение на Главную Страницу Страницы: 1 ... 52 53 [54] 55 56 ... 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 303346 )
fly7
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 16. Ноября 2009
Re: Класс "ПрямойЗапрос"
Ответ #795 - 16. Августа 2010 :: 14:26
Печать  
не получается запрос по документам
Код
Выбрать все
	СписДоговор = СоздатьОбъект("СписокЗначений");  
	СписДоговор.ДобавитьЗначение(ВыбКонтрагент.ОсновнойДоговор);

	ТекстЗапроса = "
	|ВЫБРАТЬ              
	| $Рег.ТекущийДокумент КАК [Докум $Документ],
	| СУММА($Рег.СуммаУпр) КАК СуммаДокумента
	|
	|ИЗ
	| $Регистр.Покупатели КАК Рег
	| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур ПО($Жур.ТекущийДокумент=$Рег.ТекущийДокумент)
	|
	|ГДЕ
	| Жур.ПозицияДокумента МЕЖДУ :НачДата и :КонДата~
	| И $Рег.Договор В (ВЫБРАТЬ Val ИЗ #СписДоговор)
	|
	|СГРУППИРОВАТЬ
	| $Рег.ТекущийДокумент
	|";

	Запрос = СоздатьОбъект("ПрямойЗапрос");          
	Запрос.РежимОтладки = 1;
	Запрос.УстановитьТекстовыйПараметр("НачДата", Дата(2010, 06, 01));
	Запрос.УстановитьТекстовыйПараметр("КонДата", Дата(2010, 08, 31));
	Запрос.УложитьСписокЗначений(СписДоговор, "#СписДоговор", "Договоры");
	ТабРезультат = Запрос.Выполнить("ИндексированнаяТаблица", ТекстЗапроса);
	ТабРезультат.Показать();
 



ошибка
Код
Выбрать все
ТабРезультат = Запрос.Выполнить("ИндексированнаяТаблица", ТекстЗапроса);
{Y:\1С\1C++\ТЕСТПРЯМОЙЗАПРОС.ERT(68)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=
ВЫБРАТЬ              
 $Рег.ТекущийДокумент КАК [Докум $Документ],
 СУММА($Рег.СуммаУпр) КАК СуммаДокумента

ИЗ
 $Регистр.Покупатели КАК Рег
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур ПО($Жур.ТекущийДокумент=$Рег.ТекущийДокумент)

ГДЕ
 Жур.ПозицияДокумента МЕЖДУ :НачДата и :КонДата~
 И $Рег.Договор В (ВЫБРАТЬ Val ИЗ #СписДоговор)

СГРУППИРОВАТЬ
 $Рег.ТекущийДокумент
, Число БезПодготовки=0) : near "AS": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{C:\1cBases\v7\222\ExtForms\Clasess\ПрямойЗапрос.ert(12639) } 



что не так делаю? Печаль
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #796 - 16. Августа 2010 :: 14:33
Печать  
$Жур.ПозицияДокумента

Нерешительный
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #797 - 16. Августа 2010 :: 19:31
Печать  
1. $Регистр.Покупатели -- надо "Регистр.Покупатели"
2. $Регистр.Покупатели КАК Рег -- надо "$Регистр.Покупатели КАК Рег $nolock"
3. соответственно ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур -- надо "ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур $nolock"
4. Как правильно указал Иван "Жур.ПозицияДокумента" -- надо " $Жур.ПозицияДокумента".
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
fly7
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 16. Ноября 2009
Re: Класс "ПрямойЗапрос"
Ответ #798 - 17. Августа 2010 :: 06:16
Печать  
спасибо Улыбка сейчас попробую

ночью выкрутился так:
Код
Выбрать все
	СтрУсловий = "(Договор В (ВЫБРАТЬ Val ИЗ #СписДоговор))";
	Для i=1 По СписКодОпераций.РазмерСписка() Цикл        
		СтрУсловий = СтрУсловий + "+(КодОперации<>:ВыбКодОперации" + Строка(i) + ")";
	КонецЦикла;

	ТекстЗапроса = "
	|ВЫБРАТЬ
	| Рег.ТекущийДокумент КАК [Докум $Документ],
	| Рег.ВидДокумента КАК Докум_вид,
	| Рег.СуммаУпрРасход КАК СуммаРасход,
	| Рег.КодОперации КАК [КодОпер $Перечисление.КодыОпераций]
	|
	|ИЗ
	|  $РегистрОбороты.Покупатели(:НачДата, :КонДата, Документ, (" + СтрУсловий + "), (Договор, КодОперации), СуммаУпр) КАК Рег
	|";

	Запрос = СоздатьОбъект("ПрямойЗапрос");          
	Запрос.УстановитьТекстовыйПараметр("НачДата", ПромНачОтчета);
	Запрос.УстановитьТекстовыйПараметр("КонДата", ПромКонОтчета);
	Запрос.УложитьСписокЗначений(СписДоговПлана2, "#СписДоговор", "Договоры");
	Для i=1 По СписКодОпераций.РазмерСписка() Цикл
		Запрос.УстановитьТекстовыйПараметр("ВыбКодОперации" + Строка(i), СписКодОпераций.ПолучитьЗначение(i));
	КонецЦикла;
	ТабРезультат = Запрос.Выполнить("ИндексированнаяТаблица", ТекстЗапроса);
 



но почему то не срабатывает условие на КодОперации и выборке поле КодОпер пустое....
я только учусь запросам
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос"
Ответ #799 - 17. Августа 2010 :: 06:26
Печать  
Строка условий.. просто нелепая..
Включи отладку и посмотри на готовый текст запроса.. там всё видно.
  
Наверх
 
IP записан
 
fly7
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 16. Ноября 2009
Re: Класс "ПрямойЗапрос"
Ответ #800 - 18. Августа 2010 :: 09:22
Печать  
условия исправил ) сейчас так:
Код
Выбрать все
	СписКодОпераций = СоздатьОбъект("СписокЗначений");
	ля);
	);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.СторнированАванс);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.Продажа);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.Прочее);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.КурсоваяРазница);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.СторнированВозврат);
	СписКодОпераций.ДобавитьЗначение(Перечисление.КодыОпераций.СторнированАванс);

	ТекстЗапроса = "
	|ВЫБРАТЬ              
	| $Рег.ТекущийДокумент КАК [Докум $Документ],
	| $Жур.ВидДокумента КАК Докум_вид,
	| $Рег.КодОперации КАК [КодОпер $Перечисление.КодыОпераций],
	| СУММА($Рег.СуммаУпр) КАК СуммаДокумента
	|
	|ИЗ
	| Регистр.Покупатели КАК Рег $nolock
	| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур $nolock
	|  ПО($Жур.ТекущийДокумент=$Рег.ТекущийДокумент)
	|
	|ГДЕ
	| $Жур.ПозицияДокумента МЕЖДУ :НачДата и :КонДата~
	| И $Рег.Договор В (ВЫБРАТЬ Val ИЗ #СписДоговор)
	| И НЕ $Рег.КодОперации В (ВЫБРАТЬ Val ИЗ #СписКодОпер)
	|
	|СГРУППИРОВАТЬ
	| $Рег.ТекущийДокумент
	|";

	Запрос = СоздатьОбъект("ПрямойЗапрос");          
	Запрос.УстановитьТекстовыйПараметр("НачДата", ПромНачОтчета);
	Запрос.УстановитьТекстовыйПараметр("КонДата", ПромКонОтчета);
	Запрос.УложитьСписокЗначений(СписДоговПлана2, "#СписДоговор", "Договоры");
	Запрос.УложитьСписокЗначений(СписКодОпераций, "#СписКодОпер");
	ТабРезультат = Запрос.Выполнить("ИндексированнаяТаблица", ТекстЗапроса);
 


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


1C++ rocks!

Сообщений: 15
Зарегистрирован: 16. Ноября 2009
Re: Класс "ПрямойЗапрос"
Ответ #801 - 18. Августа 2010 :: 09:24
Печать  
у меня еще другой вопрос, опять не работает...
Код
Выбрать все
	ТекстЗапроса = "
	|ВЫБРАТЬ
	| $Док.Абонент КАК [Контр $Справочник],
	| $Док.ТекущийДокумент КАК [Докум $Документ.Звонок]
	|
	|ИЗ
	| Документ.Звонок КАК Док
	| ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур ПО $Жур.ТекущийДокумент = $Док.ТекущийДокумент
	|
	|ГДЕ
	| $Жур.ПРОВЕДЕН = 1
	| И $Док.Абонент В ($ВидСправочника36.Контрагенты + Val ИЗ #СписокКонтр)
	|
	|СГРУППИРОВАТЬ
	| $Док.Абонент,
	| $Док.ТекущийДокумент
	|";
 



ошибка
: near "FROM": syntax error

$Док.Абонент имеет тип "Справочник" (без указания Контрагент)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #802 - 18. Августа 2010 :: 10:12
Печать  
так попробуй:
Код
Выбрать все
И $Док.Абонент В ($ВидСправочника36.Контрагенты || Val ИЗ #СписокКонтр) 



Если у тебя много документов этого вида, то такой запрос будет долго выполнятся, т.к. ты не попадаешь не в один из индексов.
  • Тебе действительно не надо указывать период документов?
  • Если $Док.Абонент входит в графу отбора, то необходимо перестроить запрос с учетом этого.
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Класс "ПрямойЗапрос"
Ответ #803 - 18. Августа 2010 :: 11:03
Печать  
fly7:
И $Док.Абонент В ($ВидСправочника36.Контрагенты + Val ИЗ #СписокКонтр)

И $Док.Абонент В (ВЫБРАТЬ $ВидСправочника36.Контрагенты||Val ИЗ #СписокКонтр)
« Последняя редакция: 18. Августа 2010 :: 12:35 - »  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #804 - 18. Августа 2010 :: 11:30
Печать  
Добрый день. Я только начал изучать класс и сразу есть вопрос.
Есть запрос:
Код
Выбрать все
|ВЫБРАТЬ
|	$Спр.ТекущийЭлемент КАК [Товар $Справочник.Номенклатура]
|ИЗ
|	Справочник.Номенклатура КАК Спр $nolock
 


Как в результате получить список товаров в виде иерархии, как в самом справочнике?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #805 - 18. Августа 2010 :: 11:35
Печать  
Ну во первых в виде дерева получить не выйдет, да и в виде плоской таблицы весьма проблематично. Как вариант посмотри в сторону метода Группировать объекта ИндексированнаяТаблица.
Ну и можно создать параметризированный запрос, с фильтром по родителю, соответственно потом получив первый результат по пустому родителю (1-й уровень) путем перебора идти и спрашивать результат по каждому из других уровней Улыбка и его вставлять в таблицу значений в позицию которую надо.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #806 - 18. Августа 2010 :: 11:44
Печать  
ReLock писал(а) 18. Августа 2010 :: 11:30:
Как в результате получить список товаров в виде иерархии, как в самом справочнике?

А что значит "в виде иерархии"? Это ТЗ какой-то определенной структуры?
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #807 - 18. Августа 2010 :: 11:49
Печать  
JohnyDeath писал(а) 18. Августа 2010 :: 11:44:
ReLock писал(а) 18. Августа 2010 :: 11:30:
Как в результате получить список товаров в виде иерархии, как в самом справочнике?

А что значит "в виде иерархии"? Это ТЗ какой-то определенной структуры?

Это значит, что первой записью в результирующей ТЗ идет группа первого уровня, второй - группы и товары второго уровня.
Это как в 1С:
Код
Выбрать все
Спр = СоздатьОбъект("Справочник.Номенклатура")
Спр.ВключатьПодчиненные(1);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
...
КонецЦикла
 



1с 8-ку я, к сожалению, не знаю. Но там в запросах это кажется выглядит так:
Код
Выбрать все
|ИТОГИ ПО
|$Спр.ТекущийЭлемент ТОЛЬКО ИЕРАРХИЯ
 



Что-то меня понесло... Улыбка
Имеем справочник:

Группа1
....Подгруппа1
..........Товар1
..........Товар2
..........Товар3
....Подгруппа2
..........Товар4
..........Товар5
..........Товар6

В результирующей ТЗ имеем строчки такого же порядка:

Группа1
Подгруппа1
Товар1
Товар2
Товар3
Подгруппа2
Товар4
Товар5
Товар6
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #808 - 18. Августа 2010 :: 12:07
Печать  
Если у тебя ДБФ, то на данный момент ничего такого нет.
Можно использовать ИТЗ с установкой фильтров или метод "Группировать", либо как-нибудь извратиться с запросом наподобее вот такого: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/840#840
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #809 - 18. Августа 2010 :: 12:12
Печать  
Спасибо. Я попробую.  Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 52 53 [54] 55 56 ... 60
ОтправитьПечать