Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите, пожалуйста, в составлении запроса (число прочтений - 34812 )
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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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 записан
 
Eprst
God Member
*****
Отсутствует



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



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

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



копи-пасте, чего уж там
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

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



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

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



копи-пасте, чего уж там



эх, копи-пасте - результат:
State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "rg4080_vt"
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #17 - 10. Сентября 2014 :: 14:17
Печать  
Могут быть какие-то глюки SQL servera?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #18 - 10. Сентября 2014 :: 14:46
Печать  
Перед этим: ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
вставь Запрос.Отладка(1) а результат сюда
  
Наверх
ICQ  
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

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

Select
   Рег.Фирма      [Фирма $Справочник.Фирмы],
   Рег.Товар      [Товар $Справочник.Номенклатура],
   Рег.Партия      [Партия $Справочник.Партии],
   Рег.Склад      [Склад $Справочник.Подразделения],
   Рег.ШтукОстаток as Кво
FROM
   (
select
rg4080_vt.sp4081 as Фирма,
rg4080_vt.sp4082 as Склад,
rg4080_vt.sp4083 as Товар,
rg4080_vt.sp4084 as Партия,
rg4080_vt.sp4085 as ШтукОстаток,
rg4080_vt.sp4086 as МассаОстаток,
rg4080_vt.sp4087 as МассаБКОстаток,
rg4080_vt.sp4382 as СуммаОстаток
from rg4080 as rg4080_vt (nolock)
rg4080_vt.sp4081 in (Select val from #ВыбФирма) AND      rg4080_vt.sp4082 = '    2P   '
where rg4080_vt.period={d '2014-09-01'}
and (
rg4080_vt.sp4085 <> 0 or
rg4080_vt.sp4086 <> 0 or
rg4080_vt.sp4087 <> 0 or
rg4080_vt.sp4382 <> 0
)
) as Рег

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\ТЕСТ02.ERT(23)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "rg4080_vt".
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

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



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

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


КонецПроцедуры
 


то:

Select
   Рег.Фирма      [Фирма $Справочник.Фирмы],
   Рег.Товар      [Товар $Справочник.Номенклатура],
   Рег.Партия      [Партия $Справочник.Партии],
   Рег.Склад      [Склад $Справочник.Подразделения],
   Рег.ШтукОстаток as Кво
FROM
   (
select
rg4080_vt.sp4081 as Фирма,
rg4080_vt.sp4082 as Склад,
rg4080_vt.sp4083 as Товар,
rg4080_vt.sp4084 as Партия,
rg4080_vt.sp4085 as ШтукОстаток,
rg4080_vt.sp4086 as МассаОстаток,
rg4080_vt.sp4087 as МассаБКОстаток,
rg4080_vt.sp4382 as СуммаОстаток
from rg4080 as rg4080_vt (nolock)
rg4080_vt.sp4081 = '    13   '
where rg4080_vt.period={d '2014-09-01'}
and (
rg4080_vt.sp4085 <> 0 or
rg4080_vt.sp4086 <> 0 or
rg4080_vt.sp4087 <> 0 or
rg4080_vt.sp4382 <> 0
)
) as AND
     Склад = '    2P   ',) as Рег

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\ТЕСТ02.ERT(23)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "rg4080_vt".
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



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

запятушки не хватает и в конце по-моему тоже, вот дока
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

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

запятушки не хватает и в конце по-моему тоже, вот дока


Спасибо за ссылку на док.
Добавил по Вашему совету запятые, но:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "AND".
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #23 - 11. Сентября 2014 :: 07:10
Печать  
Свой текст запроса из отладки приведи и обычный тоже
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #24 - 11. Сентября 2014 :: 07:35
Печать  
Eprst писал(а) 11. Сентября 2014 :: 07:10:
Свой текст запроса из отладки приведи и обычный тоже


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



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

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


КонецПроцедуры 



отладка:
Select
   Рег.Фирма      [Фирма $Справочник.Фирмы],
   Рег.Товар      [Товар $Справочник.Номенклатура],
   Рег.Партия      [Партия $Справочник.Партии],
   Рег.Склад      [Склад $Справочник.Подразделения],
   Рег.ШтукОстаток as Кво
FROM
   (
select
rg4080_vt.sp4081 as Фирма,
rg4080_vt.sp4082 as Склад,
rg4080_vt.sp4083 as Товар,
rg4080_vt.sp4084 as Партия,
rg4080_vt.sp4085 as ШтукОстаток,
rg4080_vt.sp4086 as МассаОстаток,
rg4080_vt.sp4087 as МассаБКОстаток,
rg4080_vt.sp4382 as СуммаОстаток
from rg4080 as rg4080_vt (nolock)
where rg4080_vt.period={d '2014-09-01'}
and (
rg4080_vt.sp4085 <> 0 or
rg4080_vt.sp4086 <> 0 or
rg4080_vt.sp4087 <> 0 or
rg4080_vt.sp4382 <> 0
)
and (rg4080_vt.sp4081 = '    13   ')
) as AND
     Склад = '    2P   ',,) as Рег

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\ТЕСТ02.ERT(23)}: State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "AND".      
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #25 - 11. Сентября 2014 :: 07:38
Печать  
скобки посчитай
  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #26 - 11. Сентября 2014 :: 07:41
Печать  
trad писал(а) 11. Сентября 2014 :: 07:38:
скобки посчитай

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



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

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


КонецПроцедуры 



результат:
Select
   Рег.Фирма      [Фирма $Справочник.Фирмы],
   Рег.Товар      [Товар $Справочник.Номенклатура],
   Рег.Партия      [Партия $Справочник.Партии],
   Рег.Склад      [Склад $Справочник.Подразделения],
   Рег.ШтукОстаток as Кво
FROM
   (
select
rg4080_vt.sp4081 as Фирма,
rg4080_vt.sp4082 as Склад,
rg4080_vt.sp4083 as Товар,
rg4080_vt.sp4084 as Партия,
rg4080_vt.sp4085 as ШтукОстаток,
rg4080_vt.sp4086 as МассаОстаток,
rg4080_vt.sp4087 as МассаБКОстаток,
rg4080_vt.sp4382 as СуммаОстаток
from rg4080 as rg4080_vt (nolock)
rg4080_vt.sp4081 = '    13   '
where rg4080_vt.period={d '2014-09-01'}
and (
rg4080_vt.sp4085 <> 0 or
rg4080_vt.sp4086 <> 0 or
rg4080_vt.sp4087 <> 0 or
rg4080_vt.sp4382 <> 0
)
) as AND
     (Склад = '    2P   ',) as Рег

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\ТЕСТ02.ERT(23)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "rg4080_vt".
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #27 - 11. Сентября 2014 :: 07:42
Печать  
Странный человек, грит проверил вот это, на самом деле текст запроса другой приводит.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #28 - 11. Сентября 2014 :: 07:42
Печать  
Может добавить период на который должен расчитывать остатки?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #29 - 11. Сентября 2014 :: 07:42
Печать  
Код
Выбрать все
|FROM
	|   $РегистрОстатки.Остатки(,,Фирма = :ВыбФирма AND Склад = :ВыбСклад,,) as Рег 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #30 - 11. Сентября 2014 :: 07:44
Печать  
Eprst писал(а) 11. Сентября 2014 :: 07:42:
Странный человек, грит проверил вот это, на самом деле текст запроса другой приводит.


Я пробую кучу разных вариантов, которые дописываю сам и которые советуют, вылаживаю и запрос и отладку, в чем "странный человек"? уточните! Какой "не тот" запрос я выложил?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #31 - 11. Сентября 2014 :: 07:44
Печать  
Eprst писал(а) 11. Сентября 2014 :: 07:42:
Код
Выбрать все
|FROM
	|   $РегистрОстатки.Остатки(,,Фирма = :ВыбФирма AND Склад = :ВыбСклад,,) as Рег 



спс, пробую
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #32 - 11. Сентября 2014 :: 07:47
Печать  
Ну почитай свои же ответы. Гришь добавил запятых, указываешь правильный текст запроса в ответе и говоришь, что он не работает.
На вопрос покажи, что именно ты проверяешь - указываешь другой текст запроса.

Отсюда и "странный" человек.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #33 - 11. Сентября 2014 :: 07:48
Печать  
maxy3d писал(а) 11. Сентября 2014 :: 07:44:
Eprst писал(а) 11. Сентября 2014 :: 07:42:
Код
Выбрать все
|FROM
	|   $РегистрОстатки.Остатки(,,Фирма = :ВыбФирма AND Склад = :ВыбСклад,,) as Рег 



спс, пробую


ЗАРАБОТАЛО! СПАСИБО! Можете еще подсказать как добавить в сей запрос условие:
ВыбТовар - строка (в которой пользователь пишет прилизительное название товара, по которому запрос должен выбрать совппадающие элементы)?
Еще раз спасибо!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #34 - 11. Сентября 2014 :: 07:51
Печать  
Могу, смотри #4  ответ. Там готовый код.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #35 - 11. Сентября 2014 :: 07:52
Печать  
Eprst писал(а) 11. Сентября 2014 :: 07:51:
Могу, смотри #4  ответ. Там готовый код.


Спс, смотрю
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #36 - 11. Сентября 2014 :: 08:00
Печать  
Всем ОГРОМНЕЙШЕЕ СПАСИБО! Все заработало - цель достигнута!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

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

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

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


СПасибо!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #38 - 11. Сентября 2014 :: 09:51
Печать  
остаток в каком ресурсе?
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #39 - 11. Сентября 2014 :: 09:52
Печать  
|where Остатки.ШтукОстаток<>0
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #40 - 11. Сентября 2014 :: 10:19
Печать  
Eprst писал(а) 11. Сентября 2014 :: 09:52:
|where Остатки.ШтукОстаток<>0

СПАСИБО!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #41 - 11. Сентября 2014 :: 10:33
Печать  
регистр складского/партионного учета в котором на остатке в штуках 0, а в других ресурсах не 0 - должен настораживать
  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #42 - 15. Сентября 2014 :: 06:56
Печать  
И снова добрый день, снова прошу Вашей помощи, товарищи наставники Подмигивание.
1. Подскажите, пожалуйста, как в прямом запросе корректно написать аналог обычного запроса:
Код
Выбрать все
|Товар = Регистр.Взаиморасчеты.Товар,Регистр.ПартииТоваров.Товар; 


тоесть как присвоить переменной значение из двух регистров? очередно раз спасибо!


2. И подскажите, пожалуйста, правильно ли присвоина переменная "Вид"? в оригинале написано:
Код
Выбрать все
|Вид		= Регистр.Взаиморасчеты.Товар.ВидИзделия; 


Как в прямом:
Код
Выбрать все
|Select
	|   Взаим.Товар	   [Товар $Справочник.Номенклатура],
	|   Взаим.Партия	[Партия $Справочник.Партии],
	|   Взаим.Склад 	[Склад $Справочник.Подразделения],
	|   Вид	 		[Вид $Справочник.Номенклатура.ВидИзделия], 



или правильней так:
Код
Выбрать все
|Select
	|   Взаим.Товар	   [Товар $Справочник.Номенклатура],
	|   Взаим.Партия	[Партия $Справочник.Партии],
	|   Взаим.Склад 	[Склад $Справочник.Подразделения],
	|   Вид	 		[Вид $Перечисления.ВидИзделия], 


3. Как в запросе прописать переменную, которая может быть как группой так и элементом или вообще не выбрана?
« Последняя редакция: 15. Сентября 2014 :: 10:05 - maxy3d »  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #43 - 15. Сентября 2014 :: 07:38
Печать  
trad писал(а) 11. Сентября 2014 :: 10:33:
регистр складского/партионного учета в котором на остатке в штуках 0, а в других ресурсах не 0 - должен настораживать

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #44 - 15. Сентября 2014 :: 09:11
Печать  
Навсякий случай, для ясности моей задачи, это полный запрос, который я сейчас пытаюсь переделать на прямой запрос:
Код
Выбрать все
Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с ВыбКонПериода по ВыбКонПериода;
	|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар;
	|Партия	   = Регистр.Взаиморасщеты.Партия,Регистр.ПартииТоваров.Партия;
	|Склад	    = Регистр.Взаиморасщеты.Магазин,Регистр.ПартииТоваров.Склад;
	|Вид		= Регистр.Взаиморасщеты.Товар.ВидИзделия,Регистр.ПартииТоваров.Товар.ВидИзделия;
	|ТипПФ	    = Регистр.Взаиморасщеты.Товар.ТипПФ,Регистр.ПартииТоваров.Товар.ТипПФ;
	|Тип		= Регистр.Взаиморасщеты.Товар.Тип,Регистр.ПартииТоваров.Товар.Тип;
	|Акция			=
	|Вуду		  = Регистр.Взаиморасщеты.Партия.ВидУчета,Регистр.ПартииТоваров.Партия.ВидУчета;
	|Клиент	   = Регистр.Взаиморасщеты.Партия.Поставщик,Регистр.ПартииТоваров.Партия.Поставщик;
	|Штук	     = Регистр.Взаиморасщеты.Количество,Регистр.ПартииТоваров.Штук;
	|Масса	    = Регистр.Взаиморасщеты.Масса,Регистр.ПартииТоваров.Масса;
	|МассаБК	  = Регистр.Взаиморасщеты.МассаБК,Регистр.ПартииТоваров.МассаБК;
	|Сумма	    = Регистр.Взаиморасщеты.Сумма,Регистр.ПартииТоваров.Сумма;
	|СуммаП	   = Регистр.Взаиморасщеты.СуммаПродажи;
	|Фирмочка	 = Регистр.Взаиморасщеты.Партия.Фирма,Регистр.ПартииТоваров.Партия.Фирма;
	|ВладелецТовара = Регистр.Взаиморасщеты.Партия.ВладелецТовара;
	|Функция ШтОст  = КонОст(Штук);
	|Функция МБКОст = КонОст(МассаБК);
	|Функция МОст   = КонОст(Масса);
	|Функция КОст   = КонОст(Сумма);
	|Функция КПОст  = КонОст(СуммаП);
	|Группировка Клиент без групп;
	|Группировка Вид;   // без групп;
	|Группировка Товар Упорядочить по Товар.Наименование без групп;
	|Группировка Партия;
	|Условие(Тип = Константа.Изделие);
	|"//}}ЗАПРОС
	;

	Если Складик.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Склад в Складик);";
	КонецЕсли;

	Если Акц.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Акция = Акц);";
	КонецЕсли;
	Если Фирма.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Фирмочка = Фирма);";
	КонецЕсли;
	Если ВыбКод.РазмерСписка() = 0 Тогда
	Иначе
		ТекстЗапроса = ТекстЗапроса + "Условие (Товар в выбКод);";
	КонецЕсли;
	Если Поставщик.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Клиент = Поставщик);";
	КонецЕсли;

	Если ВыбВидИзделия.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Вид = ВыбВидИзделия);";
	КонецЕсли;

	Если Клиентик.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(ВладелецТовара = Клиентик);";
	КонецЕсли;
	Если Учет = Перечисление.ВидУчета.Бухгалтерия Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Вуду = Учет);";
	КонецЕсли;

	Если Размер > 0 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Размер = число(сокрлп(Размер)));";
	КонецЕсли;
	Если БрилКол = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.БрилКол > 0)
		|И (число(сокрлп(Партия.ЦвДрКол)) = 0));";
	КонецЕсли;

	Если ЦвДрЦ = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.ЦвДрКол > 0)
		|И (Партия.БрилКол = 0);";

	КонецЕсли;
	Если БриллДраг = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.ЦвДрКол > 0)
		|И (Партия.БрилКол > 0));";
	КонецЕсли;

	Если Жемчуг = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.ЖемчугКол > 0);";
	КонецЕсли;

	Если Циркон = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.БрилКол = 0)
		|И (Партия.ЦвДрКол = 0);";
	КонецЕсли;


	Если Красное = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Красное);";
	КонецЕсли;
	Если Белое = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Белое);";
	КонецЕсли;
	Если Желтое = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Желтое);";
	КонецЕсли;

	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли; 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #45 - 15. Сентября 2014 :: 10:40
Печать  
А есть смысл его переделывать то ?
Он же не рабочий.
Точнее, показывает не то, что вы думаете на самом деле.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #46 - 15. Сентября 2014 :: 11:25
Печать  
Eprst писал(а) 15. Сентября 2014 :: 10:40:
А есть смысл его переделывать то ?
Он же не рабочий.
Точнее, показывает не то, что вы думаете на самом деле.


А что Вы имеете ввиду, говоря что он не то показывает?
Честно говоря писал отчет не я, и в этой базе Ооочень много "интересного", но смысл в том чтоб возмжно не переделать, а просто на основании него (по его фильтрам) написать прямой.. я вот пытаюсь (но пока не очень, так как только начал знакомится с прямыми запросами и мне тяжеловато пока понять как и где вставлять фильтра и т.д.):
Код
Выбрать все
Процедура Сформировать()

ВыбТип = Константа.Изделие;
Акц = Перечисление.Булево.Да;
//выбКод - СписокЗначений

ТекстЗапроса = "
	|Select
	|   Взаим.Товар 	[Товар $Справочник.Номенклатура],
	|   Взаим.Партия	[Партия $Справочник.Партии],
	|   Взаим.Склад 	[Склад $Справочник.Подразделения],
	|   Вид	 			[Вид $Перечисление.ВидИзделия],
	|   ТипПФ		 	[ТипПФ $Справочник.ТипПФ],
	|   Тип			 	[Тип $Справочник.Тип],
	|   Акция		 	[Акция $Перечисление.Булево],
	|   Вуду		 	[Вуду $Перечисление.ВидУчета],
	|   Клиент		 	[Клиент $Справочник.Контрагенты],
	|   Фирмочка		[Фирмочка $Справочник.Фирмы],
	|   ВладелецТовара	[ВладелецТовара $Справочник.Контрагенты],
	|   Взаим.КоличествоОстаток as Кво,
	|   Взаим.МассаОстаток as Масса,
	|   Взаим.МассаБКОстаток as МассаБК,
	|   Взаим.СуммаОстаток as Сумма,
	|   Взаим.СуммаПродажиОстаток as СуммаП
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,Фирмочка = :Фирма
	|	AND Склад = :Складик,,) as Взаим
	|where
	|	(period={d '2014-09-14'}) AND
	|	(Взаим.ШтукОстаток<>0) AND
	|   (Тип = ВыбТип) AND
	|   (Акция = ВыбТип) AND
	|   (Клиент = Поставщик) AND
	|   (Вид = ВыбВидИзделия) AND
	|   (ВладелецТовара = Клиентик) AND
	|   (Вуду = Учет) AND
	|GROUP BY Клиент,
	|	   Вид,
	|		  Взаим.Товар,
	|		  Взаим.Партия
	|";

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

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


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

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #47 - 15. Сентября 2014 :: 11:37
Печать  
Итог таков, мне нужно из регистра остатков "Взаиморсчеты" выбрать информацию по куче фильтров. При чем переменные в фильтрах могут быть как группой, спискомзначений так и просто элементом.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #48 - 15. Сентября 2014 :: 12:08
Печать  
Интересно, зачем во ВзаиморасЩетах партия ?
И зачем в Регистре партии Клиентос ?...
Кто автор этого чуда?


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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #49 - 15. Сентября 2014 :: 12:11
Печать  
Eprst писал(а) 15. Сентября 2014 :: 12:08:
Интересно, зачем во ВзаиморасЩетах партия ?
И зачем в Регистре партии Клиентос ?...
Кто автор этого чуда?


Имхо, автоматизируя бардак, получите автоматизированный бардак.


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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #50 - 15. Сентября 2014 :: 12:14
Печать  
В регистрах нет "Клиентос", Клиент - это реквизит спр.номенклатура.
По сути из регистра берутся только партия, товар и склад + остатки по весу, сумме и кол. Все остальное - это реквизиты спр.Партии и спр.Номенклатура (просто эти реквизиты учавствуют в фильтрах)
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #51 - 15. Сентября 2014 :: 12:23
Печать  
После прошлого Вашего "урока" я уже написал пару "прямых", но на данный момент я путаюсь, а точнее не знаю как вставить в условие запроса переменную, которая может быть группой, элементом или вообще не выбрана.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #52 - 15. Сентября 2014 :: 12:56
Печать  
maxy3d писал(а) 15. Сентября 2014 :: 07:38:
trad писал(а) 11. Сентября 2014 :: 10:33:
регистр складского/партионного учета в котором на остатке в штуках 0, а в других ресурсах не 0 - должен настораживать

Фирма занимается изготовление ювелирки - каждое изделие - это уникальная партия (в связи с весом и камнями), хотя может быть одинаковый артикул товара.

я намекаю на то, что если у тебя изделие ушло, т.е. на остатке штук = 0, то и массы как бы тоже не должно остаться
  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #53 - 15. Сентября 2014 :: 14:56
Печать  
Может кто подскажет хорошую литературу по прямым запросам для 1С 7.7?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #54 - 16. Сентября 2014 :: 07:55
Печать  
maxy3d писал(а) 15. Сентября 2014 :: 14:56:
Может кто подскажет хорошую литературу по прямым запросам для 1С 7.7?



http://rutracker.org/forum/viewtopic.php?t=4255699
http://www.script-coding.com/v77tables.html
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411
http://www.1cpp.ru/forum/YaBB.pl?num=1148874473

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #55 - 16. Сентября 2014 :: 08:49
Печать  
Помогите, пожалуйста.
Есть запрос :
Код
Выбрать все
Перем Запрос, ТекстЗапроса;
	Если ТЗ.КоличествоСтрок()>0 Тогда
		ТЗ.УдалитьСтроки();
	КонецЕсли;
	ДатаЗапрос = СтрЗаменить(Строка(ДатаДок),".","-");

	ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,period = {d '2014-09-01'} AND Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|";

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



Попытался заменить прямым:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,period = {d '2014-09-01'} AND Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|";

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


Старый запрос выдает 1500 строк, а прямой выдает 12000. Просматривал ТЗ, он выдает много строк. И если я пытаюсь поставить так как в оригинале период = датадок - выдает пустоту.. Печаль
Что я не правильно написал, чтоб результат был одинаковым?
Оргомное спасибо!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #56 - 16. Сентября 2014 :: 09:06
Печать  
Чем первый отличается от второго ?
Ничем!

И в обоих неверно указан первый параметр.
Смотри описание виртуальной таблицы Остатки
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #57 - 16. Сентября 2014 :: 09:29
Печать  
Eprst писал(а) 16. Сентября 2014 :: 09:06:
Чем первый отличается от второго ?
Ничем!

И в обоих неверно указан первый параметр.
Смотри описание виртуальной таблицы Остатки


Прошу прощения, первый запрос не тот вставил, он вот:
Код
Выбрать все
Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с ДатаДок по ДатаДок;
	|Товар	= Регистр.Взаиморасщеты.Товар;
	|Партия     = Регистр.Взаиморасщеты.Партия;
	|Складик	= Регистр.Взаиморасщеты.магазин;
	|Количество = Регистр.Взаиморасщеты.количество;
	|Масса	  = Регистр.Взаиморасщеты.Масса;
	|МассаБК	  = Регистр.Взаиморасщеты.МассаБК;
	|Сумма	  = Регистр.Взаиморасщеты.Сумма;
	|Функция ККО = КонОст(Количество);
	|Функция МКО = КонОст(Масса);
	|Функция МБКО = КонОст(МассаБК);
	|Функция СКО = КонОст(Сумма);
	|Группировка Товар без групп;
	|Группировка Партия;
	|Условие(Складик = Склад);";
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли; 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #58 - 16. Сентября 2014 :: 09:52
Печать  
Смотри первый параметр, читай статьи по ссылкам выше

http://www.1cpp.ru/docum/html/ODBC.html#id34
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #59 - 16. Сентября 2014 :: 10:47
Печать  
Eprst писал(а) 16. Сентября 2014 :: 09:52:
Смотри первый параметр, читай статьи по ссылкам выше

http://www.1cpp.ru/docum/html/ODBC.html#id34


Скорее всего я конкретно туплю, но по приведенному Вами примеру (Огромное спасибо, наконец я понял зачем там столько запятых...), я написал:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,inner join $Справочник.Подразделения as СпрСклад (nolock) on СпрСклад.id = :Склад,Магазин = :Склад,,) as Рег
	//|   $РегистрОстатки.Взаиморасщеты(,,Магазин = :Склад,,) as Рег
	|where
	|	Рег.КоличествоОстаток>0 AND
	|	Рег.МассаОстаток>0
	|";

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


Но какой именно параметр (первый) у меня не верно задан... я так и не понял... Помогите пож.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #60 - 16. Сентября 2014 :: 10:59
Печать  
первый параметр, это вот этот (дата, на которую надо получить останки твои):
$РегистрОстатки.<ИмяРегистра>([<ГраницаРасчета>][,      <Соединение>][,<Условие>][,<Измерение>][,<Ресурс>]) [as <Алиас>]


ЗЫ: соединений внутри ВТ не надо никаких, они там не нужны, конкретно, для этого запроса.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #61 - 16. Сентября 2014 :: 11:15
Печать  
Eprst писал(а) 16. Сентября 2014 :: 10:59:
первый параметр, это вот этот (дата, на которую надо получить останки твои):
$РегистрОстатки.<ИмяРегистра>([<ГраницаРасчета>][,      <Соединение>][,<Условие>][,<Измерение>][,<Ресурс>]) [as <Алиас>]


ЗЫ: соединений внутри ВТ не надо никаких, они там не нужны, конкретно, для этого запроса.


Вопервых Огромное спасибо Вам за внимание!
По такому запросу у меня наало считать правильно:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,Магазин = :Склад,(Товар,Партия,Магазин),) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|"; 



А если я не указываю период - то запрос берет по ТА.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #62 - 16. Сентября 2014 :: 11:21
Печать  
Подскажите, если мне нужно выбрать информацию из нескольких регистров, например:
Код
Выбрать все
|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар; 


и 2-й вопрос:
Как можно добавить в условие регистра значение которое может быть как группой, элементом, пустымзначение (тогда не участвовать в запросе)? пример:
Код
Выбрать все
Если Складик.Выбран() = 1 Тогда
		ТекстЗапроса = ТекстЗапроса + "Условие(Склад в Складик);";
КонецЕсли; 


тоесть Складик может быть как группой, как элементом, так и вовсе не выбран..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #63 - 16. Сентября 2014 :: 11:50
Печать  
1. либо left join либо union all (зависит от того, что надо в итоге)
2.

Можно писать в запросе так, например
|where 1=1 and 2=1 and 3=3

и дальше, если условие, тогда ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"1=1","Склад in (select val from #ВыбСклад)");

или еще как

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #64 - 16. Сентября 2014 :: 12:20
Печать  
Eprst писал(а) 16. Сентября 2014 :: 11:50:
1. либо left join либо union all (зависит от того, что надо в итоге)
2.

Можно писать в запросе так, например
|where 1=1 and 2=1 and 3=3

и дальше, если условие, тогда ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"1=1","Склад in (select val from #ВыбСклад)");

или еще как


Спасибо, попробую
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #65 - 16. Сентября 2014 :: 14:21
Печать  
Eprst писал(а) 16. Сентября 2014 :: 11:50:
или еще как

я бы написал так:

Цитата:
|$РегистрОстатки.Взаиморасщеты(,,/*Условие оп складу*/,(Товар,Партия,Магазин),) as Рег

Если ПустоеЗначение(Складик)=1 Тогда
       //Отбор не нужен
ИначеЕсли Складик.ЭтоГруппа()=0 Тогда
       рс.УстановитьТекстовыйПараметр("Склад", Складик);
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие оп складу*/", "Магазин = :Склад");
Иначе
       рс.УложитьСписокОбъектов(Складик,"#ВыбСклад", "Подразделения");
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие оп складу*/", "Магазин in (select val from #ВыбСклад)");
КонецЕсли;


тоже самое, но читабельнее имхо
  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #66 - 18. Сентября 2014 :: 07:30
Печать  
trad писал(а) 16. Сентября 2014 :: 14:21:
Eprst писал(а) 16. Сентября 2014 :: 11:50:
или еще как

я бы написал так:

Цитата:
|$РегистрОстатки.Взаиморасщеты(,,/*Условие оп складу*/,(Товар,Партия,Магазин),) as Рег

Если ПустоеЗначение(Складик)=1 Тогда
       //Отбор не нужен
ИначеЕсли Складик.ЭтоГруппа()=0 Тогда
       рс.УстановитьТекстовыйПараметр("Склад", Складик);
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие оп складу*/", "Магазин = :Склад");
Иначе
       рс.УложитьСписокОбъектов(Складик,"#ВыбСклад", "Подразделения");
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие оп складу*/", "Магазин in (select val from #ВыбСклад)");
КонецЕсли;


тоже самое, но читабельнее имхо


Спасибо за совет, сейчас испытываю как раз.

Можете подсказать как прописать в прямом запросе аналог:
Код
Выбрать все
|ПробаМ = Регистр.Взаиморасщеты.Товар.ТипПФ; 


Чтоб потом установить фильтр типа:
Код
Выбрать все
Если ПустоеЗначение(ВыбТипПф)=1 Тогда
	//Отбор не нужен
ИначеЕсли Складик.ЭтоГруппа()=0 Тогда
	Запрос.УстановитьТекстовыйПараметр("ВыбТипПф", ВыбТипПф);
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "ТипПф = :ВыбТипПф");
Иначе
	Запрос.УложитьСписокОбъектов(ВыбТипПф,"#ВыбТипПф", "ТипПф");
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "Магазин in (select val from #ВыбТипПф)");	КонецЕсли; 


СПАСИБО!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #67 - 18. Сентября 2014 :: 07:34
Печать  
Запрос.УложитьСписокОбъектов(Складик,"#ВыбТоварВид", "Перечисление.ВидИзделия");

вот это не верно. Не надо пытаться уложить перечисление в список
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #68 - 18. Сентября 2014 :: 07:36
Печать  
Eprst писал(а) 18. Сентября 2014 :: 07:34:
Запрос.УложитьСписокОбъектов(Складик,"#ВыбТоварВид", "Перечисление.ВидИзделия");

вот это не верно. Не надо пытаться уложить перечисление в список

Я уже справил на справочник, потому как заметил
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #69 - 18. Сентября 2014 :: 07:37
Печать  
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   ВидИзделия [ТоварВид $Перечисление.ВидИзделия],
	|   ТипПф	[ПробаМ $Справочник.ТипПФ],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Поставщик [ТоварПост $Справочник.Контрагенты],
	|   ВладелецТовара [ВладелецТовара $Справочник.Контрагенты],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,
	|	inner join $Справочник.Номенклатура as СпрНомен (nolock) on СпрНомен.id = Товар
	|	inner join $Справочник.Партии as СпрПарт (nolock) on СпрПарт.id = Партия
	|	,
	|	Магазин = :ВыбСклад
	|	/*УсловиеТипПф*/
	|	,(Товар,Партия,Магазин),) as Рег
	|where
	|	Рег.КоличествоОстаток>0
	|"; 



В таком виде начинает ругаться на "ВидИзделия ", далее на "ТипПф      " но и так далее ...

Подскажите как прописать правильно
Код
Выбрать все
|ПробаМ = Регистр.Взаиморасщеты.Товар.ТипПФ;  



вот так у меня одни маты Печаль :
Код
Выбрать все
|  ТипПф	[ПробаМ $Справочник.ТипПФ], 


Не пойму как связать с регистром, так чтоб прописать типа:
Код
Выбрать все
inner join $Справочник.ТипПф as СпрПф (nolock) on СпрПф.id = ПробаМ 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #70 - 18. Сентября 2014 :: 07:53
Печать  
ХЕЛП ПЛИИИИЗ...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #71 - 18. Сентября 2014 :: 08:01
Печать  
выкинуть все соединения из параметров ВТ

ну а так, левое соединение со справочником номенклатура по id = Рег.Товар и дальше, в селект листе брать реквизит справочника номенклатуры ТипПф      . Всё.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #72 - 18. Сентября 2014 :: 08:09
Печать  
Eprst писал(а) 18. Сентября 2014 :: 08:01:
выкинуть все соединения из параметров ВТ

ну а так, левое соединение со справочником номенклатура по id = Рег.Товар и дальше, в селект листе брать реквизит справочника номенклатуры ТипПф      . Всё.


Спасибо, сейчас попробую
Тойсть писать:
Код
Выбрать все
|Рег.Товар	[ПробаМ $Справочник.Номенклатура.ТипПФ], 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #73 - 18. Сентября 2014 :: 08:20
Печать  
Написал так Правильно по поводу "ТипПФ" ?:
Код
Выбрать все
ДатаДок = ТекущаяДата();
	ТекстЗапроса = "		    
	|Select
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	  |   $Номен.ТипПФ as [ПробаМ $Справочник.ТипПФ],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,
	|	/*УсловиеТипПф*/
	|	,(Товар,Па[b]	агазин),) as Рег
	  |   AND $Справочник.Номенклатура as Номен
	|where
	|	Рег.КоличествоОстаток>0
	|";

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

	Если ПустоеЗначение(ВыбСклад)=1 Тогда
		//Отбор не нужен
	ИначеЕсли ВыбСклад.ЭтоГруппа()=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "Магазин = :ВыбСклад");
	Иначе
		Запрос.УложитьСписокОбъектов(ВыбСклад,"#ВыбСклад", "Подразделения");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "Магазин in (select val from #ВыбСклад)");
	КонецЕсли;

	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("* "+ТЗ.КоличествоСтрок()); 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #74 - 18. Сентября 2014 :: 08:24
Печать  
нет

...........as Рег
left join  $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #75 - 18. Сентября 2014 :: 08:25
Печать  
Eprst писал(а) 18. Сентября 2014 :: 08:01:
выкинуть все соединения из параметров ВТ

почему выкинуть? оно там нужно для фильтра
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #76 - 18. Сентября 2014 :: 08:26
Печать  
Для какого ? че-то не вижу там фильтров Улыбка

ЗЫ: у него ж все фильтры на измерения регистра
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #77 - 18. Сентября 2014 :: 08:26
Печать  
Eprst писал(а) 18. Сентября 2014 :: 08:24:
нет

...........as Рег
left join  $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар

Спасибо!, чет не пропустил по поводу лефт джойн..
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #78 - 18. Сентября 2014 :: 08:29
Печать  
Eprst писал(а) 18. Сентября 2014 :: 08:26:
Для какого ? че-то не вижу там фильтров Улыбка

ЗЫ: у него ж все фильтры на измерения регистра


Мне еще предстоит дописать фильтра по:
Код
Выбрать все
|Условие(ТоварПост в ВыбТоварПост);
|Условие(ТоварВид в ВыбТоварВид);
|Условие(ПробаМ в ВыбПробаМ); 


А это все реквизиты справоников Номенклатура и Партии в регистре их нет как измерений...)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #79 - 18. Сентября 2014 :: 08:40
Печать  
Ну тогда занимайся
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #80 - 18. Сентября 2014 :: 09:06
Печать  
Вот созда, почти все условия залил, но кажется столкнулся с проблемой перечисления:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   $Номен.ТипПФ [ПробаМ $Справочник.ТипПФ],
	|   $Номен.ВидИзделия [ТоварВид $Перечисление.ВидИзделия],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,
	|	/*УсловиеСклад*/
	|	,(Товар,Партия,Магазин),) as Рег
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
	|left join $Справочник.Партии as Парт (nolock) on Парт.id = Рег.Партия
	|where
	|	Рег.КоличествоОстаток>0
	|   /*УсловиеТипПФ*/
	|   /*ТоварВид*/
	|";

    Запрос = СоздатьОбъект("ODBCRecordSet");

	Если ПустоеЗначение(ВыбСклад)=1 Тогда
		//Отбор не нужен
	ИначеЕсли ВыбСклад.ЭтоГруппа()=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеСклад*/", "Магазин = :ВыбСклад");
	Иначе
		Запрос.УложитьСписокОбъектов(ВыбСклад,"#ВыбСклад", "Подразделения");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеСклад*/", "Магазин in (select val from #ВыбСклад)");
	КонецЕсли;

	Если ПустоеЗначение(ВыбТипПФ)=1 Тогда
		//Отбор не нужен
	ИначеЕсли ВыбТипПФ.ЭтоГруппа()=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("ВыбТипПФ", ВыбТипПФ);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПФ*/", "AND $Номен.ТипПФ = :ВыбТипПФ");
	Иначе
		Запрос.УложитьСписокОбъектов(ВыбТипПФ,"#ВыбТипПФ", "ТипПф");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "AND $Номен.ТипПФ in (select val from #ВыбТипПФ)");
	КонецЕсли;

	Если ПустоеЗначение(ВыбТоварВид)=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("ВыбТоварВид", ВыбТоварВид);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварВид*/", "AND $Номен.ТипПФ = :ВыбТоварВид");
	КонецЕсли;

	//Запрос.Отладка(1);
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("* "+ТЗ.КоличествоСтрок()); 


Если в выборе участвует перечисление (тоесть если оно выбрано), то запрос выдает "0" строк, не важно какие другие условия...
Я не правильно прописал перечисление?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #81 - 18. Сентября 2014 :: 09:13
Печать  
maxy3d писал(а) 18. Сентября 2014 :: 09:06:
     Если ПустоеЗначение(ВыбТоварВид)=0 Тогда
           Запрос.УстановитьТекстовыйПараметр("ВыбТоварВид", ВыбТоварВид);
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварВид*/", "AND $Номен.ТипПФ = :ВыбТоварВид");
     КонецЕсли;
     

Устанавливаем параметр, которого в тексте запроса нет - замена ведь позже происходит. Строки надо поменять местами?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #82 - 18. Сентября 2014 :: 09:14
Печать  
pavel_tr писал(а) 18. Сентября 2014 :: 09:13:
maxy3d писал(а) 18. Сентября 2014 :: 09:06:
     Если ПустоеЗначение(ВыбТоварВид)=0 Тогда
           Запрос.УстановитьТекстовыйПараметр("ВыбТоварВид", ВыбТоварВид);
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварВид*/", "AND $Номен.ТипПФ = :ВыбТоварВид");
     КонецЕсли;
     

Устанавливаем параметр, которого в тексте запроса нет - замена ведь позже происходит. Строки надо поменять местами?


ДЫРКА ... Улыбка - СПАСИБО!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #83 - 18. Сентября 2014 :: 09:16
Печать  
И надо делать так:
Код
Выбрать все
Попытка
	рс.ВыполнитьИнструкцию(ТекстЗапроса,тз,1);
Исключение  
	предупреждение("Ошибка! "+рс.ПолучитьОписаниеОшибки());
	возврат;
КонецПопытки;  


Тогда вы бы увидели текст ошибки - не найден текстовый параметр ВыбТоварВид
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #84 - 18. Сентября 2014 :: 09:18
Печать  
Перечисление в условиях надо писать так в условиях
три способа
способ 1
and $Док1.ТипНакладной = $Перечисление.ТипНакладной.Приходная

способ2 через установить текст параметр
зн1 = Перечисление.ТипНакладной.Приходная;
rc.УстановитьТекстовыйПараметр("знач_Перечисления",зн1);
в самом  sql тогда

and $Док1.ТипНакладной = :знач_Перечисления

способ3
узнать значение поля в sql ( char 9 )  у другого документа где
выставлено нужное значение( в этом примере Перечисление.ТипНакладной.Приходная )

далее в sql пишем

and $Док1.ТипНакладной = 'знач_sql'

Евлм надо получать в предложении select то пишем так

select $Док1.ТипНакладной [Знач_Перечисления  $Перечисление.ТипНакладной]

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #85 - 18. Сентября 2014 :: 09:30
Печать  
Спасибо!
С перечислением разобрался, просто не правильно в условии поставил тип поля. Вот вылезло в следующем условии, не понятно почему:
Код
Выбрать все
|   $ПартЗ.Поставщик [ПоставщикЗ $Справочник.Контрагенты], 


Где
Код
Выбрать все
|left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия 


Выдает ошибку:
Ошибка типизации поля ПоставщикЗ $Справочник.Контрагенты
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #86 - 18. Сентября 2014 :: 09:36
Печать  
maxy3d писал(а) 18. Сентября 2014 :: 09:30:
Спасибо!
С перечислением разобрался, просто не правильно в условии поставил тип поля. Вот вылезло в следующем условии, не понятно почему:
Код
Выбрать все
|   $ПартЗ.Поставщик [ПоставщикЗ $Справочник.Контрагенты], 


Где
Код
Выбрать все
|left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия 


Выдает ошибку:
Ошибка типизации поля ПоставщикЗ $Справочник.Контрагенты

попробуй временно запустить без типизации
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #87 - 18. Сентября 2014 :: 09:42
Печать  
Eprst писал(а) 18. Сентября 2014 :: 08:26:
Для какого ? че-то не вижу там фильтров Улыбка

ЗЫ: у него ж все фильтры на измерения регистра

/*УсловиеТипПф*/
  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #88 - 18. Сентября 2014 :: 09:50
Печать  
trad писал(а) 18. Сентября 2014 :: 09:42:
Eprst писал(а) 18. Сентября 2014 :: 08:26:
Для какого ? че-то не вижу там фильтров Улыбка

ЗЫ: у него ж все фильтры на измерения регистра

/*УсловиеТипПф*/


С фильтрами
/*УсловиеТипПф*/
/*ТоварВид*/
Проблем нет, а вот на поставщика ругается на типизацию Печаль.
Или я не понял вашего сообщения?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #89 - 18. Сентября 2014 :: 09:51
Печать  
Вот полный запрос, фильтр по поставщику пока отключен:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Магазин [Магазин $Справочник.Подразделения],
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   $Номен.ТипПФ [ПробаМ $Справочник.ТипПФ],
	|   $Номен.ВидИзделия [ТоварВид $Перечисление.ВидИзделия],
	//|   $ПартЗ.Поставщик [ПоставщикЗ $Справочник.Контрагенты],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.КоличествоОстаток as Кол,
	|   Рег.МассаОстаток as Масса,
	|   Рег.МассаБКОстаток as МассаБК,
	|   Рег.СуммаОстаток as Сумма
	|FROM
	|   $РегистрОстатки.Взаиморасщеты(,,
	|	/*УсловиеСклад*/
	|	,(Товар,Партия,Магазин),) as Рег
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
	|left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
	|where
	|	Рег.КоличествоОстаток>0
	|	AND Рег.МассаОстаток>0
	|	AND Рег.МассаБКОстаток>0
	|	AND Рег.СуммаОстаток>0
	|   /*УсловиеТипПФ*/
	|   /*ТоварВид*/
	|   /*ТоварПост*/
	|";

    Запрос = СоздатьОбъект("ODBCRecordSet");

	Если ПустоеЗначение(Магазин)=1 Тогда
		//Отбор не нужен
	ИначеЕсли Магазин.ЭтоГруппа()=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("Магазин", Магазин);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеСклад*/", "Магазин = :Магазин");
	Иначе
		Запрос.УложитьСписокОбъектов(Магазин,"#Магазин", "Подразделения");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеСклад*/", "Магазин in (select val from #Магазин)");
	КонецЕсли;

	Если ПустоеЗначение(Проба)=1 Тогда
		//Отбор не нужен
	ИначеЕсли Проба.ЭтоГруппа()=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("Проба", Проба);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПФ*/", "AND $Номен.ТипПФ = :Проба");
	Иначе
		Запрос.УложитьСписокОбъектов(Проба,"#Проба", "ТипПф");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеТипПф*/", "AND $Номен.ТипПФ in (select val from #Проба)");
	КонецЕсли;

	Если ПустоеЗначение(ВидИзделия)=0 Тогда
		Запрос.УстановитьТекстовыйПараметр("ВидИзделия", ВидИзделия);
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварВид*/", "AND $Номен.ВидИзделия = :ВидИзделия");
	КонецЕсли;

	//Если ПустоеЗначение(ВыбТоварПост)=1 Тогда
	//	//Отбор не нужен
	//ИначеЕсли ВыбТоварПост.ЭтоГруппа()=0 Тогда
	//	Запрос.УстановитьТекстовыйПараметр("ВыбТоварПост", ВыбТоварПост);
	//	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварПост*/", "AND $ПартЗ.Поставщик = :ВыбТоварПост");
	//Иначе
	//	Запрос.УложитьСписокОбъектов(ВыбТоварПост,"#ВыбТоварПост", "Контрагенты");
	//	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ТоварПост*/", "AND $ПартЗ.Поставщик in (select val from #ВыбТоварПост)");
	//КонецЕсли;

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

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #90 - 18. Сентября 2014 :: 11:27
Печать  
Подскажите, пожалуйста, как правильно прописать прямом запросе :
Код
Выбрать все
|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар; 


Второй регистр нужно прописівать в Inner Join или в Left Join или еще как-то...?

Мне просто сейчас нужно ссылаясь на этот запрос:
Код
Выбрать все
Запрос = СоздатьОбъект("Запрос");
					ТекстЗапроса =
					"//{{ЗАПРОС(Сформировать)
					|Период с ВыбКонПериода по ВыбКонПериода;
					|Склад	    = Регистр.Взаиморасщеты.Магазин,Регистр.ПартииТоваров.Склад;
					|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар;

					|Вид		= Регистр.Взаиморасщеты.Товар.ВидИзделия,Регистр.ПартииТоваров.Товар.ВидИзделия;
					|ТипПФ	    = Регистр.Взаиморасщеты.Товар.ТипПФ,Регистр.ПартииТоваров.Товар.ТипПФ;
					|Тип		= Регистр.Взаиморасщеты.Товар.Тип,Регистр.ПартииТоваров.Товар.Тип;

					|Партия	   = Регистр.Взаиморасщеты.Партия,Регистр.ПартииТоваров.Партия;

					|Акция			=
					|Вуду		  = Регистр.Взаиморасщеты.Партия.ВидУчета,Регистр.ПартииТоваров.Партия.ВидУчета;
					|Клиент	   = Регистр.Взаиморасщеты.Партия.Поставщик,Регистр.ПартииТоваров.Партия.Поставщик;

					|Штук	     = Регистр.Взаиморасщеты.Количество,Регистр.ПартииТоваров.Штук;
					|Масса	    = Регистр.Взаиморасщеты.Масса,Регистр.ПартииТоваров.Масса;
					|МассаБК	  = Регистр.Взаиморасщеты.МассаБК,Регистр.ПартииТоваров.МассаБК;
					|Сумма	    = Регистр.Взаиморасщеты.Сумма,Регистр.ПартииТоваров.Сумма;
					|СуммаП	   = Регистр.Взаиморасщеты.СуммаПродажи;

					|Фирмочка	 = Регистр.Взаиморасщеты.Партия.Фирма,Регистр.ПартииТоваров.Партия.Фирма;
					|ВладелецТовара = Регистр.Взаиморасщеты.Партия.ВладелецТовара;

					|Функция ШтОст     = КонОст(Штук);
					|Функция МБКОст    = КонОст(МассаБК);
					|Функция МОст	= КонОст(Масса);
					|Функция КОст	= КонОст(Сумма);
					|Функция КПОст     = КонОст(СуммаП);
					//|Функция СВОст     = КонОст(СуммаСВ);
					//|Группировка Склад  без групп;
					|Группировка Клиент без групп;
					|Группировка Вид;   // без групп;
					|Группировка Товар Упорядочить по Товар.Наименование без групп;
					|Группировка Партия;

					|"//}}ЗАПРОС
					;

					Если Складик.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Склад в Складик);";
					КонецЕсли;

					Если Акц.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Акция = Акц);";
					КонецЕсли;

					Если Материал.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(ТипПФ в Материал);";
					Иначе
						Предупреждение("Выберите материал!!!",10);
						Возврат;
					КонецЕсли;
					ТекстЗапроса = ТекстЗапроса + "Условие(Тип = Константа.Изделие);";

					Если Фирма.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Фирмочка = Фирма);";
					КонецЕсли;
					Если ВыбКод.РазмерСписка() = 0 Тогда
					Иначе
						ТекстЗапроса = ТекстЗапроса + "Условие (Товар в выбКод);";
					КонецЕсли;


					Если Поставщик.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Клиент = Поставщик);";
					КонецЕсли;

					Если ВыбВидИзделия.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Вид = ВыбВидИзделия);";
					КонецЕсли;

					Если Клиентик.Выбран() = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(ВладелецТовара = Клиентик);";
					КонецЕсли;


					Если Учет = Перечисление.ВидУчета.Бухгалтерия Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Вуду = Учет);";
						//ТекстЗапроса = ТекстЗапроса + "Условие(Вуду <> Перечисление.ВидУчета.Торговля);";
					КонецЕсли;
					Если Размер > 0 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(число(сокрлп(Партия.Размер)) = число(сокрлп(Размер)));";
					КонецЕсли;
					Если БрилКол = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.БрилКол)) > 0)
						|И (число(сокрлп(Партия.ЦвДрКол)) = 0));";
					КонецЕсли;

					Если ЦвДрЦ = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.ЦвДрКол)) > 0)
						|И (число(сокрлп(Партия.БрилКол)) = 0));";

					КонецЕсли;
					Если БриллДраг = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.ЦвДрКол)) > 0)
						|И (число(сокрлп(Партия.БрилКол)) > 0));";
					КонецЕсли;

					Если Жемчуг = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(число(сокрлп(Партия.ЖемчугКол)) > 0);";
					КонецЕсли;

					Если Циркон = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.БрилКол)) = 0)
						|И (число(сокрлп(Партия.ЦвДрКол)) = 0));";
					КонецЕсли;


					Если Красное = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Красное);";
					КонецЕсли;
					Если Белое = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Белое);";
					КонецЕсли;
					Если Желтое = 1 Тогда
						ТекстЗапроса = ТекстЗапроса + "Условие(Партия.Цвет = Перечисление.Цвет.Желтое);";
					КонецЕсли;

					Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
						Возврат;
					КонецЕсли;
					Таб = СоздатьОбъект("Таблица");
					Таб.ИсходнаяТаблица("Остаток");
					Таб.Вывест 


Сделать по толковому - прямой запрос.
И загвостка пока в том, что не знаю как в прямом зпросе прописать строку типа:
Код
Выбрать все
|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар; 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #91 - 19. Сентября 2014 :: 06:35
Печать  
Подскажиет, пожалуйста, как прописать мне предыдущий вопрос и ОБЕЩАЮ, отстану Улыбка... Просто не нахожу в мануалах подобных случаев. Очередной раз, ОГРОМНОЕ СПАСИБО за помощь!!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #92 - 19. Сентября 2014 :: 08:23
Печать  
Цитата:
Второй регистр нужно прописівать в Inner Join или в Left Join или еще как-то...?
- union all

общий вид такой
Код
Выбрать все
select
from(
    select
    from $РегистрОстатки.Взаиморасщеты

    union all

    select
    from $РегистрОстатки.ПартииТоваров
) Данные
group by клиент,вид,товар,партия 

  

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #93 - 19. Сентября 2014 :: 08:23
Печать  
select a as товар, b as количество from взаиморащеты
union all
select a, b from партии

потом можно это обернуть еще в один запрос
select a,b from
(тут то, что выше) as выборка group by ...

З.Ы. загвостка - оно от слова гвоЗдь...
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #94 - 19. Сентября 2014 :: 08:26
Печать  
Уже подсказали... Отмечу только, что если тут:
Код
Выбрать все
Регистр.Взаиморасщеты.Магазин,Регистр.ПартииТоваров.Склад 


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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #95 - 19. Сентября 2014 :: 08:51
Печать  
Спасибо - буду пробовать!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #96 - 19. Сентября 2014 :: 08:55
Печать  
Если я хочу вставить в запрос условие например
Код
Выбрать все
товар в СписокЗначений 


