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


1С:Предприятие ::

Метки: 

БП 3.0, запрос долго считает итоги по регистру Хозрасчетный

Я
   novichok79
 
12.07.18 - 14:02
Доброго времени суток, коллеги. ГБ сегодня меня удивила тем, что у нее в списке банковских выписок долго перелистываются строки. БП версии 3.0.64.21, платформа 8.3.11.2867. Я включил ТЖ и посмотрел что творится с платформой в этот момент (ниже приведу то, что получается). Потом еще замер производительности на этом же месте попробовал запустить. Тоже тормоза. ТиИ (с ограничением в 30 минут делал), vacuumdb full тоже делал. Остается пересчитать итоги по регистру Хозрасчетный, как я понимаю, правильно? Подскажите, пожалуйста. Заранее благодарю за помощь.
 
 
   novichok79
 
1 - 12.07.18 - 14:03
06:30.642000-4889941,DBPOSTGRS,5,process=rphost,p:processName=bp_30,OSThread=5864,t:clientID=191,t:applicationName=1CV8C,t:computerName=IT-Programmer,t:connectID=12202,SessionID=3,Usr=Какашкина Лариса Петровна,AppID=1CV8C,Trans=0,dbpid=5264,Sql="SELECT
COALESCE(CAST(SUM(CASE WHEN T1.Q_001_F_008_ = TRUE THEN T1.Q_001_F_001_ ELSE T1.Q_001_F_000_ END) AS NUMERIC(33, 2)),CAST(0 AS NUMERIC)),
COALESCE(CAST(SUM(CASE WHEN T1.Q_001_F_008_ = TRUE THEN T1.Q_001_F_003_ ELSE T1.Q_001_F_002_ END) AS NUMERIC(27, 2)),CAST(0 AS NUMERIC)),
COALESCE(CAST(SUM(CASE WHEN T1.Q_001_F_008_ = TRUE THEN T1.Q_001_F_005_ ELSE T1.Q_001_F_004_ END) AS NUMERIC(27, 2)),CAST(0 AS NUMERIC)),
COALESCE(CAST(SUM(CASE WHEN T1.Q_001_F_008_ = TRUE THEN T1.Q_001_F_007_ ELSE T1.Q_001_F_006_ END) AS NUMERIC(34, 2)),CAST(0 AS NUMERIC))
FROM (SELECT
T2.Fld895InitialBalance_ AS Q_001_F_000_,
T2.Fld896InitialBalance_ AS Q_001_F_001_,
T2.Fld895TurnoverDt_ AS Q_001_F_002_,
T2.Fld896TurnoverDt_ AS Q_001_F_003_,
T2.Fld895TurnoverCt_ AS Q_001_F_004_,
T2.Fld896TurnoverCt_ AS Q_001_F_005_,
T2.Fld895FinalBalance_ AS Q_001_F_006_,
T2.Fld896FinalBalance_ AS Q_001_F_007_,
CASE WHEN ((((T2.Fld896InitialBalance_ <> CAST(0 AS NUMERIC)) OR (T2.Fld896TurnoverDt_ <> CAST(0 AS NUMERIC))) OR (T2.Fld896TurnoverCt_ <> CAST(0 AS NUMERIC))) OR (T2.Fld896FinalBalance_ <> CAST(0 AS NUMERIC))) THEN TRUE ELSE FALSE END AS Q_001_F_008_
FROM (SELECT
CASE WHEN SUM(T3.Fld896TurnoverDt_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld896TurnoverDt_) END AS Fld896TurnoverDt_,
CASE WHEN SUM(T3.Fld896TurnoverCt_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld896TurnoverCt_) END AS Fld896TurnoverCt_,
CASE WHEN SUM(T3.Fld896Balance_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld896Balance_) END AS Fld896InitialBalance_,
CASE WHEN SUM(T3.Fld896Balance_ + T3.Fld896FinalTurnover_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld896Balance_ + T3.Fld896FinalTurnover_) END AS Fld896FinalBalance_,
CASE WHEN SUM(T3.Fld895TurnoverDt_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld895TurnoverDt_) END AS Fld895TurnoverDt_,
CASE WHEN SUM(T3.Fld895TurnoverCt_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld895TurnoverCt_) END AS Fld895TurnoverCt_,
CASE WHEN SUM(T3.Fld895Balance_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld895Balance_) END AS Fld895InitialBalance_,
CASE WHEN SUM(T3.Fld895Balance_ + T3.Fld895FinalTurnover_) IS NULL THEN CAST(0 AS NUMERIC) ELSE SUM(T3.Fld895Balance_ + T3.Fld895FinalTurnover_) END AS Fld895FinalBalance_
FROM (SELECT
T4._Fld896 AS Fld896Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverCt_,
T4._Fld895 AS Fld895Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverCt_
FROM _AccRgAT2925 T4
INNER JOIN pg_temp.tt6 T5
ON T5._IDRRef = T4._AccountRRef AND T5._LineNo1 = CAST(1 AS NUMERIC) AND T5._Cnt = CAST(2 AS NUMERIC)
WHERE ((T4._Fld878 = CAST(0 AS NUMERIC))) AND ((((T4._Fld892RRef IN ('\\216J\\000\\026\\346\\330D\\037\\021\\345m\\177\\277\\217\\205\\272'::bytea)) AND (CASE WHEN T4._Value1_TYPE = '\\010'::bytea AND T4._Value1_RTRef = '\\000\\000\\000""'::bytea THEN T4._Value1_RRRef END = '\\207t\\000\\026\\346\\330D\\037\\021\\345\\346\\215\\300\\244\\327;'::bytea))) AND T4._Period = '3999-11-01 00:00:00'::timestamp AND (T4._Fld896 <> CAST(0 AS NUMERIC) OR T4._Fld895 <> CAST(0 AS NUMERIC)))
UNION ALL SELECT
CAST(-T6._Fld896Dt AS NUMERIC(21, 2)) AS Fld896Balance_,
T6._Fld896Dt AS Fld896FinalTurnover_,
T6._Fld896Dt AS Fld896TurnoverDt_,
CAST(CASE WHEN T6._Fld896Dt IS NULL THEN CAST(NULL AS NUMERIC) ELSE CAST(0 AS NUMERIC) END AS NUMERIC(15, 2)) AS Fld896TurnoverCt_,
CAST(-T6._Fld895 AS NUMERIC(21, 2)) AS Fld895Balance_,
T6._Fld895 AS Fld895FinalTurnover_,
T6._Fld895 AS Fld895TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverCt_
FROM _AccRg891 T6
INNER JOIN _AccRgED928 T7
ON T7._RecorderTRef = T6._RecorderTRef AND T7._RecorderRRef = T6._RecorderRRef AND T7._LineNo = T6._LineNo AND T7._Period = T6._Period AND T7._Correspond = CAST(0 AS NUMERIC) AND T7._KindRRef = '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\246\\030x\\322G'::bytea AND T7._Period >= '2018-06-20 00:00:00'::timestamp AND T7._Period <= '2018-06-20 23:59:59'::timestamp
WHERE (((T6._Fld878 = CAST(0 AS NUMERIC))) AND (T7._Fld878 = CAST(0 AS NUMERIC))) AND (T6._Active = TRUE AND T6._AccountDtRRef <> '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000'::bytea AND ((T6._AccountDtRRef IN ('\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273""'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273#'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273$'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273%'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273&'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273'''::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273('::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273)'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273*'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273+'::bytea))) AND (((T6._Fld892RRef IN ('\\216J\\000\\026\\346\\330D\\037\\021\\345m\\177\\277\\217\\205\\272'::bytea)) AND (CASE WHEN T7._Value_TYPE = '\\010'::bytea AND T7._Value_RTRef = '\\000\\000\\000""'::bytea THEN T7._Value_RRRef END = '\\207t\\000\\026\\346\\330D\\037\\021\\345\\346\\215\\300\\244\\327;'::bytea))) AND T6._Period >= '2018-06-20 00:00:00'::timestamp AND T6._Period <= '2018-06-20 23:59:59'::timestamp)
UNION ALL SELECT
CAST(T8._Fld896Ct AS NUMERIC(21, 2)) AS Fld896Balance_,
-T8._Fld896Ct AS Fld896FinalTurnover_,
CAST(CASE WHEN T8._Fld896Ct IS NULL THEN CAST(NULL AS NUMERIC) ELSE CAST(0 AS NUMERIC) END AS NUMERIC(15, 2)) AS Fld896TurnoverDt_,
T8._Fld896Ct AS Fld896TurnoverCt_,
CAST(T8._Fld895 AS NUMERIC(21, 2)) AS Fld895Balance_,
-T8._Fld895 AS Fld895FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverDt_,
T8._Fld895 AS Fld895TurnoverCt_
FROM _AccRg891 T8
INNER JOIN _AccRgED928 T9
ON T9._RecorderTRef = T8._RecorderTRef AND T9._RecorderRRef = T8._RecorderRRef AND T9._LineNo = T8._LineNo AND T9._Period = T8._Period AND T9._Correspond = CAST(1 AS NUMERIC) AND T9._KindRRef = '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\246\\030x\\322G'::bytea AND T9._Period >= '2018-06-20 00:00:00'::timestamp AND T9._Period <= '2018-06-20 23:59:59'::timestamp
WHERE (((T8._Fld878 = CAST(0 AS NUMERIC))) AND (T9._Fld878 = CAST(0 AS NUMERIC))) AND (T8._Active = TRUE AND T8._AccountCtRRef <> '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000'::bytea AND ((T8._AccountCtRRef IN ('\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273""'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273#'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273$'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273%'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273&'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273'''::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273('::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273)'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273*'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273+'::bytea))) AND (((T8._Fld892RRef IN ('\\216J\\000\\026\\346\\330D\\037\\021\\345m\\177\\277\\217\\205\\272'::bytea)) AND (CASE WHEN T9._Value_TYPE = '\\010'::bytea AND T9._Value_RTRef = '\\000\\000\\000""'::bytea THEN T9._Value_RRRef END = '\\207t\\000\\026\\346\\330D\\037\\021\\345\\346\\215\\300\\244\\327;'::bytea))) AND T8._Period >= '2018-06-20 00:00:00'::timestamp AND T8._Period <= '2018-06-20 23:59:59'::timestamp)
UNION ALL SELECT
CAST(-T10._Fld896Dt AS NUMERIC(21, 2)) AS Fld896Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverCt_,
CAST(-T10._Fld895 AS NUMERIC(21, 2)) AS Fld895Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverCt_
FROM _AccRg891 T10
INNER JOIN _AccRgED928 T11
ON T11._RecorderTRef = T10._RecorderTRef AND T11._RecorderRRef = T10._RecorderRRef AND T11._LineNo = T10._LineNo AND T11._Period = T10._Period AND T11._Correspond = CAST(0 AS NUMERIC) AND T11._KindRRef = '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\246\\030x\\322G'::bytea AND T11._Period > '2018-06-20 23:59:59'::timestamp AND T11._Period < '3999-11-01 00:00:00'::timestamp
WHERE (((T10._Fld878 = CAST(0 AS NUMERIC))) AND (T11._Fld878 = CAST(0 AS NUMERIC))) AND (T10._Active = TRUE AND T10._AccountDtRRef <> '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000'::bytea AND ((T10._AccountDtRRef IN ('\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273""'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273#'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273$'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273%'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273&'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273'''::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273('::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273)'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273*'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273+'::bytea))) AND (((T10._Fld892RRef IN ('\\216J\\000\\026\\346\\330D\\037\\021\\345m\\177\\277\\217\\205\\272'::bytea)) AND (CASE WHEN T11._Value_TYPE = '\\010'::bytea AND T11._Value_RTRef = '\\000\\000\\000""'::bytea THEN T11._Value_RRRef END = '\\207t\\000\\026\\346\\330D\\037\\021\\345\\346\\215\\300\\244\\327;'::bytea))) AND T10._Period > '2018-06-20 23:59:59'::timestamp AND T10._Period < '3999-11-01 00:00:00'::timestamp)
UNION ALL SELECT
CAST(T12._Fld896Ct AS NUMERIC(21, 2)) AS Fld896Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld896TurnoverCt_,
CAST(T12._Fld895 AS NUMERIC(21, 2)) AS Fld895Balance_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895FinalTurnover_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverDt_,
CAST(CAST(0 AS NUMERIC) AS NUMERIC(15, 2)) AS Fld895TurnoverCt_
FROM _AccRg891 T12
INNER JOIN _AccRgED928 T13
ON T13._RecorderTRef = T12._RecorderTRef AND T13._RecorderRRef = T12._RecorderRRef AND T13._LineNo = T12._LineNo AND T13._Period = T12._Period AND T13._Correspond = CAST(1 AS NUMERIC) AND T13._KindRRef = '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\246\\030x\\322G'::bytea AND T13._Period > '2018-06-20 23:59:59'::timestamp AND T13._Period < '3999-11-01 00:00:00'::timestamp
WHERE (((T12._Fld878 = CAST(0 AS NUMERIC))) AND (T13._Fld878 = CAST(0 AS NUMERIC))) AND (T12._Active = TRUE AND T12._AccountCtRRef <> '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000'::bytea AND ((T12._AccountCtRRef IN ('\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273""'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273#'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273$'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273%'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273&'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273'''::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273('::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273)'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273*'::bytea, '\\201\\327T\\004\\246\\037\\023\\243\\021\\344\\275\\2465;\\273+'::bytea))) AND (((T12._Fld892RRef IN ('\\216J\\000\\026\\346\\330D\\037\\021\\345m\\177\\277\\217\\205\\272'::bytea)) AND (CASE WHEN T13._Value_TYPE = '\\010'::bytea AND T13._Value_RTRef = '\\000\\000\\000""'::bytea THEN T13._Value_RRRef END = '\\207t\\000\\026\\346\\330D\\037\\021\\345\\346\\215\\300\\244\\327;'::bytea))) AND T12._Period > '2018-06-20 23:59:59'::timestamp AND T12._Period < '3999-11-01 00:00:00'::timestamp)) T3) T2) T1",RowsAffected=1,Result=PGRES_TUPLES_OK,Context='Форма.Вызов : ЖурналДокументов.Деньги.Форма.БанковскиеВыписки.Модуль.ПолучитьИтоги

ЖурналДокументов.Деньги.Форма.БанковскиеВыписки.Форма : 1544 : РезультатыЗапроса = ПостроительЗапроса.ПолучитьЗапрос().Выполнить();'
   novichok79
 
2 - 12.07.18 - 14:04
сам запрос

ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ВЫБОР
                КОГДА ВТ_БИ.ЭтоВалютныйСчет
                    ТОГДА ВТ_БИ.ВалютнаяСуммаНачальныйОстаток
                ИНАЧЕ ВТ_БИ.СуммаНачальныйОстаток
            КОНЕЦ), 0) КАК НачальныйОстаток,
    ЕСТЬNULL(СУММА(ВЫБОР
                КОГДА ВТ_БИ.ЭтоВалютныйСчет
                    ТОГДА ВТ_БИ.ВалютнаяСуммаОборотДт
                ИНАЧЕ ВТ_БИ.СуммаОборотДт
            КОНЕЦ), 0) КАК ВсегоПоступило,
    ЕСТЬNULL(СУММА(ВЫБОР
                КОГДА ВТ_БИ.ЭтоВалютныйСчет
                    ТОГДА ВТ_БИ.ВалютнаяСуммаОборотКт
                ИНАЧЕ ВТ_БИ.СуммаОборотКт
            КОНЕЦ), 0) КАК ВсегоСписано,
    ЕСТЬNULL(СУММА(ВЫБОР
                КОГДА ВТ_БИ.ЭтоВалютныйСчет
                    ТОГДА ВТ_БИ.ВалютнаяСуммаКонечныйОстаток
                ИНАЧЕ ВТ_БИ.СуммаКонечныйОстаток
            КОНЕЦ), 0) КАК КонечныйОстаток
ИЗ
    (ВЫБРАТЬ
        БИ.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
        БИ.ВалютнаяСуммаНачальныйОстаток КАК ВалютнаяСуммаНачальныйОстаток,
        БИ.СуммаОборотДт КАК СуммаОборотДт,
        БИ.ВалютнаяСуммаОборотДт КАК ВалютнаяСуммаОборотДт,
        БИ.СуммаОборотКт КАК СуммаОборотКт,
        БИ.ВалютнаяСуммаОборотКт КАК ВалютнаяСуммаОборотКт,
        БИ.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
        БИ.ВалютнаяСуммаКонечныйОстаток КАК ВалютнаяСуммаКонечныйОстаток,
        ВЫБОР
            КОГДА БИ.ВалютнаяСуммаНачальныйОстаток <> 0
                    ИЛИ БИ.ВалютнаяСуммаОборотДт <> 0
                    ИЛИ БИ.ВалютнаяСуммаОборотКт <> 0
                    ИЛИ БИ.ВалютнаяСуммаКонечныйОстаток <> 0
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ КАК ЭтоВалютныйСчет
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
                &ДатаИтоговНачалоДня,
                &ДатаИтоговКонецДня,
                ,
                ДвиженияИГраницыПериода,
                Счет В (&СчетаССубконтоБанковскиеСчета),
                &ВидСубконтоБанковскиеСчета,
                Организация В (&Организации)
                    И (ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &Параметр1) КАК БИ) КАК ВТ_БИ
   Borteg
 
3 - 12.07.18 - 14:06
И (ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &Параметр1)
убирай выразить
   novichok79
 
4 - 12.07.18 - 14:07
(3) типовая на замочке... по-другому (без расширений и дописок) никак, да?
   Borteg
 
5 - 12.07.18 - 14:11
(4) база клиент сервер?
   novichok79
 
6 - 12.07.18 - 14:12
(5) да
   Borteg
 
7 - 12.07.18 - 14:14
(6) посмотри а нету никаких отборов скрытых в списке
   novichok79
 
8 - 12.07.18 - 14:15
(7) сейчас стандартные настройки попробую, спасибо.
   novichok79
 
9 - 12.07.18 - 14:21
(8) мой пользователь Администратор и у ГБ пользователь ГБ, сейчас я дал пользователю ГБ одинаковые права как и у меня. в списке банковских выписок лагает так же, даже со стандартными настройками, значит беда приключилась с таблицей остатков регистра бухгалтерии.
   novichok79
 
10 - 12.07.18 - 14:25
в управлении итогами по РБ Хозрасчетный написано что текущий остаток есть и просчитан до 31.07.2018. магия ёпта.
 
 Рекламное место пустует
   hhhh
 
11 - 12.07.18 - 14:46
(10) итоги в целых месяцах считаются. Поэтому смотрите какой период берете. Если месяц, квартал или там год, то это итоги. Если какие-то произвольные дни, то это не итоги, это у вас сама таблица регистра глючит.
   novichok79
 
12 - 12.07.18 - 14:48
(11) в любом случае, вечером на серваке сделаю полное ТиИ и пересчет итогов, и vacuumdb full еще после всего.
   yzimin
 
13 - 12.07.18 - 14:50
иногда такое бывает, когда сортировка в списке документов выполнена по неиндексируемому полю. Попробуйте просто отсортировать документы по дате
   hhhh
 
14 - 12.07.18 - 14:51
(10) в управлении итогами можно всегда нажать кнопку перейти на следующий месяц, поэтому вы легко можете до 2020 года догнать без всякой магии
   novichok79
 
15 - 12.07.18 - 14:52
(13) я сделал стандартные настройки, с ними повторяется ошибка.
   yzimin
 
16 - 12.07.18 - 14:57
(15) нет в базе записей от Рождества Христова? Или 3018 годом? :-)
   novichok79
 
17 - 12.07.18 - 14:59
(16) интригуете, сейчас проверю.
   novichok79
 
18 - 12.07.18 - 15:11
дата последнего движения - 12.07.2018 15:02:32
   tesseract
 
19 - 12.07.18 - 21:34
(12) Postgres не любит вложеные запросы. Попробуй временную таблицу.

>>8.3.11.2867

С этой платформой куча тормозов.


>>(ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &Параметр1

А зачем выразить, если у тебя и так отбор по виду субконто стоит? 

>>        ВЫБОР
>>            КОГДА БИ.ВалютнаяСуммаНачальныйОстаток <> 0
>>                    ИЛИ БИ.ВалютнаяСуммаОборотДт <> 0
>>                   ИЛИ БИ.ВалютнаяСуммаОборотКт <> 0
>>                    ИЛИ БИ.ВалютнаяСуммаКонечныйОстаток <> 0
>>                ТОГДА ИСТИНА
>>            ИНАЧЕ ЛОЖЬ
>>        КОНЕЦ КАК ЭтоВалютныйСчет

А БИ. счет.Валютный никак не пойдет?
   ssh2006
 
20 - 13.07.18 - 00:04
(12) > и vacuumdb full еще после всего.

вместе с -- ANALYZE вызов?
   tesseract
 
21 - 13.07.18 - 00:08
(20) full сбрасывает план запросов много лучше analyze.
   ssh2006
 
22 - 13.07.18 - 00:28
(21) откуда инфа?

по документации чтобы после вакуума сгенерировалась новая статистика нужно вызывать его с опцией ANALYZE.

vacuumdb --analyze
или
vacuumdb --full --analyze
   tesseract
 
23 - 13.07.18 - 00:46
(22) Ты по какой версии смотрел? Full по любому сбрасывает планировщик тк идет полная реорганизация таблиц.
   tesseract
 
24 - 13.07.18 - 00:48
(22)по документации чтобы после вакуума

Это после auto vacuum? Full полностью сбросит план - это фактически холодный старт, база будет  тормозить , пока план не прогреется.
   ssh2006
 
25 - 13.07.18 - 00:50
   ssh2006
 
26 - 13.07.18 - 00:51
чтобы статистика обновилась нужно добавлять analyze в команде. Может он не делает обновления статистики
   tesseract
 
27 - 13.07.18 - 01:20
(26) ТЕ полная пересборка таблицы по вашему не сбросит статистику  плана? Еще как сбросит :-)
   novichok79
 
28 - 13.07.18 - 08:51
(19) сделал ТиИ с пересчетом итогов, потом еще сверху vacuumdb --full. пока ГБ не шуршит. это полностью типовая конфигурация, я мог бы переписать запрос на использование временной таблицы, но это нежелательный вариант, т. к. снятие с поддержки. тем более, мне кажется (я не уверен), что торомозило обращение к таблице остатков РБ Хозрасчетный, а не вложенный запрос.
   novichok79
 
29 - 13.07.18 - 08:53
(27) пока ГБ не звонит, а это такие особенные представители офисной фауны, под конец каждого квартала у них начинается небольшой период бешенства, с конца квартала до 20х чисел первого месяца следующего квартала.
   СвинТуз
 
30 - 13.07.18 - 09:11
Что то не пойму? А признаки учета на счете? Вроде это так называется? "Валютный". Что за прыжки с бубном?
   0xFFFFFF
 
31 - 13.07.18 - 09:12
(1) Какашкина Лариса? Really????
   СвинТуз
 
32 - 13.07.18 - 09:14
И что там на выходе в итоге? Сумма долларов и рублей?
   СвинТуз
 
33 - 13.07.18 - 09:14
Где "Валюта" ? Где дата курса?
 
 
   novichok79
 
34 - 13.07.18 - 09:15
(30) видимо пейсатели типовой БП не в курсах, или Луна зашла в фазу Венеры и они решили, что напишут запрос именно так.
   novichok79
 
35 - 13.07.18 - 09:15
(31) тяжелая судьба у Ларисы Петровны.
   СвинТуз
 
36 - 13.07.18 - 09:16
(0)
- ... Бонд ... Джейм Бонд ...
Ну ну
   novichok79
 
37 - 13.07.18 - 09:16
(32) на выходе остаток рублей по счету на дату документа в пролистываемом списке.
   novichok79
 
38 - 13.07.18 - 09:17
(36) да, ваш любимый 1Сник )))
   СвинТуз
 
39 - 13.07.18 - 09:17
(37)
Рублей?
   novichok79
 
40 - 13.07.18 - 09:18
остаток в валюте банковского счета, который выбран в журнале банковских выписок.
   СвинТуз
 
41 - 13.07.18 - 09:18
Запрос в топку ...
Автора на кол. Удачи
   novichok79
 
42 - 13.07.18 - 09:20
(41) боюсь, что даже если написать в v8@1c.ru (что я делаю регулярно, т. к. ставлю свежие обновления), на кол автора запроса не посадят. неизвестный автор запроса заюзал построитель кстати, хз сильно ли влияет это на производительность конечного запроса.
   novichok79
 
43 - 13.07.18 - 09:23
&НаСервереБезКонтекста
// Возвращает таблицу сумм остатков и оборотов за указанный день по указанному счету

//
Функция ПолучитьИтоги(Знач ТекДата, Знач ТекОрганизация, Знач ТекБанковскийСчет)
    
    СтруктураРезультат = Новый Структура("НаименованиеСчета,
        |НачальныйОстаток, ВсегоПоступило, ВсегоСписано, КонечныйОстаток"
        , ""
        , 0, 0, 0, 0);
    
    СписокДоступныхОрганизаций = ОбщегоНазначенияБПВызовСервераПовтИсп.ВсеОрганизацииДанныеКоторыхДоступныПоRLS(Ложь);
    // Если нет доступных организаций, то Итоги не вычисляем

    Если СписокДоступныхОрганизаций.Количество() = 0 Тогда
        Возврат СтруктураРезультат;
    ИначеЕсли ЗначениеЗаполнено(ТекОрганизация) Тогда
        // Если организация не числится в списке доступных, то Итоги не вычисляем

        Если СписокДоступныхОрганизаций.Найти(ТекОрганизация) = Неопределено Тогда
            Возврат СтруктураРезультат;
        КонецЕсли;
    КонецЕсли;
    
    ПостроительЗапроса = Новый ПостроительЗапроса;
    ПостроительЗапроса.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(СУММА(ВЫБОР
    |                КОГДА ВТ_БИ.ЭтоВалютныйСчет
    |                    ТОГДА ВТ_БИ.ВалютнаяСуммаНачальныйОстаток
    |                ИНАЧЕ ВТ_БИ.СуммаНачальныйОстаток
    |            КОНЕЦ), 0) КАК НачальныйОстаток,
    |    ЕСТЬNULL(СУММА(ВЫБОР
    |                КОГДА ВТ_БИ.ЭтоВалютныйСчет
    |                    ТОГДА ВТ_БИ.ВалютнаяСуммаОборотДт
    |                ИНАЧЕ ВТ_БИ.СуммаОборотДт
    |            КОНЕЦ), 0) КАК ВсегоПоступило,
    |    ЕСТЬNULL(СУММА(ВЫБОР
    |                КОГДА ВТ_БИ.ЭтоВалютныйСчет
    |                    ТОГДА ВТ_БИ.ВалютнаяСуммаОборотКт
    |                ИНАЧЕ ВТ_БИ.СуммаОборотКт
    |            КОНЕЦ), 0) КАК ВсегоСписано,
    |    ЕСТЬNULL(СУММА(ВЫБОР
    |                КОГДА ВТ_БИ.ЭтоВалютныйСчет
    |                    ТОГДА ВТ_БИ.ВалютнаяСуммаКонечныйОстаток
    |                ИНАЧЕ ВТ_БИ.СуммаКонечныйОстаток
    |            КОНЕЦ), 0) КАК КонечныйОстаток
    |ИЗ
    |    (ВЫБРАТЬ
    |        БИ.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
    |        БИ.ВалютнаяСуммаНачальныйОстаток КАК ВалютнаяСуммаНачальныйОстаток,
    |        БИ.СуммаОборотДт КАК СуммаОборотДт,
    |        БИ.ВалютнаяСуммаОборотДт КАК ВалютнаяСуммаОборотДт,
    |        БИ.СуммаОборотКт КАК СуммаОборотКт,
    |        БИ.ВалютнаяСуммаОборотКт КАК ВалютнаяСуммаОборотКт,
    |        БИ.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
    |        БИ.ВалютнаяСуммаКонечныйОстаток КАК ВалютнаяСуммаКонечныйОстаток,
    |        ВЫБОР
    |            КОГДА БИ.ВалютнаяСуммаНачальныйОстаток <> 0
    |                    ИЛИ БИ.ВалютнаяСуммаОборотДт <> 0
    |                    ИЛИ БИ.ВалютнаяСуммаОборотКт <> 0
    |                    ИЛИ БИ.ВалютнаяСуммаКонечныйОстаток <> 0
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ ЛОЖЬ
    |        КОНЕЦ КАК ЭтоВалютныйСчет
    |    ИЗ
    |        РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаИтоговНачалоДня, &ДатаИтоговКонецДня, , ДвиженияИГраницыПериода, Счет В (&СчетаССубконтоБанковскиеСчета), &ВидСубконтоБанковскиеСчета, Организация В (&Организации) {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) КАК БанковскийСчетИтогов}) КАК БИ) КАК ВТ_БИ";
    
    Если ЗначениеЗаполнено(ТекОрганизация) Тогда
        СписокОрганизаций = Новый Массив;
        СписокОрганизаций.Добавить(ТекОрганизация);
    Иначе
        СписокОрганизаций = СписокДоступныхОрганизаций;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ТекБанковскийСчет) Тогда
        ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить("БанковскийСчетИтогов");
        ЭлементОтбора.ВидСравнения  = ВидСравнения.Равно;
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.Значение      = ТекБанковскийСчет;
        СтруктураРезультат.НаименованиеСчета = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекБанковскийСчет, "Наименование"));
    КонецЕсли;
    
    ПостроительЗапроса.Параметры.Вставить("Организации",         СписокОрганизаций);
    ПостроительЗапроса.Параметры.Вставить("ДатаИтоговНачалоДня", НачалоДня(ТекДата));
    ПостроительЗапроса.Параметры.Вставить("ДатаИтоговКонецДня",  КонецДня(ТекДата));
    ПостроительЗапроса.Параметры.Вставить("ВалютаРеглУчета",
        ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета());
    ПостроительЗапроса.Параметры.Вставить("ВидСубконтоБанковскиеСчета",
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета);
    ПостроительЗапроса.Параметры.Вставить("СчетаССубконтоБанковскиеСчета",
        УчетДенежныхСредствПовтИсп.ПолучитьСчетаССубконтоБанковскиеСчета());
    
    УстановитьПривилегированныйРежим(Истина);
    
    РезультатыЗапроса = ПостроительЗапроса.ПолучитьЗапрос().Выполнить();
    
    Если НЕ РезультатыЗапроса.Пустой() Тогда
        Выборка = РезультатыЗапроса.Выбрать();
        Выборка.Следующий();
        ЗаполнитьЗначенияСвойств(СтруктураРезультат, Выборка);
    КонецЕсли;
    
    Возврат СтруктураРезультат;
    
КонецФункции
   ssh2006
 
44 - 13.07.18 - 10:27
(43) выполни обновление статистики и проверь результат:

vacuumdb --analyze-only
   novichok79
 
45 - 13.07.18 - 10:30
(44) прям на рабочей базе? вечером если только.
   los_hooliganos
 
46 - 13.07.18 - 10:41
(45) Прямо на рабочей можно и реиндексацию запустить.
Если БД небольшая можно как раз на время обеда.
   los_hooliganos
 
47 - 13.07.18 - 10:43
(45) Господи, какие еще снятия с поддержки?! Рекомендую изучать расширения. Можно спокойно редактировать типовые под свои хотелки.
   пятница
 
48 - 13.07.18 - 10:51
Получи план запроса в ТЖ (тег <plansql/>) и выложи на explain.depsz.com
   novichok79
 
49 - 13.07.18 - 11:04
(46) можно, попробую.
(47) расширения можно воткнуть на конфигурацию, где не включена возможность изменений?
 
 Рекламное место пустует
   ssh2006
 
50 - 13.07.18 - 11:06
(45) можно на рабочей, да
   novichok79
 
51 - 13.07.18 - 11:24
(47) да, действительно можно без включения возможности изменений накатывать расширения на типовую, этого не знал. это непаханное поле для экспериментов над злосчастным запросом. кроме этого случая, в ЗУП 3.1.6.54 я уже использовал расширения для правки ошибок до выхода обновлений, чтобы в модули документов не лезть.
   novichok79
 
52 - 13.07.18 - 11:25
да, кстати, сейчас у ГБ интересовался - говорит, что 1С не тормозит при пролистывании выписок.
   ssh2006
 
53 - 13.07.18 - 11:37
(52) ну вот, теперь  в регламентный вакуум добавить ключ analyze
   novichok79
 
54 - 13.07.18 - 11:48
(53) да кстати, как часто надо делать регламентный вакуум, по-вашему.
   ssh2006
 
55 - 13.07.18 - 11:53
(54) "Мы рекомендуем очищать активные производственные базы данных достаточно часто (как минимум, каждую ночь), чтобы избавляться от «мёртвых» строк. После добавления или удаления большого числа строк может быть хорошей идеей выполнить команду VACUUM ANALYZE для каждой затронутой таблицы. При этом результаты всех последних изменений будут отражены в системных каталогах, что позволит планировщику запросов Postgres Pro принимать более эффективные решения при планировании.

Режим FULL не рекомендуется для обычного применения, но в некоторых случаях он бывает полезен. Например, когда были удалены или изменены почти все строки таблицы, может возникнуть желание физически сжать её, чтобы освободить место на диске и ускорить сканирование этой таблицы. "
https://postgrespro.ru/docs/postgrespro/9.6/sql-vacuum

Для обычной бух на несколько пользователей 
ежедневный vacuumdb --analyze
   novichok79
 
56 - 13.07.18 - 11:55
(55) у меня на ночь с воскресенья на понедельник обычно ТиИ и vacuumdb --full на все базы.
   novichok79
 
57 - 13.07.18 - 11:58
видимо надо почаще
   ssh2006
 
58 - 13.07.18 - 11:58
(56) добавь еженочный vacuumdb --analyze
   novichok79
 
59 - 13.07.18 - 11:59
(58) как вариант, да, спасибо.
   ssh2006
 
60 - 13.07.18 - 11:59
+(58) а full по выходным. Статистику надо каждый день обновлять желательно
   novichok79
 
61 - 13.07.18 - 12:02
(60) ясно, не посоветуете какие-нибудь курсы / настольную книгу по Postgre (кроме тех, что PostgrePro распространяет)?
   ssh2006
 
62 - 13.07.18 - 12:16
(61) сам читал PostgresPro документацию и их посты на хабре, ну и гугл по конкретным вопросам
   novichok79
 
63 - 13.07.18 - 12:24
(62) да, я также. инфы по постгри в связке с 1С не очень много.
   Новиков
 
64 - 13.07.18 - 12:47
(63) Предложи главному бухгалтеру перейти на настоящий скуль, там такой дичевки, естественно нет. По правильному, выписал бы сразу счет, написал обоснование и дальше - дорого? Тогда мучайтесь далее.
   Новиков
 
65 - 13.07.18 - 12:48
(63) на хабре статья была, сам нагуглишь, отчего там иногда случаются такие дерьмовские вещи. Там чувак очень глубоко копал, обосновывал и т.д. Почитай там, оттуда понакопипасть страхов и в обоснование вставь.
   пятница
 
66 - 13.07.18 - 12:52
(64) какой дичевки?
   Новиков
 
67 - 13.07.18 - 13:04
(66) я знаю чем закончится наш диалог. Побереги ник, он тебе еще пригодится :)
   novichok79
 
68 - 13.07.18 - 13:27
(64) это люкс-вариант, чтобы сразу купили MS SQL Server с преферансом и куртизанками.
   rsv
 
69 - 13.07.18 - 13:50
(68) почему люкс? Например в языке запросов 1с можно написать только так Выбрать Первые это синтаксис скуля ms т.е.select Top.Косвенно наводит на размышления
   novichok79
 
70 - 13.07.18 - 13:53
(69) потому что организация-нищеброд, на MS SQL у куроводства не хватило денег
   Новиков
 
71 - 13.07.18 - 14:02
(70) тогда предложим им уйти во фрешку.
   novichok79
 
72 - 13.07.18 - 14:25
(71) у них дописанная конфа, во фреше только типовые, насколько я знаю.
   novichok79
 
73 - 13.07.18 - 14:47
(69) в постгри select top тоже есть
36:21.554000-30994,DBV8DBEng,5,process=1cv8,OSThread=11188,Usr=Федоров (администратор),Trans=0,Sql='SELECT TOP 6254
T1._Fld3982RRef,
T1._Fld3983RRef,
T1._Fld3984RRef,
T1._Fld3985RRef,
T1._Fld3986,
T1._Fld3987RRef
FROM _InfoRg3981 T1',NParams=0,Rows=870,Context='
ВнешняяОбработка.КонсольЗапросов.Форма.Форма.Форма : 1229 : ВыполнитьЗапрос();
    ВнешняяОбработка.КонсольЗапросов.Форма.Форма.Форма : 676 : мРезЗапроса = ОбъектЗапрос.Выполнить();'
   novichok79
 
74 - 13.07.18 - 14:47
(73) ВЫБРАТЬ ПЕРВЫЕ 6254
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
    ЦеныНоменклатуры.Валюта,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.ЕдиницаИзмерения
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
   unregistered
 
75 - 13.07.18 - 14:50
(71) Большая часть фреша живёт на Postgres. Неожиданно....
   novichok79
 
76 - 13.07.18 - 14:53
(73) а не, на 9.6.6 действительно TOP нету, там надо LIMIT юзать

ERROR:  syntax error at or near "6254"
LINE 1: SELECT TOP 6254
                   ^
SQL state: 42601
Character: 12
   Новиков
 
77 - 13.07.18 - 14:56
(75) Это да, но хз как там ее админят, но таких затупов не видно :)



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