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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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