тогда мне нужно написать типа такого:
Код
Выбрать все
|   $РегистрОстатки.Себестоимость(,,(Продукция in (Select val from #СписокИзделий)),(Продукция,Партия),) as Рег 


и
Код
Выбрать все
Запрос.УложитьСписокОбъектов(СписокИзделий,"#СписокИзделий", "Номенклатура"); 


?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #97 - 19. Сентября 2014 :: 09:00
Печать  
да
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #98 - 19. Сентября 2014 :: 09:23
Печать  
Eprst писал(а) 19. Сентября 2014 :: 09:00:
да

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

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


Выдает вот такую ошибку:
Meta name parser error: недопустимое значение параметра "$РегистрОстатки.Себестоимость" (4)
Злой
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #99 - 19. Сентября 2014 :: 09:33
Печать  
Продукция и Партия - это точно ИЗМЕРЕНИЯ регистра у вас ?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #100 - 19. Сентября 2014 :: 09:42
Печать  
Eprst писал(а) 19. Сентября 2014 :: 09:33:
Продукция и Партия - это точно ИЗМЕРЕНИЯ регистра у вас ?

Я думал в том месте устанавливается алиас (переменная) на измерения регистра, но переписал на Товар,Партия - начало считать!
Спасибо!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #101 - 19. Сентября 2014 :: 10:59
Печать  
trad писал(а) 19. Сентября 2014 :: 08:23:
Цитата:
Второй регистр нужно прописівать в Inner Join или в Left Join или еще как-то...?
- union all

общий вид такой
Код
Выбрать все
select
from(
    select
    from $РегистрОстатки.Взаиморасщеты

    union all

    select
    from $РегистрОстатки.ПартииТоваров
) Данные
group by клиент,вид,товар,партия 



Правильно ли я написал:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|FROM(
	|	Select
	| 	  Рег.Товар	[Товар $Справочник.Номенклатура],
	|	    Рег.Партия	[Заказ $Справочник.Партии],
	| 	  Рег.Склад 	[Склад $Справочник.Подразделения],
	|		$Номен.Тип  [Тип $Справочник.Тип],
	| 	  Рег.КоличествоОстаток as ККО,
	| 	  Рег.МассаОстаток as МКО,
	| 	  Рег.МассаКОстаток as МК
	|	FROM
	| 	  $РегистрОстатки.ПартииТоваров(,,,,) as Рег
	| 	  left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
	|	where
	|		Рег.Склад = :Склад
	|		$Номен.Тип = :ТипТ
	|	UNION All
	|	Select
	| 	  Рег2.Товар	[Товар $Справочник.Номенклатура],
	|	    Рег2.Заказ	[Заказ $Справочник.Партии],
	| 	  $Номен.Тип  [Тип $Справочник.Тип],
	| 	  Рег2.КоличествоОстаток as ККО,
	| 	  Рег2.МассаОстаток as МКО,
	| 	  Рег2.МассаКОстаток as МК
	|	FROM
	| 	  $РегистрОстатки.Камни(,,,,) as Рег2
	| 	  left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег2.Товар
	|	where
	|		$Номен.Тип = :ТипТ
	|) as Выборка
	|group by Товар,Заказ
	|";

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

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


к запросу:
Код
Выбрать все
Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с ДатаДок по ДатаДок;
	|Товар	= Регистр.ПартииТоваров.Товар,Регистр.Камни.Товар;
	|Тип	  = Регистр.ПартииТоваров.Товар.Тип,Регистр.Камни.Товар.Тип;
	|Заказ	= Регистр.ПартииТоваров.Партия,Регистр.Камни.Заказ;
	|СкладТ     = Регистр.ПартииТоваров.Склад;
	|Количество = Регистр.ПартииТоваров.ОстатокШтук;
	|Масса	  = Регистр.ПартииТоваров.ОстатокМасса;
	|МассаК	  = Регистр.Камни.МассаК;
	|Функция ККО = КонОст(Количество);
	|Функция МКО = КонОст(Масса);
	|Функция МК = КонОст(МассаК);
	|Группировка Товар  без групп;
	|Группировка Заказ;
	|Условие(СкладТ  = Склад);
	|Условие(Тип  = Константа.ТипИзделие);
	|"//}}ЗАПРОС
	;
	ТС=СкладС;
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли; 


?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #102 - 19. Сентября 2014 :: 11:14
Печать  
нет

1.не указаны поля выборки (или хотя бы *) из первого запроса
2.типизация в подзапросе не нужна
3.не равное количество полей в union all
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #103 - 19. Сентября 2014 :: 11:16
Печать  
Eprst писал(а) 19. Сентября 2014 :: 11:14:
нет

1.не указаны поля выборки (или хотя бы *) из первого запроса
2.типизация в подзапросе не нужна
3.не равное количество полей в union all


В другом регистре нет измерения "Склад"..
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #104 - 19. Сентября 2014 :: 11:22
Печать  
Может так:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|	Товар		[Товар $Справочник.Номенклатура],
	|	Заказ		[Заказ $Справочник.Партии],
	|   Рег.Склад 	[Склад $Справочник.Подразделения],
	|	$Номен.Тип  [Тип $Справочник.Тип],
	|FROM(
	|	Select
	| 	  Рег.Товар as Товар,
	|	    Рег.Партия as Заказ,
	| 	  Рег.Склад as Склад,
	| 	  Рег.КоличествоОстаток as ККО,
	| 	  Рег.МассаОстаток as МКО,
	| 	  Рег.МассаКОстаток as МК
	|	FROM
	| 	  $РегистрОстатки.ПартииТоваров(,,,,) as Рег

	|	UNION All
	|	Select
	| 	  Рег2.Товар as Товар,
	|	    Рег2.Заказ as Заказ,
	| 	  Рег2.КоличествоОстаток as ККО,
	| 	  Рег2.МассаОстаток as МКО,
	| 	  Рег2.МассаКОстаток as МК
	|	FROM
	| 	  $РегистрОстатки.Камни(,,,,) as Рег2
	|) as Выборка
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Товар
	|where
	|	Выборка.Склад = :Склад
	|	Выборка.Тип = :ТипТ
	|group by Товар,Заказ
	|"; 

  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #105 - 19. Сентября 2014 :: 12:21
Печать  
maxy3d писал(а) 19. Сентября 2014 :: 11:16:
В другом регистре нет измерения "Склад"..

как должно работать условие Склад = :Склад
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #106 - 19. Сентября 2014 :: 12:31
Печать  
В обоих запросах в юнионе должно быть равное количество полей в выборке и в одинаковом порядке.
Это же простое объединение двух таблиц.

Если чего-то нет, ставь туда null или пустое значение нужного типа.
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #107 - 19. Сентября 2014 :: 12:41
Печать  
Eprst писал(а) 19. Сентября 2014 :: 12:31:
В обоих запросах в юнионе должно быть равное количество полей в выборке и в одинаковом порядке.
Это же простое объединение двух таблиц.

Если чего-то нет, ставь туда null или пустое значение нужного типа.

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

	|	UNION All
	|	Select
	|   	Рег2.Товар as Товар,
	|	Рег2.Заказ as Заказ,
	  |	 0 as Склад,
	|   	Рег2.КоличествоОстаток as ККО,
	|   	Рег2.МассаОстаток as МКО,
	|   	Рег2.МассаКОстаток as МК
	|	FROM
	|   	$РегистрОстатки.Камни(,,,,) as Рег2
	|) as Выборка  
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Товар
	|where
	|	Выборка.Склад = :Склад
	|	Выборка.Тип = :ТипТ
	|group by Товар,Заказ  
	|";
 


Правильный, но в него нужно добавить выборку из втрого регистра типа:
Код
Выбрать все
null as Склад 


и перечислить ресурсы?
Или я туплю?
Я просто не уверен что правильно понимаю правила написания с условием "Unian all" (объединением)...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #108 - 19. Сентября 2014 :: 13:20
Печать  
типа того.

Но своим условием Выборка.Склад = :Склад - ты потеряешь все записи из $РегистрОстатки.Камни
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #109 - 23. Сентября 2014 :: 08:13
Печать  
Добрый день, подскажите пож с запросом:
Код
Выбрать все
ТекстЗапроса = "
	|Select
	|   Рег.Товар 	[Товар $Справочник.Номенклатура],
	|   Рег.Партия	[Партия $Справочник.Партии],
	|   Рег.Склад	[Склад $Справочник.Склады],
	|   $Номен.Тип	[ПробаМ $Справочник.Тип],
	|   Рег.ОстатокШтукОстаток as Кол,
	|   Рег.ОстатокМассаОстаток as Масса,
	|   Рег.МассаКОстаток as МассаК
	|FROM
	|   $РегистрОстатки.ПартииТоваров(,,Склад = :ВыбСклад,,) as Рег
	|left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
	|left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия
	|where
	|	Рег.ОстатокШтукОстаток>0
	|	AND $Номен.Тип=:ВыбТип
	|";

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

	//Запрос.Отладка(1);
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("* "+ТЗ.КоличествоСтрок()); 


Мне нужно вытащить из регистра "Камни" только "МассаК". В итоге я получаю ошибку:
State 42000, native 8158, message [Microsoft][ODBC SQL Server Driver][SQL Server]РегК содержит больше столбцов, чем указано в списке столбцов.
Я понимаю ее суть, но как обойти не совсем. Нуждаюсь в помощи! Хелп!
Спасибо!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #110 - 23. Сентября 2014 :: 09:09
Печать  
Проблема в этой строке:
maxy3d писал(а) 23. Сентября 2014 :: 08:13:
left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия

"Заказ" - измерение регистра, хранится в каком-то поле таблицы БД. Т.к. это не виртуальная таблица, название измерения должно быть обработано метапарсером, т.е. надо писать так:
left join $РегистрОстатки.Камни as РегК (nolock) on $РегК.Заказ = Рег.Партия
Рег оставляем как есть т.к. этот алиас относится к виртуальной таблице, внутри которой названия столбов приводятся к тем, которые заданы в конфигураторы.
Ошибка по невнимательности

Ну и не понятно зачем вообще нужна таблица РегК - она только в левом соединении участвует и всё
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #111 - 23. Сентября 2014 :: 09:47
Печать  
pavel_tr писал(а) 23. Сентября 2014 :: 09:09:
Проблема в этой строке:
maxy3d писал(а) 23. Сентября 2014 :: 08:13:
left join $РегистрОстатки.Камни as РегК (nolock) on РегК.Заказ = Рег.Партия

"Заказ" - измерение регистра, хранится в каком-то поле таблицы БД. Т.к. это не виртуальная таблица, название измерения должно быть обработано метапарсером, т.е. надо писать так:
left join $РегистрОстатки.Камни as РегК (nolock) on $РегК.Заказ = Рег.Партия
Рег оставляем как есть т.к. этот алиас относится к виртуальной таблице, внутри которой названия столбов приводятся к тем, которые заданы в конфигураторы.
Ошибка по невнимательности

Ну и не понятно зачем вообще нужна таблица РегК - она только в левом соединении участвует и всё


Допустил ошибку в запросе написал:
Код
Выбрать все
|   Рег.МассаКОстаток as МассаК 


а должно быть
Код
Выбрать все
|   РегК.МассаКОстаток as МассаК 


Из регистра "Камни" мне нужно вытащить массу камня
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #112 - 24. Сентября 2014 :: 13:35
Печать  
Помогите, пожалуйста, создать аналог через прямой запрос:
Код
Выбрать все
	Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбКонПериода по ВыбКонПериода;
|Клиент	   = Регистр.Взаиморасщеты.Партия.Поставщик,Регистр.ПартииТоваров.Партия.Поставщик;
|Склад	    = Регистр.Взаиморасщеты.Магазин,Регистр.ПартииТоваров.Склад;
|Товар	    = Регистр.Взаиморасщеты.Товар,Регистр.ПартииТоваров.Товар;
|Вид		= Регистр.Взаиморасщеты.Товар.ВидИзделия,Регистр.ПартииТоваров.Товар.ВидИзделия;
|Акция			=
|Масса	    = Регистр.Взаиморасщеты.Масса,Регистр.ПартииТоваров.Масса;
|МассаБК	  = Регистр.Взаиморасщеты.МассаБК,Регистр.ПартииТоваров.МассаБК;
|Сумма	    = Регистр.Взаиморасщеты.Сумма,Регистр.ПартииТоваров.Сумма;
|Функция МБКОст    = КонОст(МассаБК);
|Функция МОст	= КонОст(Масса);
|Функция КОст	= КонОст(Сумма);
|Группировка Клиент без групп;
|Группировка Товар Упорядочить по Товар.Наименование без групп;
|"//}}ЗАПРОС
;

Если Складик.Выбран() = 1 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие(Склад в Складик);";
КонецЕсли;

Если Акц.Выбран() = 1 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие(Акция = Акц);";
КонецЕсли;
Если Размер > 0 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие(число(сокрлп(Партия.Размер)) = число(сокрлп(Размер)));";
КонецЕсли;
Если БрилКол = 1 Тогда
	ТекстЗапроса = ТекстЗапроса + "Условие((число(сокрлп(Партия.БрилКол)) > 0)
|И (число(сокрлп(Партия.ЦвДрКол)) = 0));";
КонецЕсли;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
	Возврат;
КонецЕсли; 


У меня возникает проблемма с Union all  двух таблиц регистров. Точнее я не знаю синтаксиса и не получается найти в гугле Печаль. Прошу помощи, натолкните на правильное написание. Меня интересует выборка с 2-х регистров с условиями... ну вообщем аналог приведенного выше запроса. Спасибо!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #113 - 24. Сентября 2014 :: 14:15
Печать  
С union all всё просто - это перечисление обычных select-запросов через ключевое слово. Главное условие - соблюсти порядок и количество полей в выборке
Пример:
Код
Выбрать все
select
зап.id as [Элемент $Справочник],
зап.descr as Наименование
From (
Select
$ВидСправочника36.Такой-то + id as id,
descr as descr
From $Справочник.Такой-то

union all

Select
$ВидСправочника36.Такой-то2 + id as id,
descr as descr
From $Справочник.Такой-то2
) зап
Order by зап.descr 


В подзапросах порядок полей (id, descr) и тип значений в полях должны совпадать
Группировку данных, сортировку лучше делать уже в верхнем запросе (зап)
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #114 - 24. Сентября 2014 :: 14:26
Печать  
pavel_tr писал(а) 24. Сентября 2014 :: 14:15:
С union all всё просто - это перечисление обычных select-запросов через ключевое слово. Главное условие - соблюсти порядок и количество полей в выборке
Пример:
Код
Выбрать все
select
зап.id as [Элемент $Справочник],
зап.descr as Наименование
From (
Select
$ВидСправочника36.Такой-то + id as id,
descr as descr
From $Справочник.Такой-то

union all

Select
$ВидСправочника36.Такой-то2 + id as id,
descr as descr
From $Справочник.Такой-то2
) зап
Order by зап.descr 


В подзапросах порядок полей (id, descr) и тип значений в полях должны совпадать
Группировку данных, сортировку лучше делать уже в верхнем запросе (зап)


Так понимаю с регистрами аналогичная ситуация?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #115 - 24. Сентября 2014 :: 14:33
Печать  
Да, это просто пример по синтаксису
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #116 - 25. Сентября 2014 :: 13:46
Печать  
Помогите, пожалуйста, в очередной раз.
Есть запрос:
Код
Выбрать все
	ТипЗ = Константа.Изделие;
					ТекстЗапроса = "		    
					|	Select
					|   	Рег.Магазин 	as Склад,
					|   	Рег.Товар 		as Товар,
					|   	$Номен.ВидИзделия as Вид,
					|   	$Номен.Тип		as Тип,
					|   	$Номен.ТипПФ	as ТипПФ,
					|   	Рег.Партия		as Партия,
					|   	$ПартЗ.Распродажа	as Акция,
					|   	$ПартЗ.ВидУчета	as Вуду,
					|   	$ПартЗ.Поставщик as	Клиент,
					|   	$ПартЗ.Фирма	as Фирмочка,
					|   	$ПартЗ.ВладелецТовара as ВладелецТовара,
					|   	$ПартЗ.Цвет	as Цвет,
					|   	$ПартЗ.Размер	as Размер,
					|   	$ПартЗ.БрилКол	as БрилКол,
					|   	$ПартЗ.ЦвДрКол	as ЦвДрКол,
					|   	$ПартЗ.ЖемчугКол as ЖемчугКол,
					|   	Рег.КоличествоОстаток as ШтОст,
					|   	Рег.МассаОстаток as МОст,
					|   	Рег.МассаБКОстаток as МБКОст,
					|   	Рег.СуммаПродажиОстаток as КПОст,
					|   	Рег.СуммаОстаток as КОст
					|	FROM
					|   	$РегистрОстатки.Взаиморасщеты(,,,,) as Рег
					|		left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|		left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|	/*УсловияСклад*/
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеВыбКод*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|group by
					|	  Рег.Магазин,$Номен.ВидИзделия,Рег.Товар,Рег.Партия
					|";

					Запрос = СоздатьОбъект("ODBCRecordSet"); 



В результате выдает по отладке:

Select
       Рег.Магазин      as Склад,
       Рег.Товар            as Товар,
       Номен.sp2188 as Вид,
       Номен.sp647            as Тип,
       Номен.sp221      as ТипПФ,
       Рег.Партия            as Партия,
       ПартЗ.sp10635      as Акция,
       ПартЗ.sp2914      as Вуду,
       ПартЗ.sp79 as      Клиент,
       ПартЗ.sp4000      as Фирмочка,
       ПартЗ.sp9604 as ВладелецТовара,
       ПартЗ.sp2702      as Цвет,
       ПартЗ.sp2555      as Размер,
       ПартЗ.sp2171      as БрилКол,
       ПартЗ.sp2168      as ЦвДрКол,
       ПартЗ.sp2174 as ЖемчугКол,
       Рег.КоличествоОстаток as ШтОст,
       Рег.МассаОстаток as МОст,
       Рег.МассаБКОстаток as МБКОст,
       Рег.СуммаПродажиОстаток as КПОст,
       Рег.СуммаОстаток as КОст
     FROM
       (
select
rg478_vt.sp2508 as ВидОперации,
rg478_vt.sp479 as Магазин,
rg478_vt.sp2104 as Товар,
rg478_vt.sp2105 as Партия,
rg478_vt.sp3998 as Клиент,
rg478_vt.sp9274 as ТипОплаты,
rg478_vt.sp2107 as КоличествоОстаток,
rg478_vt.sp894 as МассаОстаток,
rg478_vt.sp2106 as МассаБКОстаток,
rg478_vt.sp3996 as СуммаВходОстаток,
rg478_vt.sp482 as СуммаОстаток,
rg478_vt.sp2913 as СуммаПродажиОстаток
from rg478 as rg478_vt (nolock)
where rg478_vt.period={d '2014-09-01'}
and (
rg478_vt.sp2107 <> 0 or
rg478_vt.sp894 <> 0 or
rg478_vt.sp2106 <> 0 or
rg478_vt.sp3996 <> 0 or
rg478_vt.sp482 <> 0 or
rg478_vt.sp2913 <> 0
)
) as Рег
           left join sc58 as Номен (nolock) on Номен.id = Рег.Товар
           left join sc77 as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
Where
     Рег.КоличествоОстаток > 0
     AND Номен.sp647 = '     1   '
     AND Рег.Магазин = '     2   '
     /*УсловияАкц*/
  AND Номен.sp221 = '     2   '
  /*УсловиеФирма*/
  /*УсловиеВыбКод*/
  /*УсловиеПоставщик*/
  /*УсловиеВид*/
  /*УсловиеКлиент*/
  /*УсловиеУчет*/
  /*УсловиеРазмер*/
  /*УсловиеБрилКол*/
  /*УсловиеЦвДрЦ*/
  /*УсловиеБриллДраг*/
  /*УсловиеЖемчуг*/
  /*УсловиеЦиркон*/
  /*УсловиеЦвет*/
group by
       Рег.Магазин,Номен.sp2188,Рег.Товар,Рег.Партия

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\РЕАЛИЗАЦИЯДОХОД07.ERT(3044)}: State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Столбец "sc58.SP647" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Так понимаю, что оно ругается на какое-то поле, которое есть в выборке, но нет в группировке... Печаль
Как понять чего он хочет. Подскажите, Пожалуйста.
« Последняя редакция: 25. Сентября 2014 :: 14:50 - maxy3d »  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #117 - 25. Сентября 2014 :: 13:52
Печать  
Проблема заключается в группировках, если убрать группировки, тогда запрос работает, но как мне тогда дальше сделать выборку по группировкам типа:
Клиент -> Склад -> Документ -> Товар -> Партия
И это все крсиво вывести в печ. форму...? с итогами по каждой группировке.
Спасибо за помощь!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #118 - 25. Сентября 2014 :: 14:32
Печать  
Прошу помощи в розшифровки синтаксиса "Gruop by"
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #119 - 25. Сентября 2014 :: 18:39
Печать  
Пожалуйста просвещайся: http://msdn.microsoft.com/ru-ru/library/ms177673%28v=sql.90%29.aspx
  
Наверх
ICQ  
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #120 - 26. Сентября 2014 :: 09:37
Печать  
Salimbek писал(а) 25. Сентября 2014 :: 18:39:
Пожалуйста просвещайся: http://msdn.microsoft.com/ru-ru/library/ms177673%28v=sql.90%29.aspx


Спасибо за информацию, но я попрежнему не понимаю, как я смогу потом по аналогу из стандартного запроса на языке 1С выводить данные и группировать (суммировать) реквизиты по ним... Тыкните кто-то носом.
Как сделать выборку по группировкам из запроса?
Спасибо!
« Последняя редакция: 26. Сентября 2014 :: 14:15 - maxy3d »  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #121 - 26. Сентября 2014 :: 10:13
Печать  
Если поможет привлечь чье-то внимание, то распишу точнее. После выполнения такого запроса (краткое содержание):
Код
Выбрать все
ТекстЗапроса = "		    
					|Select
					|	  Рег.Магазин 	as Склад,
					|	  Рег.Товар 		as Товар,
					|	  $Номен.ВидИзделия as Вид,
					|	  Рег.Партия		as Партия,
					|	  $ПартЗ.Распродажа	as Акция,
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(,,,,) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|group by
					|	  Рег.Магазин,$Номен.ВидИзделия,Рег.Товар,Рег.Партия
					|";

					Запрос = СоздатьОбъект("ODBCRecordSet"); 


я мог выводмить инфо (ссылаюсь на обычный запрос) по циклам типа (суммируя поля и т.д.):
Код
Выбрать все
Пока Запрос.Группировка(1) = 1 Цикл
   ВывестиСтроку("Склад");
   Пока Запрос.Группировка(2) = 1 Цикл
	ВывестиСтроку("Вид");
	Пока Запрос.Группировка(3) = 1 Цикл
	   ВывестиСтроку("Товар");
	   Пока Запрос.Группировка(4) = 1 Цикл
		ВывестиСтроку("Партия");
	   КонецЦикла;
     КонецЦикла;
   КонецЦикла;
КонецЦикла; 


Спасибо!
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #122 - 27. Сентября 2014 :: 04:41
Печать  
maxy3d писал(а) 26. Сентября 2014 :: 09:37:
Salimbek писал(а) 25. Сентября 2014 :: 18:39:
Пожалуйста просвещайся: http://msdn.microsoft.com/ru-ru/library/ms177673%28v=sql.90%29.aspx


Спасибо за информацию, но я попрежнему не понимаю, как я смогу потом по аналогу из стандартного запроса на языке 1С выводить данные и группировать (суммировать) реквизиты по ним... Тыкните кто-то носом.
Как сделать выборку по группировкам из запроса?
Спасибо!

Глава 9. Получение итогов в запросе
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #123 - 29. Сентября 2014 :: 07:00
Печать  
pavel_tr писал(а) 27. Сентября 2014 :: 04:41:
maxy3d писал(а) 26. Сентября 2014 :: 09:37:
Salimbek писал(а) 25. Сентября 2014 :: 18:39:
Пожалуйста просвещайся: http://msdn.microsoft.com/ru-ru/library/ms177673%28v=sql.90%29.aspx


Спасибо за информацию, но я попрежнему не понимаю, как я смогу потом по аналогу из стандартного запроса на языке 1С выводить данные и группировать (суммировать) реквизиты по ним... Тыкните кто-то носом.
Как сделать выборку по группировкам из запроса?
Спасибо!

Глава 9. Получение итогов в запросе


Спасибо, чуток просветило, но у меня проблемма заключается в том, что я выбираю больше реквизитов чем указываю в группировке и потому получаю такую ошибку:
000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Столбец "sc58.SP2188" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY
Но как сгруппировать не по всем реквизитам, а только по тем, что меня интерисуют... ?
Вот мой запрос:
Код
Выбрать все
ТипЗ = Константа.Изделие;
					ТекстЗапроса = "
					|Select
					|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
					|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
					|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
					|	  $Номен.Тип		[Тип $Справочник.Тип],
					|	  $Номен.ТипПФ	[ТипПФ $Справочник.ТипПФ],
					|	  Рег.Партия		[Партия $Справочник.Партии],
					|	  $ПартЗ.Распродажа	[Акция $Перечисления.Булево],
					|	  $ПартЗ.ВидУчета	[Вуду $Перечисления.ВидУчета],
					|	  $ПартЗ.Поставщик [Клиент $Справочник.Контрагенти],
					|	  $ПартЗ.Фирма	[Фирма $Справочник.Фирмы],
					|	  $ПартЗ.ВладелецТовара [ВладелецТовара $Справочник.Контрагенти],
					|	  $ПартЗ.Цвет	[Цвет $Перечисления.Цвет],
					|	  $ПартЗ.Размер	as Размер,
					|	  $ПартЗ.БрилКол	as БрилКол,
					|	  $ПартЗ.ЦвДрКол	as ЦвДрКол,
					|	  $ПартЗ.ЖемчугКол as ЖемчугКол,
					|	  Рег.КоличествоОстаток as ШтОст,
					|	  Рег.МассаОстаток as МОст,
					|	  Рег.МассаБКОстаток as МБКОст,
					|	  Рег.СуммаПродажиОстаток as КПОст,
					|	  Рег.СуммаОстаток as КОст
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия)
					|	,(Количество,Масса,МассаБК,СуммаПродажи,Сумма)) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|group by
					|	  Рег.Магазин,Рег.Товар,Рег.Партия WITH ROLLUP
					|"; 

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



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #124 - 29. Сентября 2014 :: 07:41
Печать  
С этим всё просто. При использовании группировки по любому реквизиту в выборке или должна существовать группировка, или он должен быть включён в агрегатную функцию.
Возьмём пример из той статьи, на которую я приводил ссылку:
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|    Выборка.Склад as [Склад $Справочник.Склады]
|    СпрС.Descr as Склад_Наименование,
|    Выборка.Товар as [Товар $Справочник.Номенклатура],
|    СпрН.Descr as Товар_Наименование
|    Выборка.ИтогПоСкладам as ИтогПоСкладам,
|    Выборка.ИтогПоТоварам as ИтогПоТоварам,
|    Выборка.Количество as Количество
|FROM
|(
|SELECT
|    Рег.Склад as Склад,
|    Рег.Товар as Товар,
|    GROUPING(Рег.Склад) as ИтогПоСкладам,
|    GROUPING(Рег.Товар) as ИтогПоТоварам,
|    SUM(Рег.КоличествоОстаток) as Количество
|FROM
|    $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					 Склад = :ВыбСклад AND Товар = @Товар,
|					 (Склад, Товар), (Количество)) as Рег
|GROUP BY
|    Рег.Склад, Рег.Товар WITH ROLLUP
|) as Выборка
|LEFT JOIN
|    $Справочник.Склады as СпрС ON СпрС.ID = Выборка.Склад
|LEFT JOIN
|    $Справочник.Номенклатура as СпрН ON СпрН.ID = Выборка.Товар
|ORDER BY
|    СпрС.Descr, СпрН.Descr, Выборка.ИтогПоСкладам DESC, Выборка.ИтогПоТоварам DESC
|"; 


Здесь группировка в подзапросе, но её можно вынести и наверх и тогда всё станет ясно:
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|    Рег.Склад as [Склад $Справочник.Склады]
|    max(СпрС.Descr) as Склад_Наименование,
|    Рег.Товар as [Товар $Справочник.Номенклатура],
|    max(СпрН.Descr) as Товар_Наименование
|    GROUPING(Рег.Склад) as ИтогПоСкладам,
|    GROUPING(Рег.Товар) as ИтогПоТоварам,
|    SUM(Рег.КоличествоОстаток) as Количество
|FROM
|   $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					 Склад = :ВыбСклад AND Товар = @Товар,
|					 (Склад, Товар), (Количество)) as Рег
|LEFT JOIN
|    $Справочник.Склады as СпрС ON СпрС.ID = Рег.Склад
|LEFT JOIN
|    $Справочник.Номенклатура as СпрН ON СпрН.ID = Рег.Товар
|GROUP BY
|    Рег.Склад, Рег.Товар WITH ROLLUP
|ORDER BY
|    max(СпрС.Descr), max(СпрН.Descr), GROUPING(Рег.Склад) DESC, GROUPING(Рег.Товар) DESC
|"; 

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #125 - 29. Сентября 2014 :: 07:59
Печать  
pavel_tr писал(а) 29. Сентября 2014 :: 07:41:
С этим всё просто. При использовании группировки по любому реквизиту в выборке или должна существовать группировка, или он должен быть включён в агрегатную функцию.
Возьмём пример из той статьи, на которую я приводил ссылку:
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|    Выборка.Склад as [Склад $Справочник.Склады]
|    СпрС.Descr as Склад_Наименование,
|    Выборка.Товар as [Товар $Справочник.Номенклатура],
|    СпрН.Descr as Товар_Наименование
|    Выборка.ИтогПоСкладам as ИтогПоСкладам,
|    Выборка.ИтогПоТоварам as ИтогПоТоварам,
|    Выборка.Количество as Количество
|FROM
|(
|SELECT
|    Рег.Склад as Склад,
|    Рег.Товар as Товар,
|    GROUPING(Рег.Склад) as ИтогПоСкладам,
|    GROUPING(Рег.Товар) as ИтогПоТоварам,
|    SUM(Рег.КоличествоОстаток) as Количество
|FROM
|    $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					 Склад = :ВыбСклад AND Товар = @Товар,
|					 (Склад, Товар), (Количество)) as Рег
|GROUP BY
|    Рег.Склад, Рег.Товар WITH ROLLUP
|) as Выборка
|LEFT JOIN
|    $Справочник.Склады as СпрС ON СпрС.ID = Выборка.Склад
|LEFT JOIN
|    $Справочник.Номенклатура as СпрН ON СпрН.ID = Выборка.Товар
|ORDER BY
|    СпрС.Descr, СпрН.Descr, Выборка.ИтогПоСкладам DESC, Выборка.ИтогПоТоварам DESC    
|"; 


Здесь группировка в подзапросе, но её можно вынести и наверх и тогда всё станет ясно:
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|    Рег.Склад as [Склад $Справочник.Склады]
|    max(СпрС.Descr) as Склад_Наименование,
|    Рег.Товар as [Товар $Справочник.Номенклатура],
|    max(СпрН.Descr) as Товар_Наименование
|    GROUPING(Рег.Склад) as ИтогПоСкладам,
|    GROUPING(Рег.Товар) as ИтогПоТоварам,
|    SUM(Рег.КоличествоОстаток) as Количество
|FROM
|   $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					 Склад = :ВыбСклад AND Товар = @Товар,
|					 (Склад, Товар), (Количество)) as Рег
|LEFT JOIN
|    $Справочник.Склады as СпрС ON СпрС.ID = Рег.Склад
|LEFT JOIN
|    $Справочник.Номенклатура as СпрН ON СпрН.ID = Рег.Товар
|GROUP BY
|    Рег.Склад, Рег.Товар WITH ROLLUP
|ORDER BY
|    max(СпрС.Descr), max(СпрН.Descr), GROUPING(Рег.Склад) DESC, GROUPING(Рег.Товар) DESC    
|"; 



Сделал что-то аналогичное:
Код
Выбрать все
ТекстЗапроса = "		    
					|Select
					|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
					|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
					|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
					|	  $Номен.Тип		[Тип $Справочник.Тип],
					|	  $Номен.ТипПФ	[ТипПФ $Справочник.ТипПФ],
					|	  Рег.Партия		[Партия $Справочник.Партии],
					|	  max($ПартЗ.Descr) as	ПартНаим,
					|	GROUPING(Рег.Партия) as ИтогПоПартии,
					|	  $ПартЗ.Распродажа	[Акция $Перечисления.Булево],
					|	  $ПартЗ.ВидУчета	[Вуду $Перечисления.ВидУчета],
					|	  $ПартЗ.Поставщик [Клиент $Справочник.Контрагенти],
					|	  $ПартЗ.Фирма	[Фирма $Справочник.Фирмы],
					|	  $ПартЗ.ВладелецТовара [ВладелецТовара $Справочник.Контрагенти],
					|	  $ПартЗ.Цвет	[Цвет $Перечисления.Цвет],
					|	  $ПартЗ.Размер	as Размер,
					|	  $ПартЗ.БрилКол	as БрилКол,
					|	  $ПартЗ.ЦвДрКол	as ЦвДрКол,
					|	  $ПартЗ.ЖемчугКол as ЖемчугКол,
					|	  Рег.КоличествоОстаток as ШтОст,
					|	  Рег.МассаОстаток as МОст,
					|	  Рег.МассаБКОстаток as МБКОст,
					|	  Рег.СуммаПродажиОстаток as КПОст,
					|	  Рег.СуммаОстаток as КОст
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия)
					|	,(Количество,Масса,МассаБК,СуммаПродажи,Сумма)) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|GROUP BY
					|	  Рег.Партия WITH ROLLUP
					|ORDER BY
					|	max($ПартЗ.Descr),GROUPING(Рег.Партия) DESC
					|"; 


