Вход | Регистрация


1С:Предприятие ::

Метки: 

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

Я
   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 человек.
Рекламное место пустует