• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Tonio

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

vbs

Попробуй толкануть запрос, вставив еще пару функций
|Функция ПриходК = Приход(Количество);
|Функция РасходК = Расход(Количество);
возможно, поможет
 
U

unknown181538

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

Tonio

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

unknown181538

А в секции таблицы что написано?
 
E

evgenyatam

я думаю тут надо использовать период.
 
V

vbs

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

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

Hryv

|Партия=Регистр.ОстатокТоваров.ТекущийДокумент;
|Группировка Партия упорядочить по Партия.ДатаДок;
|Функция ОстатокПоПартиям=КонОст(Количество);

Если не ошибаюсь, то здесь противоречие
В ЖКК вроде говорится, что в этом случае имеют смысл только обороты, а не остатки
 
U

unknown181538

Только, как я понимаю, результатом будет не остаток из партии, а сколько всего в регистре после каждого документа.
 
V

vbs

Только, как я понимаю, результатом будет не остаток из партии, а сколько всего в регистре после каждого документа.
Пусть уж теперь сам разбирается. Запрос, какой он хотел, заработал, а чтобы результаты были адекватные,
я бы группировку по товару добавил
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!