но выкидывает ошибку:
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\#TEST\SQL\РЕАЛИЗАЦИЯДОХОД07.ERT(2809)}: Meta name parser error: поле таблицы не найдено "$ПартЗ.Descr"

пока не могу проверить проходит оно группировку или нет (
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #126 - 29. Сентября 2014 :: 08:05
Печать  
Всё не так. Каждое поле должно быть в группировке или в агрегатной функции. Как работают агрегатные функции тоже почитайте, их бездумно не стоит втыкать тоже. Вы зачем-то оставили только группировку по партии, убрав остальное, но ни одно поле в селекте в агрегатное не включили
Ну и Descr - это же не название реквизита в конфигураторе, через метапарсер проходить не должно, т.е. ошибка тут: "$ПартЗ.Descr"
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #127 - 29. Сентября 2014 :: 08:10
Печать  
pavel_tr писал(а) 29. Сентября 2014 :: 08:05:
Всё не так. Каждое поле должно быть в группировке или в агрегатной функции. Как работают агрегатные функции тоже почитайте, их бездумно не стоит втыкать тоже. Вы зачем-то оставили только группировку по партии, убрав остальное, но ни одно поле в селекте в агрегатное не включили
Ну и Descr - это же не название реквизита в конфигураторе, через метапарсер проходить не должно, т.е. ошибка тут: "$ПартЗ.Descr"

По поводу знака доллара я уже увидил.
Я так понял мне нужно включить все мои реквизиты в группировку а потом просто выбирать только те группировки которые мне нужны.. ?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #128 - 29. Сентября 2014 :: 08:16
Печать  
Да, примерно так. Но про агрегатные почитайте, важно понимать что они делают с данными
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #129 - 29. Сентября 2014 :: 08:20
Печать  
Суммирующиеся поля я включил в агр. объекты, но как быть с теми полями, которыми мне не нужно ни группировать ни суммировать...?
Код
Выбрать все
ТекстЗапроса = "		    
					|Select
					|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
					|	  max(Подразд.Descr) as	СкладНаим,
					|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
					|	  max(Номен.Descr) as	ТоварНаим,
					|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
					|	  $Номен.Тип		[Тип $Справочник.Тип],
					|	  $Номен.ТипПФ	[ТипПФ $Справочник.ТипПФ],
					|	  Рег.Партия		[Партия $Справочник.Партии],
					|	  max(ПартЗ.Descr) as	ПартНаим,
					|	GROUPING(Рег.Магазин) as ИтогПоСкладам,
					|	GROUPING($Номен.ВидИзделия) as ИтогПоВидам,
					|	GROUPING(Рег.Товар) as ИтогПоСкладам,
					|	GROUPING(Рег.Партия) as ИтогПоПартии,
					|	  $ПартЗ.Распродажа	[Акция $Перечисления.Булево],
					|	  $ПартЗ.ВидУчета	[Вуду $Перечисления.ВидУчета],
					|	  $ПартЗ.Поставщик [Клиент $Справочник.Контрагенти],
					|	  $ПартЗ.Фирма	[Фирма $Справочник.Фирмы],
					|	  $ПартЗ.ВладелецТовара [ВладелецТовара $Справочник.Контрагенти],
					|	  $ПартЗ.Цвет	[Цвет $Перечисления.Цвет],
					|	  $ПартЗ.Размер	as Размер,
					|	  $ПартЗ.БрилКол	as БрилКол,
					|	  $ПартЗ.ЦвДрКол	as ЦвДрКол,
					|	  $ПартЗ.ЖемчугКол as ЖемчугКол,
					|	  SUM(Рег.КоличествоОстаток) as ШтОст,
					|	  SUM(Рег.МассаОстаток) as МОст,
					|	  SUM(Рег.МассаБКОстаток) as МБКОст,
					|	  SUM(Рег.СуммаПродажиОстаток) as КПОст,
					|	  SUM(Рег.СуммаОстаток) as КОст
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия)
					|	,(Количество,Масса,МассаБК,СуммаПродажи,Сумма)) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|	left join $Справочник.Подразделения as Подразд (nolock) on Подразд.id = Рег.Магазин
					|Where
					|	Рег.КоличествоОстаток > 0
					|	AND $Номен.Тип = :ТипЗ
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|GROUP BY
					|	  Рег.Магазин, $Номен.ВидИзделия, Рег.Товар, Рег.Партия WITH ROLLUP 

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



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #130 - 29. Сентября 2014 :: 08:27
Печать  
Про это я и говорил )) Max() вам в помощь. Почитайте, что она делает. Я и в примере из манов её использовал ведь ))
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #131 - 29. Сентября 2014 :: 10:06
Печать  
pavel_tr писал(а) 29. Сентября 2014 :: 08:27:
Про это я и говорил )) Max() вам в помощь. Почитайте, что она делает. Я и в примере из манов её использовал ведь ))

Огромное спасибо! Все получилось!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #132 - 02. Октября 2014 :: 08:39
Печать  
Подскажите, пожалуйста, в каком формате нужно передать в прямой запрос период, чтоб регистр остатков расчитывался на определенную дату?
Если делаю так:
Код
Выбрать все
|	  $РегистрОстатки.Взаиморасщеты(ВыбНачПериода,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия) 


Матом гнет.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #133 - 02. Октября 2014 :: 11:43
Печать  
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #134 - 03. Октября 2014 :: 12:02
Печать  
Eprst писал(а) 02. Октября 2014 :: 11:43:


Спасибо, уже разобрался
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #135 - 21. Января 2015 :: 11:55
Печать  
Подскажите пожалуйста, если я хочу в прямой запрос добавить строку:
$ПоследнееЗначение.Партии.ДатаПолучения(ПартЗ.ID, :ВыбКонПериода)
где ДатаПолучения - это периодический реквизит, то мне нужно создавать подзавпрос? через Inner join?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #136 - 21. Января 2015 :: 11:58
Печать  
Если есть возможность - поправте пожалуйста:
Код
Выбрать все
ТекстЗапроса = "
					|Select
					|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
					|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
					|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
					|	  MAX($Номен.Тип)		[Тип $Справочник.Тип],
					|	  MAX($Номен.ТипПФ)	[ТипПФ $Справочник.ТипПФ],
					|	Рег.Партия		[Партия $Справочник.Партии],
					|	GROUPING(Рег.Магазин) as ИтогПоСкладам,
					|	GROUPING($Номен.ВидИзделия) as ИтогПоВидам,
					|	GROUPING(Рег.Товар) as ИтогПоТоварам,
					|	GROUPING(Рег.Партия) as ИтогПоПартии,
					|	  MAX($ПартЗ.Распродажа)	[Акция $Перечисления.Булево],
					|	  MAX($ПартЗ.ВидУчета)	[Вуду $Перечисления.ВидУчета],
					|	  MAX($ПартЗ.Поставщик) [Клиент $Справочник.Контрагенти],
					|	  MAX($ПартЗ.Фирма)	[Фирма $Справочник.Фирмы],
					|	  MAX($ПартЗ.ВладелецТовара) [ВладелецТовара $Справочник.Контрагенти],
					|	  MAX($ПартЗ.Цвет)	[Цвет $Перечисления.Цвет],
					|	  MAX($ПартЗ.Размер)	as Размер,
					|	  MAX($ПартЗ.БрилКол)	as БрилКол,
					|	  MAX($ПартЗ.ЦвДрКол)	as ЦвДрКол,
					|	  MAX($ПартЗ.ЖемчугКол) as ЖемчугКол,
					|	  MAX($ПартЗ.ДатаОтгрузки) as ДатаПолуч,
					|	SUM(ПартП) as ДатаПолуч,
					|	  SUM(Рег.КоличествоОстаток) as ШтОст,
					|	  SUM(Рег.МассаОстаток) as МОст,
					|	  SUM(Рег.МассаБКОстаток) as МБКОст,
					|	  SUM(Рег.СуммаПродажиОстаток) as КПОст,
					|	  SUM(Рег.СуммаОстаток) as КОст
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(:ВыбКонПериода~,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия),) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|		Inner join
					|			(Select
					|				$ПоследнееЗначение.Партии.ДатаПолучения(ПартЗ.ID, :ВыбКонПериода)) as ПартП
					|	left join $Справочник.Подразделения as Подразд (nolock) on Подразд.id = Рег.Магазин
					|Where
					|	$Номен.Тип = :ТипЗ
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|   /*УсловиеДни1*/
					|   /*УсловиеДни2*/
					|GROUP BY
					|	  Рег.Магазин, $Номен.ВидИзделия, Рег.Товар, Рег.Партия WITH ROLLUP
					|ORDER BY
					|	Рег.Магазин,GROUPING(Рег.Магазин) DESC,
					|	$Номен.ВидИзделия,GROUPING($Номен.ВидИзделия) DESC,
					|	Рег.Товар,GROUPING(Рег.Товар) DESC,
					|	Рег.Партия,GROUPING(Рег.Партия) DESC
					|"; 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #137 - 21. Января 2015 :: 13:57
Печать  
ну и добавляй
Код
Выбрать все
$ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода) 



в селект и в гроупбай

ну или max/min от этого бери (если не нужно группировать)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #138 - 21. Января 2015 :: 13:58
Печать  
Ну и вот это:
           |      
Код
Выбрать все
	Inner join
					|			(Select
					|				$ПоследнееЗначение.Партии.ДатаПолучения(ПартЗ.ID, :ВыбКонПериода)) as ПартП 



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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #139 - 21. Января 2015 :: 13:59
Печать  
Eprst писал(а) 21. Января 2015 :: 13:57:
ну и добавляй
Код
Выбрать все
$ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода) 



в селект и в гроупбай

ну или max/min от этого бери (если не нужно группировать)


В таком случае пишет:
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); : {E:\CHASTNIK09N\EXTFORMS\_РЕАЛИЗАЦИЯДОХХОДNEW!!!01.ERT(2717)}: State 42000, native 130, message [Microsoft][ODBC SQL Server Driver][SQL Server]Невозможно выполнить статистическую функцию для выражения, содержащего выражение или вложенный запрос.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #140 - 21. Января 2015 :: 14:00
Печать  
полный текст запроса какой сейчас ?
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #141 - 21. Января 2015 :: 14:07
Печать  
Eprst писал(а) 21. Января 2015 :: 14:00:
полный текст запроса какой сейчас ?


Код
Выбрать все
ТекстЗапроса = "		    
|Select
|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
|	  MAX($Номен.Тип)		[Тип $Справочник.Тип],
|	  MAX($Номен.ТипПФ)	[ТипПФ $Справочник.ТипПФ],
|	Рег.Партия		[Партия $Справочник.Партии],
|	GROUPING(Рег.Магазин) as ИтогПоСкладам,
|	GROUPING($Номен.ВидИзделия) as ИтогПоВидам,
|	GROUPING(Рег.Товар) as ИтогПоТоварам,
|	GROUPING(Рег.Партия) as ИтогПоПартии,
|	  MAX($ПартЗ.Распродажа)	[Акция $Перечисления.Булево],
|	  MAX($ПартЗ.ВидУчета)	[Вуду $Перечисления.ВидУчета],
|	  MAX($ПартЗ.Поставщик) [Клиент $Справочник.Контрагенти],
|	  MAX($ПартЗ.Фирма)	[Фирма $Справочник.Фирмы],
|	  MAX($ПартЗ.ВладелецТовара) [ВладелецТовара $Справочник.Контрагенти],
|	  MAX($ПартЗ.Цвет)	[Цвет $Перечисления.Цвет],
|	  MAX($ПартЗ.Размер)	as Размер,
|	  MAX($ПартЗ.БрилКол)	as БрилКол,
|	  MAX($ПартЗ.ЦвДрКол)	as ЦвДрКол,
|	  MAX($ПартЗ.ЖемчугКол) as ЖемчугКол,	    
|	  MAX($ПартЗ.ДатаОтгрузки) as ДатаПолуч,
|	MAX($ПоследнееЗначение.Партии.ДатаПолучения(ПартЗ.ID, :ВыбКонПериода)) as ПартП,
|	  SUM(Рег.КоличествоОстаток) as ШтОст,
|	  SUM(Рег.МассаОстаток) as МОст,
|	  SUM(Рег.МассаБКОстаток) as МБКОст,
|	  SUM(Рег.СуммаПродажиОстаток) as КПОст,
|	  SUM(Рег.СуммаОстаток) as КОст
|FROM
|	  $РегистрОстатки.Взаиморасщеты(:ВыбКонПериода~,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия),) as Рег
|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
|	left join $Справочник.Подразделения as Подразд (nolock) on Подразд.id = Рег.Магазин
|Where
|	$Номен.Тип = :ТипЗ
|	/*УсловияАкц*/
|   /*УсловиеТипПФ*/
|   /*УсловиеФирма*/
|   /*УсловиеПоставщик*/
|   /*УсловиеВид*/
|   /*УсловиеКлиент*/
|   /*УсловиеУчет*/
|   /*УсловиеРазмер*/
|   /*УсловиеБрилКол*/
|   /*УсловиеЦвДрЦ*/
|   /*УсловиеБриллДраг*/
|   /*УсловиеЖемчуг*/
|   /*УсловиеЦиркон*/
|   /*УсловиеЦвет*/
|   /*УсловиеДни1*/
|   /*УсловиеДни2*/
|GROUP BY
|	  Рег.Магазин, $Номен.ВидИзделия, Рег.Товар, Рег.Партия WITH ROLLUP
|ORDER BY
|	Рег.Магазин,GROUPING(Рег.Магазин) DESC,
|	$Номен.ВидИзделия,GROUPING($Номен.ВидИзделия) DESC,
|	Рег.Товар,GROUPING(Рег.Товар) DESC,
|	Рег.Партия,GROUPING(Рег.Партия) DESC
|"; 



