Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 20:24

Неправильная обработка запроса в 1с 8.2

Автор Baltazarar, 06 мар 2012, 15:31

0 Пользователей и 3 гостей просматривают эту тему.

Baltazarar

а вот запрос конечных остатков работает как нужно,
выходит обработка вида запроса отказала что-ли или всё-таки я не правильно запросы прописываю?

has

Цитата: Baltazarar от 07 мар 2012, 12:20
а вот запрос конечных остатков работает как нужно,
выходит обработка вида запроса отказала что-ли или всё-таки я не правильно запросы прописываю?
я по твоему коду вобще не могу понять что ты хочешь там сделать

Baltazarar

в этом коде я делаю запрос к регистру накоплений с пометкой "остатки" и все позиции с ненулевым количеством вывожу построчно в табличную часть документа. в итоге получается табличка вида \номенклатура\магазин заказчик\дата заказа\количество на складе\количество заказано\   ,  после чего формирую отчёт по тому же регистру того же вида и они в итоге должны совпасть

has

Ну более менее понятно. Тогда советы маленькие:
1 - не пометка "остатки", а это называется виртуальная таблица регистра, это так, чтобы все понимали в последующем
2 - условие на ненулевое количество можно и в запросе сделать
3 - не нужен цикл по табличной части, нужно просто добавлять новую строку и заполнять ее
Т.е. тебе нужны остатки по всей номенклатуре? Или номенклатура в документе все же указана?

Baltazarar

1. в данном запросе нужны остатки всей номенклатуры.
2. ненулевые остатки я прописал отдельным условием потому, что параметра два (склады и заказы) причём нужно выводить значения даже  одним ненулевым параметром, а если их прописать в запросе, то  условия выполнятся одновременно (как "И" а не как "ИЛИ").
3. Виртуальная таблица регистра это по сути дела и есть сам запрос, а пометка "остатки" означает что нужно в этой таблице суммировать значения для одинаковой номенклатуры, а не выводить их как отдельные значения (имеется ввиду  пометки "Остатки", "Обороты", "ОстаткиИОбороты").
4. Вот  про заполнение строки просто не могу найти как правильно к ней обратиться после добавления, поэтому приходиться делать обход табличной части

СветланаCC

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      Если  (ВыборкаДетальныеЗаписи.ЗаказаноОстаток<>0) или (ВыборкаДетальныеЗаписи.НаСкладеОстаток<>0)тогда
      НоваяСтрока = Объект.Товары.Добавить();
      НоваяСтрока.Номенклатура =ВыборкаДетальныеЗаписи.Номенклатура;
      НоваяСтрока.ДатаДокумента = ВыборкаДетальныеЗаписи.Дата;
      НоваяСтрока.МагазинДокумент= ВыборкаДетальныеЗаписи.Магазин;
      НоваяСтрока.Заказ = ВыборкаДетальныеЗаписи.ЗаказаноОстаток;
      НоваяСтрока.Склад = ВыборкаДетальныеЗаписи.НаСкладеОстаток;
   КонецЦикла;
       КонецЕсли;
      КонецЦикла;
Тазовод)

Baltazarar

благодарю, но главная проблема всё-таки не в этом, а в том что запрос остатков почему-то выдаёт весь регистр сплошняком

has

Цитата: Baltazarar от 07 мар 2012, 13:21
1. в данном запросе нужны остатки всей номенклатуры.
2. ненулевые остатки я прописал отдельным условием потому, что параметра два (склады и заказы) причём нужно выводить значения даже  одним ненулевым параметром, а если их прописать в запросе, то  условия выполнятся одновременно (как "И" а не как "ИЛИ").
3. Виртуальная таблица регистра это по сути дела и есть сам запрос, а пометка "остатки" означает что нужно в этой таблице суммировать значения для одинаковой номенклатуры, а не выводить их как отдельные значения (имеется ввиду  пометки "Остатки", "Обороты", "ОстаткиИОбороты").
4. Вот  про заполнение строки просто не могу найти как правильно к ней обратиться после добавления, поэтому приходиться делать обход табличной части
1. понятно
2. в запросе можно написать условие "или"
3. в терминологии 1С это не пометка, это виртуальная таблица остатков регистра
4. пример написала СветланаCC, только там первый КонецЦикла лишний

has

Цитата: Baltazarar от 07 мар 2012, 13:33
благодарю, но главная проблема всё-таки не в этом, а в том что запрос остатков почему-то выдаёт весь регистр сплошняком
а движения по регистру были и приход и расход? И думаю логичней было бы получать остатки на дату документа....хотя тут зависит от условия задачи. Можно посмотреть движения по конкретной номенклатуре, если был и приход и расход, то попробовать запрос использовать только для этой номенклатуры и посмотреть на результат.

СветланаCC

Кстати, если остатки на конкретную дату то лучше так - РегистрНакопления.РегистрЗаказов.Остатки(&Дата, ) КАК РегистрЗаказовОстатки

Цитата: Baltazarar от 07 мар 2012, 13:21
2. ненулевые остатки я прописал отдельным условием потому, что параметра два (склады и заказы) причём нужно выводить значения даже  одним ненулевым параметром, а если их прописать в запросе, то  условия выполнятся одновременно (как "И" а не как "ИЛИ").
Или использовать можно, что то вроде этого -
Запрос.Текст =
      "ВЫБРАТЬ
      |   РегистрЗаказовОстатки.Магазин КАК Магазин,
      |   РегистрЗаказовОстатки.Покупатель,
      |   РегистрЗаказовОстатки.Номенклатура,
      |   СУММА(РегистрЗаказовОстатки.ЗаказаноОстаток) КАК ЗаказаноОстаток,
      |   СУММА(РегистрЗаказовОстатки.НаСкладеОстаток) КАК НаСкладеОстаток
      |ИЗ
      |   РегистрНакопления.РегистрЗаказов.Остатки(&Дата, ) КАК РегистрЗаказовОстатки

      | ГДЕ
      |   ((СУММА(РегистрЗаказовОстатки.ЗаказаноОстаток) <> &Ноль)ИЛИ(СУММА(РегистрЗаказовОстатки.НаСкладеОстаток) <> &Ноль))
      |СГРУППИРОВАТЬ ПО
      |   РегистрЗаказовОстатки.Магазин,
      |   РегистрЗаказовОстатки.Покупатель,
      |   РегистрЗаказовОстатки.Номенклатура,
      |   РегистрЗаказовОстатки.Дата
      |
      |УПОРЯДОЧИТЬ ПО
      |   Магазин";

   Результат = Запрос.Выполнить();

Тазовод)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск