|
Как сделать запросом такой фокус? | ☑ | ||
---|---|---|---|---|
0
ТеньД
21.10.13
✎
13:00
|
Рисуя отчет для бухгалтерии получил таблицу:
Контрагент, Дата (дата последней операции), Сумма (конечный остаток). И все было бы хорошо, но некоторые контрагенты размножились. Причина оказалась в том, что на одну дату/время бухгалтера вбили несколько операций. Как с этим бороться в запросе пока не понял. Есть мысли? |
|||
1
PR
21.10.13
✎
13:01
|
Регистратор
|
|||
2
Maxus43
21.10.13
✎
13:09
|
а что надо получить? только одну строку из них, или общую сумму на этот день/время?
|
|||
3
Dmitry1c
21.10.13
✎
13:11
|
(0) группировать
|
|||
4
Ненавижу 1С
гуру
21.10.13
✎
13:13
|
(1) -1
(3) +1 |
|||
5
MKZM
21.10.13
✎
13:16
|
(0) (3)
|
|||
6
MKZM
21.10.13
✎
13:18
|
(2) общую, иначе чушь
|
|||
7
samozvanec
21.10.13
✎
13:18
|
(0) (5)
(6) последней же именно хотят |
|||
8
Maxus43
21.10.13
✎
13:19
|
(6) >>дата последней операции
вот хрен знает чушь или нет. Общая не отражает данной хотелки |
|||
9
ТеньД
21.10.13
✎
13:41
|
Надо получить последнюю операцию и конечный остаток на этот момент. По чем группировать непонятно: контрагент и дата одинаковы. Пример:
- Вася Пупкин 10.10.2013 0:00:00 100 - Вася Пупкин 10.10.2013 0:00:00 200 На выходе должно остаться только: - Вася Пупкин 10.10.2013 0:00:00 200 |
|||
10
Maxus43
21.10.13
✎
13:44
|
(9) почему 200 - последняя, а не 100?
|
|||
11
NcSteel
21.10.13
✎
13:45
|
(9) Скажи критерий выбора, сможешь написать запрос.
|
|||
12
PR
21.10.13
✎
13:46
|
(9) Читай (1), не забудь еще номер строки.
|
|||
13
Maxus43
21.10.13
✎
13:48
|
(12) хоть немного развёртывай ответ, а то набор букв без смысла.
По моменту времени надо сортировать докменты, какой нахрен номер строки у документа? Если в разных доках записи? |
|||
14
Ненавижу 1С
гуру
21.10.13
✎
13:48
|
(9) зачем вам последняя операция? что это вам реально даст?
|
|||
15
exwill
21.10.13
✎
13:49
|
(9) Это называется "срез последних".
Решается через соединение таблицы с самой собой. |
|||
16
Salimbek
21.10.13
✎
13:56
|
(9) Если одинаковы и надо вывести какую-то одну из них, то
Select Pupkin, Time, Max(Sum) FROM ... GROUP BY Pupkin, Time |
|||
17
ТеньД
21.10.13
✎
13:59
|
(10) Потому что эта операция позже первой. Дата одинаковая, момент времени разный.
(11) Критерий выбора понятен: сгруппировать МАКСИМУМ(Регистратор.МоментВремени). Засада в том, что с моментом времени такие операции не работают. (12) Нет номера строки. Все уже заранее свернуто по регистратору. (14) Смысл отчета: конечный остаток по контрагенту + дата последней операции. (16) Это конечный остаток. Аггрегирование не имеет смысла. Надо получить именно последнее число. |
|||
18
NcSteel
21.10.13
✎
14:00
|
(17) Работают по Максимум (Регистратор), регистратор это момент времени + ссылка.
|
|||
19
PR
21.10.13
✎
14:06
|
(13) Что непонятного-то?
Есть регистр, в нем позиция определяется регистратором и номером строки. |
|||
20
PR
21.10.13
✎
14:08
|
(17) Ну так тогда добавь номер строки или удали лишние записи.
|
|||
21
1Cv8_accepted
21.10.13
✎
14:08
|
(0) АВТОУПОРЯДОЧИВАНИЕ
|
|||
22
Defender aka LINN
21.10.13
✎
14:08
|
(18) "регистратор это момент времени + ссылка." О_о
Момент времени - это дата+ссылка |
|||
23
Schwonder
21.10.13
✎
14:16
|
(0) Выбрать последние даты по контрам, собрать документы и остатки по регистраторам по этим датам, соединиться по контрам и суммам с остатками на КонецПериода, сгруппировать.. и усё! Делов то.
|
|||
24
hhhh
21.10.13
✎
14:19
|
(17) надо свернуть не по регистратору, а по дате. Зачем вы регистратор сюда приделали?
|
|||
25
wms
21.10.13
✎
14:20
|
максимум
|
|||
26
ТеньД
21.10.13
✎
14:26
|
(18) К моему удивлению операции МАКСИМУМ и МИНИМУМ для регистраторов отрабатывают без ошибок. Только результат дают какой-то странный. МАКСИМУМ выцепил первый документ из выборки. МИНИМУМ вынул откуда-то из середины. Не вышел каменный цветок.
|
|||
27
CaMoJleT
21.10.13
✎
14:33
|
Если делать через одно место, то можно записывать в регистр еще и текущую дату и по ней уже подбирать "последнюю из двух одинаковых дат" :)
|
|||
28
Ненавижу 1С
гуру
21.10.13
✎
14:35
|
(17) исходя из
>>конечный остаток по контрагенту + дата последней операции ВЫБРАТЬ СУММА(КонечныйОстаток), МАКСИМУМ(Период) ... СГРУППИРОВАТЬ ПО Контрагент |
|||
29
ТеньД
21.10.13
✎
14:36
|
(28) Результат неверный. Для того же примера:
- Вася Пупкин 10.10.2013 0:00:00 100 - Вася Пупкин 10.10.2013 0:00:00 200 Запрос даст: - Вася Пупкин 10.10.2013 0:00:00 300 |
|||
30
wms
21.10.13
✎
14:38
|
не баламуть народ какой регистратор?
тебе надо из (9) Вася Пупкин 10.10.2013 0:00:00 100 - Вася Пупкин 10.10.2013 0:00:00 200 На выходе должно остаться только: - Вася Пупкин 10.10.2013 0:00:00 200 вот по периоду и группируй |
|||
31
ТеньД
21.10.13
✎
14:50
|
Для ясности мой запрос:
ВЫБРАТЬ ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент, ХозрасчетныйОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата, ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток ПОМЕСТИТЬ ВТ ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, Регистратор, , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты ГДЕ (ХозрасчетныйОстаткиИОбороты.СуммаОборотДт <> 0 ИЛИ ХозрасчетныйОстаткиИОбороты.СуммаОборотКт <> 0) И ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток <> 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Контрагент КАК Контрагент, МАКСИМУМ(ВТ.РегистраторДата) КАК РегистраторДата ПОМЕСТИТЬ ВТ1 ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.Контрагент КАК Контрагент, ВТ1.РегистраторДата, ВТ.СуммаКонечныйОстаток ИЗ ВТ1 КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО ВТ1.Контрагент = ВТ.Контрагент И ВТ1.РегистраторДата = ВТ.РегистраторДата УПОРЯДОЧИТЬ ПО Контрагент |
|||
32
Schwonder
21.10.13
✎
14:53
|
...
; /////////////////////// ВЫБРАТЬ ВТ_ТвояТаблица.Контрагент, МАКСИМУМ(ВТ_ТвояТаблица.Документ) КАК Документ, МАКСИМУМ(ВТ_ТвояТаблица.Сумма) КАК Сумма ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(&ГраницаПериода, &КакиеТоУсловияСчета, &МассивСубконто, &КакиеТоЕщёУсловия) КАК ХозрасчетныйОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТвояТаблица КАК ВТ_ТвояТаблица ПО ХозрасчетныйОстатки.Субконто1 = ВТ_ТвояТаблица.Контрагент И ХозрасчетныйОстатки.СуммаОстаток = ВТ_ТвояТаблица.Сумма СГРУППИРОВАТЬ ПО ВТ_ТвояТаблица.Контрагент |
|||
33
ТеньД
21.10.13
✎
15:05
|
(32) Великолепно! Работает.
|
|||
34
Salimbek
21.10.13
✎
15:16
|
(33) Угу, а если последний документ Уменьшит остаток - что выдаст запрос?
|
|||
35
Schwonder
21.10.13
✎
15:20
|
(34) После последнего документа остатки будут равны тем, что вернет таблица "Хозрасчетный.Остатки". Группировка там по большому счету и не нужна, но вписал на всякий идиотский случай..
|
|||
36
Ненавижу 1С
гуру
21.10.13
✎
15:41
|
(29) Периодичность день поставь
|
|||
37
ТеньД
21.10.13
✎
15:59
|
(36) Нельзя. Последнюю операцию не получишь.
|
|||
38
hhhh
21.10.13
✎
16:02
|
(37) но вообще-то остаток 300 должен быть. 100+200.
|
|||
39
ТеньД
21.10.13
✎
16:11
|
(38) Ты бух. отчеты когда-нибудь видел? Это не суммы операций, а конечное сальдо.
|
|||
40
Tateossian
21.10.13
✎
16:19
|
(9) Твои заказчики сами не знают, что хотят.
|
|||
41
pavelul73
21.10.13
✎
16:35
|
МоментВремени() не пробовали использовать?
|
|||
42
ТеньД
21.10.13
✎
17:11
|
(41) В запросе?
|
|||
43
pavelul73
21.10.13
✎
17:26
|
ну да, срез на моментвремени(), если я правильно понял суть вашего вопроса
|
|||
44
ТеньД
21.10.13
✎
17:42
|
(43) Агрегатные функции не любят МоментВремени. Приходиться делать как показал Schwonder.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |