Имя: Пароль:
1C
 
В дин.списке получить для документа последний БП
,
0 kIR
 
20.10.17
11:03
Доброго дня!

Друзья, казус: форма списка документов формируется динамическим списком. Появилась задача вместе с данными по документу выводить последний бизнес-процесс по этому документу и вариант его завершения.

То ли пятница, то ли я дурак, но никак не могу победить. Пытлся и левым соединением, и объединением - все не то. Либо не выводит БП, либо задваивает ссылки и ругается


Подскажите,как правильно реализовать?

Спасибо
1 DrShad
 
20.10.17
11:55
чуть попозже, если еще будет актуально
2 kIR
 
20.10.17
12:13
(1) буду благодарен
3 vicof
 
20.10.17
12:27
Используй агрегатные функции, Люк
4 DrShad
 
20.10.17
12:39
верно ли, что эта задача похожа на вывод штрих-кодов в список номенклатуры, когда кодов может быть несколько?
5 kIR
 
20.10.17
14:09
(4) разве что отчасти
6 FIXXXL
 
20.10.17
14:19
(0) во вложенном запросе отбери последний по дате БП и прицепи к основной таблице
для скорости работы дин.списка можешь завести РС Док-БП, в котором будешь держать актуальное состояние по связке
7 kIR
 
20.10.17
14:20
(6) Было так, но, ясен-красен, не работает

ВЫБРАТЬ
    ДокументЗаявкаНаПостановкуВПроизводство.Ссылка,
    ДокументЗаявкаНаПостановкуВПроизводство.ВерсияДанных,
    ДокументЗаявкаНаПостановкуВПроизводство.ПометкаУдаления,
    ДокументЗаявкаНаПостановкуВПроизводство.Номер,
    ДокументЗаявкаНаПостановкуВПроизводство.Дата,
    ДокументЗаявкаНаПостановкуВПроизводство.Проведен,
    ДокументЗаявкаНаПостановкуВПроизводство.ЗаводИзготовитель,
    ДокументЗаявкаНаПостановкуВПроизводство.Автор,
    ДокументЗаявкаНаПостановкуВПроизводство.Комментарий,
    ДокументЗаявкаНаПостановкуВПроизводство.МоментВремени,
    ВложенныйЗапрос.ВариантЗавершения,
    ВложенныйЗапрос.СсылкаБизнесПроцесс КАК БизнесПроцесс
ИЗ
    Документ.ЗаявкаНаПостановкуВПроизводство КАК ДокументЗаявкаНаПостановкуВПроизводство
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ первые 1
            CRM_БизнесПроцесс.Ссылка КАК СсылкаБизнесПроцесс,
            CRM_БизнесПроцесс.ВариантЗавершения КАК ВариантЗавершения,
            CRM_БизнесПроцесс.Предмет КАК Предмет,
                        Максимум(CRM_БизнесПроцесс.дата) как дата
        ИЗ
            БизнесПроцесс.CRM_БизнесПроцесс КАК CRM_БизнесПроцесс
        ГДЕ
            CRM_БизнесПроцесс.ПометкаУдаления = ЛОЖЬ
            И ТИПЗНАЧЕНИЯ(CRM_БизнесПроцесс.Предмет) = ТИП(Документ.ЗаявкаНаПостановкуВПроизводство)
            И CRM_БизнесПроцесс.Стартован = ИСТИНА
            И CRM_БизнесПроцесс.КартаМаршрута.ВидПроцесса = ЗНАЧЕНИЕ(Справочник.ВидыПроцессов.СогласованиеЗаявкиНаПроизводство)

                        СГРУППИРОВАТЬ ПО
                        CRM_БизнесПроцесс.Ссылка,
            CRM_БизнесПроцесс.ВариантЗавершения,
            CRM_БизнесПроцесс.Предмет) КАК ВложенныйЗапрос
        ПО ДокументЗаявкаНаПостановкуВПроизводство.Ссылка = ВложенныйЗапрос.Предмет
8 catena
 
20.10.17
14:25
Первые 1 - выбирает один для всей таблицы, а не для каждой строчки. Группировка максимум дата не имеет смысла одновременно со ссылкой - отберет максимальную дату для каждой ссылки, а не ссылку с максимальной датой.
9 FIXXXL
 
20.10.17
14:28
(7) группируешь по Док и МАКС(ДатаБП), вяжешь эту "вилку" на БП, получаешь Док и БП
всё это во вложенном
10 kIR
 
20.10.17
14:45
(9) в одном встроенном? не пойму как....пакетов то в динамическом нет
11 FIXXXL
 
20.10.17
14:46
(10) вложенный во вложенном, типа "срез последних на каждую дату"
НО - это будет тормозить
подумай за РС
12 kIR
 
20.10.17
14:49
(11) не настолько критично,чтобы отдельный РС еще пилить...
13 FIXXXL
 
20.10.17
14:51
(12) типа того

ВЫБРАТЬ
    ркЭтапПроекта.Ссылка,
    ВложенныйЗапрос.БП,
    ВложенныйЗапрос.Дата
ИЗ
    Документ.ркЭтапПроекта КАК ркЭтапПроекта
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            CRM_БизнесПроцесс.Этап КАК Этап,
            CRM_БизнесПроцесс.Ссылка КАК БП,
            CRM_БизнесПроцесс.Дата КАК Дата
        ИЗ
            (ВЫБРАТЬ
                CRM_БизнесПроцесс.Этап КАК Этап,
                МАКСИМУМ(CRM_БизнесПроцесс.Дата) КАК Дата
            ИЗ
                БизнесПроцесс.CRM_БизнесПроцесс КАК CRM_БизнесПроцесс
            
            СГРУППИРОВАТЬ ПО
                CRM_БизнесПроцесс.Этап) КАК ВложенныйЗапрос
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ БизнесПроцесс.CRM_БизнесПроцесс КАК CRM_БизнесПроцесс
                ПО ВложенныйЗапрос.Этап = CRM_БизнесПроцесс.Этап
                    И ВложенныйЗапрос.Дата = CRM_БизнесПроцесс.Дата) КАК ВложенныйЗапрос
        ПО ркЭтапПроекта.Ссылка = ВложенныйЗапрос.Этап
14 Мыш
 
20.10.17
14:56
В запрос динамического списка добавить строку: ЗНАЧЕНИЕ(БизнесПроцесс.МойПроцесс.ПустаяСсылка) КАК МойПроцесс

Добавить обработчик элемента формы "Список"
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Тратата.Ссылка КАК Ссылка, БизПроцессы.Ссылка КАК БизнесПроцесс <тут источники соединения группировки и прочая> ГДЕ Тратата.Ссылка В (&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", Строки.ПолучитьКлючи());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаДинСписка = Строки[Выборка.Ссылка];
СтрокаДинСписка.Данные["БизнесПроцесс"] = Выборка.БизнесПроцесс;
КонецЦикла;
КонецПроцедуры
15 FIXXXL
 
20.10.17
15:04
(14) можно и так, "вернуться к истокам" :)
16 Мыш
 
20.10.17
15:10
(15) Это рекомендации 1С. Описано в документации.
17 kIR
 
20.10.17
15:56
(13) Спасибо, вроде разобрался.
попробовал исправить под себя - работает, отправил на тест)