Имя: Пароль:
1C
1С v8
Граница в регистре сведений
0 Olden2610
 
23.02.16
00:05
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриоритетностьСкладовСрезПоследних.Период КАК Период
        |ИЗ
        |    РегистрСведений.ПриоритетностьСкладов.СрезПоследних КАК ПриоритетностьСкладовСрезПоследних
        |ГДЕ
        |    ПриоритетностьСкладовСрезПоследних.Период МЕЖДУ &Начало И &Конец
        |
        |СГРУППИРОВАТЬ ПО
        |    ПриоритетностьСкладовСрезПоследних.Период
        |
        |УПОРЯДОЧИТЬ ПО
        |    Период УБЫВ";

        
    //Границу не принимает как параметр.
    Запрос.УстановитьПараметр("Конец", Новый Граница(Дата, ВидГраницы.Исключая));
    Запрос.УстановитьПараметр("Начало", ДобавитьМесяц(Дата, -1));


Если в параметр передать границу выпадает ошибка:

Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ПриоритетностьСкладовСрезПоследних.Период <<?>>МЕЖДУ &Начало И &Конец
1 Armando
 
23.02.16
00:41
Задай вопрос
2 zak555
 
23.02.16
00:52
период имеет тип даты
3 youalex
 
23.02.16
00:52
(0) всё правильно. В смысле, правильно что ошибка выдаётся.
В чём прикладной смысл условия в секции ГДЕ? А не в параметре вирт. таблицы СрезПоследних ?
4 zak555
 
23.02.16
00:53
далее
твой запрос - еруда какая-то
5 youalex
 
23.02.16
00:57
Кстати, да. Зачем вообще выбирать период из среза последних?
Как задача изначально звучит?
6 Olden2610
 
23.02.16
20:07
(4) (3) За период ищем была-ли запись вообще. Если была, то возвращаем дату этого движения, его и анализируем.

(3) вопрос глупый, но - каким образом передать границу в параметр запроса так, чтобы она считалась?
7 Lexey_
 
23.02.16
20:09
(6) параметры виртуальной таблицы
8 Olden2610
 
23.02.16
20:16
(7) И тем не менее, добр человек,
"Период МЕЖДУ &Начало И &Конец"
В параметрах ВТ отрабатывает с той-же ошибкой. Попробовал передавать обе границы - аналогично.
9 Olden2610
 
23.02.16
20:17
Уверен - проблема до безумия тривиальная, но не могу уловить в каком месте ошибаюсь.
10 MishaD
 
23.02.16
20:25
Ну так наверно сам регистр, а не срезпоследних.
11 Dен
 
23.02.16
20:45
(6) 1. Зачем в этом случае используется срез последних? А не основная таблица?
2. Почему нужна именно граница? Для задачи достаточно даты.
12 Olden2610
 
23.02.16
20:47
(11) Таблица действительно не важно какая, можно и физическую, но сути проблемы не меняет.

Хочу границой исключить движения на начало.
Грубить по типу  "Запрос.УстановитьПараметр("Начало", Дата+1);" Нельзя.
13 Dен
 
23.02.16
20:50
(12) Нельзя, значит нельзя. Тогда, видимо, никак. Запрос не выполнится.
14 Dен
 
23.02.16
21:00
(12) Для описанной в (6) задачи таблица важна. Срез последних может пропустить необходимые данные.
15 Olden2610
 
23.02.16
21:03
(14) В регистре одно измерение, да и к тому-же - интересует наличие записей за период вообще. Без отбора по измерениям.

Таки методой тыка выяснил.
Граница - передатся как параметр в РН, но не в РС.
16 Lexey_
 
23.02.16
21:05
(15) в РС тоже:
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
СрезПоследних (SliceLast)
Синтаксис:

СрезПоследних(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, заканчивая которым необходимо выбрать записи.
17 Serg_1960
 
23.02.16
21:08
(0) "Результат запроса к таблицам СрезПервых и СрезПоследних будет неверным, если параметр Период имеет значение типа Граница или МоментВремени." - ошибка пару лет назад зарегистрирована и вряд ли будет исправлена.
18 Dен
 
23.02.16
21:09
Срез последних не решает поставленную задачу, независимо от количества измерений. Можно подобрать такие данные, когда срез последних не будет ничего возвращать при наличии записей в этом периоде.
19 MishaD
 
23.02.16
21:10
Всегда меня интересовало, а если несколько регистраторов за один день поменяют ресурс, а мне нужно будет получить значение  в середине дня. То что, облом ? Если у РС периодичность день.
20 Dен
 
23.02.16
21:12
(17) Можно ссылку? Срез последних по моменту времени очень важен для регистров сведений с периодичностью по регистратору.
21 Olden2610
 
23.02.16
21:12
(16) если обращаться через точку, или в параметр ВТ (период, не условие) передавать границу - да, работает.
Иначе - как в условие - не передается.

(17) запрос в такой ситуации вообще не отрабатывает. Жалуется, что не понимает что такое "граница" :)

(18) повторюсь - вид таблицы (физ. ВТ) не имеет значения в контексте данного задания.
22 Olden2610
 
23.02.16
21:15
(19) движение, вроде как, на начало дня совершается.
23 Serg_1960
 
23.02.16
21:15
Отобрать записи по периоду, период указан датами, и потом исключить записи, обращаясь к регистратору.
24 Olden2610
 
23.02.16
21:17
(16) Как и говорил - проблема таки была тривиальна до безумия.
в СрезПервых передаю периодом границу.

Спасибо вам :)
25 MishaD
 
23.02.16
21:18
(23) А если регистратор одного вида ?
26 Lexey_
 
23.02.16
21:24
(24) о чем и говорилось в (7)
27 Olden2610
 
23.02.16
21:29
(26) попробовал устанавливать период в поле "условие", в котором тоже не отработало. А вот использовать СрезПервых в связке с полем "период" - не сразу догадался :)
28 youalex
 
23.02.16
21:47
В общем, как-то так:
"ВЫБРАТЬ ПЕРВЫЕ 1 Период
ИЗ РегистрСведений.ПриоритетностьСкладов
ГДЕ Период > &ДатаНачала И Период <= &ДатаКонца"
29 Eiffil123
 
24.02.16
06:57
(17) Кошмар какой. я вообще стараюсь по максимуму границу в запросы пихать. а тут такое