Имя: Пароль:
1C
 
оптимальность запроса бух регистра
,
0 Александр056
 
23.12.15
12:58
запрос к регистру бухгалтерии...

ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК ДоговорКонтрагента,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Отгружено,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Оплачено,
как пример, видно что из регистра выбираются поля, но вот момент,

ХозрасчетныйОстаткиИОбороты.Субконто2.ВидВзаиморасчетов.КоличествоДнейОтсрочки

обращение идет к другим таблицам, не этого регистра, вопрос оптимальности, если дает так обратиться запрос  - не заморачиваться? или для всех контрагентов, получить отдельной таблицей виды взаиморасчетов(справочник) и оттуда получить кол-во дней? на сколько оптимальнее тут использование 2х таблиц?
1 Aleksandr N
 
23.12.15
13:01
(0) Оптимальнее вторую таблицу левым соединением. И если остатки не нужны, то использовать вирт. регистр оборотов.
2 ViSo76
 
23.12.15
13:03
После получения остатков и оборотов будет левое соединение .ВидВзаиморасчетов. быстрее не напишешь. Проблема в вычислении остатков и оборотов
3 Александр056
 
23.12.15
13:05
остатки нужны в разрезе Дт и Кт
4 GROOVY
 
23.12.15
13:06
ХозрасчетныйОстаткиИОбороты.Субконто2.ВидВзаиморасчетов.КоличествоДнейОтсрочки  - Жесть.
5 GROOVY
 
23.12.15
13:06
Типизируйте субконто2.
6 ДенисЧ
 
23.12.15
13:07
А что, ВЫРАЗИТЬ сегодня уже не модно?
7 ViSo76
 
23.12.15
13:10
(4) Ты считаешь что Субконто2 имеет составной тип?
8 Александр056
 
23.12.15
13:10
(5) Павел сейчас через вашу консоль с замером производительности пробую, с Левым соединением и без него, с ВЫРАЗИТЬ Субконто 2 и без него, чет разница прям совсем маленькая..... хотя строк в результате не мало
9 Александр056
 
23.12.15
13:10
(7) оно имеет составной тип
10 ViSo76
 
23.12.15
13:13
(8) А с чего будет ускорение то? Ну не одно левое, два или три будет сути не меняет.
11 Александр056
 
23.12.15
13:14
(5) ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто2 как Справочник.ДоговорыКонтрагентов) КАК ДоговорКонтрагента,
чет по-моему тоже не дало особого прироста.... в замере отличается время выполнения несколько раз одного и того же запроса почти на секкунду
12 ViSo76
 
23.12.15
13:19
Чтобы ускорить думай что тебе нужно от этой виртуальной таблицы "ХозрасчетныйОстаткиИОбороты". Возможно что можно выбрав из физических таблиц + остатки будет быстрее или других регистров.
13 GROOVY
 
23.12.15
13:20
Смотрите план запроса http://expert.chistov.pro/public/328469/ Без ВЫРАЗИТЬ совсем все плохо будет.
14 ViSo76
 
23.12.15
13:23
(13) Если справочники копеечные то хоть какой план это будет экономия на спичках
15 GROOVY
 
23.12.15
13:25
(14) То есть 1 левое соединение в плане и 120 - разницы никакой?
16 ViSo76
 
23.12.15
13:26
(15) Ты там увидел 120? Или максимум 3 левых. Определись сколько левых
17 GROOVY
 
23.12.15
13:29
(16)  Коллекция характеристик ВидыСубконто из скольки типов образована?
18 ViSo76
 
23.12.15
13:32
(17) Я не в курсе из сколько у меня не типовое решение. И даже в выразить экономия в секунду как я понимаю не спасает.

Вы как в анекдоте:

Врач опаздывает к больному и он умирает.
Врач спрашивает у родственников: "Покойный перед смертью потел?"
- Потел...
- Это очень хорошо!
19 GROOVY
 
23.12.15
13:36
Тоже вспомнился анекдот:
...
Чукча не читатель, чукча - писатель!
20 Александр056
 
23.12.15
13:38
(13) жаль нет у меня акка, да и не УФ у меня....но спасибо
21 Александр056
 
23.12.15
13:38
в принципе оставил так:

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
    ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов) КАК ДоговорКонтрагента,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Отгружено,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Оплачено,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК ТекущаяЗадолженность,
    ВидыВзаиморасчетов.КоличествоДнейОтсрочки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Период, , Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыВзаиморасчетов КАК ВидыВзаиморасчетов
        ПО ХозрасчетныйОстаткиИОбороты.Субконто2.ВидВзаиморасчетов = ВидыВзаиморасчетов.Ссылка

