Имя: Пароль:
1C
1С v8
Помогите с вложенным запросом
0 Dimalove
 
26.01.17
14:42
Конфигурация Бух 3.0.46.19
Есть динамический список формы списка документа СчетНаОплатуПоставщика. Нужно добавить новое поле НомерПП(это номер документа Платежного поручения) при этом в это поле нужно выводить номер последнего документа Платежного поручения. Но на основании Счета можно создать несколько "Платежного поручения" и нужно выводить именно последний.
Вот такой запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДокументСчетНаОплатуПоставщика.Ссылка,
    ДокументСчетНаОплатуПоставщика.ПометкаУдаления,
    ДокументСчетНаОплатуПоставщика.Номер,
    ДокументСчетНаОплатуПоставщика.Дата,
    ДокументСчетНаОплатуПоставщика.Проведен,
    ДокументСчетНаОплатуПоставщика.Организация,
    ДокументСчетНаОплатуПоставщика.Контрагент,
    ДокументСчетНаОплатуПоставщика.ДоговорКонтрагента,
    ВЫРАЗИТЬ(ДокументСчетНаОплатуПоставщика.Комментарий КАК СТРОКА(300)) КАК Поле1,
    ДокументСчетНаОплатуПоставщика.Ответственный,
    ДокументСчетНаОплатуПоставщика.ВалютаДокумента,
    ДокументСчетНаОплатуПоставщика.СуммаДокумента,
    ДокументСчетНаОплатуПоставщика.НомерВходящегоДокумента,
    ДокументСчетНаОплатуПоставщика.ДатаВходящегоДокумента,
    ВЫРАЗИТЬ(ЕСТЬNULL(СтатусыДокументов.Статус, &СтатусОплатыПоУмолчанию) КАК Перечисление.СтатусОплатыСчета) КАК Оплата,
    ЕСТЬNULL(СрокиОплатыДокументов.СрокОплаты, ДАТАВРЕМЯ(1, 1, 1)) КАК СрокОплаты,
    СостоянияЭД.СостояниеВерсииЭД,
    ВЫБОР
        КОГДА ДокументСчетНаОплатуПоставщика.ПометкаУдаления = ИСТИНА
            ТОГДА 2
        КОГДА ДокументСчетНаОплатуПоставщика.Проведен = ИСТИНА
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК СостояниеДокумента,
    ВЫБОР
        КОГДА ДокументыСОшибкамиПроверкиКонтрагентов.Документ ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК СодержитНекорректныхКонтрагентов,
    ВЫБОР
        КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы ЕСТЬ NULL
            ТОГДА 1
        КОГДА НаличиеПрисоединенныхФайлов.ЕстьФайлы
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК ЕстьФайлы,
    ВложенныйЗапрос.НомерПП
ИЗ
    Документ.СчетНаОплатуПоставщика КАК ДокументСчетНаОплатуПоставщика
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументСчетНаОплатуПоставщика.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыСОшибкамиПроверкиКонтрагентов КАК ДокументыСОшибкамиПроверкиКонтрагентов
        ПО ДокументСчетНаОплатуПоставщика.Ссылка = ДокументыСОшибкамиПроверкиКонтрагентов.Документ
            И (&ИспользованиеПроверкиВозможно)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов
        ПО (НаличиеПрисоединенныхФайлов.ОбъектСФайлами = ДокументСчетНаОплатуПоставщика.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
        ПО ДокументСчетНаОплатуПоставщика.Организация = СтатусыДокументов.Организация
            И ДокументСчетНаОплатуПоставщика.Ссылка = СтатусыДокументов.Документ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СрокиОплатыДокументов КАК СрокиОплатыДокументов
        ПО ДокументСчетНаОплатуПоставщика.Организация = СрокиОплатыДокументов.Организация
            И ДокументСчетНаОплатуПоставщика.Ссылка = СрокиОплатыДокументов.Документ,
    (ВЫБРАТЬ ПЕРВЫЕ 1
        ПлатежноеПоручение.ДокументОснование.Ссылка КАК ДокументОснованиеСсылка,
        ПлатежноеПоручение.Номер КАК НомерПП
    ИЗ
        Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
    
    УПОРЯДОЧИТЬ ПО
        ПлатежноеПоручение.Дата УБЫВ) КАК ВложенныйЗапрос

Получается что запрос работает, но во все записи он выводит номер одного и того же документа Платежного поручения. - Это происходит т.к. во вложенном запросе я показываю "ВЫБРАТЬ ПЕРВЫЕ 1" а не "Выбрать" Я это делаю. потому, что что если создано несколько документом платежных поручений то нужно брать один. Если я ставлю просто "Выбрать" то возникает ошибка: Что есть дублирующие записи.
Пример
ДокументСчетНаОплатуПоставщика1 создан 1 документ ПлатежноеПоручение.
ДокументСчетНаОплатуПоставщика2 созданно 2 документа ПлатежноеПоручение.
И при конструкции "выбрать" результирующая таблица получается:
ДокументСчетНаОплатуПоставщика1  НомерПП 0001
ДокументСчетНаОплатуПоставщика2 НомерПП 0002
ДокументСчетНаОплатуПоставщика2 НомерПП 0003
При этом я ставил галочку в запросе "Без дублей" а ошибка появляется.
Что я делаю не так?
1 polosov
 
26.01.17
14:44
(0) В новых платформах можно использовать временные таблицы.
Пользуй их.
2 Dimalove
 
26.01.17
14:48
Так как правильно выбрать 1 последний документ Платежного Поручения для каждого документа Счет На Оплату Поставщика.
"Выбрать 1" - Во вложенном запросе выводит всем документам Счет На Оплату Поставщика номер одного и того же Платежного поручения.
"Выбрать" - Возникает ошибка т.к. есть дублирующие записи. Т.к. на сновании счета можно создать несколько Платежных поручений.
3 polosov
 
26.01.17
14:50
(2) В ВТ выбери ПП с группировкой с МАКСИМУМ. И соединяй.
4 shamannk
 
26.01.17
14:50
Максимум(Дата) дальше сам догадаешся
5 Dimalove
 
26.01.17
15:16
Спасибо, буду дальше копать. Но пока не получается...
6 Dimalove
 
26.01.17
15:25
Кто желает подключиться ко мне и помочь? :)
7 aleks_default
 
26.01.17
15:30
Сколько платишь?
8 vicof
 
26.01.17
15:56
(6) Я даже за деньги боюсь подключаться к пользователю с таким ником)
9 Dimalove
 
26.01.17
17:40
Если что разобрался))
10 Dimalove
 
26.01.17
17:41
Вложенный запрос:

ВЫБРАТЬ
    МАКСИМУМ(ЕСТЬNULL(ПлатежноеПоручение.Номер, 0)) КАК НомерПП,
    ПлатежноеПоручение.ДокументОснование.Ссылка КАК ДокументОснованиеСсылка,
    МАКСИМУМ(ПлатежноеПоручение.Дата) КАК Дата
ИЗ
    Документ.ПлатежноеПоручение КАК ПлатежноеПоручение

СГРУППИРОВАТЬ ПО
    ПлатежноеПоручение.ДокументОснование.Ссылка
Программист всегда исправляет последнюю ошибку.