В таком варианте запроса, я получаю ошибку : "Невозможно выполнить статистическую функцию для выражения, содержащего выражение или вложенный запрос." - качается строчки:
Код
Выбрать все
MAX($ПоследнееЗначение.Партии.ДатаПолучения(ПартЗ.ID, :ВыбКонПериода)) as ПартП, 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #142 - 22. Января 2015 :: 04:45
Печать  
для начала рег.Партия, а так, ну оберни всё в подзапрос и ужо во внешнем селекте делай гроупбай и max

ЗЫ: ну и вот это тебе нафига ?
Код
Выбрать все
left join $Справочник.Подразделения as Подразд (nolock) on Подразд.id = Рег.Магазин 

  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #143 - 22. Января 2015 :: 04:56
Печать  
имхо, достаточно сделать только это
$ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода) as ПартП,
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #144 - 22. Января 2015 :: 04:58
Печать  
Так что ле ?

select
max($ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода)) as ПартП,

Не покатит же..имхо
Улыбка
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #145 - 22. Января 2015 :: 06:31
Печать  
trad писал(а) 22. Января 2015 :: 04:56:
имхо, достаточно сделать только это
$ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода) as ПартП,

Не прокатило - ошибка таже! Печаль
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #146 - 22. Января 2015 :: 06:31
Печать  
Eprst писал(а) 22. Января 2015 :: 04:58:
Так что ле ?

select
max($ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода)) as ПартП,

Не покатит же..имхо
Улыбка

Правы! - тоже не прокатило!
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #147 - 22. Января 2015 :: 06:42
Печать  
Попробовал так:
Код
Выбрать все
ТекстЗапроса = "		    
					|Select
					|	  Рег.Магазин 	[Склад $Справочник.Подразделения],
					|	  $Номен.ВидИзделия [Вид $Перечисления.ВидИзделия],
					|	  Рег.Товар 		[Товар $Справочник.Номенклатура],
					|	  MAX($Номен.Тип)		[Тип $Справочник.Тип],
					|	  MAX($Номен.ТипПФ)	[ТипПФ $Справочник.ТипПФ],
					|	Рег.Партия		[Партия $Справочник.Партии],
					|	GROUPING(Рег.Магазин) as ИтогПоСкладам,
					|	GROUPING($Номен.ВидИзделия) as ИтогПоВидам,
					|	GROUPING(Рег.Товар) as ИтогПоТоварам,
					|	GROUPING(Рег.Партия) as ИтогПоПартии,
					|	  MAX($ПартЗ.Распродажа)	[Акция $Перечисления.Булево],
					|	  MAX($ПартЗ.ВидУчета)	[Вуду $Перечисления.ВидУчета],
					|	  MAX($ПартЗ.Поставщик) [Клиент $Справочник.Контрагенти],
					|	  MAX($ПартЗ.Фирма)	[Фирма $Справочник.Фирмы],
					|	  MAX($ПартЗ.ВладелецТовара) [ВладелецТовара $Справочник.Контрагенти],
					|	  MAX($ПартЗ.Цвет)	[Цвет $Перечисления.Цвет],
					|	  MAX($ПартЗ.Размер)	as Размер,
					|	  MAX($ПартЗ.БрилКол)	as БрилКол,
					|	  MAX($ПартЗ.ЦвДрКол)	as ЦвДрКол,
					|	  MAX($ПартЗ.ЖемчугКол) as ЖемчугКол,	    
					|	  MAX($ПартЗ.ДатаОтгрузки) as ДатаПолуч,
				|   (
					|	Select
					|		РегВ.Партия [Партия $Справочник.Партии],
					|   	$ПоследнееЗначение.Партии.ДатаПолучения(ПартЗВ.ID, :ВыбКонПериода) as ВыбПер
					|	From
					|		$РегистрОстатки.Взаиморасщеты(:ВыбКонПериода~,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Партия),) as РегВ
					|		left join $Справочник.Партии as ПартЗВ (nolock) on ПартЗВ.id = РегВ.Партия
					|	) as Выборка,
|	MAX(Выборка.ВыбПер) as Пер,
					|	  SUM(Рег.КоличествоОстаток) as ШтОст,
					|	  SUM(Рег.МассаОстаток) as МОст,
					|	  SUM(Рег.МассаБКОстаток) as МБКОст,
					|	  SUM(Рег.СуммаПродажиОстаток) as КПОст,
					|	  SUM(Рег.СуммаОстаток) as КОст
					|FROM
					|	  $РегистрОстатки.Взаиморасщеты(:ВыбКонПериода~,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия),) as Рег
					|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
					|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
					|	left join $Справочник.Подразделения as Подразд (nolock) on Подразд.id = Рег.Магазин
					|Where
		|	Выборка.Партия = Рег.Партия AND[/color]
					|	$Номен.Тип = :ТипЗ
					|	/*УсловияАкц*/
					|   /*УсловиеТипПФ*/
					|   /*УсловиеФирма*/
					|   /*УсловиеПоставщик*/
					|   /*УсловиеВид*/
					|   /*УсловиеКлиент*/
					|   /*УсловиеУчет*/
					|   /*УсловиеРазмер*/
					|   /*УсловиеБрилКол*/
					|   /*УсловиеЦвДрЦ*/
					|   /*УсловиеБриллДраг*/
					|   /*УсловиеЖемчуг*/
					|   /*УсловиеЦиркон*/
					|   /*УсловиеЦвет*/
					|   /*УсловиеДни1*/
					|   /*УсловиеДни2*/
					|GROUP BY
					|	  Рег.Магазин, $Номен.ВидИзделия, Рег.Товар, Рег.Партия WITH ROLLUP
					|ORDER BY
					|	Рег.Магазин,GROUPING(Рег.Магазин) DESC,
					|	$Номен.ВидИзделия,GROUPING($Номен.ВидИзделия) DESC,
					|	Рег.Товар,GROUPING(Рег.Товар) DESC,
					|	Рег.Партия,GROUPING(Рег.Партия) DESC
					|"; 


Дает ошибку:
Не удалось привязать составной идентификатор "Выборка.Партия".
Намутил? ):
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #148 - 22. Января 2015 :: 06:43
Печать  
На вот, занимайся

Код
Выбрать все
ТекстЗапроса = "
|
|Select
|	  Таб.Магазин 	[Склад $Справочник.Подразделения],
|	  Таб.ВидИзделия [Вид $Перечисления.ВидИзделия],
|	  Таб.Товар 		[Товар $Справочник.Номенклатура],
|	  MAX(Таб.Тип)		[Тип $Справочник.Тип],
|	  MAX(Таб.ТипПФ)	[ТипПФ $Справочник.ТипПФ],
|	  Рег.Партия		[Партия $Справочник.Партии],
|	  GROUPING(Таб.Магазин) as ИтогПоСкладам,
|	  GROUPING(Таб.ВидИзделия) as ИтогПоВидам,
|	  GROUPING(Таб.Товар) as ИтогПоТоварам,
|	  GROUPING(Таб.Партия) as ИтогПоПартии,
|	  MAX(Таб.Распродажа)	[Акция $Перечисления.Булево],
|	  MAX(Таб.ВидУчета)	[Вуду $Перечисления.ВидУчета],
|	  MAX(Таб.Поставщик) [Клиент $Справочник.Контрагенти],
|	  MAX(Таб.Фирма)	[Фирма $Справочник.Фирмы],
|	  MAX(Таб.ВладелецТовара) [ВладелецТовара $Справочник.Контрагенти],
|	  MAX(Таб.Цвет)	[Цвет $Перечисления.Цвет],
|	  MAX(Таб.Размер)	as Размер,
|	  MAX(Таб.БрилКол)	as БрилКол,
|	  MAX(Таб.ЦвДрКол)	as ЦвДрКол,
|	  MAX(Таб.ЖемчугКол) as ЖемчугКол,
|	  MAX(Таб.ДатаОтгрузки) as ДатаПолуч,
|	  MAX(ПартП) as ПартП,
|	  SUM(Таб.КоличествоОстаток) as ШтОст,
|	  SUM(Таб.МассаОстаток) as МОст,
|	  SUM(Таб.МассаБКОстаток) as МБКОст,
|	  SUM(Таб.СуммаПродажиОстаток) as КПОст,
|	  SUM(Таб.СуммаОстаток) as КОст
|from (
|Select
|	  Рег.Магазин Магазин,
|	  $Номен.ВидИзделия ВидИзделия,
|	  Рег.Товар Товар,
|	  $Номен.Тип Тип,
|	  $Номен.ТипПФ ТипПФ,
|	  Рег.Партия Партия,
|	  $ПартЗ.Распродажа	Распродажа,
|	  $ПартЗ.ВидУчета ВидУчета,
|	  $ПартЗ.Поставщик Поставщик,
|	  $ПартЗ.Фирма	Фирма,
|	  $ПартЗ.ВладелецТовара ВладелецТовара,
|	  $ПартЗ.Цвет Цвет,
|	  $ПартЗ.Размер Размер,
|	  $ПартЗ.БрилКол БрилКол,
|	  $ПартЗ.ЦвДрКол ЦвДрКол,
|	  $ПартЗ.ЖемчугКол ЖемчугКол,
|	  $ПартЗ.ДатаОтгрузки ДатаПолуч,
|	  $ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода)  ПартП,
|	  Рег.КоличествоОстаток as КоличествоОстаток,
|	  Рег.МассаОстаток as КоличествоОстаток,
|	  Рег.МассаБКОстаток as КоличествоОстаток,
|	  Рег.СуммаПродажиОстаток as КоличествоОстаток,
|	  Рег.СуммаОстаток as КоличествоОстаток
|
|FROM
|	  $РегистрОстатки.Взаиморасщеты(:ВыбКонПериода~,,/*УсловияСклад*/ /*УсловиеВыбКод*/,(Магазин,Товар,Партия),) as Рег
|	left join $Справочник.Номенклатура as Номен (nolock) on Номен.id = Рег.Товар
|	left join $Справочник.Партии as ПартЗ (nolock) on ПартЗ.id = Рег.Партия
|Where
|	$Номен.Тип = :ТипЗ
|	/*УсловияАкц*/
|   /*УсловиеТипПФ*/
|   /*УсловиеФирма*/
|   /*УсловиеПоставщик*/
|   /*УсловиеВид*/
|   /*УсловиеКлиент*/
|   /*УсловиеУчет*/
|   /*УсловиеРазмер*/
|   /*УсловиеБрилКол*/
|   /*УсловиеЦвДрЦ*/
|   /*УсловиеБриллДраг*/
|   /*УсловиеЖемчуг*/
|   /*УсловиеЦиркон*/
|   /*УсловиеЦвет*/
|   /*УсловиеДни1*/
|   /*УсловиеДни2*/
|)as Таб
|GROUP BY
|	  Таб.Магазин, Таб.ВидИзделия, Таб.Товар, Таб.Партия WITH ROLLUP
|ORDER BY
|	Таб.Магазин,GROUPING(Таб.Магазин) DESC,
|	Таб.ВидИзделия,GROUPING(Таб.ВидИзделия) DESC,
|	Таб.Товар,GROUPING(Таб.Товар) DESC,
|	Таб.Партия,GROUPING(Таб.Партия) DESC
|";  

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


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #149 - 22. Января 2015 :: 06:56
Печать  
Пробую...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #150 - 22. Января 2015 :: 07:00
Печать  
Eprst писал(а) 22. Января 2015 :: 04:58:
Так что ле ?

select
max($ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода)) as ПартП,

Не покатит же..имхо
Улыбка

нет же

select
$ПоследнееЗначение.Партии.ДатаПолучения(MAX(ПартЗ.ID), :ВыбКонПериода) as ПартП,
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #151 - 22. Января 2015 :: 07:02
Печать  
ну не покатит же, у него же это поле не входит в гроуп бай
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #152 - 22. Января 2015 :: 07:06
Печать  
СПС! Сработало!

Еще один махонький вопрос:
хочу поставить условие для значения Таб.ПартП:
Код
Выбрать все
Запрос.УстановитьТекстовыйПараметр("ДниНач", ДниНач);
Запрос.УстановитьТекстовыйПараметр("ДниКон", ДниКон);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни1*/", "AND (:ВыбКонПериода - Таб.ПартП)>= :ДниНач");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни2*/", "AND (:ВыбКонПериода - Таб.ПартП)<= :ДниКон");
 


Но получаю ошибку:
Не удалось привязать составной идентификатор "Таб.ПартП".
Что не так с условием?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #153 - 22. Января 2015 :: 07:14
Печать  
Сработало что ?
Мой вариант ?
Если да, то

Код
Выбрать все
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни1*/", "AND (:ВыбКонПериода - $ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода))>= :ДниНач");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни2*/", "AND (:ВыбКонПериода - $ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода))<= :ДниКон"); 



или вынеси

     |   /*УсловиеДни1*/
     |   /*УсловиеДни2*/
за Таб и примени своё условие..
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #154 - 22. Января 2015 :: 07:19
Печать  
Eprst писал(а) 22. Января 2015 :: 07:14:
Сработало что ?
Мой вариант ?
Если да, то

Код
Выбрать все
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни1*/", "AND (:ВыбКонПериода - $ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода))>= :ДниНач");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*УсловиеДни2*/", "AND (:ВыбКонПериода - $ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода))<= :ДниКон"); 



или вынеси

     |   /*УсловиеДни1*/
     |   /*УсловиеДни2*/
за Таб и примени своё условие..


Сработал Ваш вариант с подзапросом (таблицой).
Еще раз Огромнейшее спасибо!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите, пожалуйста, в составлении запроса
Ответ #155 - 22. Января 2015 :: 07:31
Печать  
Eprst писал(а) 22. Января 2015 :: 07:02:
ну не покатит же, у него же это поле не входит в гроуп бай

покатит.

и так тоже покатит:
select
$ПоследнееЗначение.Партии.ДатаПолучения(Рег.Партия, :ВыбКонПериода) as ПартП,
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите, пожалуйста, в составлении запроса
Ответ #156 - 22. Января 2015 :: 08:52
Печать  
Та ну ?
Улыбка
  
Наверх
 
IP записан
 
maxy3d
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 89
Зарегистрирован: 05. Сентября 2014
Re: Помогите, пожалуйста, в составлении запроса
Ответ #157 - 22. Января 2015 :: 09:29
Печать  
Освобожусь - попробую разрешить ваш спор! -  проверю )
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать