Имя: Пароль:
1C
1С v8
Собрать в результате запроса заполненные поля РС
0 Dirk Diggler
 
28.06.24
12:23
Есть периодический РС с кучкой полей. Заполнены они в разнобой. Ну например, поля A,B,C  и 4 записи

A | B | C |
-----------
0 | 0 | А |
1 | 0 |   |
0 | 0 | B |
2 | 0 |   |

Нужно собрать срез последних с последними заполненными значениями в полях.

Если я просто соберу срез последних, то получу
[2, 0, ""]

Если в условиях отбора таблицы написать A<>0, B<>0, C<>"", то я получу пустой результат запроса, так как B всегда равно нулю.

А надо получить запись с результатом 2, 0, B

Какие варинаты, кроме получения каждого поля из своей отдельной таблицы среза последних?
1 lEvGl
 
28.06.24
12:31
свой срез последних
макисмум период в вт где <> 0 <> 0 <> 0, связь с первичной таблицей
а, что, где
2 Dmitrii
 
28.06.24
12:29
(0) >> Нужно собрать срез последних с последними заполненными значениями в полях.
>> А надо получить запись с результатом 2, 0, B

Вы определитесь с условиями. Что конкретно Вам надо.
3 Dirk Diggler
 
28.06.24
12:33
(2) ну не знаю, как правильно сформулировать. нужна 1 строка с данными, содержащая последние заполненные значения, или дефолтное значение для типа, если там везде пусто.
4 Dmitrii
 
28.06.24
12:33
Если Вам нужна не конкретная запись, а значения из разных записей, то сделайте объединение или соединение трёх срезов. Первый с условием A<>0, второй B<>0, третий с условием C<>"".
5 lEvGl
 
28.06.24
12:36
(4) он так и говорит "не хочу это"
эти поля - измерения?
6 Лирик
 
28.06.24
16:26
Регистр криво спроектирован, раз такая задача.
Измерение
   Объект
Ресурсы
   А
   Б
   С

а надо:

Измерения
   Объект
   Ресурс
Ресурсы
    ЗначениеРесурса
7 mikecool
 
28.06.24
16:15
(3) формируешь ВТ, как у тебя в примере(надеюсь сможешь), добавляешь к ней период для эмуляции регистра
и пробуешь на этом примере - как заработает, пробуешь на регистре
8 mikecool
 
28.06.24
16:16
(6) чем это поможет?
9 mikecool
 
28.06.24
16:16
+7 и пробовать вариант (1)
10 Ненавижу 1С
 
28.06.24
16:17
(0) A,B,C - это ресурсы или измерения?
11 Одинист
 
28.06.24
18:47
(0) Количество колонок конечное?
12 Одинист
 
28.06.24
18:57
Как то так, но можно наверное изящнее.


ВЫБРАТЬ
    взДанные.Измерения КАК Измерения,
    взДанные.ИмяКолонки КАК ИмяКолонки,
    взДанные.Период КАК Период,
    взДанные.Значение КАК Значение
ПОМЕСТИТЬ втДанные
ИЗ
    (ВЫБРАТЬ
        ФИОФизическихЛиц.ФизическоеЛицо КАК Измерения,
        "А" КАК ИмяКолонки,
        ФИОФизическихЛиц.Период КАК Период,
        ФИОФизическихЛиц.Фамилия КАК Значение
    ИЗ
        РегистрСведений.ФИОФизическихЛиц КАК ФИОФизическихЛиц
    ГДЕ
        ФИОФизическихЛиц.Фамилия <> ""
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ФИОФизическихЛиц.ФизическоеЛицо,
        "Б",
        ФИОФизическихЛиц.Период,
        ФИОФизическихЛиц.Имя
    ИЗ
        РегистрСведений.ФИОФизическихЛиц КАК ФИОФизическихЛиц
    ГДЕ
        ФИОФизическихЛиц.Имя <> ""
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ФИОФизическихЛиц.ФизическоеЛицо,
        "В",
        ФИОФизическихЛиц.Период,
        ФИОФизическихЛиц.Отчество
    ИЗ
        РегистрСведений.ФИОФизическихЛиц КАК ФИОФизическихЛиц
    ГДЕ
        ФИОФизическихЛиц.Отчество <> "") КАК взДанные

ИНДЕКСИРОВАТЬ ПО
    Измерения,
    ИмяКолонки,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    взПоследниеЗначения.Измерения КАК Измерения,
    взПоследниеЗначения.ИмяКолонки КАК ИмяКолонки,
    взПоследниеЗначения.Период КАК Период,
    взПоследниеЗначения.Значение КАК Значение
ПОМЕСТИТЬ втПоследниеЗначения
ИЗ
    (ВЫБРАТЬ
        втДанные.Измерения КАК Измерения,
        втДанные.ИмяКолонки КАК ИмяКолонки,
        втДанные.Период КАК Период,
        МАКСИМУМ(втДанные.Значение) КАК Значение
    ИЗ
        (ВЫБРАТЬ
            втДанные.Измерения КАК Измерения,
            втДанные.ИмяКолонки КАК ИмяКолонки,
            МАКСИМУМ(втДанные.Период) КАК МаксПериод
        ИЗ
            втДанные КАК втДанные
        
        СГРУППИРОВАТЬ ПО
            втДанные.Измерения,
            втДанные.ИмяКолонки) КАК ВложенныйЗапрос
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанные КАК втДанные
            ПО ВложенныйЗапрос.Измерения = втДанные.Измерения
                И ВложенныйЗапрос.ИмяКолонки = втДанные.ИмяКолонки
                И ВложенныйЗапрос.МаксПериод = втДанные.Период
    
    СГРУППИРОВАТЬ ПО
        втДанные.Измерения,
        втДанные.ИмяКолонки,
        втДанные.Период) КАК взПоследниеЗначения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    взРезультат.Измерения КАК Измерения,
    МАКСИМУМ(взРезультат.Период) КАК Период,
    МАКСИМУМ(взРезультат.КолонкаА) КАК КолонкаА,
    МАКСИМУМ(взРезультат.КолонкаБ) КАК КолонкаБ,
    МАКСИМУМ(взРезультат.КолонкаВ) КАК КолонкаВ
ИЗ
    (ВЫБРАТЬ
        втПоследниеЗначения.Измерения КАК Измерения,
        втПоследниеЗначения.Период КАК Период,
        втПоследниеЗначения.Значение КАК КолонкаА,
        "" КАК КолонкаБ,
        "" КАК КолонкаВ
    ИЗ
        втПоследниеЗначения КАК втПоследниеЗначения
    ГДЕ
        втПоследниеЗначения.ИмяКолонки = "А"
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        втПоследниеЗначения.Измерения,
        втПоследниеЗначения.Период,
        "",
        втПоследниеЗначения.Значение,
        ""
    ИЗ
        втПоследниеЗначения КАК втПоследниеЗначения
    ГДЕ
        втПоследниеЗначения.ИмяКолонки = "Б"
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        втПоследниеЗначения.Измерения,
        втПоследниеЗначения.Период,
        "",
        "",
        втПоследниеЗначения.Значение
    ИЗ
        втПоследниеЗначения КАК втПоследниеЗначения
    ГДЕ
        втПоследниеЗначения.ИмяКолонки = "В") КАК взРезультат

СГРУППИРОВАТЬ ПО
    взРезультат.Измерения
13 Лирик
 
30.06.24
10:07
(8) Это поможет решить задачу из (0) одним запросом к срезу последних регистра сведений.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс