Имя: Пароль:
1C
1С v8
Получение последних контрагентов на каждый день продаж
0 hao5352
 
31.08.22
13:15
Подскажите,как запросом получить последних контрагентов,которые покупали товар за все даты,используя только документ расход товаров? При группировке и упорядочивании идёт на весь запрос и остаётся только последняя дата.

ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваров.Дата) КАК Дата,
    РеализацияТоваров.Покупатель
ИЗ
    Документ.РеализацияТоваров КАК РеализацияТоваров

СГРУППИРОВАТЬ ПО
    РеализацияТоваров.Покупатель

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
1 Beduin
 
31.08.22
13:17
"За все даты" - это за весь период покупок?
2 Kassern
 
31.08.22
13:18
(1) а документ расход товаров вас не смутил?)
3 Beduin
 
31.08.22
13:18
(2) Это он видимо так реализацию называет
4 Ryzeman
 
31.08.22
13:19
(0) тестовое задание?) Делай внутреннее соединение :)
5 hao5352
 
31.08.22
13:20
Да,за весь период.
Это пример,просто не совсем понимаю,как сделать,чтобы в запросе отображалось контрагент из последней продажи за день.
6 mistеr
 
31.08.22
13:20
(0) Кто последний покупал за каждый день, так что ли?
7 hao5352
 
31.08.22
13:21
(4) Увидел в группе у кого то, стало интересно,часа 2 сижу не могу понять
8 hao5352
 
31.08.22
13:21
(6) Именно
9 Beduin
 
31.08.22
13:21
(5) Один контрагент или все которые продали?
10 hao5352
 
31.08.22
13:22
(9) Ну предположим была продажа 29.08 и 31.08 хочу,чтобы отобразился контрагент,который совершил последнюю продажу 29 и 31.
11 mistеr
 
31.08.22
13:22
(8) Интересная задачка. Основная сложность выделить последний по ссылке, если дата-время одинаковые.
12 АгентБезопасной Нацио
 
31.08.22
13:23
"последний контрагент" - это звучит гордо?
13 Kassern
 
31.08.22
13:24
(10) А если 29 было 2 продажи в 23.59 От РогаИКопыта и ООО Ромашка?)
14 alarm2020
 
31.08.22
13:25
(0) Вот эту, сгруппированную таблицу соединяешь с исходной
15 Kassern
 
31.08.22
13:25
С технической точки зрения можно вычислить, какой создался раньше, какой позже, но с точки зрения логики, оба варианта могут быть верными
16 Beduin
 
31.08.22
13:26
ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) КАК Ссылка,
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО (РеализацияТоваровУслуг.Грузоотправитель = Контрагенты.Ссылка)
            И (РеализацияТоваровУслуг.Грузополучатель = Контрагенты.Ссылка)
            И (РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка)

СГРУППИРОВАТЬ ПО
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.Дата КАК Дата,
    ВременнаяТаблица.Ссылка.Контрагент КАК СсылкаКонтрагент
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

УПОРЯДОЧИТЬ ПО
    Дата
17 АгентБезопасной Нацио
 
31.08.22
13:27
(13) "Однако очевидно, что два документа или два движения могут иметь одинаковое значение даты (иметь одинаковую дату включая время). Чтобы порядок таких документов был всегда одинаков (сохранялся во всех выборках) документы и движения дополнительно упорядочиваются по значению ссылки документа"(цы) ИТС
18 Beduin
 
31.08.22
13:28
(16) ой
ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) КАК Ссылка,
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО (РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка)

СГРУППИРОВАТЬ ПО
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.Дата КАК Дата,
    ВременнаяТаблица.Ссылка.Контрагент КАК СсылкаКонтрагент
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

УПОРЯДОЧИТЬ ПО
    Дата
19 Ryzeman
 
31.08.22
13:28
(12) Останется только один...
И музыка на фоне
https://www.youtube.com/watch?v=acYGWuL9nD4
20 Beduin
 
31.08.22
13:29
(18) Да ешкин кот
ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) КАК Ссылка,
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

СГРУППИРОВАТЬ ПО
    КОНЕЦПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.Дата КАК Дата,
    ВременнаяТаблица.Ссылка.Контрагент КАК СсылкаКонтрагент
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

УПОРЯДОЧИТЬ ПО
    Дата
21 Kassern
 
31.08.22
13:29
(17) я и пишу, что можно вычислить, какой был последний, но в плане логики (управленческой к примеру) может быть без разницы, какой из них нужен, либо вообще оба нужны в плане последних. Это как СрезПоследних в РС. Там тоже могут быть несколько строк с различными наборами данных последними и это нормально.
22 АгентБезопасной Нацио
 
31.08.22
13:29
(19) а может, последний - это в смысле "последний му..к"?
23 Ryzeman
 
31.08.22
13:30
(21) Момент времени же!
24 Ryzeman
 
31.08.22
13:30
(22) Типа, конченный?
25 АгентБезопасной Нацио
 
31.08.22
13:31
(24) ну да, контрагент, хуже которого уже некуда...
26 АгентБезопасной Нацио
 
31.08.22
13:31
(23) моменты в снеговике, имхо , могут и совпадать.
27 alarm2020
 
31.08.22
13:32
(21) Это не нормально, потому что противоречит определению "последний". В реальном мире никакие два события не происходят в точности одновременно
28 Ryzeman
 
31.08.22
13:32
(21) Думаю, человек просто хотел простой запросик с одним соединением вида - Партнёр  - дата последнего его заказа. Вы его сейчас будете учить границам и прочим премудростям)
29 Kassern
 
31.08.22
13:33
(20) А если реализации были созданы путем  Объект.УстановитьСсылкуНового(Ссылка); ? Даст ли МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) именно тот документ, который создан последним?
30 МКК
 
31.08.22
13:33
(27) Пересечение двух прямых - например одновременно
31 АгентБезопасной Нацио
 
31.08.22
13:33
(27) не регистрируешь события в реальном мире ты с реальной точностью... а реальная точность - грубее идеальной
32 alarm2020
 
31.08.22
13:34
(30) Это - одно событие
33 hao5352
 
31.08.22
13:36
(20) Спасибо.Что-то я думал простенько будет, а в итоге ничего подобного.Пойду поищу теории и практики по запросам.
34 alarm2020
 
31.08.22
13:37
(31) Согласен. Но современная техника позволяет получать точность практически неотличимую от реальной. В 32 байтах количество "точек" больше, чем количество атомов в нашем скоплении галактик
35 Kassern
 
31.08.22
13:37
(27) Ничего это не противоречит, если мы говорим не про сферического коня в вакууме, а про реальные бизнес-процессы. Напрмер, эти данные нужны, чтобы понять, какие клиенты отгружались последними на складе. И если в одну и ту же минуту/секунду было 2 отгрузки (2 машины параллельно грузили разным клиентам), то наверное важно вывести обоих. Я к тому виду, что клиент может назвать это "вывести последних", но нужно знать контекст,для чего это делается.
36 Kassern
 
31.08.22
13:38
*веду
37 alarm2020
 
31.08.22
13:39
(35) Должна быть возможность вывести информацию "с точностью до..." И одним из вариантов может быть "... до абсолютной"
38 АгентБезопасной Нацио
 
31.08.22
13:49
(34) <троллейбус.jpg>
Можно и количество учитыаь с неимоверной точностью, и НДС до 15 знака после запятой... но зачем?
39 Kassern
 
31.08.22
13:51
(37) Как вы предлагаете определять последний документ? По максимуму ссылки?
40 АгентБезопасной Нацио
 
31.08.22
13:52
(35) ну, я слабо верю даже "в одну секунду".
На предыдущем месте логисты поставили выезд трех машин в 9:00. Ворота одни. Дир позвал логистов к этому времени, а потом попросил водителей выехать точно по расписанию, составленному логистами...
41 Ryzeman
 
31.08.22
13:52
(38) >>НДС до 15 знака после запятой

Хорош)))

А никогда не видел в самописках цены с 3-5 знаками после запятой?) И самое классное когда кто-нибудь зафигачивает туда расчёт цены как деление суммы на количество))
42 АгентБезопасной Нацио
 
31.08.22
13:52
(39) не определять, а "при равенстве времени последим считать...".
43 hao5352
 
31.08.22
13:52
(20) Хотя если создать еще один расход на более раннюю дату,будет отображаться он,что неверно.
44 Kassern
 
31.08.22
13:54
(42) а где гарантия, что не было вмешательства в формирование ссылок?
45 RomanYS
 
31.08.22
13:55
(20) МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) это не гарантирует последнюю продажу
46 hao5352
 
31.08.22
13:56
(45) Так и вышло
47 RomanYS
 
31.08.22
13:56
(39) традиционно по МоментВремени = Дата+Сссылка
48 АгентБезопасной Нацио
 
31.08.22
13:57
(41) >>А никогда не видел в самописках цены с 3-5 знаками после запятой?
ну мы ж говорим про нормальных людей? :-) а действия идиотов предсказать нельзя - у них точность нужна до абсолютной, и т.д....
ну вот соверменное определение секунды: "Секунда — время, равное 9 192 631 770 периодам излучения, соответствующего переходу между двумя сверхтонкими уровнями основного состояния атома цезия-133.". т.е. даже там есть граница точности...
49 АгентБезопасной Нацио
 
31.08.22
13:59
(44) нет никаких гарантий. просто если есть несколько событий, а нужно только одно - мы принмаем какое-то правило. в данном случае - максимум ссылки. можно принять первцю букву названия клиента. или его ИНН. или сумму документа.
50 Kassern
 
31.08.22
13:59
(49) о том и речь)
51 Kassern
 
31.08.22
14:01
Если мне не изменяет память, можно получить Гуид1 и Гуид2, создать Док1 и Док2, Док1 присвоить гуид2, а Док2 - гуид1 соответственно. Оба документа записать одной датой в порядке, вначале Док1, потом Док2. Какой из них будет последним по правилу Максимум(Ссылка)?
52 АгентБезопасной Нацио
 
31.08.22
14:05
(51) у которого гуид больше
53 Kassern
 
31.08.22
14:05
Вот тут подробно расписано:
https://its.1c.ru/db/metod8dev/content/2737/hdoc
54 RomanYS
 
31.08.22
14:05
правила выбора последнего можно указать произвольные:

ВЫБРАТЬ ПЕРВЫЕ 999999999
    НАЧАЛОПЕРИОДА(Док.Дата, ДЕНЬ) КАК ДатаДень,
    Док.Контрагент,
    Док.Ссылка КАК Ссылка,
    АВТОНОМЕРЗАПИСИ() КАК НомерПП
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.РеализацияТоваровУслуг КАК Док

УПОРЯДОЧИТЬ ПО
    Док.Дата,
    Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МАКСИМУМ(ВТ.НомерПП) КАК НомерПП,
    ВТ.ДатаДень
ПОМЕСТИТЬ НомераПоследних
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.ДатаДень
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Контрагент,
    НомераПоследних.ДатаДень
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ НомераПоследних КАК НомераПоследних
        ПО ВТ.ДатаДень = НомераПоследних.ДатаДень
55 Kassern
 
31.08.22
14:06
(52) и у которого будет больше? Это один и тот же вид документа
56 АгентБезопасной Нацио
 
31.08.22
14:07
(53) что и было процитировано в (17)
57 RomanYS
 
31.08.22
14:08
(55) гуиды то разные, один из них больше
58 АгентБезопасной Нацио
 
31.08.22
14:08
(55) у одного из двух и будет больше. ибо они не равны.
59 Ryzeman
 
31.08.22
14:11
(43) А на совпадение в 1 секунду вообще пофиг ИМХО :Ъ

ВЫБРАТЬ РАЗЛИЧНЫЕ
НАЧАЛОПЕРИОДА(ДокРеализация1.Дата) КАК Дата,
МАКСИМУМ(ДокРеализация2.Дата) КАК ДатаВремяПоследнейПродажи
Поместить Периоды
Из Документ.РеализацияТоваровУслуг КАК ДокРеализация1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК ДокРеализация2
ПО ДокРеализация1.Дата = ДокРеализация2.Дата
И ДокРеализация2.Проведен  
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ДокРеализация1.Дата)
;
ВЫБРАТЬ
Периоды.Дата КАК Дата,
Максимум(ДокРеализация.Ссылка) КАК Реализация
ИЗ
Периоды КАК Периоды
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК ДокРеализация
ПО ДокРеализация.Дата = Периоды.ДатаВремяПоследнейПродажи  
СГРУППИРОВАТЬ ПО
Периоды.Дата
УПОРЯДОЧИТЬ ПО
Периоды.Дата УБЫВ
60 Kassern
 
31.08.22
14:14
(57) (58) Конечно разные! Только какой из них больше? Что выдаст Максимум(Ссылка) по этим двум документам, последний записанный в базу с гуидом1, или документ с гуидом2?
61 АгентБезопасной Нацио
 
31.08.22
14:20
(60) ты издеваешься? Максимум(Ссылка) выдаст наибольший из этих двух.
62 Ryzeman
 
31.08.22
14:22
(59) кхм

