Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
13 Дек 2017, 23:26
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Запрос без повторений строк  (Прочитано 2302 раз)

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

Оффлайн Dezmont89

  • *
  • Сообщений: 22
  • РЕПУТАЦИЯ: 2
  • КПД: 9%
  • Регистрация: 2013-10-04
  • Сайт: 
  • Профессия: Ученик 1С
Нужно составить запрос к примеру у Человека есть Договор(номер,дата,срок, сумма)
к примеру  1 таблица людей
Ваня,Петя,Катя
2 таб договоров
У Вани №1 02.12.2005 12  1005, №2 02.12.2005 12  1000, №3 03.12.2005 12  1005
У Пети №4 02.12.2005 12  1015
У кати нет

В результат надо вывести нужно вывести один договор у человека с максимальной суммой, если таких несколько максимальной датой

Ваня №3
Петя №4
Катя NULL

Вот че то у меня какой то бред выходит:dfbsdfbsdf:


Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Сразу оговорюсь, запрос намеренно составлен не совсем оптимально, для лучшего понимания
	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент
|ПОМЕСТИТЬ втКонтрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СчетНаОплатуПокупателю.Контрагент,
| СчетНаОплатуПокупателю.Дата,
| СчетНаОплатуПокупателю.СуммаДокумента,
| СчетНаОплатуПокупателю.Ссылка КАК Договор
|ПОМЕСТИТЬ втДоговоры
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втКонтрагент.Контрагент,
| втДоговоры.Дата,
| втДоговоры.СуммаДокумента,
| втДоговоры.Договор
|ПОМЕСТИТЬ втОбщая
|ИЗ
| втКонтрагент КАК втКонтрагент
| ЛЕВОЕ СОЕДИНЕНИЕ втДоговоры КАК втДоговоры
| ПО втКонтрагент.Контрагент = втДоговоры.Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втОбщая.Контрагент,
| втОбщая.Договор
|ИЗ
| втОбщая КАК втОбщая
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| втОбщая.Контрагент КАК Контрагент,
| МАКСИМУМ(втОбщая.Дата) КАК Дата,
| втОбщая.СуммаДокумента КАК СуммаДокумента
| ИЗ
| втОбщая КАК втОбщая
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| втОбщая.Контрагент КАК Контрагент,
| МАКСИМУМ(втОбщая.СуммаДокумента) КАК СуммаДокумента
| ИЗ
| втОбщая КАК втОбщая
|
| СГРУППИРОВАТЬ ПО
| втОбщая.Контрагент) КАК ВложенныйЗапрос
| ПО втОбщая.Контрагент = ВложенныйЗапрос.Контрагент
| И втОбщая.СуммаДокумента = ВложенныйЗапрос.СуммаДокумента
|
| СГРУППИРОВАТЬ ПО
| втОбщая.Контрагент,
| втОбщая.СуммаДокумента) КАК ВложенныйЗапрос
| ПО втОбщая.Контрагент = ВложенныйЗапрос.Контрагент
| И втОбщая.СуммаДокумента = ВложенныйЗапрос.СуммаДокумента
| И втОбщая.Дата = ВложенныйЗапрос.Дата";

Результат = Запрос.Выполнить();

Оффлайн Dezmont89

  • *
  • Сообщений: 22
  • РЕПУТАЦИЯ: 2
  • КПД: 9%
  • Регистрация: 2013-10-04
  • Сайт: 
  • Профессия: Ученик 1С
Сразу оговорюсь, запрос намеренно составлен не совсем оптимально, для лучшего понимания



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

Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
втОбщие - можно получить одним простым запросом по левому соединению.

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
классика,
используются две временных таблицы,

но есть вопрос,  какой вы ожидаете результат, если будет несколько одинаковых(максимальных) сумм, по контрагентам, и несколько договоров на одинаковую дату, по этим суммам?
у вас произойдет мультиплицирование (задвоение) строк,

скорее всего второе условие не по дате договора надо делать а по его номеру( в пределах года, где соблюдается уникальность номеров), при условии уникальности номеров, или по паре дате и номер.

еще в вашем запросе нет отбора/условий по параметрам,
в больших базах сотни контрагентов, и десятки тысяч документов, и обычно интересуют данные за какой-то период, и естественно только от проведенных документов,
отсюда плавно переходим к пониманию что данный запрос надо строить на регистре(ах) по правильному если программировать.


    Запрос = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ //по условию Максимум Суммы
        |    Док.Контрагент,
        |    Максимум(Док.СуммаДокумента) как Сумма,
        |ПОМЕСТИТЬ втСумма
        |ИЗ
        |    Документ.СчетНаОплатуПокупателю КАК Док
        |Сгруппировать по
        |    Док.Контрагент
        |;
        |
        |ВЫБРАТЬ //по условию Максимум Суммы и Максимум Дата
        |    Таб.Контрагент,
        |    Таб.Сумма,
        |    Максимум(Док.Дата) как Дата,
        |ПОМЕСТИТЬ втСуммаДата
        |ИЗ
        |    втСумма Таб
        |левое соединение
        |    Документ.СчетНаОплатуПокупателю КАК Док
        |    по Таб.Контрагент = Док.Контрагент
        |    и Таб.Сумма= Док.СуммаДокумента
        |Сгруппировать по
        |    Таб.Контрагент,
        |    Таб.Сумма
        |;
        |
        |//результирующий запрос
        |ВЫБРАТЬ
        |    Спр.Ссылка как Контрагент,
        |    Док.Договор
        |ИЗ
        |     Справочник.Контрагенты КАК Спр
        |ЛЕВОЕ СОЕДИНЕНИЕ втСуммаДата КАК Таб
        |        ПО Спр.Ссылка = Таб.Контрагент
        |ЛЕВОЕ СОЕДИНЕНИЕ
        |    Документ.СчетНаОплатуПокупателю КАК Док
        |    по Таб.Контрагент = Док.Контрагент
        |    и Таб.Сумма= Док.СуммаДокумента
        |    и Таб.Дата= Док.Дата
        |Где //хоть какой-то фильтр
        |    Не Спр.ПометкаУдаления
        |и   Не Спр.ЭтоГруппа
        |
        |Упорядочить по
        |    1
        |автоупорядочивание
        |";

    Результат = Запрос.Выполнить();
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Dezmont89

  • *
  • Сообщений: 22
  • РЕПУТАЦИЯ: 2
  • КПД: 9%
  • Регистрация: 2013-10-04
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо.
Ну я как то так и сделал. Чуть по своему.
Конечно у меня есть отборы, и по контрагентам до отбора по договорам, и по самим договорам. И запрос по регистрам.
И один человек по сути не может заключить два договора, в одно и тоже время с точностью до секунды.
Могу скинуть в личку весь текст запроса, может научите уму-разуму.


 

Как можно подставлять цену из регистра сведений "Цены поставщиков" в документ"ПоступлениеТоваров" на актуальную дату? Необходимо использовать запрос в решении.

Автор Елена6666666666Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 14
Просмотров: 9343
Последний ответ 24 Окт 2014, 13:30
от cska-fanat-kz
Запрос Параметры для "ИЗ"

Автор БерезинРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2994
Последний ответ 15 Май 2013, 23:27
от Березин
Что быстрее: Загрузить табличную часть в запрос и там добавить колонки, или пробежаться циклом по ТЧ и добавить значения в колонки

Автор ZeedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 980
Последний ответ 11 Июл 2016, 09:00
от vitasw
Запрос по обработке "Согласование заявок"

Автор DenielAkreedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 685
Последний ответ 29 Сен 2016, 02:39
от DenielAkreed
8.2 Бух. Запрос с условием "комментарий содержит текст"

Автор bolobolРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 16534
Последний ответ 02 Сен 2011, 01:14
от bolobol

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
179 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
39 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 298
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal