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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 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 записан
 
Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 11
ОтправитьПечать