Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос к регистру остатков. Подскажите где грабли. (число прочтений - 1100 )
Sirus_Virus
YaBB Newbies
*
Отсутствует


1C - зло О_о

Сообщений: 13
Местоположение: Нск
Зарегистрирован: 06. Июня 2008
Пол: Мужской
Запрос к регистру остатков. Подскажите где грабли.
06. Июня 2008 :: 06:13
Печать  
Стандартное получение итогов вида:

Код
Выбрать все
ВремРегистры = СоздатьОбъект("Регистры");
ВремОстатки = ВремРегистры.ОстаткиТоваров;

ВремОстатки.ВременныйРасчет(1);
ВремРегистры.РассчитатьРегистрыНа(Контекст);

// тут сделан цикл и получение остатка в нем таким образом кем написано я незнаю до меня это было

ВремОстатки.УстановитьЗначениеФильтра("Товар",Конт.Товар,1);
ВремОстатки.УстановитьЗначениеФильтра("Склад",Конт.Склад,1);                                          
ВремОстатки.ВыгрузитьИтоги(ОстаткиТИ,1,1);    
Остаток	= ОстаткиТИ.Итог("ОстатокТовара");

// по тестируемой позиции возвращает итог 209 единиц.
 



Вот что написал я
Код
Выбрать все
ЗапросОстатки = СоздатьОбъект("ODBCRecordSet");
//========================================================================        
ТекстЗапросаОстатки = "
|SELECT
|   SUM(Рег.ОстатокТовараОстаток)	as ОстатокТовара
|FROM
|  $РегистрОстатки.ОстаткиТоваров(:ДатаРасчета~,,Склад = :ВыбСклад AND Товар = :ВыбТовар,, (ОстатокТовара)) as Рег";

ьНачПериода(СформироватьПозициюДокумента(Конт,-1)));

// тут сделан цикл и получение остатка в нем таким образом кем написано я незнаю до меня это было

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

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

// Вернуло 270
 



Измерения в регистре только 2 склад и товар.
ЗЫ: Сори за кривость второго, но что-то с параметризованным запросом у меня не получилось. При добавлении даты в запрос он ничего не возвращает если параметризованный.
  

Владей собой среди толпы смятенной, &&Тебя клянущей за смятенье всех, &&Верь сам в себя, наперекор вселенной, &&И маловерным отпусти их грех... &&&&(с) Редьярд Киплинг&&
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Запрос к регистру остатков. Подскажите где гра
Ответ #1 - 06. Июня 2008 :: 06:18
Печать  
Код
Выбрать все
///******************************** ADirks 25.02.2008
Функция ТекстЗапроса_ОстаткиПоРегистру(ИмяРег, стрИзмерения, стрРесурсы, Знач стрФильтр = "") Экспорт
	Перем ТекстЗапроса;

	_Модификатор = ?(фИспользоватьТекстовыеПараметры=1, ":", "@");

	Если ПустаяСтрока(стрФильтр) = 0 Тогда
		стрФильтр = "AND " + стрФильтр;
	КонецЕсли;

	стрКолонки = "";
	GROUP_BY = "";
	Если ПустаяСтрока(стрИзмерения) = 0 Тогда
		стрКолонки = стрИзмерения;
		GROUP_BY = "GROUP BY
		|	"+стрИзмерения;
	КонецЕсли;

	сзРесурсы = СтрокуВСписок(стрРесурсы, ",", 1);
	стрФильтрНенулевыеЗначения = "";
	стрФильтрНенулевыеЗначенияСум = "";
	стрСуммыРесурсов = "";
	стрРесурсыВДвижениях = "";
	Зпт = ""; ЛогОператор = "";
	Для н = 1 По сзРесурсы.РазмерСписка() Цикл
		Ресурс = сзРесурсы.ПолучитьЗначение(н);
		Если ПустаяСтрока(Ресурс) = 1 Тогда
			Продолжить;
		КонецЕсли;

		стрФильтрНенулевыеЗначения = стрФильтрНенулевыеЗначения + ЛогОператор + Ресурс + " != 0";
		стрФильтрНенулевыеЗначенияСум = стрФильтрНенулевыеЗначенияСум + ЛогОператор + "Sum("+Ресурс+") != 0";

		стрСуммыРесурсов = стрСуммыРесурсов + Зпт + "Sum("+Ресурс+") "+Ресурс;
		стрРесурсыВДвижениях = стрРесурсыВДвижениях + Зпт + "ЗнакДвижения * "+Ресурс+" "+Ресурс;

		Зпт = ", ";
		ЛогОператор = " OR ";
	КонецЦикла;

	Если (ПустаяСтрока(стрКолонки) = 0) И (ПустаяСтрока(стрРесурсы) = 0) Тогда
		стрКолонки = стрКолонки + ",";
	КонецЕсли;
	Если ПустаяСтрока(стрФильтрНенулевыеЗначения) = 0 Тогда
		стрФильтрНенулевыеЗначения = "AND ("+стрФильтрНенулевыеЗначения+")";
		HAVING = "HAVING
		|	("+стрФильтрНенулевыеЗначенияСум+")";
	КонецЕсли;

	ТекстЗапроса = "
	|SELECT
	|	"+стрКолонки+"
	|	"+стрРесурсы+"
	|FROM
	|	рег"+ИмяРег+"Итоги рег
	|WHERE
	|	рег.Period = "+_Модификатор+"ДатаИтогов
	|	"+стрФильтрНенулевыеЗначения+"
	|	"+стрФильтр;

	Если фИтогиАктуальны = 0 Тогда
		ТекстЗапроса = ТекстЗапроса + "
		|
		|UNION ALL
		|
		|SELECT
		|	"+стрКолонки+"
		|	"+стрРесурсыВДвижениях+"
		|FROM
		|	рег"+ИмяРег+" рег
		|WHERE
		|	рег.Date_Time_IDDoc > "+_Модификатор+"Остатки_НачДатаДвижений AND рег.Date_Time_IDDoc < "+_Модификатор+"Остатки_КонДатаДвижений
		|	"+стрФильтр;
	КонецЕсли;

	ТекстЗапросаГрп = "
	|SELECT
	|	"+стрКолонки+"
	|	"+стрСуммыРесурсов+"
	|FROM
	|	(
	|"+Отступ(ТекстЗапроса, 2)+"
	|	) рег
	|"+GROUP_BY+"
	|"+HAVING+"
	|";

	Возврат ТекстЗапросаГрп;
КонецФункции
///******************************** ADirks 25.02.2008
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать