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

Срезпоследних дат

Автор mila1231, 20 ноя 2015, 13:00

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

vitasw

Цитата: mila1231 от 23 ноя 2015, 12:28т.е вывести только те номера_прибора, которые добавлены последними?

расшифруйте

mila1231

Под этим я имела в виду,
в список должны выводиться приборы на текущую дату, те которые со статусом Принят, но не имеют статус Поверен.
Думаю на примере понятнее будет

11.11.2015 333 Принят
11.11.2015 444 Принят
12.11.2015 555 Принят
15.11.2015 333 Поверен

Т.е в результате должны вывестись только
444
555,
а 333 уже не должен выводиться.

сейчас запрос имеет вид

Запрос.Текст ="ВЫБРАТЬ
              | Сп.Период,
              | Сп.Номер_прибора_регистр КАК Номер_прибора_регистр,
              | Сп.Статус_регистр
              |ИЗ
              | РегистрСведений.РеестрДвиженияПрибора.СрезПоследних(&ДатаСреза) КАК Сп
            |ГДЕ
            | Сп.Статус_регистр = &Пр
              |
              |СГРУППИРОВАТЬ ПО
              | Сп.Номер_прибора_регистр,
              | Сп.Период,
              | Сп.Статус_регистр
              |
              |УПОРЯДОЧИТЬ ПО
              | Номер_прибора_регистр";
     
   
               Запрос.УстановитьПараметр("Пр", "Принят");
   Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());


vitasw

Цитата: mila1231 от 24 ноя 2015, 04:44| РегистрСведений.РеестрДвиженияПрибора.СрезПоследних(&ДатаСреза) КАК Сп
уберите из параметров дату среза. этим вы отсекаете все движения после даты среза.

Kironten

Цитата: mila1231 от 24 ноя 2015, 04:44
Под этим я имела в виду,
в список должны выводиться приборы на текущую дату, те которые со статусом Принят, но не имеют статус Поверен.
Думаю на примере понятнее будет

11.11.2015 333 Принят
11.11.2015 444 Принят
12.11.2015 555 Принят
15.11.2015 333 Поверен

Т.е в результате должны вывестись только
444
555,
а 333 уже не должен выводиться.

сейчас запрос имеет вид

Запрос.Текст ="ВЫБРАТЬ
              | Сп.Период,
              | Сп.Номер_прибора_регистр КАК Номер_прибора_регистр,
              | Сп.Статус_регистр
              |ИЗ
              | РегистрСведений.РеестрДвиженияПрибора.СрезПоследних(&ДатаСреза) КАК Сп
            |ГДЕ
            | Сп.Статус_регистр = &Пр
              |
              |СГРУППИРОВАТЬ ПО
              | Сп.Номер_прибора_регистр,
              | Сп.Период,
              | Сп.Статус_регистр
              |
              |УПОРЯДОЧИТЬ ПО
              | Номер_прибора_регистр";
     
   
               Запрос.УстановитьПараметр("Пр", "Принят");
   Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());

"ВЫБРАТЬ
| Сп.Период,
| Сп.Номер_прибора_регистр КАК Номер_прибора_регистр,
| Сп.Статус_регистр
|ПОМЕСТИТЬ ВТДанныеРегистра
|ИЗ
| РегистрСведений.РеестрДвиженияПрибора.СрезПоследних(&ДатаСреза) КАК Сп
|;
|
|////////////////////////////////////////////
|ВЫБРАТЬ
| ВТДанныеРегистра.Период,
| ВТДанныеРегистра.Номер_прибора_регистр КАК НомерПрибора,
| ВТДанныеРегистра.Статус_регистр КАК Статус
|ИЗ ВТДанныеРегистра КАК ВТДанныеРегистра
|ГДЕ
| ВТДанныеРегистра.Статус_регистр = &Пр";

Первым блоком запроса берете срез по всем приборам на дату, вторым отсекаете ненужные статусы (в первом блоке нельзя сразу накладывать отбор, иначе, согласно вашему примеру получите запись: 11.11.2015 333 Принят)

vitasw

Цитата: Kironten от 24 ноя 2015, 11:24Первым блоком запроса берете срез по всем приборам на дату, вторым отсекаете ненужные статусы (в первом блоке нельзя сразу накладывать отбор, иначе, согласно вашему примеру получите запись: 11.11.2015 333 Принят)

Фигню пишите. как раз используя ваш пример такая ошибка и получится.
Проблема исключительно в дате.

Kironten

Цитата: vitasw от 24 ноя 2015, 11:55
Цитата: Kironten от 24 ноя 2015, 11:24Первым блоком запроса берете срез по всем приборам на дату, вторым отсекаете ненужные статусы (в первом блоке нельзя сразу накладывать отбор, иначе, согласно вашему примеру получите запись: 11.11.2015 333 Принят)

Фигню пишите. как раз используя ваш пример такая ошибка и получится.
Проблема исключительно в дате.

Если дата среза будет после 15 числа, то по позиции 333 получится запись "15.11.2015 333 Проверен", вторым запросом эта строка отсеится, как не соответствующая статусу.
Все трактуется исключительно задачей.
Убирая дату, пользователь лишается возможности получить срез последних на любую дату за исключением текущей.
Если такой ограниченный функционал допускается задачей, то пожалуйста.
Если же нет, то тогда ФИГНЮ написали уже Вы.

vitasw

Цитата: Kironten от 24 ноя 2015, 12:06Если дата среза будет после 15 числа, то по позиции 333 получится запись "15.11.2015 333 Проверен", вторым запросом эта строка отсеится, как не соответствующая статусу.
В этом и есть основная проблема, ваш способ завязан на дату среза. Напоминаю, что это РС - инфа нужна актуальная. смысл в том чтобы не зависимо от даты ввода документа, даже если он введен задним число нужно получать актуальную информацию. И ваш метод для даты меньше чем 15.11.2015 - будет выдавать неверную информацию.
Цитата: mila1231 от 23 ноя 2015, 07:26теперь нужно в обработку запихнуть те номера приборов, у которых только статус прнинят, т.е если у этого номера уже есть статус поверен, то ,тогда его в списке нет.
тут нет ни слова о том что срез нужен на какую-то дату...
+ вообще непонятно зачем временная таблица, условие ГДЕ великолепно накладывается и в первом запросе.

Kironten

Цитата: vitasw от 24 ноя 2015, 12:19
Цитата: Kironten от 24 ноя 2015, 12:06Если дата среза будет после 15 числа, то по позиции 333 получится запись "15.11.2015 333 Проверен", вторым запросом эта строка отсеится, как не соответствующая статусу.
В этом и есть основная проблема, ваш способ завязан на дату среза. Напоминаю, что это РС - инфа нужна актуальная. смысл в том чтобы не зависимо от даты ввода документа, даже если он введен задним число нужно получать актуальную информацию. И ваш метод для даты меньше чем 15.11.2015 - будет выдавать неверную информацию.
Смысл, трактуется задачей. Я не уверен, что тс дал все условия. Говорить, что данные полученные до 15 числа для позиции 333 неверны - тоже некорректно. Это записи регистра. И до 15 числа для 333 статус принят. Что тут неверного? Тут как раз очень хороший смысл, не давать вводить данные будущим числом.

Цитата: vitasw от 24 ноя 2015, 12:19
Цитата: mila1231 от 23 ноя 2015, 07:26теперь нужно в обработку запихнуть те номера приборов, у которых только статус прнинят, т.е если у этого номера уже есть статус поверен, то ,тогда его в списке нет.
тут нет ни слова о том что срез нужен на какую-то дату...
+ вообще непонятно зачем временная таблица, условие ГДЕ великолепно накладывается и в первом запросе.
Здрасте, приехали.
Если наложить условие на статус сразу в срезе последних, вы получите последнюю строку удовлетворяющую условию!
Т.е. вместо того, чтобы не получать строку по позиции 333, вы получите строку "11.11.2015 333 Принят".
Прежде чем продолжать дискуссию, может вы хотя бы проверите свое утверждение? Я вот, например проверил.

vitasw

Цитата: Kironten от 24 ноя 2015, 12:38Т.е. вместо того, чтобы не получать строку по позиции 333, вы получите строку "11.11.2015 333 Принят".
Прежде чем продолжать дискуссию, может вы хотя бы проверите свое утверждение? Я вот, например проверил.
:D Плохо проверяли.
условие "где" одинаково работает и с временной таблицей и без оной. разница только в наличии/отсутствии даты среза.

Kironten

Цитата: vitasw от 24 ноя 2015, 12:53
Цитата: Kironten от 24 ноя 2015, 12:38Т.е. вместо того, чтобы не получать строку по позиции 333, вы получите строку "11.11.2015 333 Принят".
Прежде чем продолжать дискуссию, может вы хотя бы проверите свое утверждение? Я вот, например проверил.
:D Плохо проверяли.
условие "где" одинаково работает и с временной таблицей и без оной. разница только в наличии/отсутствии даты среза.
Ну, значит каждый при своем мнении. :D

Да. Действительно. На конструкции ГДЕ это условие отрабатывает. Я все таки проверял на на параметрах ВТ. В этом случае я не прав. Признаю.

Теги:

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

Рейтинг@Mail.ru

Поиск