Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Параметры виртуальной таблицы

Параметры виртуальной таблицы
Я
   NikolayNiko
 
03.11.17 - 20:28
Здравствуйте! Пожалуйста подскажите, как в параметрах виртуальной таблицы периодического регистра сведений установить отбор так, чтобы получать только последнюю запись по одному конкретному измерению. Всего измерений 4. Один ресурс. Ресурс не заполнен.
 
 
   Волшебник
 
Модератор
1 - 03.11.17 - 20:32
Вы как пробовали?
   NikolayNiko
 
2 - 03.11.17 - 20:37
(1) Не знаю даже как попробовать
   Волшебник
 
Модератор
3 - 03.11.17 - 20:38
(2) Не стесняйтесь.
   Египтянин
 
4 - 03.11.17 - 20:40
(0) надо попробовать с прочтения книжки http://www.ozon.ru/context/detail/id/138526046/?partner=epoint&partneragentid=955860_42oyurp7mw29vikgougt2b6khgqfyx0g&utm_source=epoint&utm_medium=partner&utm_campaign=955860 ну, или вон хотя бы Митичкина почитай.
   mistеr
 
5 - 03.11.17 - 20:48
(0) Виртуальная таблица СрезПоследних возвращает записи сразу по всем измерениям. Если нужно только по одному, то кроме задания параметров ВТ, нужно дополнительно упорядочить по периоду (по убыванию) и взять ПЕРВЫЕ 1.
   Vladal
 
6 - 03.11.17 - 21:34
(5) так уже брать и не виртуальную а обычную.

(0) озвучь задачу полностью. Может там срез последних на каждую дату, или статус договора на момент времени и т.д. И т.п. Не стесняйся, здесь как у доктора — чем четче анамнеза, тем точней диагноз.
   Волшебник
 
Модератор
7 - 03.11.17 - 21:54
(6) Дык я сразу спросил в (1) и (3)
Чувствую себя доктором
   Cyberhawk
 
8 - 03.11.17 - 23:05
"установить отбор так, чтобы получать только последнюю запись по одному конкретному измерению" // Покажи несколько последних записей таблицы и что должно быть на выходе
   Sasha_H
 
9 - 03.11.17 - 23:47
(0) зачем упорядычивать по периода когда ты используешь СрезПоследних?
   NikolayNiko
 
10 - 06.11.17 - 20:12
Если конкретнее, то в периодическом регистре сведений есть измерения: Организация, контрагент, договор; и одно измерение: Аннулировано. Измерение в регистре вообще не заполняется. Мне нужно получить последнюю запись по договору. Вот ломаю голову по незнанию, как же получается эта последняя запись, когда делаешь запрос с помощью конструктора. Да знаю, что надо читать и учиться или вызывать программиста, но надо сделать самому и сегодня же.
 
 Рекламное место пустует
   NikolayNiko
 
11 - 06.11.17 - 20:13
И один Ресурс*
   МимохожийОднако
 
12 - 06.11.17 - 20:41
(11) Табличку с примерными данными покажи
   NikolayNiko
 
13 - 06.11.17 - 20:48
(12) Период Регистратор НомерСтроки Организация Контрагент Договор Аннулирвоано
   МимохожийОднако
 
14 - 06.11.17 - 22:52
Теперь покажи запрос, которым пытался получить хоть что-то
   NikolayNiko
 
15 - 06.11.17 - 23:00
Ведь можно как-то просто в параметрах вирт таблицы указать измерение по которому должен идти поиск последнего. Именно не по всем измерениям, а по одному только. Как это описать, мне только это нужно. Нигде не могу найти
   МимохожийОднако
 
16 - 06.11.17 - 23:28
(15) Есть обработка "Консоль запросов". На ней потренируйся.
   h-sp
 
17 - 07.11.17 - 00:08
(15) можете не искать, нет такой возможности.
   jsmith82
 
18 - 07.11.17 - 00:42
Аннулировано надо делать измерением, а не ресурсом и указывать в отборе НЕ Аннулировано
   jsmith82
 
19 - 07.11.17 - 00:43
Ой, чё это я, не то погнал
   AlvlSpb
 
20 - 07.11.17 - 01:26
Автору надо получить последнюю запись по конкретному договору?

ВЫБРАТЬ ПЕРВЫЕ 1
// поля выбора

ИЗ
    РегистрСведений.НашРегистр.СрезПоследних(, Договор = &Договор) КАК НашРегистрСрезПоследних
УПОРЯДОЧИТЬ ПО
    НашРегистрСрезПоследних.Регистратор.Дата УБЫВ

Или У меня послепраздничный синдром и я не понял задачи?
   Antony8x
 
21 - 07.11.17 - 03:47
(20) совершенно верно пишите, автор в (15) написал
   Рэйв
 
22 - 07.11.17 - 04:44
(0)Для того чтобы по одному измерению срез последних дало его только одно и надо поставить в Выбрать. Сколько измерений будет выбрано - столько вариантов разреза и получишь.
   youalex
 
23 - 07.11.17 - 05:10
Срез последних всегда получает все возможные комбинации измерений, и состав полей выборки (секция ВЫБРАТЬ) тут не играет.
   NikolayNiko
 
24 - 07.11.17 - 07:15
(20) Нет, не по конкретному документу, а по всем. Например если есть две записи с одним договором, то взять последний. (23) То есть как сказал (17), не возможно?
   NikolayNiko
 
25 - 07.11.17 - 07:19
Как тогда? Группировать по договору и брать максимальное?
   МимохожийОднако
 
26 - 07.11.17 - 07:42
(25) Тебе нужен листочек бумажки,если нет экселя. Выпиши в него табличку с данными и подумай. Пока каша в голове - программу не составишь.
   Salimbek
 
27 - 07.11.17 - 08:44
(0) Надо что-то типа такого:

Выбрать Данные.* ИЗ
(Выбрать Макс(Период) КАК МПериод, Договор КАК МДоговор ИЗ РегистрСведений.ТвойРегистр ГДЕ Договор=&Договор) Как Выборка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
РегистрСведений.ТвойРегистр КАК Данные ПО МПериод=Данные.Период И МДоговор=Данные.Договор
   youalex
 
28 - 07.11.17 - 08:59
(24)
У тебя в регистре измерения Организация, контрагент, договор.
Условие "Договор = &Договор" в параметрах среза фильтрует по договору, это то что тебе и нужно.
Контрагент - это скорее всего справочник Контрагенты, который является владельцем спр. Договоры, т.е. Контрагент = Договор.Владелец.
Остается Организация - если у тебя в регистре по выбранному договору одна организация, то будет одна строка, если две - то две строки, т.е. будут выбираться все комбинации с учетом условия Договор = &Договор.

Более правильным будет указать в условиях все измерения, т.е.


ВЫБРАТЬ *//какие-то поля

ИЗ РегистрСведений.НашРегистр.СрезПоследних(, Договор = &Договор И Контрагент = &Контрагент И Организация = &Организация)
)
В параметры запроса пихаешь Договор (он у тебя уже есть), Контрагент (Договор.Владелец) и Организацию (нужно понять откуда ее взять, если она в регистре не заполнена, то просто Справочники.Организация.ПустаяСсылка())
   DrZombi
 
29 - 07.11.17 - 09:01
(10) Все и сразу, и желательно без знаний, феерично :)
   DrZombi
 
30 - 07.11.17 - 09:03
(24) Последний куда, вы нарисуйте, на бумаге, что бы "мы" поняли :)
   DrZombi
 
31 - 07.11.17 - 09:04
(24) Молодец, ты уже близок к решению, вскоре за СП сядешь и напишешь запрос ;)
   Salimbek
 
32 - 07.11.17 - 09:39
(27) А, да, в первой выборке надо группировку по Договор
   NikolayNiko
 
33 - 07.11.17 - 12:52
(27) и (28) По моему что-то не то. ГДЕ Договор=&Договор.
Если правильно понимаю будет браться только определенный договор, а мне как я уже писал нужны все. (30) Вот:


Структура регистра: Период|Регистратор|Номер|Организация|Контрагент|Договор|Условия|Аннулировано

Например:
01.01.16|Регистр1|Номер|Орг1|Контр1|Договор1|Усл1|Ложь
01.02.16|Регистр1|Номер|Орг1|Контр1|Договор1|Усл2|Ложь
01.02.16|Регистр1|Номер|Орг1|Контр1|Договор2|Усл3|Ложь
01.03.16|Регистр1|Номер|Орг1|Контр1|Договор2|Усл4|Ложь

Из этого хочу получить:
01.02.16|Регистр1|Номер|Орг1|Контр1|Договор1|Усл2|Ложь
01.03.16|Регистр1|Номер|Орг1|Контр1|Договор2|Усл4|Ложь
 
 
   NikolayNiko
 
34 - 07.11.17 - 13:28
Создаю вложенный запрос. Беру два поля, Договор и период. Группирую договора по МаксПериоду. Хорошо, но как в основном запросе обратиться к полю условие если я его не выбирал во вложенном запросе. А если я его выбираю во вложенном - тогда оно попадает в группировку и результат уже не тот. Что за ... ?! Где лыжи не едут?!
   Михаил Козлов
 
35 - 07.11.17 - 13:46
Если правильно понял:
- выгрузить во временную таблицу договор и МАКС(Период) из таблицы регистра;
- соединить таблицу регистра с временной таблицей по договору и периоду. Поле Условие получите из таблицы регистра, если соединение по договору и периоду дает единственную запись в таблице регистра.
   Сти
 
36 - 07.11.17 - 15:03
(35) Будет множить записи, если на один договор с тем же самым периодом будут записи для других организаций и контрагентом.

Вообще можно сделать с помощью скореллированного запроса:

[1C]ВЫБРАТЬ
    РегистрСрезПоследних.ДоговорКонтрагента
ИЗ
    СамыйОфигенныйРегистрКАК РегистрСрезПоследних
ГДЕ
    (РегистрСрезПоследних.Организация, РегистрСрезПоследних.Контрагент) В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                ВспомогательныйСрез.Организация,
                ВспомогательныйСрез.Контрагент
            ИЗ
                СамыйОфигенныйРегистрКАК ВспомогательныйСрез
            ГДЕ
                ВспомогательныйСрез.ДоговорКонтрагента = РегистрСрезПоследних.ДоговорКонтрагента
                И ВспомогательныйСрез.Период В
                    (ВЫБРАТЬ
                        МАКСИМУМ(ЕщеОдинСрез.Период)
                    ИЗ
                        СамыйОфигенныйРегистрКАК ЕщеОдинСрез
                    ГДЕ
                        ЕщеОдинСрез.Организация = ВспомогательныйСрез.Организация
                        И ЕщеОдинСрез.Контрагент = ВспомогательныйСрез.Контрагент
                        И ЕщеОдинСрез.ДоговорКонтрагента = ВспомогательныйСрез.ДоговорКонтрагента))[1C]

Множить записи не будет, тут проблема только одна - если по всем трем измерениям есть записи с одинаковым периодом, то выберет какую-то одну из этих трех, но какую - один SQL знает.
С двумя измерениями было бы проще, используя "упорядочить по Период Убыв" во вложенном, но, увы - условие на соответствие списка списку не дает сортировать.
   Сти
 
37 - 07.11.17 - 15:06
(36) Блин, пробелы съелись. И отредактировать нельзя...
ВЫБРАТЬ
    РегистрСрезПоследних.ДоговорКонтрагента
ИЗ
    СамыйОфигенныйРегистр КАК РегистрСрезПоследних
ГДЕ
    (РегистрСрезПоследних.Организация, РегистрСрезПоследних.Контрагент) В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                ВспомогательныйСрез.Организация,
                ВспомогательныйСрез.Контрагент
            ИЗ
                СамыйОфигенныйРегистр КАК ВспомогательныйСрез
            ГДЕ
                ВспомогательныйСрез.ДоговорКонтрагента = РегистрСрезПоследних.ДоговорКонтрагента
                И ВспомогательныйСрез.Период В
                    (ВЫБРАТЬ
                        МАКСИМУМ(ЕщеОдинСрез.Период)
                    ИЗ
                        СамыйОфигенныйРегистр КАК ЕщеОдинСрез
                    ГДЕ
                        ЕщеОдинСрез.Организация = ВспомогательныйСрез.Организация
                        И ЕщеОдинСрез.Контрагент = ВспомогательныйСрез.Контрагент
                        И ЕщеОдинСрез.ДоговорКонтрагента = ВспомогательныйСрез.ДоговорКонтрагента))

   Михаил Козлов
 
38 - 07.11.17 - 15:16
(36) Конфа не озвучена, но в типовых у договора 1 владелец (Контрагент) и 1 организация.
Срез последних, мне кажется, вообще ни при чем.
   Сти
 
39 - 07.11.17 - 15:28
(38) Да это понятно, но каких только чудес не встречалось в дописках-переделках. И 20 измерений в регистре накопления, а ведь это больше миллиона итогов. И периодический регистр сведений с одним из измерений в виде строки ТЧ документа (видимо, чтобы номенклатуру можно было повторить в доке, что было в нем абсолютно противопоказано). И...
   NikolayNiko
 
40 - 07.11.17 - 15:54
(35) Спасибо! Так и сделал. Все окей! (37) Тоже большое списибо. Конфа не типовая, но описанных сюрпризов теоретически быть не должно.
Да и вообще спасибо всем кто откликнулся!


Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует