Вход | Регистрация



Последнее движение по контрагентам по Хозрасчётный. Как?

Последнее движение по контрагентам по Хозрасчётный. Как?
Я
   bolobol
 
21.03.18 - 09:55
Добрый день!

Как получить последнее движение по контрагентам в РегистреБухгалтерии Хозрасчётный?

Спасибо!
 
 
   Buster007
 
1 - 21.03.18 - 10:00
взять максимальный период по контрагентам и соединиться по периоду и контрагенту
   Mankubus
 
2 - 21.03.18 - 10:00
(0) получить все движения, сгруппировать по максимальному периоду, выбрать движение с максимальным периодом
   bolobol
 
3 - 21.03.18 - 10:17
Откуда "взять" и с чем "соединить", чтобы выбрать, коллеги?
   bolobol
 
4 - 21.03.18 - 10:20
"В тупую" заюзали виртуальную таблицу оборотов - результат, ожидаемо, появился, но как-то... не быстро... долго, даже... со вчера ждали. Всего-то 100000 строк.
   VS-1976
 
5 - 21.03.18 - 10:21
(0) Берёшь физическую таблицу Субконто. И там фильтруешь по типу и контрагенту(там). Берёшь максимум дату. Ну и второе соединение с Субконто по дате и по Контрагенту находишь регистратор. Далее можешь соединить с Движением. Ну и субконтов подкинешь остальные
   zak555
 
6 - 21.03.18 - 10:21
Выбрать первые 1
Из хз

Сортировка убыв
   Малыш Джон
 
7 - 21.03.18 - 10:22
(6) не всего одну запись, а по каждому контрагенту одну
   VS-1976
 
8 - 21.03.18 - 10:22
(5) Можешь список найденных Регистраторов использовать в Оборотах, что проще. Если контрагентов не так много
   piter3
 
9 - 21.03.18 - 10:22
регистратор нафига нужен?
   VS-1976
 
10 - 21.03.18 - 10:23
(9) Ну как зачем? Вытащить последние движения
 
 Рекламное место пустует
   RomanYS
 
11 - 21.03.18 - 10:24
(4) у вас 100000 контрагентов?
Озвучь задачу целиком.
   VS-1976
 
12 - 21.03.18 - 10:24
(10) Я как понимаю нужны проводки. Если только список документов, то достаточно (5)
   Малыш Джон
 
13 - 21.03.18 - 10:27
(3) получи таблицу вида Период, Контрагент, НужныеТебеДанные - это первая вт
из первой вт - Контрагент(по нему группировка), Период(его - в максимум) - это вторая вт
Соединяй первую вт со второй по Контрагенту и Периоду и вытаскивай НужныеТебеДанные
   piter3
 
14 - 21.03.18 - 10:27
(10) мда
   VS-1976
 
15 - 21.03.18 - 10:28
(14) Не мда, а что сказать хотел?
   bolobol
 
16 - 21.03.18 - 10:31
(11) Задача целиком озвучена, кроме слов "БЫСТРО!", ну и, желательно "правильно")
И, да - близко к 100000.

Последнее движение - дата, регистратор.

(5) На курсах говорили, что с таблицей Субконто как-то... нежелательно ею пользоваться, ибо она какие-то кривые данные даёт. Кто что слышал/ощутил?
   VS-1976
 
17 - 21.03.18 - 10:32
(16) Юмористы они. Для тысячи сейчас набросаю
   piter3
 
18 - 21.03.18 - 10:32
(15) За регистратор и твой способ-расстрел
   lodger
 
19 - 21.03.18 - 10:35
(16) а что там может быть кривого если в запросе явно типизировать поля?
   RomanYS
 
20 - 21.03.18 - 10:41
(16) Субконто это физическая таблица, там нет ничего кривого, если ты понимаешь, как она устроена.
Жутко тормозная виртульная таблица - ДвиженияССубконто. Остальные ВТ при правильной установке параметров более чем юзабельны.
   bolobol
 
21 - 21.03.18 - 10:48
То есть, просто таблицу ХЗ взять где ВЫРАЗИТЬ(как Контрагент) не null  все три субконто и взять максимум - не вариант никак?
   bolobol
 
22 - 21.03.18 - 10:48
*любое из трёх субконто
   VS-1976
 
23 - 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сник должен уметь решать, даже если его посреди ночи разбудить
   VS-1976
 
26 - 21.03.18 - 11:15
(24) Выкинь методичку, она для глупых составленна
   VS-1976
 
27 - 21.03.18 - 11:16
(24) Скажем так что бы начинающие не делали то, что потом подвесит сервер
   RomanYS
 
28 - 21.03.18 - 11:28
(21) Что такое ХЗ?
Или ты берешь живую таблицу Субконто с явным отбором по виду субконто, или используешь таблицу Обороты с обязательным  указанием параметра ВидСубконто. Нигде никаких 3-х субконто не  возникает.
   Малыш Джон
 
29 - 21.03.18 - 11:33
(26) аххаа)))
>>Выкинь методичку, она для глупых составленна

"... спроси лучше у меня, я знаю как надо" ?
   bolobol
 
30 - 21.03.18 - 11:36
(28) РегБух.Хозрасчётный, под ХЗ имел в виду.
Точно, в живой таблице РегБух нет субконтов... чёт я попутался.

Спасибо всем! Рискнём с вирт.таблицей Субконто
   RomanYS
 
31 - 21.03.18 - 11:38
(30) Как!? ..таблица Субконто не виртуальная!
   bolobol
 
32 - 21.03.18 - 11:39
(31) Не поспоришь тут... )))
   VS-1976
 
33 - 21.03.18 - 11:46
(29) Ну да. Что такое ПОМЕСТИТЬ?
ПОМЕСТИТЬ это создание временной таблицы и на каждую запись по INSERT. А соединение с подзапросом это соединение в памяти. Если у тебя много пользователей постоянно использующее tembdb то увлечение виртуальными таблицами так же есть шанс не кисло провалиться по производительности. Если у тебя мало памяти физической, то ПОМЕСТИТЬ можно ещё оправдать
 
 
   RomanYS
 
34 - 21.03.18 - 12:13
(33) у временных таблиц есть огромный плюс - они добавляют читаемости запросу. И если нет явного затыка в производительности то рекомендация (вендора в том числе) - использовать. А если проблемы со скоростью есть - тестировать, возможно даже в одной и той же задаче будут выигрывать разные варианты (временные против вложенных) на конкретном железе и данных.

Кстати в решении (0) будет ещё одна проблема - несколько регистраторов по контрагенту в одну секунду. (33) будешь еще раз читать субконто из базы и ещё раз соединять?
   Вафель
 
35 - 21.03.18 - 12:18
sql же не сразу на диск пишет. Сначала в памяти, а потом сбрасывает, асинхронно
   VS-1976
 
36 - 21.03.18 - 12:41
(34) Там несколько вариантов и выскочат для одного контрагента, если будет в одну и ту же секунду несколько различных регистраторов. Это уже философский вопрос что показывать, так как после соединений данные выдаются не в той последовательности в которой вносились
   VS-1976
 
37 - 21.03.18 - 12:43
(36) Обычно вопрос ставят последнее движение для реализации к примеру, что бы понять когда была последняя отгрузка. А так давайте узнаем последний документ... Это может быть как отгрузка, так и оплата, так и списание ( гарантия )
   Малыш Джон
 
38 - 21.03.18 - 12:58
(33) >>ПОМЕСТИТЬ это создание временной таблицы и на каждую запись по INSERT. А соединение с подзапросом это соединение в памяти. Если у тебя много пользователей постоянно использующее tembdb то увлечение виртуальными таблицами так же есть шанс не кисло провалиться по производительности. Если у тебя мало памяти физической, то ПОМЕСТИТЬ можно ещё оправдать

существует несколько способов соединения и они зависят в том числе от размера таблиц. в случае с выборкой размер таблицы непонятен, соответственно велик шанс что будет задействован неоптимальный алгоритм.
   VS-1976
 
39 - 21.03.18 - 13:22
(38) Я стараюсь писать запрос так, что бы оптимизатору не было нужды напрягаться. Когда я пишу запрос, я представлю себе что должен проделать ms sql для получения результата
   Малыш Джон
 
40 - 21.03.18 - 13:24
(39) а что, если при написании запроса представлять нужный способ, оптимизатор потом выберет именно его? ))
хмммм... никогда так не делал,  нужно попробовать
   VS-1976
 
41 - 21.03.18 - 13:30
(40) Попробуй, тебе понравится. Способов то не так уж и много. Если написать правильно запрос, то оптимизатор не будет его перестраивать по другому


Список тем форума
Рекламное место пустует  Рекламное место пустует
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует