Имя: Пароль:
1C
 
Таблица итогов в десятки раз больше таблицы движений
,
0 OldCondom
 
31.03.21
12:49
УПП.
Регистр накопления "Расходы при УСН".

Таблица движений:  dbo._AccumRg28133    5 605 052(число записей) 1 868 352(данные Кб)
Таблица итогов: dbo._AccumRgT28152    164 660 849(число записей) 51 091 520(данные Кб)

Я так полагаю, это не совсем нормально. Думал нулевые записи(это вроде запись, при которой все ресурсы = 0, верно?), ни одной не выдал запросом:
SELECT count(*)
  FROM [dbo].[_AccumRgT28152]
  where [_Fld28147] = 0 and [_Fld28148] = 0 and [_Fld28149] = 0


Пересчет итогов увеличивает размер таблицы. Делал truncate table, потом пересчет - результат схож.
Пока что еще не делал ТИИ, может быть что и изменится.

Вопрос: на что обратить внимание? Откуда такое количество записей и данных? Что не так может быть с базой? Таких регистров 2.
1 OldCondom
 
31.03.21
12:52
И кстати да, странно, что номера таблиц не совпадают, хотя может это и норма. Названия таблиц смотрел через ПолучитьСтруктуруХраненияБазыДанных().
2 acanta
 
31.03.21
12:54
Предположим, есть движения, которые сформировали развернутые остатки (неважно, приход или расход). Предположим что периодичность хранения итогов не месяц а день...  
Предположим, что единственное движение было год назад...
3 H A D G E H O G s
 
31.03.21
12:56
Или на начало тысячелетия...
4 H A D G E H O G s
 
31.03.21
12:57
5 OldCondom
 
31.03.21
12:58
Понял, уже думаю над запросом. Обработку скачал, спасибо
6 OldCondom
 
31.03.21
12:58
а, ну собственно в обработке и есть запрос)
7 vis_tmp
 
31.03.21
12:59
(6)Что там?
8 Вафель
 
31.03.21
13:00
на всякий случай можно поставить начало периода рассчитанных итогов
9 acanta
 
31.03.21
13:03
(8) во! А можно начало периода рассчитанных итогов каждый месяц сдвигать на начало этого месяца?
10 Ненавижу 1С
 
гуру
31.03.21
13:10
(4) немного рефакторинга:

&НаСервере
Процедура ПоказатьНаСервере()
    ПоказатьТаблицуНаСервере(ТаблицаМинимальныхДат,"МинимальнаяДата",Ложь);
    ПоказатьТаблицуНаСервере(ТаблицаМаксимальныхДат,"МаксимальнаяДата",Истина);
КонецПроцедуры

&НаСервере
Процедура ПоказатьТаблицуНаСервере(Таблица, ИмяКолонки, ПоУбыванию)
    
    СуффиксСортировки = ?(ПоУбыванию," Убыв","");
    Таблица.Очистить();
    Для Каждого Метаданное Из Метаданные.РегистрыНакопления Цикл
        Запрос=Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Регистр.Период КАК Период
        |ИЗ
        |    РегистрНакопления."+Метаданное.Имя+" КАК Регистр
        |
        |УПОРЯДОЧИТЬ ПО
        |    Период"+СуффиксСортировки;
        Выборка=Запрос.Выполнить().Выбрать();
        Если не Выборка.Следующий() Тогда
            Продолжить;
        КонецЕсли;
        
        НоваяСтрока=Таблица.Добавить();
        НоваяСтрока.ИмяРегистра=Метаданное.Синоним;
        
        НоваяСтрока[ИмяКолонки]=Выборка.Период;
        НоваяСтрока[ИмяКолонки+"Строкой"]=Выборка.Период;
    КонецЦикла;
    Таблица.Сортировать(ИмяКолонки+СуффиксСортировки);

КонецПроцедуры
11 Kassern
 
31.03.21
13:21
(10) тогда уж:
Если Выборка.Следующий() Тогда
        
        НоваяСтрока=Таблица.Добавить();
        НоваяСтрока.ИмяРегистра=Метаданное.Синоним;
        
        НоваяСтрока[ИмяКолонки]=Выборка.Период;
        НоваяСтрока[ИмяКолонки+"Строкой"]=Выборка.Период;
КонецЕсли;
12 Галахад
 
гуру
31.03.21
13:27
Хм. А к зачем тут рефакторинг? Обработка разовая. Кода на один экран.
13 mistеr
 
31.03.21
13:34
(2) >Предположим что периодичность хранения итогов не месяц а день

А что, так можно? :)
14 arsik
 
гуру
31.03.21
14:04
А в чем критичны очень в будущее или в прошлое смещение дат?
Если в прошлое, то там по минимуму, ну будет хранится итог по одному движению дохрелиард раз. Ну допустим 1980 год, 490 месяцев.
Если в будущее, то итоги то актуальны на текущий месяц, они в будущее не рассчитываются же.
15 H A D G E H O G s
 
31.03.21
14:10
(14) 490 вставочек остатков при проведении документа, если попадешь на тот срез измерений.
16 H A D G E H O G s
 
31.03.21
14:11
(14) Но обычно там нулевая дата, когда движения делаются не по дате документа, а по датеотгрузки к примеру, а док загружен вводом остатков каким нибудь или реквизит самописный.
Я давно предлагал ввести генерацию ошибки на уровне платформы, но nobody_carer
17 ЧессМастер
 
31.03.21
14:29
(0) А движения закрываются ?
Нет висящих остатков или движения только в плюс или минус ??
18 Вафель
 
31.03.21
14:30
(17) даже если бы не закрывались, то остатков не может быть существенно больше движений
19 NorthWind
 
31.03.21
14:41
(18) почему? Как я понимаю, одно незакрытое в ноль движение порождает по записи в каждый период, т.е. из одной записи движений может получиться столько записей итогов, сколько было периодов. Т.е. довольно много. Нет?
20 OldCondom
 
31.03.21
14:49
(17)В тот то и дело, что нет. Висит одна запись от 2017 года. Но 150млн строк этого конечно не хватит.

Я видимо чего-то не понимаю. Если бы когда-то в лохматом году сделалась запись(+ или -) и больше по этой аналитике ничего, так я бы увидел это элементарно в запросе "выбрать * из РН.Товары.Остатки". Но там одна строка.

(18) Вот именно. И с этого факта я недоумеваю. Читаю уже ИТС и до сих пор не доходит, что пошло не так.
21 H A D G E H O G s
 
31.03.21
14:51
(20) Разделение итогов включено?
22 Ненавижу 1С
 
гуру
31.03.21
14:51
(12) спортивный интерес
23 Ненавижу 1С
 
гуру
31.03.21
14:52
(11) это уже вкусовщина, мне больше нравится

        Если не Выборка.Следующий() Тогда
            Продолжить;
        КонецЕсли;
24 OldCondom
 
31.03.21
14:56
(21) да
25 OldCondom
 
31.03.21
15:02
разделение отключил, идет реструктуризация. Посмотрим, что будет.
26 OldCondom
 
31.03.21
15:22
хех. Отключил разделение.
Итог: 5млн записей, 1.6Гб вес. Неплохо.
27 Очевидно
 
31.03.21
15:57
(26) на самом деле "отключать" разделение - не обязательно.
Если верить ИТС : https://its.1c.ru/db/metod8dev/content/1393/hdoc
Нужно пересчитать итоги, и они должны сами свернуться...
28 OldCondom
 
31.03.21
16:13
(27) да, читал эту статью сегодня.
Но по факту, когда сделал полный пересчет только по этому регистру, он увеличился еще на 20-30 гигов(точно не помню). Затем сделал truncate table и еще раз пересчет - вернулся в первоначальные 50Гб
29 Злопчинский
 
31.03.21
16:15
ну, значит, не закрыт. запихнули че-нить вместо реквизита в измерение и всё... кури бамбук
30 OldCondom
 
31.03.21
16:18
(29) возможно надо было начать с ТИИ, логическая целостность и битые ссылки, а потом пересчет. Может дело было в этом и правда.
31 ЧессМастер
 
31.03.21
17:52
(18) >остатков не может быть существенно больше движений

Почему не может ?

Если ты сделаешь документ на сто тысяч строк с датой 01.01.2000 и без движений до текущей даты то у тебя движений будет сто тысяч строк а остатков сто тысяч на каждый период.

Таблица итогов для регистра накопления хранит остатки в разрезе всех измерений с периодичностью месяц, на начало месяца. В результате у тебя в этой таблице будет по сто тысяч записей на каждый месяц.

Проектирование регистра как с движениями только в одну сторону (только приход без расхода и наоборот) как и пропуск закрытия остатков по некоторым измерениям на экзамене является грубой ошибкой.
32 Aleksey
 
31.03.21
17:59
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший