|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Нужно отобрать все приходники и платежки за определенный период, а потом из них отобрать те, которые первые у контрагента (т.е. первая оплата за всё время, а не только в указанный период). Подскажите как? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2014, 18:02 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
LittleLoya, с помощью запроса с объединением, рассмотрим пример относительно одного документа, по остальным документам достроите запрос сами, логика запроса, за указанный период определям интересующих нас контрагентов, затем для этих контрагентов поределяем даты самих первых документов, затем запросом с объдинением получаем самые первые документы "+" документы попадающие в указанный период. Вроде бы все точно по поставленному вопросу. Выбрать различные Док.Контрагент поместить Кон из Документ.ПриходныйКассовыйОрдер Док где Док.Дата между &Дата1 и &Дата2 и Док.Проведен ; выбрать док.Контрагент, Минимум(Док.Дата) как Дата, Минимум(Док.Номер) как Номер поместить Таб из Кон левое соединение Документ.ПриходныйКассовыйОрдер Док по Кон.Контрагент = Док.Контрагент где Док.Проведен сгруппировать по док.Контрагент ; Выбрать 1 как Порядок, Док.Ссылка из Таб левое соединение Документ.ПриходныйКассовыйОрдер Док по Таб.Контрагент = Док.Контрагент и Таб.Дата = Док.Дата и Таб.Номер = Док.Номер и Док.Проведен объединить все Выбрать 2 как Порядок, Док.Ссылка из Документ.ПриходныйКассовыйОрдер Док где Док.Дата между &Дата1 и &Дата2 и Док.Проведен упорядочить по 1 ; уничтожить Кон; уничтожить Таб; ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2014, 10:19 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
LexaK, фу-фу-фу! Так писать код... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 07:38 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Александр ПузаковLexaK, фу-фу-фу! Так писать код... отличный код, всего один запрос и результат готов! выложите свой вариант решения, по тем-же условиям и ограничениям, сравню со своим, протестирую производительность. если ваше решение окажется более лучшим, приму к сведению и постараюсь в дальнейшем больше так (фу-фу-фу) не писать! ;+) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 10:52 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Александр ПузаковLexaK, фу-фу-фу! Так писать код...+1. 3 запроса к одной таблице в 1 запросе мдаа это несомненно крутая производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 12:00 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Программист 1сАлександр ПузаковLexaK, фу-фу-фу! Так писать код...+1. 3 запроса к одной таблице в 1 запросе мдаа это несомненно крутая производительность. едиственное о чем здесь можно поспорить, так это целесообразность создания временных таблиц вместо использования подзапросов, сделано это в пользу читаемости запроса. Очень не люблю такие конструкции как Выбрать ... из ( Выбрать ... из ( Выбрать ... )) и так далее. пожалуйста выложите ваш вариант! посмотрим! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 12:34 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
я вижу в условии противоречие ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 12:36 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
LexaKедиственное о чем здесь можно поспорить, так это целесообразность создания временных таблиц вместо использования подзапросов, сделано это в пользу читаемости запроса. Очень не люблю такие конструкции как Выбрать ... из ( Выбрать ... из ( Выбрать ... )) и так далее.Важна не Ваша любовь или не любовь, а производительность. А судя по Вашему комментарию Вы так и не поняли в чем у Вас проблема. Научитесь понимать что происходит во время Ваших действия на стороне скуля и сможете писать нормальные запросы. ps Уничтожить применяется тоже очень редко и не здесь. Или меня поправят? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 16:21 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Программист 1с, Если не трудно опишите в чем у меня проблема, наверно со стороны это виднее, приму к сведению. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 16:41 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
1. В первом запросе получите контрагента номер дату и ссылку и дальше с этой таблицей работайте. 2. Минимальная дата - это понятно но вот минимальный номер??? Вы уверены что не возникнет ситуация при которой будут 2 разных документа 01.01 с номером 999 и 02.01 с номером 111? 3. Непонятна конечная цель запроса - выдать впереди документы по контрагентам с минимальными номерами и датой, а потом все остальные? А в первом посте написано другое... Во вторых если верить первому посту - то у Вас не должны вообще быть даты начала. Период имеет смысл только по концу. По логике 1 поста. Запрос 1 - ссылка контрагент дата и номер. Запрос 2 - группировка контрагент по минимальной дате. Запрос 3 соединение 2 запроса и первого - по дате, контрагенту и получение по контрагенту - минимального номера. (Это на случай если в одну секунду есть 2 документа, тогда берем с минимальным номером) Запрос 4 соединение 3 запроса и первого по дате, контрагенту и номеру. Здесь появляется ссылка из которой все что хотите вытаскиваете. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2014, 19:23 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Программист 1с, Спасибо, за ответ. По поводу задачи, да постановка какая-то не четкая, нет ощущения понимания конечного результата, ну да ладно. По поводу почему дава минимума на дату и номер, в первом варианте у меня был один минимум по дате документа, затем несколько раз сталкивался с тем что в 1С, и это не запрещено, могут быть на одну и туже дату несколько документов (создание копированием да и просто в ручную можно задать разным документа одну и ту же дату)! Соответственно что бы получить самый ранний документ, нам нужна не только дата но еще и его номер, иначе на один день мы пожем получить десяток документов. Вообще сам автор этого вопроса, уже куда-то пропал, наверно результат (или пример результата) его удовлетворил. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2014, 10:05 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
Не-не-не! Я тута! Я очень внимательно вас всех слушаю, просто в силу очень крохотных знаний 1С, я половину из вашего разговора не понимаю. :( Попробую объяснить задачу ещё раз. Конечная цель, это отчет (по дням), где будет видно количество новых клиентов за день. Новый клиент - это клиент, у которого не было оплат ранее. Оплатой считается наличие ПРО или ППВ. Номер документа думаю не нужен, время тоже, нужно просто убедиться, что это первый документ оплаты. И большое спасибо всем за участие. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2014, 11:41 |
|
Как в запросе отобрать первые документы за период?
|
|||
---|---|---|---|
#18+
LittleLoya, Вот более менее понятный вопрос. Решается за один запрос (вот пример на примере одного документа, оставлен простор для доработок) Используется период Дата1 и Дата2, при необходимости можно переделать на 1 день. выбрать Различные Док.Контрагент из Документ.ПлатежноеПоручениеВходящее Док левое соединение Документ.ПлатежноеПоручениеВходящее Док2 по Док.Контрагент = Док2.Контрагент и Док2.Дата < &Дата1 и Док2.Проведен Где Док.Дата между &Дата1 и &Дата2 и Док.Проведен и Док2.Контрагент есть Null Упорядочить по Док.Контрагент Автоупорядочивание попробуйте в консоли отчетов, подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2014, 12:02 |
|
|
start [/forum/topic.php?fid=28&fpage=33&tid=1519369]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 140ms |
0 / 0 |