ВЫБРАТЬ РАЗЛИЧНЫЕ
НАЧАЛОПЕРИОДА(ДокРеализация1.Дата, День) КАК Дата,
МАКСИМУМ(ДокРеализация2.Дата) КАК ДатаВремяПоследнейПродажи
Поместить Периоды
Из Документ.РеализацияТоваровУслуг КАК ДокРеализация1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК ДокРеализация2
ПО НАЧАЛОПЕРИОДА(ДокРеализация1.Дата, День) = НАЧАЛОПЕРИОДА(ДокРеализация2.Дата, День)
И ДокРеализация2.Проведен  
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ДокРеализация1.Дата, День)
;
ВЫБРАТЬ
Периоды.Дата КАК Дата,
Максимум(ДокРеализация.Ссылка) КАК Реализация
ИЗ
Периоды КАК Периоды
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК ДокРеализация
ПО ДокРеализация.Дата = Периоды.ДатаВремяПоследнейПродажи  
СГРУППИРОВАТЬ ПО
Периоды.Дата
УПОРЯДОЧИТЬ ПО
Периоды.Дата УБЫВ
63 RomanYS
 
31.08.22
14:22
(60) Какая разница? Есть правила сравнения Гуидов и по ним определится максимальный. Упорядоченность гуидов в порядке ввода не гарантируется
64 Kassern
 
31.08.22
14:26
(63) Я к этому и веду. Нет гарантий, что если гуид больше, значит документ записан позже. И получится, что "последний" документ, не совсем и последний. Просто это нужно иметь в виду.
65 АгентБезопасной Нацио
 
31.08.22
14:30
(64) "Однако очевидно, что два документа или два движения могут иметь одинаковое значение даты (иметь одинаковую дату включая время). Чтобы порядок таких документов был всегда одинаков (сохранялся во всех выборках) документы и движения дополнительно упорядочиваются по значению ссылки документа"(цы) ИТС
66 RomanYS
 
31.08.22
14:32
(64) "последний" задается какими-то правилами. Если правила не указаны, то я подразумеваю (47)
67 Kassern
 
31.08.22
14:35
(65) Но это не дает гарантии, что документ действительно последний (записанный в базу, о чем я и писал выше, о чем и указано на ИТС дальше в этой же статье)
68 Kassern
 
31.08.22
14:36
И если клиенту нужен именно последний записанный в базу, то данный метод может не подойти.
69 Ryzeman
 
31.08.22
14:37
(68) а что оба последних документа окажутся проведёнными неоперативно? Какую пользу принесёт в данном случае последний записанный в базу?
70 Ryzeman
 
31.08.22
14:38
а что если*
71 АгентБезопасной Нацио
 
31.08.22
14:38
(67) (68) документ последний по правилам упорядочивания 1с. среди всех документов, записанных с одинаковым временем, _последним_ будет СЧИТАТЬСЯ именно такой.
72 RomanYS
 
31.08.22
14:42
(68) Какой "данный метод"? Просто говорим, что должны быть заданы конкретные правила. Например, последний определяем по номеру или по служебному реквизиту
73 Kassern
 
31.08.22
14:45
(72) Я вообще мало пользы вижу в подобном запросе...Скорее всего, в рамках хотелки, вообще пофиг какой клиент будет, если попадется 2 отгрузки на одну дату
74 АгентБезопасной Нацио
 
31.08.22
14:50
(73) если после отгрузки иванову больше отгрузок не бывает, значит, он распугивает нам всех клиентов!
75 RomanYS
 
31.08.22
14:58
(73) нет никакой хотелки, это наверняка тестовая задача.
Пусть будет не последняя, а самая большая. В случае равенства берем первого контрагента по алфавиту))
76 АгентБезопасной Нацио
 
31.08.22
14:59
(75) а может все-таки "последний клиент" - это который меньше всех купил?
77 hao5352
 
31.08.22
15:01
(76) Вариант с "последний му..к" был интереснее
78 АгентБезопасной Нацио
 
31.08.22
15:01
(75) но в случае с дата+ссылка - для проверки откроют журнал документов, удостоверятся и успокоются...
79 АгентБезопасной Нацио
 
31.08.22
15:01
(77) ну, значит, упорядочивай по размеру просроченной дебиторки
80 hao5352
 
31.08.22
15:03
(73) Пользы нет,я хотел понять,как выделить на каждый день последнего контрагента,наврядли это пригодится,но увидел в группе,что человек скидывал подобное(там надо было в тз внести всё это) являлось тестовой задачей.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн