Переключение на Главную Страницу Страницы: [1] 2 3 ... 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите, пожалуйста, в составлении запроса (число прочтений - 34485 )
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Помогите, пожалуйста, в составлении запроса
05. Сентября 2014 :: 10:47
Печать  
Цель запроса: Вытащить инфо о товарах в ТЗ из регистра  остатков "Остатки".
Измерения, которые есть в регистре:
Фирма, Склад, Товар, Партия
Ресурсы, которые есть в регистре:
Штук, Масса, МассаБК
Фильтры:
ВыбТовар - строка, при совпадению наименования товаров с которой должны попадать в выборку;
ВыбСклад - ссылка на элемент в справочнике "ПОДРАЗДЕЛЕНИЯ";
ВыбФирма - ссылка на элемент в справочнике "Фирмы";

Необхходимые поля в ТЗ: Товар, Партия, Количество, Сумма, СуммаБК.
Вот моя попытка:
[code]ТекстЗапроса = "
     |Select                              
     |   Фирма      [Товар $Справочник.Фирмы],            
     |   Товар      [Товар $Справочник.Номенклатура],
     |   Наим      [Товар $Справочник.Номенклатура.Наименование],
     |   Партия      [Товар $Справочник.Партии],
     |   Склад      [Склад $Справочник.Подразделения],
     |   Кво            Штук,
     |   Сум            Сумма,
     |   СумБК            СуммаБК
     |FROM
     |   $Регистр.Остатки(
     |      ,
     |      ,                                      
     |   Фирма in (Select val from #ВыбФирма) And
     |      Товар in (Select val from #ВыбТовар) And
     |      Склад in (Select val from #ВыбСклад),
     |      (Товар, Склад),
     |      Штук
     |      ) остатки
     |";
     Запрос = СоздатьОбъект("ODBCRecordSet");
     Запрос.УложитьСписокОбъектов(ВыбСклад,"#ВыбФирма","Фирмы");
     Запрос.УложитьСписокОбъектов(ВыбСклад,"#ВыбСклад","Подразделения");
     Запрос.УложитьСписокОбъектов(ВыбТовар,"#ВыбТовар","Номенклатура");
     ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
     ТЗ.ВыбратьСтроку();[/code]

При такой расстановке, на данный момент ругается на несоотвествие Выбтовар, но если убираю этот фильтр, дает ошибку "Неправильный синтаксис около конструкции ","."

Зарание, огромное спасибо!
« Последняя редакция: 05. Сентября 2014 :: 11:48 - maxy3d »  
Наверх
 
IP записан
 
sava
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 56
Зарегистрирован: 18. Февраля 2010
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #1 - 05. Сентября 2014 :: 11:24
Печать  
Код
Выбрать все
	|   Кво		Штук
	|   Сум		Сумма
	|   СумБК		СуммаБК 


Может для начала запятые поставить ?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #2 - 05. Сентября 2014 :: 11:26
Печать  
ВыбТовар все таки ссылка на элемент или строка с наименованием?
  

1&&2&&3
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #3 - 05. Сентября 2014 :: 11:40
Печать  
должна быть просто строкой, в которую юзер вводит приблизительное наименование товара. Пример:
есть товары гайка ..., когда юзер вводит слово "гайка", ему выдает все гайки, которые есть на выбраном складе.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #4 - 05. Сентября 2014 :: 13:00
Печать  
Код
Выбрать все
SELECT Остатки.Товар [Товар $Справочник.Номенклатура]
	, Номенклатура.DESCR Наим
	, Остатки.Партия [Партия $Справочник.Партии]
	, Остатки.ШтукОстаток Количество
	, Остатки.МассаОстаток Сумма
	, Остатки.МассаБКОстаток СуммаБК
FROM $РегистрОстатки.Остатки(,
		INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Товар = Номенклатура.ID,
		(Фирма = :ВыбФирма)
		AND (Склад = :ВыбСклад)
		AND (Номенклатура.DESCR LIKE :ВыбТовар),
		(Товар, Партия),) AS Остатки
	INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Остатки.Товар = Номенклатура.ID 


Код
Выбрать все
рс.УстановитьТекстовыйПараметр("ВыбТовар", "%гайка%"); 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #5 - 05. Сентября 2014 :: 13:31
Печать  
berezdetsky писал(а) 05. Сентября 2014 :: 13:00:
Код
Выбрать все
SELECT Остатки.Товар [Товар $Справочник.Номенклатура]
	, Номенклатура.DESCR Наим
	, Остатки.Партия [Партия $Справочник.Партии]
	, Остатки.ШтукОстаток Количество
	, Остатки.МассаОстаток Сумма
	, Остатки.МассаБКОстаток СуммаБК
FROM $РегистрОстатки.Остатки(,
		INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Товар = Номенклатура.ID,
		(Фирма = :ВыбФирма)
		AND (Склад = :ВыбСклад)
		AND (Номенклатура.DESCR LIKE :ВыбТовар),
		(Товар, Партия),) AS Остатки
	INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Остатки.Товар = Номенклатура.ID 


Код
Выбрать все
рс.УстановитьТекстовыйПараметр("ВыбТовар", "%гайка%"); 





Написал по Вашему наставлению:

Код
Выбрать все
ТекстЗапроса = "
|SELECT Остатки.Товар [Товар $Справочник.Номенклатура]
|	, Номенклатура.DESCR Наим
|	, Остатки.Фирма [Фирма $Справочник.Фирмы]
|	, Остатки.Партия [Партия $Справочник.Партии]
|	, Остатки.ШтукОстаток Количество
|	, Остатки.МассаОстаток Сумма
|	, Остатки.МассаБКОстаток СуммаБК
|FROM $РегистрОстатки.Остатки(,
|		INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Товар = Номенклатура.ID,
|		(Фирма = :ВыбФирма)
|		AND (Склад = :ВыбСклад)
|		AND (Номенклатура.DESCR LIKE :ВыбТовар),
|		(Товар, Партия),) AS Остатки
|	INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Остатки.Товар = Номенклатура.ID
|";

Запрос = СоздатьОбъект("ODBCRecordSet");
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку(); 




Но выдает ошибку :
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\ТЕСТ01.ERT(48)}: Meta name parser error: не указан параметр ":ВыбФирма"
Если убираю параметр "ВыбФирма", ругается на параметр "ВыбСклад"....
« Последняя редакция: 08. Сентября 2014 :: 07:41 - maxy3d »  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #6 - 05. Сентября 2014 :: 13:32
Печать  
Параметры фильтра "ВыбФирма", "ВыбТовар" и "ВыбСклад" заданы...
Параметр:
Цитата:
рс.УстановитьТекстовыйПараметр("ВыбТовар", "%гайка%");


Мне не нужно, потому как сам параметр "выбТовар" у меня является этим текстовымпараметром (приблизительное название товара)
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #7 - 10. Сентября 2014 :: 09:00
Печать  
Тема еще актуальна. ПОМОГИТЕ, пожалуйста.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #8 - 10. Сентября 2014 :: 09:22
Печать  
если ВыбФирма - ссылка на элемент справочника
то
рс.УстановитьТекстовыйПараметр("ВыбФирма", ВыбФирма);
в запросе
Фирма = :ВыбФирма

если ВыбФирма - список элементов или группа
то
рс.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма","Фирмы");
в запросе
Фирма in (Select val from #ВыбФирма)

то же самое по складу.

По товару - не понятно, что у тебя не получилось
  

1&&2&&3
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #9 - 10. Сентября 2014 :: 11:57
Печать  
trad писал(а) 10. Сентября 2014 :: 09:22:
если ВыбФирма - ссылка на элемент справочника
то
рс.УстановитьТекстовыйПараметр("ВыбФирма", ВыбФирма);
в запросе
Фирма = :ВыбФирма

если ВыбФирма - список элементов или группа
то
рс.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма","Фирмы");
в запросе
Фирма in (Select val from #ВыбФирма)

то же самое по складу.

По товару - не понятно, что у тебя не получилось


Спасибо, переписал код. А что касается ВыбТовар - это просто строковое поле, в которое юзер вписывает приблизительно название (полноеНаименование) товара, по которому запрос должен найти совпадения в справочнике.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #10 - 10. Сентября 2014 :: 12:03
Печать  
Вот попытался запустить запрос без фильтра "ВыбТовар"
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   $Рег.Фирма	[Фирма $Справочник.Фирмы],
	|   $Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   $Рег.Партия	[Партия $Справочник.Партии],
	|   $Рег.Склад 	[Склад $Справочник.Подразделения],
	|   $Рег.Штук as Кво
	|FROM
	|   $Регистр.Остатки as Рег
	|WHERE
	|	Фирма in (Select val from #ВыбФирма) AND
	|	Склад = :ВыбСклад";


	Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма", "Фирмы");
	Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);

	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку(); 



результат:
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца "Фирма".
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #11 - 10. Сентября 2014 :: 13:07
Печать  
читай Ответ #8
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #12 - 10. Сентября 2014 :: 13:15
Печать  
vinogradoff писал(а) 10. Сентября 2014 :: 13:07:
читай Ответ #8


Ну так согласно ответа №8 я написал:
Код
Выбрать все
|	Фирма = :ВыбФирма AND
|	Склад = :ВыбСклад"; 



и
Код
Выбрать все
Запрос.УстановитьТекстовыйПараметр("ВыбФирма", ВыбФирма);
Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад); 



поменяв условие на расчет того, что фирма тоже будет определенным элементом. Ошибка осталась прежней:
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя столбца "Фирма".
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #13 - 10. Сентября 2014 :: 13:17
Печать  
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   $Рег.Фирма	[Фирма $Справочник.Фирмы],
	|   $Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   $Рег.Партия	[Партия $Справочник.Партии],
	|   $Рег.Склад 	[Склад $Справочник.Подразделения],
	|   $Рег.ШтукОстаток as Кво
	|FROM
	|   $РегистрОстатки.Остатки(,Фирма in (Select val from #ВыбФирма) AND
	|	Склад = :ВыбСклад,) as Рег
	|";



	Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма", "Фирмы");
	Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);

	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку(); 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #14 - 10. Сентября 2014 :: 13:48
Печать  
Eprst писал(а) 10. Сентября 2014 :: 13:17:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   $Рег.Фирма	[Фирма $Справочник.Фирмы],
	|   $Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   $Рег.Партия	[Партия $Справочник.Партии],
	|   $Рег.Склад 	[Склад $Справочник.Подразделения],
	|   $Рег.ШтукОстаток as Кво
	|FROM
	|   $РегистрОстатки.Остатки(,Фирма in (Select val from #ВыбФирма) AND
	|	Склад = :ВыбСклад,) as Рег
	|";



	Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма", "Фирмы");
	Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);

	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку(); 




Полностью вставил в конфигуратор ваш ответ, но получил ругань:
Meta name parser error: неизвестное метаимя или алиас "$Рег"

Пробовал своими силами переписать:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Фирма	[Фирма $Справочник.Фирмы],
	|   Товар 	[Товар $Справочник.Номенклатура],
	|   Партия	[Партия $Справочник.Партии],
	|   Склад 	[Склад $Справочник.Подразделения]
	|FROM
	|   $РегистрОстатки.Остатки(,Фирма in (Select val from #ВыбФирма) AND
	|	Склад = :ВыбСклад,) as Рег
	|";



	Запрос = СоздатьОбъект("ODBCRecordSet");
	Запрос.УложитьСписокОбъектов(ВыбФирма,"#ВыбФирма", "Фирмы");
	Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);

	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку(); 



результат - ОШИБКА:
State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "rg4080_vt".
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 11
ОтправитьПечать