Имя: Пароль:
1C
1С v8
БП 3.0, запрос долго считает итоги по регистру Хозрасчетный
0 novichok79
 
12.07.18
14:02
Доброго времени суток, коллеги. ГБ сегодня меня удивила тем, что у нее в списке банковских выписок долго перелистываются строки. БП версии 3.0.64.21, платформа 8.3.11.2867. Я включил ТЖ и посмотрел что творится с платформой в этот момент (ниже приведу то, что получается). Потом еще замер производительности на этом же месте попробовал запустить. Тоже тормоза. ТиИ (с ограничением в 30 минут делал), vacuumdb full тоже делал. Остается пересчитать итоги по регистру Хозрасчетный, как я понимаю, правильно? Подскажите, пожалуйста. Заранее благодарю за помощь.
1 novichok79
 
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 : РезультатыЗапроса = ПостроительЗапроса.ПолучитьЗапрос().Выполнить();'
2 novichok79
 
12.07.18
14:04
сам запрос

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

>>8.3.11.2867

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



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

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

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

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

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

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

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

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

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

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

Для обычной бух на несколько пользователей
ежедневный vacuumdb --analyze
56 novichok79
 
13.07.18
11:55
(55) у меня на ночь с воскресенья на понедельник обычно ТиИ и vacuumdb --full на все базы.
57 novichok79
 
13.07.18
11:58
видимо надо почаще
58 ssh2006
 
13.07.18
11:58
(56) добавь еженочный vacuumdb --analyze
59 novichok79
 
13.07.18
11:59
(58) как вариант, да, спасибо.
60 ssh2006
 
13.07.18
11:59
+(58) а full по выходным. Статистику надо каждый день обновлять желательно
61 novichok79
 
13.07.18
12:02
(60) ясно, не посоветуете какие-нибудь курсы / настольную книгу по Postgre (кроме тех, что PostgrePro распространяет)?
62 ssh2006
 
13.07.18
12:16
(61) сам читал PostgresPro документацию и их посты на хабре, ну и гугл по конкретным вопросам
63 novichok79
 
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) я знаю чем закончится наш диалог. Побереги ник, он тебе еще пригодится :)
68 novichok79
 
13.07.18
13:27
(64) это люкс-вариант, чтобы сразу купили MS SQL Server с преферансом и куртизанками.
69 rsv
 
13.07.18
13:50
(68) почему люкс? Например в языке запросов 1с можно написать только так Выбрать Первые это синтаксис скуля ms т.е.select Top.Косвенно наводит на размышления
70 novichok79
 
13.07.18
13:53
(69) потому что организация-нищеброд, на MS SQL у куроводства не хватило денег
71 Новиков
 
13.07.18
14:02
(70) тогда предложим им уйти во фрешку.
72 novichok79
 
13.07.18
14:25
(71) у них дописанная конфа, во фреше только типовые, насколько я знаю.
73 novichok79
 
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 : мРезЗапроса = ОбъектЗапрос.Выполнить();'
74 novichok79
 
13.07.18
14:47
(73) ВЫБРАТЬ ПЕРВЫЕ 6254
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
    ЦеныНоменклатуры.Валюта,
    ЦеныНоменклатуры.Цена,
    ЦеныНоменклатуры.ЕдиницаИзмерения
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
75 unregistered
 
13.07.18
14:50
(71) Большая часть фреша живёт на Postgres. Неожиданно....
76 novichok79
 
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) Это да, но хз как там ее админят, но таких затупов не видно :)
AdBlock убивает бесплатный контент. 1Сергей