вторник, 13 октября 2015 г.

1с запрос получить строкой список документов из табличной части документа

Пример запроса 1с 8.2 по выводу в строку списка документов "Сделка" из расшифровки платежа "Заявка на расходование денежных средств".

Пример для 1с УПП 1.3:
Ограничения: 1)Выводятся только первые 10 документов из расшифровки платежа 2)Приемлемо, только для док-тов, чьи даты в интервале с 2000 года...



ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка КАК Ссылка,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка) КАК Сделка
ПОМЕСТИТЬ Вт
ИЗ
    Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
ГДЕ
    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка <> НЕОПРЕДЕЛЕНО

СГРУППИРОВАТЬ ПО
    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка) > 1

ИНДЕКСИРОВАТЬ ПО
    Ссылка,
    Сделка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Вт.Ссылка,
    ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка,
    "Заказ № " + ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка.Номер + " от " + ПОДСТРОКА("01020304050607080910111213141516171819202122232425262728293031", (ДЕНЬ(ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка.Дата) - 1) * 2 + 1, 2) + "." + ПОДСТРОКА("01020304050607080910111213141516171819202122232425262728293031", (МЕСЯЦ(ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка.Дата) - 1) * 2 + 1, 2) + ".20" + ПОДСТРОКА("01020304050607080910111213141516171819202122232425262728293031", (ГОД(ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка.Дата) - 2000 - 1) * 2 + 1, 2) КАК НомерДатаСтрокой
ПОМЕСТИТЬ ВтНомерДатаСтрокойЗаказ
ИЗ
    Вт КАК Вт
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
        ПО Вт.Ссылка = ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Вт.Ссылка,
    Вт.Сделка КАК КолВоСделок,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 1
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле1,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 2
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле2,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 3
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле3,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 4
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле4,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 5
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле5,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 6
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле6,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 7
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле7,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 8
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле8,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 9
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле9,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.НомерСтроки = 10
            ТОГДА ВтНомерДатаСтрокойЗаказ.НомерДатаСтрокой
        ИНАЧЕ ""
    КОНЕЦ КАК Поле10
ПОМЕСТИТЬ Вт1
ИЗ
    Вт КАК Вт
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
            ЛЕВОЕ СОЕДИНЕНИЕ ВтНомерДатаСтрокойЗаказ КАК ВтНомерДатаСтрокойЗаказ
            ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Сделка = ВтНомерДатаСтрокойЗаказ.Сделка
        ПО Вт.Ссылка = ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Вт1.Ссылка,
    МАКСИМУМ(Вт1.Поле1) КАК Поле1,
    МАКСИМУМ(Вт1.Поле2) КАК Поле2,
    МАКСИМУМ(Вт1.Поле3) КАК Поле3,
    МАКСИМУМ(Вт1.Поле4) КАК Поле4,
    МАКСИМУМ(Вт1.Поле5) КАК Поле5,
    МАКСИМУМ(Вт1.Поле6) КАК Поле6,
    МАКСИМУМ(Вт1.Поле7) КАК Поле7,
    МАКСИМУМ(Вт1.Поле8) КАК Поле8,
    МАКСИМУМ(Вт1.Поле9) КАК Поле9,
    МАКСИМУМ(Вт1.Поле10) КАК Поле10
ПОМЕСТИТЬ Вт2
ИЗ
    Вт1 КАК Вт1

СГРУППИРОВАТЬ ПО
    Вт1.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вт2.Ссылка,
    Вт2.Поле1 + "," + Вт2.Поле2 + ВЫБОР
        КОГДА Вт2.Поле3 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле3
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле4 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле4
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле5 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле5
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле6 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле6
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле7 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле7
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле8 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле8
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле9 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле9
    КОНЕЦ + ВЫБОР
        КОГДА Вт2.Поле10 = ""
            ТОГДА ""
        ИНАЧЕ "," + Вт2.Поле10
    КОНЕЦ КАК Сделки
ИЗ
    Вт2 КАК Вт2

УПОРЯДОЧИТЬ ПО
    Вт2.Ссылка.Дата