Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с запросом
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
vbi
Есть в запросе таблица с такими реквизитами:
Контрагент ДокументПартии

У одного контрагента может быть несколько документов партии.

Задача. Выбрать из этой таблицы всех контрагентов и только те документы партии, дата которых самая последняя. В результате в колонке контрагентов должны быть все разные значения

Например:

Контрагент1 Поступление 1 от 02.10.2012
Контрагент1 Поступление 2 от 20.11.2012
Контрагент1 Поступление 3 от 22.11.2012
Контрагент2 Поступление 4 от 18.11.2012
Контрагент2 Поступление 5 от 19.11.2012

надо только:

Контрагент1 Поступление 3 от 22.11.2012
Контрагент2 Поступление 5 от 19.11.2012

Как построить запрос?
P.S. Запрос используется в динамическом списке управляемого приложения.
Vofka
|ВЫБРАТЬ
|    Контрагент,
|    МАКСИМУМ(ДокументПартии) КАК ДокументПартии
|ИЗ
|    МояТаблица
|СГРУППИРОВАТЬ ПО
|    Контрагент


Но правильней, конечно, добавить в таблицу дату и брать МАКСИМУМ от даты.
vbi
Так почему-то не работает. Берет не последний документ. Возможно документ создавался пожже но задним числом, что порядок ссылок не соответствует порядку дат.
Ну хорошо, добавим дату, а что делать с партией? Ведь так

|ВЫБРАТЬ 
|    Контрагент,
|    МАКСИМУМ(ДокументПартии) КАК ДокументПартии
|    МАКСИМУМ(ДокументПартии.Дата) КАК ДатаПартии
|ИЗ
|    МояТаблица
|СГРУППИРОВАТЬ ПО
|    Контрагент


тоже работает не правильно
logist
|ВЫБРАТЬ
|    Контрагент,
|    ДокументПартии,
|    МАКСИМУМ(ДокументПартии.Дата)
|ИЗ
|    МояТаблица
|СГРУППИРОВАТЬ ПО
|    Контрагент


alex040269
Цитата(vbi @ 22.11.12, 14:31) необходимо зарегистрироваться для просмотра ссылки
Так почему-то не работает. Берет не последний документ. Возможно документ создавался пожже но задним числом, что порядок ссылок не соответствует порядку дат.
Ну хорошо, добавим дату, а что делать с партией? Ведь так

|ВЫБРАТЬ
| Контрагент,
| МАКСИМУМ(ДокументПартии) КАК ДокументПартии
| МАКСИМУМ(ДокументПартии.Дата) КАК ДатаПартии
|ИЗ
| МояТаблица
|СГРУППИРОВАТЬ ПО
| Контрагент

тоже работает не правильно


|ВЫБРАТЬ
| Контрагент,
| ДокументПартии,
| МАКСИМУМ(ДокументПартии.Дата) КАК ДатаПартии
|ИЗ
| МояТаблица
|СГРУППИРОВАТЬ ПО
| Контрагент,ДокументПартии
Vofka
logist, ваш вариант не рабочий уже по синтаксису wink.gif .

alex040269, результат вашего запроса (я так понимаю Логист его же хотел написать) вернет ту же таблицу, которая была. Точно такую же.

Насчет добавить дату я не то имел ввиду. Как-то так:

|ВЫБРАТЬ
|    Контрагент,
|    МАКСИМУМ(ДокументПартии.Дата) КАК ДатаПартии
|ПОМЕСТИТЬ ХЗ
|ИЗ
|    МояТаблица КАК МояТаблица
|СГРУППИРОВАТЬ ПО
|    Контрагент
|;
|ВЫБРАТЬ
|    МояТаблица.Контрагент,
|    МАКСИМУМ(МояТаблица.ДокументПартии) КАК ДокументПартии,
|ИЗ
|    МояТаблица КАК МояТаблица
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ХЗ КАК ХЗ
|        ПО МояТаблица.Контрагент = ХЗ.Контрагент
|        ПО МояТаблица.ДатаПартии = ХЗ.ДокументПартии.Дата
|СГРУППИРОВАТЬ ПО
|    МояТаблица.Контрагент


Признаться, я удивлен, что никто из авторов выше (включая ТС) не знал как правильно запрос составить.

Я вот только не помню можно ли в динамическом списке использовать временные таблицы. Если нет, то запрос можно переписать так:

|ВЫБРАТЬ
|    МояТаблица.Контрагент,
|    МАКСИМУМ(МояТаблица.ДокументПартии) КАК ДокументПартии,
|ИЗ
|    МояТаблица КАК МояТаблица
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
|                ВЫБРАТЬ
|                    Контрагент,
|                    МАКСИМУМ(ДокументПартии.Дата) КАК ДатаПартии
|                ИЗ
|                    МояТаблица КАК МояТаблица
|                СГРУППИРОВАТЬ ПО
|                    Контрагент
|                ) КАК ХЗ
|        ПО МояТаблица.Контрагент = ХЗ.Контрагент
|        ПО МояТаблица.ДатаПартии = ХЗ.ДокументПартии.Дата
|СГРУППИРОВАТЬ ПО
|    МояТаблица.Контрагент
vbi
Спасибо Вофка, временные таблицы в дин. списке использовать нельзя. А вот второй вариант поинтересней. Сейчас попробуем. Вот еще лучше было бы соединять не по дате а по моменту времени, только как его в запросе получить?..
Vofka
Цитата(vbi @ 22.11.12, 15:38) необходимо зарегистрироваться для просмотра ссылки
Вот еще лучше было бы соединять не по дате а по моменту времени

Я не думаю, что это было бы лучше, т.к. я лично не знаю как будет отрабатывать функция МАКСИМУМ для момента времени. Я догадываюсь, но надо понимать, что это инфа не 100%. К тому же, динамический список подразумевает работу с пользователем. А пользователь работает с датой (число-месяц-год часы-минуты-секунды) и все, что меньше секунды ним не будет восприниматься. Поэтому, собственно, не вижу в этом смысла.
vbi
МАКСИМУМ для момента времени - нельзя добавить. Ошибка.
Vofka
Цитата(vbi @ 22.11.12, 16:33) необходимо зарегистрироваться для просмотра ссылки
МАКСИМУМ для момента времени - нельзя добавить. Ошибка.

Ну тем более smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.