Проблема с запросом к регистру

  • Автор темы Tonio
  • Дата начала
T

Tonio

#1
Вообщем имеется регистр, который хранит движения по приходу и расходу товаров!
В данном регистре имеются измерение Товар, ресурс Количество, реквизит Цена!
Вообщем необходимо подсчтитать остаток конкретного товара по документам!
Запускаю вот такой код:
Код:
	Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Товар=Регистр.ОстатокТоваров.Товар;
|Цена=Регистр.ОстатокТоваров.Цена;
|Количество=Регистр.ОстатокТоваров.Количество;
|Партия=Регистр.ОстатокТоваров.ТекущийДокумент;	
|Условие(Товар=ВыборТовар);
|Группировка Партия упорядочить по Партия.ДатаДок;
|Функция ОстатокПоПартиям=КонОст(Количество);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Сообщить("Запрос не выполнен");
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать1");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Пока Запрос.Группировка("Партия",-1)=1 Цикл
Таб.ВывестиСекцию("Товар");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("","");
Проблема в том, что данный запрос ничего не возвращает,
хотя в регистре имеются данные!Наличие записей в регистре проверял кодом:
Код:
 РегТовары = СоздатьОбъект("Регистр.ОстатокТоваров");
РегТовары.УстановитьЗначениеФильтра("Товар",ВыборТовар);
РегТовары.ВыбратьДвижения(НачДата, КонДата);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
Сообщить(РегТовары.Количество);
КонецЦикла;
Вопрос в чем же ошибка, почему запрос ничего не возвращает?
 

vbs

Well-known member
18.02.2007
1 708
1
#2
Попробуй толкануть запрос, вставив еще пару функций
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
возможно, поможет
 

unknown181538

НеГуру
28.12.2008
1 417
0
#3
РегТовары = СоздатьОбъект("Регистр.ОстатокТоваров");
РегТовары.УстановитьЗначениеФильтра("Товар",ВыборТовар);
РегТовары.ВыбратьДвижения(НачДата, КонДата);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
Сообщить(РегТовары.Количество);
КонецЦикла;
А может было движение прихода и расхода, а остатков нет?
 
T

Tonio

#4
А может было движение прихода и расхода, а остатков нет?
Дело в том, что я проводил только приходные накладные, поэтому должны быть остатки товара!
 

vbs

Well-known member
18.02.2007
1 708
1
#9
Исследование показало :
1. Период необходим
2. Добавка в запрос
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
помогает (без этого группировки по партиям (т.е., по датам документов) просто нет, а есть только конечный остаток
3. Запрос может не срабатывать, если ВыбТовар - группа
Следует написать так :
|Условие(Товар в ВыборТовар);

Проверено на типовой ТиС 9.55
Работающий код :
var DT;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с Дата1 по Дата2;
|Товар=Регистр.ОстаткиТМЦ.Номенклатура;
|Количество=Регистр.ОстаткиТМЦ.Количество;
|Партия=Регистр.ОстаткиТМЦ.ТекущийДокумент;
|Условие(Товар in ВыбТМЦ);
|Группировка Партия упорядочить по Партия.ДатаДок;
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
|Функция БылоПоПартиям = НачОст(Количество);
|Функция ОстатокПоПартиям=КонОст(Количество);
|";
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Сообщить("Запрос не выполнен");
Return
КонецЕсли;
Запрос.Unload(DT);
DT.ChooseLine();
 
H
#10
|Партия=Регистр.ОстатокТоваров.ТекущийДокумент;
|Группировка Партия упорядочить по Партия.ДатаДок;
|Функция ОстатокПоПартиям=КонОст(Количество);
Если не ошибаюсь, то здесь противоречие
В ЖКК вроде говорится, что в этом случае имеют смысл только обороты, а не остатки
 

unknown181538

НеГуру
28.12.2008
1 417
0
#12
Только, как я понимаю, результатом будет не остаток из партии, а сколько всего в регистре после каждого документа.
 

vbs

Well-known member
18.02.2007
1 708
1
#13
Только, как я понимаю, результатом будет не остаток из партии, а сколько всего в регистре после каждого документа.
Пусть уж теперь сам разбирается. Запрос, какой он хотел, заработал, а чтобы результаты были адекватные,
я бы группировку по товару добавил