|
Последнее движение по контрагентам по Хозрасчётный. Как? | ☑ | ||
---|---|---|---|---|
0
bolobol
21.03.18
✎
09:55
|
Добрый день!
Как получить последнее движение по контрагентам в РегистреБухгалтерии Хозрасчётный? Спасибо! |
|||
1
Buster007
21.03.18
✎
10:00
|
взять максимальный период по контрагентам и соединиться по периоду и контрагенту
|
|||
2
Mankubus
21.03.18
✎
10:00
|
(0) получить все движения, сгруппировать по максимальному периоду, выбрать движение с максимальным периодом
|
|||
3
bolobol
21.03.18
✎
10:17
|
Откуда "взять" и с чем "соединить", чтобы выбрать, коллеги?
|
|||
4
bolobol
21.03.18
✎
10:20
|
"В тупую" заюзали виртуальную таблицу оборотов - результат, ожидаемо, появился, но как-то... не быстро... долго, даже... со вчера ждали. Всего-то 100000 строк.
|
|||
5
VS-1976
21.03.18
✎
10:21
|
(0) Берёшь физическую таблицу Субконто. И там фильтруешь по типу и контрагенту(там). Берёшь максимум дату. Ну и второе соединение с Субконто по дате и по Контрагенту находишь регистратор. Далее можешь соединить с Движением. Ну и субконтов подкинешь остальные
|
|||
6
zak555
21.03.18
✎
10:21
|
Выбрать первые 1
Из хз Сортировка убыв |
|||
7
Малыш Джон
21.03.18
✎
10:22
|
(6) не всего одну запись, а по каждому контрагенту одну
|
|||
8
VS-1976
21.03.18
✎
10:22
|
(5) Можешь список найденных Регистраторов использовать в Оборотах, что проще. Если контрагентов не так много
|
|||
9
piter3
21.03.18
✎
10:22
|
регистратор нафига нужен?
|
|||
10
VS-1976
21.03.18
✎
10:23
|
(9) Ну как зачем? Вытащить последние движения
|
|||
11
RomanYS
21.03.18
✎
10:24
|
(4) у вас 100000 контрагентов?
Озвучь задачу целиком. |
|||
12
VS-1976
21.03.18
✎
10:24
|
(10) Я как понимаю нужны проводки. Если только список документов, то достаточно (5)
|
|||
13
Малыш Джон
21.03.18
✎
10:27
|
(3) получи таблицу вида Период, Контрагент, НужныеТебеДанные - это первая вт
из первой вт - Контрагент(по нему группировка), Период(его - в максимум) - это вторая вт Соединяй первую вт со второй по Контрагенту и Периоду и вытаскивай НужныеТебеДанные |
|||
14
piter3
21.03.18
✎
10:27
|
(10) мда
|
|||
15
VS-1976
21.03.18
✎
10:28
|
(14) Не мда, а что сказать хотел?
|
|||
16
bolobol
21.03.18
✎
10:31
|
(11) Задача целиком озвучена, кроме слов "БЫСТРО!", ну и, желательно "правильно")
И, да - близко к 100000. Последнее движение - дата, регистратор. (5) На курсах говорили, что с таблицей Субконто как-то... нежелательно ею пользоваться, ибо она какие-то кривые данные даёт. Кто что слышал/ощутил? |
|||
17
VS-1976
21.03.18
✎
10:32
|
(16) Юмористы они. Для тысячи сейчас набросаю
|
|||
18
piter3
21.03.18
✎
10:32
|
(15) За регистратор и твой способ-расстрел
|
|||
19
lodger
21.03.18
✎
10:35
|
(16) а что там может быть кривого если в запросе явно типизировать поля?
|
|||
20
RomanYS
21.03.18
✎
10:41
|
(16) Субконто это физическая таблица, там нет ничего кривого, если ты понимаешь, как она устроена.
Жутко тормозная виртульная таблица - ДвиженияССубконто. Остальные ВТ при правильной установке параметров более чем юзабельны. |
|||
21
bolobol
21.03.18
✎
10:48
|
То есть, просто таблицу ХЗ взять где ВЫРАЗИТЬ(как Контрагент) не null все три субконто и взять максимум - не вариант никак?
|
|||
22
bolobol
21.03.18
✎
10:48
|
*любое из трёх субконто
|
|||
23
VS-1976
21.03.18
✎
11:07
|
Попробуй примерно так сделать. Вид сам посмотри какой у тебя.
//ВЫБРАТЬ // Контрагент // //ПОМЕСТИТЬ втКонтрагенты //ИЗ // &СписокКонтрагенток КАК тзКонтрагенты //ИНДЕКСИРОВАТЬ ПО // Контрагент //; ВЫБРАТЬ Ссылка КАК Контрагент ПОМЕСТИТЬ втКонтрагенты ИЗ Справочник.Контрагенты ГДЕ Ссылка В ( &СписокКонтрагенток ) ИНДЕКСИРОВАТЬ ПО Ссылка ; ВЫБРАТЬ РАЗЛИЧНЫЕ тзСубконто.Значение КАК Контрагент, тзСубконто.Период, тзСубконто.Регистратор ИЗ втКонтрагенты ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ втКонтрагенты.Контрагент, МАКСИМУМ( тзСубконто.Период ) КАК Период ИЗ втКонтрагенты СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Субконто КАК тзСубконто ПО тзСубконто.Вид = ЗНАЧЕНИЕ( ПланВидовХарактеристик.ВидыСубконтоУправленческие.Контрагенты ) И тзСубконто.Значение = втКонтрагенты.Контрагент СГРУППИРОВАТЬ ПО втКонтрагенты.Контрагент ) КАК тзПериод ПО втКонтрагенты.Контрагент = тзПериод.Контрагент ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Субконто КАК тзСубконто ПО тзСубконто.Период = тзПериод.Период И тзСубконто.Значение = втКонтрагенты.Контрагент |
|||
24
Малыш Джон
21.03.18
✎
11:11
|
(23) вот так делать не надо:
... ИЗ втКонтрагенты ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ втКонтрагенты.Контрагент, МАКСИМУМ( тзСубконто.Период ) КАК Период ИЗ втКонтрагенты... https://its.1c.ru/db/metod8dev#content:5842:hdoc:subquery_join |
|||
25
Вафель
21.03.18
✎
11:12
|
Это задача: Срез последних
Такую задачу каждый 1сник должен уметь решать, даже если его посреди ночи разбудить |
|||
26
VS-1976
21.03.18
✎
11:15
|
(24) Выкинь методичку, она для глупых составленна
|
|||
27
VS-1976
21.03.18
✎
11:16
|
(24) Скажем так что бы начинающие не делали то, что потом подвесит сервер
|
|||
28
RomanYS
21.03.18
✎
11:28
|
(21) Что такое ХЗ?
Или ты берешь живую таблицу Субконто с явным отбором по виду субконто, или используешь таблицу Обороты с обязательным указанием параметра ВидСубконто. Нигде никаких 3-х субконто не возникает. |
|||
29
Малыш Джон
21.03.18
✎
11:33
|
(26) аххаа)))
>>Выкинь методичку, она для глупых составленна "... спроси лучше у меня, я знаю как надо" ? |
|||
30
bolobol
21.03.18
✎
11:36
|
(28) РегБух.Хозрасчётный, под ХЗ имел в виду.
Точно, в живой таблице РегБух нет субконтов... чёт я попутался. Спасибо всем! Рискнём с вирт.таблицей Субконто |
|||
31
RomanYS
21.03.18
✎
11:38
|
(30) Как!? ..таблица Субконто не виртуальная!
|
|||
32
bolobol
21.03.18
✎
11:39
|
(31) Не поспоришь тут... )))
|
|||
33
VS-1976
21.03.18
✎
11:46
|
(29) Ну да. Что такое ПОМЕСТИТЬ?
ПОМЕСТИТЬ это создание временной таблицы и на каждую запись по INSERT. А соединение с подзапросом это соединение в памяти. Если у тебя много пользователей постоянно использующее tembdb то увлечение виртуальными таблицами так же есть шанс не кисло провалиться по производительности. Если у тебя мало памяти физической, то ПОМЕСТИТЬ можно ещё оправдать |
|||
34
RomanYS
21.03.18
✎
12:13
|
(33) у временных таблиц есть огромный плюс - они добавляют читаемости запросу. И если нет явного затыка в производительности то рекомендация (вендора в том числе) - использовать. А если проблемы со скоростью есть - тестировать, возможно даже в одной и той же задаче будут выигрывать разные варианты (временные против вложенных) на конкретном железе и данных.
Кстати в решении (0) будет ещё одна проблема - несколько регистраторов по контрагенту в одну секунду. (33) будешь еще раз читать субконто из базы и ещё раз соединять? |
|||
35
Вафель
21.03.18
✎
12:18
|
sql же не сразу на диск пишет. Сначала в памяти, а потом сбрасывает, асинхронно
|
|||
36
VS-1976
21.03.18
✎
12:41
|
(34) Там несколько вариантов и выскочат для одного контрагента, если будет в одну и ту же секунду несколько различных регистраторов. Это уже философский вопрос что показывать, так как после соединений данные выдаются не в той последовательности в которой вносились
|
|||
37
VS-1976
21.03.18
✎
12:43
|
(36) Обычно вопрос ставят последнее движение для реализации к примеру, что бы понять когда была последняя отгрузка. А так давайте узнаем последний документ... Это может быть как отгрузка, так и оплата, так и списание ( гарантия )
|
|||
38
Малыш Джон
21.03.18
✎
12:58
|
(33) >>ПОМЕСТИТЬ это создание временной таблицы и на каждую запись по INSERT. А соединение с подзапросом это соединение в памяти. Если у тебя много пользователей постоянно использующее tembdb то увлечение виртуальными таблицами так же есть шанс не кисло провалиться по производительности. Если у тебя мало памяти физической, то ПОМЕСТИТЬ можно ещё оправдать
существует несколько способов соединения и они зависят в том числе от размера таблиц. в случае с выборкой размер таблицы непонятен, соответственно велик шанс что будет задействован неоптимальный алгоритм. |
|||
39
VS-1976
21.03.18
✎
13:22
|
(38) Я стараюсь писать запрос так, что бы оптимизатору не было нужды напрягаться. Когда я пишу запрос, я представлю себе что должен проделать ms sql для получения результата
|
|||
40
Малыш Джон
21.03.18
✎
13:24
|
(39) а что, если при написании запроса представлять нужный способ, оптимизатор потом выберет именно его? ))
хмммм... никогда так не делал, нужно попробовать |
|||
41
VS-1976
21.03.18
✎
13:30
|
(40) Попробуй, тебе понравится. Способов то не так уж и много. Если написать правильно запрос, то оптимизатор не будет его перестраивать по другому
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |