Имя: Пароль:
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)) КАК НомерПП,
    ПлатежноеПоручение.ДокументОснование.Ссылка КАК ДокументОснованиеСсылка,
    МАКСИМУМ(ПлатежноеПоручение.Дата) КАК Дата
ИЗ
    Документ.ПлатежноеПоручение КАК ПлатежноеПоручение

СГРУППИРОВАТЬ ПО
    ПлатежноеПоручение.ДокументОснование.Ссылка
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн