выбрать по одному договору каждого контрагента
хочется в запросе выбрать по одному (самому старшему по дате) договору для каждого контрагента, совсем не соображу как это сделать
типа, из этого запроса сделать вложенный и выбрать первые 1 - это не то
типа, из этого запроса сделать вложенный и выбрать первые 1 - это не то
ВЫБРАТЬ различные
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Ссылка,
макс(ДоговорыКонтрагентов.Дата) КАК Дата,
ДоговорыКонтрагентов.Номер КАК Номер,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
И ДоговорыКонтрагентов.Статус = &Действует
И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Контрагент,
ДоговорыКонтрагентов.Ссылка,
ДоговорыКонтрагентов.Дата,
ДоговорыКонтрагентов.Номер,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты
УПОРЯДОЧИТЬ ПО
Контрагент,
Дата УБЫВ
ПоказатьПо теме из базы знаний
- Неоплаченные долги при распределении оплаты по правилу ФИФО одним запросом и намного быстрее, чем Вы думали
- Поиск и замена задвоенных договоров в БП 3.0
- Договор контрагента в word (редактирование таблицы и добавление текста в в word из 1С)
- RabbitMQ+КД 3. История повторения чужого опыта. Наступаем на одни и те же грабли дважды
- Перемещение партнеров и договоров с одного менеджера на другого
Найденные решения
в общем так заработало
ВЫБРАТЬ
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Ссылка,
ДоговорыКонтрагентов.Дата КАК Дата,
ДоговорыКонтрагентов.Номер КАК Номер,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
поместить исх
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
И ДоговорыКонтрагентов.Статус = &Действует
И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем
;
выбрать исх.контрагент, максимум(дата)
поместить груп
из исх как исх
сгруппировать по исх.контрагент
;
выбрать
исх.Контрагент КАК Контрагент,
исх.Ссылка КАК Ссылка,
исх.Дата КАК Дата,
исх.Номер КАК Номер,
исх.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
исх.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
из исх как исх
внутреннее соединение груп как груп по исх.контрагент = груп.контрагент и исх.дата = груп.дата
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) во временную таблицу получить для всех контрагентов нужную дату договоров (самую старшую ), затем соединяете справочник ДоговорыКонтрагентов с этой таблицей по условию равенства контрагента и даты договора - получите для каждого контрагента один договор
что-то типа
что-то типа
ВЫБРАТЬ
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
макс(ДоговорыКонтрагентов.Дата) КАК Дата
Поместить ТаблицаМаксДатыДоговоров
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Контрагент
Показать
(4) да, просто это у меня не работает почему-то
второй запрос не выполняется
ошибка: Поле не входит в группу "исх.контрагент"
выбрать <<?>>исх.контрагент, максимум(дата)
второй запрос не выполняется
ВЫБРАТЬ
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Ссылка,
ДоговорыКонтрагентов.Дата КАК Дата,
ДоговорыКонтрагентов.Номер КАК Номер,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
поместить исх
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
И ДоговорыКонтрагентов.Статус = &Действует
И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем
;
выбрать исх.контрагент, максимум(дата)
поместить груп
из исх как исх
;
Показатьошибка: Поле не входит в группу "исх.контрагент"
выбрать <<?>>исх.контрагент, максимум(дата)
(1) Обычная проблема таких задачек - а у договоров даты то не заполнены! :)
Могу накидать вам запрос которые выберет по одному договору первому по ссылке
Так как строить ВТ по датам и по ним потом соединяться с договорами можно ТОЛЬКО если:
1 -100% дат в договорах заполнены
2 - ни у каких двух договоров одного контрагента с одной организацией нет одинаковых дат
Попытка построить запрос при несоблюдении этих двух условий приведет к мультипликации записей при левом соединении по неуникальным датам к таблице договоров.
Вот вам тупой запрос который скорее выбирает младшие по ссылкам ибо технически можно предположить что чем младше ссылка тем старше договор. Ну и для отвода глаз там еще и младшая дата :) хотя в выборке те что выбираются и имеют дату соответствуют выбранной дате.
Могу накидать вам запрос которые выберет по одному договору первому по ссылке
ВЫБРАТЬ
МИНИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата,
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
МИНИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Ссылка
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Организация = &Организация
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Контрагент
ПоказатьТак как строить ВТ по датам и по ним потом соединяться с договорами можно ТОЛЬКО если:
1 -100% дат в договорах заполнены
2 - ни у каких двух договоров одного контрагента с одной организацией нет одинаковых дат
Попытка построить запрос при несоблюдении этих двух условий приведет к мультипликации записей при левом соединении по неуникальным датам к таблице договоров.
Вот вам тупой запрос который скорее выбирает младшие по ссылкам ибо технически можно предположить что чем младше ссылка тем старше договор. Ну и для отвода глаз там еще и младшая дата :) хотя в выборке те что выбираются и имеют дату соответствуют выбранной дате.
(6) Если даты заполнены тогдась
Но сразу надо проверить число записей в ВТ и в финальной выборке.
Если в ВТ число записей меньше чем в финальной - у вас бардачекс с датами...
ВЫБРАТЬ
МИНИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата,
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Организация КАК Организация
ПОМЕСТИТЬ МинДаты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Организация = &Организация
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Контрагент,
ДоговорыКонтрагентов.Организация
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МинДаты.Контрагент КАК Контрагент,
МинДаты.Организация КАК Организация,
Контрагенты.Ссылка КАК Ссылка
ИЗ
МинДаты КАК МинДаты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК Контрагенты
ПО (МинДаты.Дата = Контрагенты.Дата)
И (МинДаты.Организация = Контрагенты.Организация)
И (МинДаты.Контрагент = Контрагенты.Контрагент)
ПоказатьНо сразу надо проверить число записей в ВТ и в финальной выборке.
Если в ВТ число записей меньше чем в финальной - у вас бардачекс с датами...
//----------------
// Задача:
//Выбрать последние по дате договора, удовлетворяющие некоторым условиям
// Решение:
//1. Во временную таблицу выберем все договора подходящие под условия.
//2. Во вторую временную таблицу выберем для каждого договора максимальную дату
//3. Выберем договор с максимальной датой.
// Задача:
//Выбрать последние по дате договора, удовлетворяющие некоторым условиям
// Решение:
//1. Во временную таблицу выберем все договора подходящие под условия.
//2. Во вторую временную таблицу выберем для каждого договора максимальную дату
//3. Выберем договор с максимальной датой.
ВЫБРАТЬ различные
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Договор,
ДоговорыКонтрагентов.Дата КАК ДатаДоговора,
ДоговорыКонтрагентов.Номер КАК НомерДоговора,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК КоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК ТипДнейОтсрочкиОплаты
Поместить втДоговора
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
И ДоговорыКонтрагентов.Статус = &Действует
И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем
;
////////////-------------------
Выбрать
вт.Контрагент как Контрагент,
Максимум(вт.ДатаДОговора) как МаксДатаДговора
Поместить втМаксДаты
из
втДоговора ка вт
сгруппировать по
вт.Контрагент
;
//-------------------------
Выбрать
вт.*
из
втМаксДаты
Левое соединение втДоговора как вт
ПО втМаксДаты.Контрагент = вт.Контрагент
и втМаксДаты.МаксДатаДоговора = вт.ДатаДоговора
Показать
в общем так заработало
ВЫБРАТЬ
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
ДоговорыКонтрагентов.Ссылка КАК Ссылка,
ДоговорыКонтрагентов.Дата КАК Дата,
ДоговорыКонтрагентов.Номер КАК Номер,
ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
ДоговорыКонтрагентов.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
поместить исх
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Партнер.Клиент = ИСТИНА
И ДоговорыКонтрагентов.рздКоличествоДнейОтсрочки <> 0
И ДоговорыКонтрагентов.Статус = &Действует
И ДоговорыКонтрагентов.ТипДоговора = &СПокупателем
;
выбрать исх.контрагент, максимум(дата)
поместить груп
из исх как исх
сгруппировать по исх.контрагент
;
выбрать
исх.Контрагент КАК Контрагент,
исх.Ссылка КАК Ссылка,
исх.Дата КАК Дата,
исх.Номер КАК Номер,
исх.рздКоличествоДнейОтсрочки КАК рздКоличествоДнейОтсрочки,
исх.рздТипДнейОтсрочкиОплаты КАК рздТипДнейОтсрочкиОплаты
из исх как исх
внутреннее соединение груп как груп по исх.контрагент = груп.контрагент и исх.дата = груп.дата
Показать
Коротенький пример для 10 Контрагентов :)
ВЫБРАТЬ
ДоговорыКонтрагентов1.Контрагент КАК Контрагент,
ДоговорыКонтрагентов1.Ссылка КАК Ссылка,
ДоговорыКонтрагентов1.Дата КАК Дата,
ДоговорыКонтрагентов1.Номер КАК Номер
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
(
ВЫБРАТЬ ПЕРВЫЕ 10 // Убрать после тестирования
ДоговорыКонтрагентов.Контрагент КАК Контрагент,
МАКСИМУМ(ДоговорыКонтрагентов.Дата) КАК Дата
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Контрагент
) КАК Макс
ПО Макс.Контрагент = ДоговорыКонтрагентов1.Контрагент
И Макс.Дата = ДоговорыКонтрагентов1.Дата
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот