Гость
Форумы / [игнор отключен] [закрыт для гостей] / Как в запросе отобрать первые документы за период? / 14 сообщений из 14, страница 1 из 1
18.06.2014, 18:02
    #38673431
LittleLoya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Нужно отобрать все приходники и платежки за определенный период, а потом из них отобрать те, которые первые у контрагента (т.е. первая оплата за всё время, а не только в указанный период).

Подскажите как?
...
Рейтинг: 0 / 0
19.06.2014, 10:19
    #38673893
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
LittleLoya,

с помощью запроса с объединением, рассмотрим пример относительно одного документа, по остальным документам достроите запрос сами,
логика запроса, за указанный период определям интересующих нас контрагентов, затем для этих контрагентов поределяем даты самих первых документов, затем запросом с объдинением получаем самые первые документы "+" документы попадающие в указанный период. Вроде бы все точно по поставленному вопросу.

Выбрать различные
Док.Контрагент
поместить Кон
из
Документ.ПриходныйКассовыйОрдер Док
где
Док.Дата между &Дата1 и &Дата2
и Док.Проведен
;

выбрать
док.Контрагент,
Минимум(Док.Дата) как Дата,
Минимум(Док.Номер) как Номер
поместить Таб
из
Кон
левое соединение
Документ.ПриходныйКассовыйОрдер Док
по Кон.Контрагент = Док.Контрагент
где
Док.Проведен
сгруппировать по
док.Контрагент
;

Выбрать
1 как Порядок,
Док.Ссылка
из
Таб
левое соединение
Документ.ПриходныйКассовыйОрдер Док
по Таб.Контрагент = Док.Контрагент
и Таб.Дата = Док.Дата
и Таб.Номер = Док.Номер
и Док.Проведен

объединить все

Выбрать
2 как Порядок,
Док.Ссылка
из
Документ.ПриходныйКассовыйОрдер Док
где
Док.Дата между &Дата1 и &Дата2
и Док.Проведен

упорядочить по 1
;

уничтожить Кон;
уничтожить Таб;
...
Рейтинг: 0 / 0
20.06.2014, 07:38
    #38674896
Александр Пузаков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
LexaK, фу-фу-фу! Так писать код...
...
Рейтинг: 0 / 0
20.06.2014, 10:52
    #38675082
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Александр ПузаковLexaK, фу-фу-фу! Так писать код...

отличный код, всего один запрос и результат готов!
выложите свой вариант решения, по тем-же условиям и ограничениям, сравню со своим, протестирую производительность.
если ваше решение окажется более лучшим, приму к сведению и постараюсь в дальнейшем больше так (фу-фу-фу) не писать!
;+)
...
Рейтинг: 0 / 0
20.06.2014, 12:00
    #38675231
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Александр ПузаковLexaK, фу-фу-фу! Так писать код...+1. 3 запроса к одной таблице в 1 запросе мдаа это несомненно крутая производительность.
...
Рейтинг: 0 / 0
20.06.2014, 12:34
    #38675276
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Программист 1сАлександр ПузаковLexaK, фу-фу-фу! Так писать код...+1. 3 запроса к одной таблице в 1 запросе мдаа это несомненно крутая производительность.

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

пожалуйста выложите ваш вариант! посмотрим!
...
Рейтинг: 0 / 0
20.06.2014, 12:36
    #38675281
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
я вижу в условии противоречие
...
Рейтинг: 0 / 0
20.06.2014, 16:21
    #38675685
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
LexaKедиственное о чем здесь можно поспорить, так это целесообразность создания временных таблиц вместо использования подзапросов, сделано это в пользу читаемости запроса. Очень не люблю такие конструкции как
Выбрать ... из ( Выбрать ... из ( Выбрать ... )) и так далее.Важна не Ваша любовь или не любовь, а производительность. А судя по Вашему комментарию Вы так и не поняли в чем у Вас проблема.

Научитесь понимать что происходит во время Ваших действия на стороне скуля и сможете писать нормальные запросы.

ps Уничтожить применяется тоже очень редко и не здесь. Или меня поправят?
...
Рейтинг: 0 / 0
20.06.2014, 16:41
    #38675737
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Программист 1с,

Если не трудно опишите в чем у меня проблема, наверно со стороны это виднее, приму к сведению.
...
Рейтинг: 0 / 0
20.06.2014, 19:23
    #38675933
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
1. В первом запросе получите контрагента номер дату и ссылку и дальше с этой таблицей работайте.
2. Минимальная дата - это понятно но вот минимальный номер??? Вы уверены что не возникнет ситуация при которой будут 2 разных документа 01.01 с номером 999 и 02.01 с номером 111?
3. Непонятна конечная цель запроса - выдать впереди документы по контрагентам с минимальными номерами и датой, а потом все остальные? А в первом посте написано другое... Во вторых если верить первому посту - то у Вас не должны вообще быть даты начала. Период имеет смысл только по концу.

По логике 1 поста.
Запрос 1 - ссылка контрагент дата и номер.
Запрос 2 - группировка контрагент по минимальной дате.
Запрос 3 соединение 2 запроса и первого - по дате, контрагенту и получение по контрагенту - минимального номера. (Это на случай если в одну секунду есть 2 документа, тогда берем с минимальным номером)
Запрос 4 соединение 3 запроса и первого по дате, контрагенту и номеру. Здесь появляется ссылка из которой все что хотите вытаскиваете.
...
Рейтинг: 0 / 0
23.06.2014, 10:05
    #38676910
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Программист 1с,

Спасибо, за ответ.
По поводу задачи, да постановка какая-то не четкая, нет ощущения понимания конечного результата, ну да ладно.
По поводу почему дава минимума на дату и номер, в первом варианте у меня был один минимум по дате документа,
затем несколько раз сталкивался с тем что в 1С, и это не запрещено, могут быть на одну и туже дату несколько документов (создание копированием да и просто в ручную можно задать разным документа одну и ту же дату)! Соответственно что бы получить самый ранний документ, нам нужна не только дата но еще и его номер, иначе на один день мы пожем получить десяток документов.
Вообще сам автор этого вопроса, уже куда-то пропал, наверно результат (или пример результата) его удовлетворил.
...
Рейтинг: 0 / 0
23.06.2014, 11:41
    #38677009
LittleLoya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
Не-не-не! Я тута! Я очень внимательно вас всех слушаю, просто в силу очень крохотных знаний 1С, я половину из вашего разговора не понимаю. :(

Попробую объяснить задачу ещё раз. Конечная цель, это отчет (по дням), где будет видно количество новых клиентов за день. Новый клиент - это клиент, у которого не было оплат ранее. Оплатой считается наличие ПРО или ППВ. Номер документа думаю не нужен, время тоже, нужно просто убедиться, что это первый документ оплаты.

И большое спасибо всем за участие.
...
Рейтинг: 0 / 0
23.06.2014, 12:02
    #38677037
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
LittleLoya,

Вот более менее понятный вопрос. Решается за один запрос (вот пример на примере одного документа, оставлен простор для доработок)
Используется период Дата1 и Дата2, при необходимости можно переделать на 1 день.

выбрать Различные
Док.Контрагент
из
Документ.ПлатежноеПоручениеВходящее Док
левое соединение
Документ.ПлатежноеПоручениеВходящее Док2
по Док.Контрагент = Док2.Контрагент
и Док2.Дата < &Дата1
и Док2.Проведен
Где
Док.Дата между &Дата1 и &Дата2
и Док.Проведен
и Док2.Контрагент есть Null
Упорядочить по
Док.Контрагент
Автоупорядочивание


попробуйте в консоли отчетов, подходит?
...
Рейтинг: 0 / 0
23.06.2014, 14:31
    #38677309
LittleLoya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в запросе отобрать первые документы за период?
LexaK, спасибо большое, но я в Вашем запросе ничё не поняла. Я тут поковырялась и сама набросала какого-то монстра. Вроде работает. Большое всем спасибо за участие!
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Как в запросе отобрать первые документы за период? / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]