|
СрезПоследних в регистре сведений | ☑ | ||
---|---|---|---|---|
0
grandmaster
15.11.17
✎
10:07
|
Подскажите, как работает срезпоследних. Что я делаю не так?
Возвращает целый список из регистра (ДокументыЭД). Нужно получать последнее значение по текущей дате ВЫБРАТЬ ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, ДокументыЭДСрезПоследних.Период Как Период, РеализацияТоваровУслуг.Ссылка КАК Ссылка ИЗ РегистрСведений.ДокументыЭД.СрезПоследних(&ТекущаяДата, ) КАК ДокументыЭДСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО ДокументыЭДСрезПоследних.Документ = РеализацияТоваровУслуг.Ссылка ГДЕ РеализацияТоваровУслуг.Ссылка = ДокументыЭДСрезПоследних.Документ |
|||
1
Cyberhawk
15.11.17
✎
10:09
|
Чтобы получать "получать последнее значение по текущей дате", срез не подходит, т.к. ты не знаешь, с какими значениями измерений эта запись
|
|||
2
grandmaster
15.11.17
✎
10:11
|
(1) разве нет такой функции, чтоб получать последнее значение из регистра? я думал как раз срезпоследних это оно, разве не так?
|
|||
3
grandmaster
15.11.17
✎
10:12
|
(1) и что значит ваше
"ты не знаешь, с какими значениями измерений эта запись" |
|||
4
FIXXXL
15.11.17
✎
10:14
|
(2) срез последних - он по СОЧЕТАНИЯМ измерений
у тебя там сколько измерений? |
|||
5
grandmaster
15.11.17
✎
10:16
|
(4) что значит измерений?
количество строк? полей? я не понимаю строк очень много надо получать последнее по текущей дате |
|||
6
lodger
15.11.17
✎
10:16
|
(0) начни с того, что написать структуру регистра.
Измерения: ... ... ресурсы: ... ... |
|||
7
grandmaster
15.11.17
✎
10:19
|
(6)
Измерения: Документ ВариантОбмена Ресурсы: Файл Статус ИдентификаторЗапроса |
|||
8
h-sp
15.11.17
✎
10:26
|
(7) ну значит по каждому документу реализация и по каждому варианту обмена будет отдельная строчка в срезе.
Ну то есть в ваш срез должны по-любому попасть все документы реализации, который есть в регистре. |
|||
9
Cyberhawk
15.11.17
✎
10:27
|
(2) Функция как раз есть: ПолучитьПоследнее
|
|||
10
Cyberhawk
15.11.17
✎
10:27
|
(3) То и значит
|
|||
11
grandmaster
15.11.17
✎
10:32
|
(8) так а я что делаю?
ГДЕ РеализацияТоваровУслуг.Ссылка = ДокументыЭДСрезПоследних.Документ |
|||
12
grandmaster
15.11.17
✎
10:33
|
(9) так и как быть то?
|
|||
13
h-sp
15.11.17
✎
10:34
|
(11) что означает эта магическая формула? И какое отношение она имеет к теме разговора?
|
|||
14
azernot
15.11.17
✎
10:35
|
(12) Подумать, что ты хочешь получить, посмотреть что ты по факту получаешь, и понять, как добиться того, чтобы эти две сущности совпали.
|
|||
15
h-sp
15.11.17
✎
10:35
|
(12) не использовать срез последних.
|
|||
16
HEKPOH
15.11.17
✎
10:37
|
(0) в инете много статей, объясняющих что такое "срез последних". Изучай
|
|||
17
Cyberhawk
15.11.17
✎
10:38
|
(12) Отдай на аутсорс
|
|||
18
azernot
15.11.17
✎
10:38
|
Срез последних лучше всего понимается через пример "КурсыВалют".
Есть измерение - Валюта, есть ресурс - Курс. Срез на дату - даст последние (на эту дату) курсы каждой валюты. Было бы странно, если бы срез выдавал самый последний введённый курс по какой-то непонятной валюте. |
|||
19
grandmaster
15.11.17
✎
10:42
|
ахаха у меня такое чувство, что я попал на ответы мэила.
- что это значит? Cyberhawk (3) То и значит - что тогда делать? h-sp (12) не использовать срез последних. не все же такие умные господа, как вы могли бы и помочь человеку. |
|||
20
grandmaster
15.11.17
✎
10:42
|
(18) спасибо, более-менее уже прояснилось
|
|||
21
azernot
15.11.17
✎
10:43
|
(19) Это всего лишь означает, что тебе надо переформулировать вопрос. Если ты не получаешь ответ, значит твой вопрос непонятен.
|
|||
22
grandmaster
15.11.17
✎
10:45
|
(21) что может быть не понятного в том, что мне надо получить последнюю запись регистра сведений. что тут может быть не понятного то?
|
|||
23
azernot
15.11.17
✎
10:47
|
(22) Если бы в (0) не было текста запроса, ты бы уже получил ответ. Но текст запроса, говорит о том, что не всё так просто.
Для чего тебе запись? Ты хочешь получить документ из неё? |
|||
24
grandmaster
15.11.17
✎
10:47
|
последняя созданная строка в регистре сведений
|
|||
25
grandmaster
15.11.17
✎
10:48
|
(23) идентификатор
|
|||
26
lodger
15.11.17
✎
10:48
|
вот здесь добавь &ВариантОбмена
ИЗ РегистрСведений.ДокументыЭД.СрезПоследних(&ТекущаяДата,&ВариантОбмена) КАК ДокументыЭДСрезПоследних "РеализацияТоваровУслуг.Ссылка КАК Ссылка" - поменять на ДокументыЭДСрезПоследних.Документ. в ГДЕ пиши ДокументыЭДСрезПоследних.Документ ССЫЛКА Документ.РеализацияТоваровУслуг соединение с таблицей "Документ.РеализацияТоваровУслуг" пока что убери. потом с ней разберешься. |
|||
27
azernot
15.11.17
✎
10:52
|
ВЫБРАТЬ ПЕРВЫЕ 1
ДокументыЭД.Документ КАК Документ , ДокументыЭД.ВариантОбмена КАК ВариантОбмена , ДокументыЭД.Файл КАК Файл , ДокументыЭД.Статус КАК Статус, ДокументыЭД.ИдентификаторЗапроса КАК ИдентификаторЗапроса ИЗ РегистрСведений.ДокументыЭД КАК ДокументыЭД ГДЕ ДокументыЭД.Период <= &НужнаяДата УПОРЯДОЧИТЬ ПО Период УБЫВ |
|||
28
lodger
15.11.17
✎
10:53
|
(27) получишь один ближайший документ перед указанной датой. это то что ТопикСтартеру и надо было?
|
|||
29
azernot
15.11.17
✎
10:56
|
(28) Исходя из (24) - да. Если ТС получит не то, что ожидает, он переформулирует задачу.
|
|||
30
Cyberhawk
15.11.17
✎
10:58
|
(22) Вроде тебе уже ответили в этой ветке, как это сделать
|
|||
31
grandmaster
15.11.17
✎
11:07
|
(26) Неверные параметры "РегистрСведений.ДокументыЭД.СрезПоследних, 1"
РегистрСведений.ДокументыЭД.СрезПоследних(&ТекущаяДата,<<?>>&ВариантОбмена ) КАК ДокументыЭДСрезПоследних |
|||
32
lodger
15.11.17
✎
11:07
|
(31) ну додумкал бы. ВариантОбмена = &ВариантОбмена
|
|||
33
grandmaster
15.11.17
✎
11:12
|
(32) ВЫБРАТЬ
ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, ДокументыЭДСрезПоследних.Период КАК Период, ДокументыЭДСрезПоследних.Документ КАК Документ, ДокументыЭДСрезПоследних.ВариантОбмена КАК ВариантОбмена ИЗ РегистрСведений.ДокументыЭД.СрезПоследних(&ТекущаяДата, ВариантОбмена=&ВариантОбмена И Документ=&Документ) КАК ДокументыЭДСрезПоследних ГДЕ ДокументыЭДСрезПоследних.ВариантОбмена = &ВариантОбмена |
|||
34
lodger
15.11.17
✎
11:15
|
(33) в этом случаем
"ГДЕ ДокументыЭДСрезПоследних.ВариантОбмена = &ВариантОбмена" - избыточное условие. оно уже выполнено тут "ВариантОбмена=&ВариантОбмена". по итогу, вот это то что ты хотел? |
|||
35
h-sp
15.11.17
✎
11:17
|
(34) всё-таки (27) он хотел. Наверное.
|
|||
36
grandmaster
15.11.17
✎
11:17
|
(34) ВЫБРАТЬ
ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, ДокументыЭДСрезПоследних.Период КАК Период, ДокументыЭДСрезПоследних.Документ КАК Документ, ДокументыЭДСрезПоследних.ВариантОбмена КАК ВариантОбмена ИЗ РегистрСведений.ДокументыЭД.СрезПоследних( &ТекущаяДата, ВариантОбмена = &ВариантОбмена И Документ = &Документ) КАК ДокументыЭДСрезПоследних ГДЕ ДокументыЭДСрезПоследних.ВариантОбмена = &ВЕТИС И ДокументыЭДСрезПоследних.Документ = &РеализацияТоваровУслуг возвращает 0 строк |
|||
37
h-sp
15.11.17
✎
11:19
|
(36) ну наверно разные задаешь параметры &Документ и &РеализацияТоваровУслуг. Задай одинаково.
|
|||
38
grandmaster
15.11.17
✎
11:28
|
(37) где я задаю?
у меня &РеализацияТоваровУслуг это нужное значение поля ДокументыЭДСрезПоследних.Документ |
|||
39
Мимохожий Однако
15.11.17
✎
11:29
|
Возьми консоль запросов. На ней и тренируй свои запросы
|
|||
40
lodger
15.11.17
✎
11:31
|
(36) пиши так:
ВЫБРАТЬ ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, ДокументыЭДСрезПоследних.Период КАК Период, ДокументыЭДСрезПоследних.Документ КАК Документ, ДокументыЭДСрезПоследних.ВариантОбмена КАК ВариантОбмена ИЗ РегистрСведений.ДокументыЭД.СрезПоследних( &ТекущаяДата, ВариантОбмена = &ВЕТИС И Документ = &РеализацияТоваровУслуг) КАК ДокументыЭДСрезПоследних |
|||
41
azernot
15.11.17
✎
11:31
|
Мне просто интересно, как ТС понимает параметеры:
&ВариантОбмена &Документ И почему заводит отдельные параметры &ВЕТИС &РеализацияТоваровУслуг |
|||
42
grandmaster
15.11.17
✎
11:34
|
(41)
&ВЕТИС &РеализацияТоваровУслуг Это значения параметров по которым я делаю срез |
|||
43
grandmaster
15.11.17
✎
11:34
|
(39) так в ней и работаю
|
|||
44
h-sp
15.11.17
✎
11:36
|
(42) ну и пиши как в (40) это как раз срез.
а то что ты пишешь ГДЕ ДокументыЭДСрезПоследних.ВариантОбмена = &ВЕТИС И ДокументыЭДСрезПоследних.Документ = &РеализацияТоваровУслуг это уже не срез. Это бред какой-то. Выкинь это ГДЕ. |
|||
45
azernot
15.11.17
✎
11:36
|
(42) А что такое
&ВариантОбмена &Документ ? И почему это не &ВЕТИС &РеализацияТоваровУслуг ? И таки не совсем последняя запись тебе нужна, а последняя по конкретному документу и варианту обмена? ;) |
|||
46
grandmaster
15.11.17
✎
11:40
|
(45) ну у меня и так и так вы водит строки
|
|||
47
Мимохожий Однако
15.11.17
✎
11:41
|
(7) Регистр подчинён регистратору?
|
|||
48
grandmaster
15.11.17
✎
13:15
|
(45)
&ВариантОбмена И &Документ - это параметры А ВЕТИС и РеализацияТоваровУслуг - это значения этих параметров по которым идёт отбор (44) Почему же бред. Если я пишу условие параметров, по которым надо найти строку |
|||
49
Мимохожий Однако
15.11.17
✎
13:19
|
(48) Сначала получи таблицу без отбора, потом добавляй, если не удаётся разобраться.
Повторяю вопрос: Регистр подчинён регистратору? |
|||
50
h-sp
15.11.17
✎
13:20
|
(48) в этом ваша ошибка. Потому что &ВариантОбмена И &Документ тоже значения.
|
|||
51
Сти
15.11.17
✎
13:21
|
(48) бред - потому что в условии самого среза (которое внутри скобок) оно уже отобрано по этим условиям
|
|||
52
azernot
15.11.17
✎
13:22
|
(48) Вы попробовали запрос из (40)? Он выдал то, что вы хотели?
|
|||
53
grandmaster
15.11.17
✎
13:26
|
(49) не подченён регистру
(52) нет не выдал, ничего не выдал ИЗ РегистрСведений.ДокументыЭД.СрезПоследних( &ТекущаяДата, ВариантОбмена = &ВЕТИС И Документ = &РеализацияТоваровУслуг) КАК ДокументыЭДСрезПоследних Тут значения параметров записаны в виде параметра т.к. стоит амперсант. Вроде так нельзя писать |
|||
54
azernot
15.11.17
✎
13:28
|
(53) Давайте весь код, как вы инициируете запрос, какие параметры устанавливаете, как запрос выполняете. Похоже это единственный способ вам помочь
Запрос в (40) безупречен, он не может не сработать, если у вас есть в регистре записи по варианту обмена &ВЕТИС и по документу &РеализацияТоваровУслуг |
|||
55
h-sp
15.11.17
✎
13:31
|
(54) получается, что не получится. ему надо
Документ ССЫЛКА РеализацияТоваровУслуг |
|||
56
grandmaster
15.11.17
✎
13:32
|
(54) Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ | ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, | ДокументыЭДСрезПоследних.Период КАК Период, | ДокументыЭДСрезПоследних.Документ КАК Документ, | ДокументыЭДСрезПоследних.ВариантОбмена КАК ВариантОбмена |ИЗ | РегистрСведений.ДокументыЭД.СрезПоследних( | &ТекущаяДата, | ВариантОбмена = &ВариантОбмена | И Документ = &Документ) | КАК ДокументыЭДСрезПоследних"; Запрос.УстановитьПараметр("ВариантОбмена", "ВЕТИС"); Запрос.УстановитьПараметр("Документ", "РеализацияТоваровУслуг"); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата()); Результат = Запрос.Выполнить().Выгрузить(); |
|||
57
azernot
15.11.17
✎
13:33
|
(56) Этот запрос не сработает точно.
Возвращаемся к началу. Что вам нужно? Пробовали ли вы запрос из (27)? Чем он вас не устроил? |
|||
58
grandmaster
15.11.17
✎
13:36
|
(57) возвращать последнее значение с отбором "ВариантОбмена", "ВЕТИС");
"Документ", "РеализацияТоваровУслуг"); |
|||
59
azernot
15.11.17
✎
13:37
|
(56) Далее.
Какой тип имеет измерение "ВариантОбмена" регистра "ДокументыЭД"? Что будет если вместо "И Документ = &Документ" написать "И Документ ССЫЛКА Документ.РеализацияТоваровУслуг" |
|||
60
azernot
15.11.17
✎
13:37
|
(58) Таких записей в регистре нет (если конечно, измерение "Документ" не имеет тип "Строка")
|
|||
61
azernot
15.11.17
✎
13:39
|
(58) Давайте зайдём с другого конца. Какую задачу вы решаете? Для чего вам эти записи, что вы с ними будете делать? И вообще, это какая-то типовая конфигурация или полная самописка?
|
|||
62
grandmaster
15.11.17
✎
13:40
|
(59) Тип измерения "ВариантОбмена"
ПеречислениеСсылка.ВариантыУниверсальногоОбмена |
|||
63
azernot
15.11.17
✎
13:41
|
(62) Так
попробуйте |
|||
64
grandmaster
15.11.17
✎
13:41
|
(61) по последней данной записи мне нужно вытягивать из поля идентификатор - значение
|
|||
65
azernot
15.11.17
✎
13:41
|
Запрос.УстановитьПараметр("ВариантОбмена", Перечисление.ВариантыУниверсальногоОбмена.ВЕТИС);
|
|||
66
azernot
15.11.17
✎
13:42
|
Короче, вот так попробуйте, вообще без параметров, кроме даты
ВЫБРАТЬ ДокументыЭДСрезПоследних.ИдентификаторЗапроса КАК ИдентификаторЗапроса, ДокументыЭДСрезПоследних.Период КАК Период, ДокументыЭДСрезПоследних.Документ КАК Документ, ДокументыЭДСрезПоследних.ВариантОбмена КАК ВариантОбмена ИЗ РегистрСведений.ДокументыЭД.СрезПоследних( &ТекущаяДата, ВариантОбмена = Значение(Перечисление.ВариантыУниверсальногоОбмена.ВЕТИС) И Документ ССЫЛКА Документ.РеализацияТоваровУслуг) КАК ДокументыЭДСрезПоследних |
|||
67
grandmaster
15.11.17
✎
13:47
|
(66) слава яйцам
прошу за грубость)) возвращает теперь все значения с ВЕТИС и Документом реализация товаров и услуг Осталось теперь получать только последнее по текущей дате |
|||
68
azernot
15.11.17
✎
13:48
|
(67) Пи...ц (прошу за грубость).
Чем не устроил этот запрос? ВЫБРАТЬ ПЕРВЫЕ 1 ДокументыЭД.Документ КАК Документ , ДокументыЭД.ВариантОбмена КАК ВариантОбмена , ДокументыЭД.Файл КАК Файл , ДокументыЭД.Статус КАК Статус, ДокументыЭД.ИдентификаторЗапроса КАК ИдентификаторЗапроса ИЗ РегистрСведений.ДокументыЭД КАК ДокументыЭД ГДЕ ДокументыЭД.Период <= &НужнаяДата УПОРЯДОЧИТЬ ПО Период УБЫВ |
|||
69
azernot
15.11.17
✎
13:51
|
Если проблема в том, что даёт не по ВЕТИС, и не по РеализацииТоваровУслуг, то надо просто дописать условия:
ВЫБРАТЬ ПЕРВЫЕ 1 ДокументыЭД.Документ КАК Документ , ДокументыЭД.ВариантОбмена КАК ВариантОбмена , ДокументыЭД.Файл КАК Файл , ДокументыЭД.Статус КАК Статус, ДокументыЭД.ИдентификаторЗапроса КАК ИдентификаторЗапроса ИЗ РегистрСведений.ДокументыЭД КАК ДокументыЭД ГДЕ ДокументыЭД.Период <= &НужнаяДата И ДокументыЭД.ВариантОбмена = Значение(Перечисление.ВариантыУниверсальногоОбмена.ВЕТИС) И ДокументыЭД.Документ ССЫЛКА Документ.РеализацияТоваровУслуг УПОРЯДОЧИТЬ ПО Период УБЫВ |
|||
70
grandmaster
15.11.17
✎
13:51
|
(68) Ну потому что здесь берёт последнюю запись из регистра. Без отбора.
Тоесть последней может быть с другим документом и статусом и запрос её выберет |
|||
71
grandmaster
15.11.17
✎
13:52
|
(69) щас попробую
|
|||
72
grandmaster
15.11.17
✎
13:52
|
(69) вместо &НужнаяДата я так понял писать ТекущаяДата()?
|
|||
73
azernot
15.11.17
✎
13:53
|
Запрос.УстановитьПараметр("НужнаяДата", ТекущаяДата());
|
|||
74
grandmaster
15.11.17
✎
13:54
|
(73) ну да я это и имел ввиду
|
|||
75
azernot
15.11.17
✎
13:58
|
(74) А вы можете предположить, почему я написал именно "НужнаяДата", а не "ТекущаяДата"?
|
|||
76
grandmaster
15.11.17
✎
14:03
|
(73) а не подскажете как теперь вытянуть из запроса поле (идентификатор запроса). управляемая форма. не находит идентификаторзапроса
Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ДокументыЭД.Документ КАК Документ, | ДокументыЭД.ВариантОбмена КАК ВариантОбмена, | ДокументыЭД.Файл КАК Файл, | ДокументыЭД.Статус КАК Статус, | ДокументыЭД.ИдентификаторЗапроса КАК ИдентификаторЗапроса |ИЗ | РегистрСведений.ДокументыЭД КАК ДокументыЭД |ГДЕ | ДокументыЭД.Период <= &НужнаяДата | И ДокументыЭД.ВариантОбмена = ЗНАЧЕНИЕ(Перечисление.ВариантыУниверсальногоОбмена.ВЕТИС) | И ДокументыЭД.Документ ССЫЛКА Документ.РеализацияТоваровУслуг | |УПОРЯДОЧИТЬ ПО | ДокументыЭД.Период УБЫВ"; Запрос.УстановитьПараметр("НужнаяДата", ТекущаяДата()); Результат = Запрос.Выполнить().Выгрузить(); receiveRequestXDTO.applicationId = Результат.ИдентификаторЗапроса; |
|||
77
grandmaster
15.11.17
✎
14:04
|
(75) честно не знаю даже
|
|||
78
h-sp
15.11.17
✎
14:04
|
receiveRequestXDTO.applicationId = Результат[0].ИдентификаторЗапроса;
|
|||
79
grandmaster
15.11.17
✎
14:09
|
azernot и h-sp - огромное вам спасибо добрые люди! +1 вам к карме. Всё вышло что хотел. Впредь буду более аккуратен, в первую очередь в постановки вопрос
|
|||
80
azernot
15.11.17
✎
14:09
|
Результат = Запрос.Выполнить().Выгрузить();
Выборка = Результат.Выбрать(); Если Выборка.Следующий() ТОгда receiveRequestXDTO.applicationId = Результат.ИдентификаторЗапроса; Иначе receiveRequestXDTO.applicationId = "Нет записей!"; КОнецЕсли; |
|||
81
azernot
15.11.17
✎
14:10
|
Т.е. так:
Результат = Запрос.Выполнить().Выгрузить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() ТОгда receiveRequestXDTO.applicationId = Выборка.ИдентификаторЗапроса; Иначе receiveRequestXDTO.applicationId = "Нет записей!"; КОнецЕсли; |
|||
82
azernot
15.11.17
✎
14:11
|
А-а, там Выгрузить() уже есть.. тогда (78). ТОлько может быть там нет ни одной строки, и будет ошибка.
|
|||
83
grandmaster
15.11.17
✎
14:15
|
(82) не будет, оно сначала выгружает ответ сервера в регистр, затем по идентификатору выполняется запрос на сервер. Вообще м ошибки в любом случае не будет!
Ещё раз спасибо |
|||
84
azernot
15.11.17
✎
14:16
|
(77) А всё просто. Потому, что там не обязательно именно Текущая дата. Запрос сработает с любой датой.
Захотите вы получить последнюю запись по Вентису, по реализации за прошлый год - просто передадите туда конец прошлого года. |
|||
85
lodger
15.11.17
✎
15:15
|
почитал ветку с начала - слов нет.
ыыы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |