Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Странная проблема с запросом к регистру сведений (http://forums.kuban.ru/f1040/strannaya_problema_s_zaprosom_k_registru_svedenij-6525336.html)

oops! 19.02.2015 01:05

Странная проблема с запросом к регистру сведений
 
Сломал все мозги - то ли глаза замылились, то ли в отпуск пора...
Вобщем имеется простой независимый периодический регистр сведений с периодичностью "день":
Одно измерение - "Номер", тип фикс. строка, 11
и два ресурса:
"ДатаВыработки" - тип Дата,
"Технолог" - тип СправочникСсылка.ФизическиеЛица.

Проблема в том, что в запрос по периоду, по срезу последних, всегда попадает только самая первая запись регистра сведений, а не срез на заданный момент.
Код запроса в следующем посте.

oops! 19.02.2015 01:08

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

НомерКУ = Выборка.Номер;
ДатаВыработки = Выборка.ДатаВыработки;
УправлениеНебольшойФирмойСервер.ФамилияИнициалыПоНаименованию(ПредставлениеТехнолог, Строка(Выборка.Технолог));
ПредставлениеТехнолог = "/" + ПредставлениеТехнолог + "/";

Иначе

НомерКУ = "_________";
ДатаВыработки = Шапка.ДатаДокумента;
ПредставлениеТехнолог = "/ /";

КонецЕсли;
[/code]

oops! 19.02.2015 01:45

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

oops! 19.02.2015 01:59

хмм..., перенёс единственное измерение в ресурсы (т.е. измерений не осталось), и всё заработало. Чего-то моя нипанимаит...

roma n 19.02.2015 09:05

Чего-то ты не понимаешь... Срез последних как-раз и есть выборка [b]всех ключей[/b] (комбинаций измерений), с актуальными для указунного моента значениями

Uho 19.02.2015 10:12

+4 поэтому и записей с одинаковыми ключевыми полями быть не может

oops! 19.02.2015 19:24

2 (4,5)
Смысл всего, что выше, и вывод из этого - когда есть измерения, то выборка из регистра возможна только по этим измерениям, и, если нужна просто строка значений регистра на конкретный момент времени, то её, без указания измерений, не получить. А нужно было именно это. Если измерений нет, а ресурсы имеются, то выборка возможна только по периоду, т.е. именно период в данном варианте и является ключевым полем, и возможна единственная запись с таким значением периода. Я об этом не знал, т.к. ранее подобной задачи никогда не стояло. При наличии измерений в регистре выполнить отбор по их комбинации - это без проблем ;)

Uho 20.02.2015 14:19

6-oops! > немного не так, просто если ты не указываешь отбор по имеющимся измерениям, то в выборку попадают срезы ВСЕХ ПОСЛЕДНИХ КОМБИНАЦИЙ на указанную тобой дату

Uho 20.02.2015 14:22

+7 а если тебе нужна запись с [b]определенным значением ПЕРИОДА[/b], то зачем же тебе СРЕЗ? делай запрос к основной таблице, где Период = НужнаяДата

oops! 20.02.2015 16:30

(7) т.е., если у меня в измерении будет каждый день новое значение, то в выборку попадет вся таблица?
(8) нужна не запись с определенным значением ПЕРИОДА, а действующее значение регистра на заданную дату - к примеру, запрос я делаю на 5 февраля, а последнее изменение до 5 февраля было сделано 23 января, а следующее - 10 февраля :) Поэтому и срез ;)

Uho 20.02.2015 16:36

вот это я понял, как запись с определенным значением периода:
[quote=oops!;38106319]и возможна единственная запись с таким значением периода.[/quote]

[quote=oops!;38115071]т.е., если у меня в измерении будет каждый день новое значение, то в выборку попадет вся таблица?[/quote] если не поставишь отбор по измерениям, то да, вся таблица до указанной тобой даты (при условии, что измерения не повторяются). Теоретически ты можешь отсортировать по периоду (в обратном порядке) и взять нужную тебе запись через "Первые 1"

Uho 20.02.2015 16:39

+10 тебе вернется таблица содержащие все срезы последних по всем измерениям, т.е. если какое-то измерение (комбинация измерений) в регистре повторяется два раза, то в результате запроса запись по этому измерению (комбинации измерений) будет только одна (и так же по всем остальным измерениям (комбинациям))

oops! 20.02.2015 21:22

(10,11) Ну да, это всё понятно. Получается, что в моём случае наиболее рациональное решение по проектированию РС - это регистр без измерений. Тогда всё работает так, как надо. Смысл задачи - РС в данном случае представляет собой журнал выданных документов (сами эти документы не создаются в этой ИБ), каждый из которых действителен до того момента времени, пока не будет выдан следующий документ. И мне, запросом на заданную дату, нужно получать значение действующего на эту дату документа.

Uho 25.02.2015 10:25

12-oops! > тогда зачем периодический РС? достаточно непериодического, получай последнюю запись по дате и все


Текущее время: 19:58. Часовой пояс GMT +3.