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

Тема в разделе "1C и всё что с ней связано", создана пользователем Tonio, 18 фев 2010.

  1. Tonio

    Tonio Гость

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

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй толкануть запрос, вставив еще пару функций
    |Функция ПриходК = Приход(Количество);
    |Функция РасходК = Расход(Количество);
    возможно, поможет
     
  3. unknown181538

    unknown181538 НеГуру
    1C Team

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А может было движение прихода и расхода, а остатков нет?
     
  4. Tonio

    Tonio Гость

    Репутация:
    0
    Дело в том, что я проводил только приходные накладные, поэтому должны быть остатки товара!
     
  5. unknown181538

    unknown181538 НеГуру
    1C Team

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А в секции таблицы что написано?
     
  6. evgenyatam

    evgenyatam Well-Known Member

    Репутация:
    0
    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    я думаю тут надо использовать период.
     
  7. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Верно, не досмотрел я
     
  8. unknown181538

    unknown181538 НеГуру
    1C Team

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А без указания на ТА не вернет?
    Кстати может ТА не там, где должна?
     
  9. vbs

    vbs Well-Known Member

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

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

    Hryv Гость

    Репутация:
    0
    Если не ошибаюсь, то здесь противоречие
    В ЖКК вроде говорится, что в этом случае имеют смысл только обороты, а не остатки
     
  11. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А в чем оно ?
    Отвечаю : приведенный мной код 100% работает
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Только, как я понимаю, результатом будет не остаток из партии, а сколько всего в регистре после каждого документа.
     
  13. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Пусть уж теперь сам разбирается. Запрос, какой он хотел, заработал, а чтобы результаты были адекватные,
    я бы группировку по товару добавил
     
Загрузка...
Похожие Темы - Проблема запросом регистру
  1. Renat11111
    Ответов:
    1
    Просмотров:
    2.255
  2. Renat11111
    Ответов:
    4
    Просмотров:
    2.928
  3. Renat11111
    Ответов:
    3
    Просмотров:
    2.628
  4. thunder
    Ответов:
    1
    Просмотров:
    72
  5. SevenEight
    Ответов:
    0
    Просмотров:
    69

Поделиться этой страницей