Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите, пожалуйста, в составлении запроса (число прочтений - 34546 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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



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