УПОРЯДОЧИТЬ ПО
    ХозрасчетныйОстаткиИОбороты.Субконто1.Наименование
22 Александр056
 
23.12.15
13:40
(13) а есть халява?) и не на УФ?)
23 GROOVY
 
23.12.15
13:40
(20)  Можно профайлеров МССКЛ глянуть.
(21) Условие соединения сводит на нет предполагаемую выгоду.
(22) Там этих консолей как у дурака фантиков. Думаю можно найти.
24 Александр056
 
23.12.15
13:41
(23) т.е. не левым соединением а выразить и через точку?
25 GROOVY
 
23.12.15
13:43
Как только нетипизированное "СубконтоТОЧКА" появляется, неважно где, в условии, в поле выбора, в УПОРЯДОЧИТЬ, реальный план запроса будет делать столько левых соединений, сколько типов в коллекции характеристик есть. А в типовой тих там много, очень много.
26 GROOVY
 
23.12.15
13:43
(24)  Да, тут пофигу, либо явно делать соединение, либо неявно через точку.
27 Александр056
 
23.12.15
13:47
(26) понял, главное типизировать а дальше хоть Регистр.точка хоть ЛЕВЫМ
28 Александр056
 
23.12.15
13:49
всем спасибо большое!
29 sash-ml
 
23.12.15
13:52
не там выражать нужно а в параметрах запроса, при этом договор станет субконо №1
ВЫБРАТЬ  
    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК ДоговорКонтрагента,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Отгружено,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Оплачено,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК ТекущаяЗадолженность
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Период, &ВидСубконтоДоговор , Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
30 GROOVY
 
23.12.15
13:55
(29) Сюрприз: без ВЫРАЗИТЬ параметр в запросе только лишь отбирает нужные по типу субконто и упорядочивает их в нужном порядке, но обращение через точку к субконто будет как с параметрои так и без делать кучу левых соединений.
31 sash-ml
 
23.12.15
14:02
(30) но не указывать вид субконто еще хуже. +(29) можно выразить, поместить в ВТ, из которой уже вытянуть контрагента и КоличествоДнейОтсрочки через точку, всего два левых неявно приатачится. должно быть быстро
32 ViSo76
 
23.12.15
14:04
(28) Так тебе помогло левое соединение в (21) или так моральная помощь помогает?
33 Александр056
 
23.12.15
14:13
(32) в итоге выразить и через точку сделал.... не увидел я большой разницы в замере производительности, не стабильны показатели...
34 Александр056
 
23.12.15
14:13
(32) и моральная тоже) голову поднял, интересные вещи / мнения почитал, дальше пошел ....)
35 Александр056
 
23.12.15
14:17
(29) если я так сделаю, то у меня остается только то субконто которео указал в параметре, мне как бы и договор и контрагент нужен
36 ViSo76
 
23.12.15
14:21
Посмотри в консоле из чего состоит виртуальная таблица "Остатки и обороты". Может проще выбрать отдельно остатки и присоединив позже обороты отсеяв лишнее и присоединив позже субконто. Продажи можно и в регистре накопления взять, а денежный приход отдельно. В общем всё зависит от конкретного случая.
37 hhhh
 
23.12.15
14:22
(35) делай параметр &ВидыСубконто массив. И в нем пиши свои виды. КАкие напишешь, в таком порядке и будут субконто
38 Александр056
 
23.12.15
14:22
а и кстати как быть с полем Регистратор у которого так же оч много типов, а мне надо несколько только, дату документа, но только нужного(ых), если в условии сделаю то все равно будет запрос ко всем типам
39 ViSo76
 
23.12.15
14:25
Сто-то подобное не проверял но по идее будет работать.

РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Период, Регистратор, ( Регистратор ССЫЛКА Документ.МойДокумент Или Регистратор ССЫЛКА Документ.МойДокумент1 ) И Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
40 Александр056
 
23.12.15
14:26
(36) дебиторку надо, взаиморасчет по договору в целом, УУ и БУ отличаются( по УУ работало до меня, щас сотрудник нашел этот момент и говорит сделатй по БУ вот с этим регистром и колдую
41 sash-ml
 
23.12.15
14:26
(35) контрагента из договора получишь,
(38) при регистратор ничего не понятно, что получить то хочешь?
42 Александр056
 
23.12.15
14:27
(41) выразить как несколько типов нельзя, мне надо отобрать 2 типа документов и получить их дату, через точку, соответственно если не типизировать поле получится очень неправильно обращение....
43 ViSo76
 
23.12.15
14:31
Забей на выразить. Если у тебя в субконто больше справочников просто присоедени левым соединением со справочниками и в ГДЕ отфильтруй лишнее. Главное фильтрануть правильно движения.
44 hhhh
 
23.12.15
14:31
обычно поле период в регистре равно дате регистратора. Чего вы там понакрутили?
45 sash-ml
 
23.12.15
14:32
а бывает дебиторка не по всем регистраторам?
46 ViSo76
 
23.12.15
14:34
(44) Если ты про (39) то там только идея я не правильно накидал текст запроса. И к стати я не курю чего и тебе желаю.
47 Александр056
 
23.12.15
14:34
(44) (45) пойду пройдусь, уже сам чет вытворяю....тайм аут надо 15 мин. (37) кстати да, загнал два типа субконто, отобрал....
48 Александр056
 
23.12.15
14:38
(45) бывает надо выбрать дату последней отгрузки, и дату последней оплаты
49 sash-ml
 
23.12.15
14:45
(48) вот только выбирать эти даты из ОстаткиИОбороты не нужно. тогда теряется весь смысл оборотного регистра
50 Александр056
 
23.12.15
14:47
(49) а брать из РН Взаиморасчеты с контрагентами, там могут быть не все документы, если в УУ не отразят их
51 ViSo76
 
23.12.15
14:49
(50) Ты можешь выбрать РН и получить Ссылки, а затем по ссылкам движения
52 Александр056
 
23.12.15
15:01
(51) не совсем понял, получу ссылки, в том числе не получу тех которые мне нужны...и?
53 sash-ml
 
23.12.15
15:12
конфа то какая?
54 ViSo76
 
23.12.15
16:06
Если задача узнать последний расход / приход то можно так.  По аналогии расширить:

ВЫБРАТЬ ПЕРВЫЕ 1
    Период,
    Регистратор

ПОМЕСТИТЬ тзРН

ИЗ
    РегистрБухгалтерии.Управленческий.Субконто

ГДЕ
    Вид = ЗНАЧЕНИЕ( ПланВидовХарактеристик.ВидыСубконтоУправленческие.Контрагенты )
    И Значение = &Контрагент
    И Регистратор ССЫЛКА Документ.РасходнаяНакладная

УПОРЯДОЧИТЬ ПО
    Период УБЫВ
;

ВЫБРАТЬ ПЕРВЫЕ 1
    Период,
    Регистратор

ПОМЕСТИТЬ тзПриход

ИЗ
    РегистрБухгалтерии.Управленческий.Субконто

ГДЕ
    Вид = ЗНАЧЕНИЕ( ПланВидовХарактеристик.ВидыСубконтоУправленческие.Контрагенты )
    И Значение = &Контрагент
    И Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер

УПОРЯДОЧИТЬ ПО
    Период УБЫВ
;

ВЫБРАТЬ * ИЗ тзРН

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ * ИЗ тзПриход
55 Александр056
 
23.12.15
16:09
(53) УПП, отвлекся....
56 ViSo76
 
23.12.15
16:17
(55) Ты бы хотя бы задачу обрисовал что в конечном итоге хочешь получить?
57 Александр056
 
24.12.15
06:27
(56) дебиторку, взаиморасчет по дог в целом, берем то что отгружено за период, то что оплачено, кол-во дней отсрочки,
далее смотрим кол-во отгруженного на кол-во дней отсрочки назад и текущее состояние оплаты, вычитаем, получаем сколько висит не оплачено... ну и так же дату посл отгрузки и посл оплаты....
58 ViSo76
 
24.12.15
08:15
Делал точно такую же задачу бери остатки по 62.1 в разрезе договоров, а затем уже движения, можно по документам и вычисляй
59 ViSo76
 
24.12.15
08:25
Остатки на конец периода. Движуху брать документы или регистр накопления наверняка что-то есть и отнимать легальный оборот. Остальное просрочка. У меня так же просрочка через 5 дней отражается. И другие моменты.
60 Александр056
 
24.12.15
09:16
(59) ок спасибо!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший