Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 14:57

Помогите плиз составить запрос.

Автор Vovka135, 26 июл 2011, 12:43

0 Пользователей и 1 гость просматривают эту тему.

Vovka135

Доброго времени суток!
Есть база УТ. Есть обработка, которая выбирает из базы контрагентов. Текст запроса:

|ВЫБРАТЬ
|   Контрагенты.Код как Код,
|   Контрагенты.Наименование как Наименование,
|   Контрагенты.НаименованиеПолное как НаименованиеПолное,
|   Контрагенты.Ссылка как Ссылка
|ИЗ
|   Справочник.Контрагенты КАК Контрагенты
|ГДЕ   (Контрагенты.ЭтоГруппа = Ложь И Контрагенты.ПометкаУдаления = Ложь)
и т.д.

В базе добавили вторую организацию. Теперь их две, с кодами "000000001" и "000000002". Есть контрагенты, у которых договора заключены с обеими организациями и по два договора с каждой. Таких мало, но все-же они есть.
Задача - запросом выбрать контрагентов, которые имеют договора с указанной организацией. В идеале в результат выводить одну запись на каждого контрагента, даже если у него 10 договоров с этой организацией.
Я пока что дошел до следующего текста:

|ВЫБРАТЬ
|   Контрагенты.Код КАК Код,
|   Контрагенты.Наименование КАК Наименование,
|   Контрагенты.НаименованиеПолное КАК НаименованиеПолное,
|   Контрагенты.Ссылка КАК Ссылка,
|   ДоговорыКонтрагентов.Организация.Ссылка КАК Организация
|ИЗ
|   Справочник.Контрагенты КАК Контрагенты
|      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|      ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец.Ссылка
|ГДЕ
|   Контрагенты.ПометкаУдаления = ЛОЖЬ
|   И Контрагенты.ЭтоГруппа = ЛОЖЬ
|   И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
|   И ДоговорыКонтрагентов.Организация.Код = &КОД ВЫБРАННОЙ ОРГАНИЗАЦИИ

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

Андрей Федотов

Нужно вместо 10 записей выводить 1?
Напиши после ВЫБРАТЬ слово "РАЗЛИЧНЫЕ"

Vovka135

Цитата: Андрей Федотов от 26 июл 2011, 14:12
Нужно вместо 10 записей выводить 1?
Напиши после ВЫБРАТЬ слово "РАЗЛИЧНЫЕ"

Если-бы все было так просто! Попробуйте такой запрос на любой базе ;)

Вася Новенький

а почему не взять за основу ДоговорКонтрагента.
организацию выбрать ту, которая нужна и все данные из родителя выбрать?
или если берете 2 вида справочников, тогда левое соединение договора с к/а а не наоборот.

Вася Новенький

не из родителя. а из владельца (если быть точнее).

Вася Новенький

т.е. получается что-то типа того:
ВЫБРАТЬ
   ДоговорыКонтрагентов.Владелец КАК Контрагент,
   ПРЕДСТАВЛЕНИЕ(ДоговорыКонтрагентов.Владелец),
   ДоговорыКонтрагентов.Владелец.Наименование,
   ДоговорыКонтрагентов.Владелец.НаименованиеПолное,
   ДоговорыКонтрагентов.Владелец.Код,
   ДоговорыКонтрагентов.Организация,
   ПРЕДСТАВЛЕНИЕ(ДоговорыКонтрагентов.Организация)
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
   ДоговорыКонтрагентов.Организация.Код = &КодОрганизации
   И (НЕ ДоговорыКонтрагентов.Владелец.ПометкаУдаления)

Вася Новенький

аааа...дошло что не получалось. выдавало сообщение что нельзя выбрать различные, т..к полное наименование неограниченной длины?

Вася Новенький

вот. вот такой должен быть запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ДоговорыКонтрагентов.Владелец КАК Контрагент,
   ПРЕДСТАВЛЕНИЕ(ДоговорыКонтрагентов.Владелец),
   ДоговорыКонтрагентов.Владелец.Наименование,
   ВЫРАЗИТЬ(ДоговорыКонтрагентов.Владелец.НаименованиеПолное КАК СТРОКА(150)) КАК НаименованиеПолное,
   ДоговорыКонтрагентов.Владелец.Код,
   ДоговорыКонтрагентов.Организация
ИЗ
   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
   ДоговорыКонтрагентов.Организация.Код = &КодОрганизации
   И (НЕ ДоговорыКонтрагентов.Владелец.ПометкаУдаления)
   И (НЕ ДоговорыКонтрагентов.ПометкаУдаления)





ограничь полное наименование каким нибудь кол-вом здесь указано 150.можно больше

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Skellar

А ты не можешь использовать к примеру "Запрос.СледующийПоЗначениюПоля" по Контрагенту и вытаскивать последний объект ?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск