Имя: Пароль:
1C
 
Как удалить "фантомные" записи в таблице итогов средствами 1С
0 Aleksey
 
23.06.18
17:32
Предистория была большая база на скуле (Бухгалтерия). Нужно было выделить 1 организацию. Сделал копию удалили лишние выгрузил в файловую базу. И тут обратил внимания, что база весит 13 гигов. И это при том что  в базе всего 10 проведенных документов. Почистил все классификаторы из РС, удалось сбросить пару гигов. 11 гигов для практически пустой базы ... многовато будет.
Полез в Tool_1CD. При выборе базы ругается - длина таблица не кратна длине записи
Длина таблицы 4,5 гига, длина записи 280 байт
Проблемная таблица - _ACCUMRGT16153, т.е. таблица остатков (РН - Затраты при УСН). При этом в режиме предприятия у этого регистра нет движения.


Собственно возникает вопрос как средствами 1С избавиться от фантомных записей?

Что было сделано

Средствами скуля
- DBCC CHECKDB (N'base', REPAIR_REBUILD) WITH NO_INFOMSGS - ошибок не обнаружено

В конфигураторе
- полное ТиИ - тестирование базы средствами 1С, включая проверку, полный пересчет итогов, сжатие и реструктуризацию - фантомные записи остались

Выгрузка/загрузка в файловую

Проверка базы средствами chdbfl - ошибок не обнаружено

В режиме предприятия - управление итогов
- Включение/отключение итогов,
- включение/отключение текущих итогов,
- двигал период расчета, в том числе установка итогов на 31.01.0001
- отключал разделение итогов
- Запускал пересчет итогов и пересчет текущих итогов

Все это не привело к очистке от фантомных записей. Более того в базе есть и записи с битым периодом (период "86.75.762; ;1:88:=8") которые тоже остались.


Собственно вопрос, что еще можно предпринять, кроме drop table средствами скуля с последующим полным пересчетом итогов, так как неизвестно в каких таблицах есть еще фантомные записи (дропать все подряд?) и этот метод очень трудно реализовывать на "рабочих базах", не будешь же в регламент вставлять раз в месяц дроп итогов и полный перерасчет.
1 Aleksey
 
23.06.18
17:36
На мисте была похожая тема v8: Как избавиться от фантомных записей в 8.2?, но решений так и не нашлось. Все закончилось переносом данных в чистую базу через xml, а не исправление текущей
2 runoff_runoff
 
23.06.18
18:44
а средствами скуля delet from, а потом ТИИ
3 Genayo
 
23.06.18
19:14
(2) Тогда уж средствами скуля выбрать нужные записи во временную таблицу, транкейт сбойную таблицу, инсерт из временной.
4 runoff_runoff
 
23.06.18
19:16
(3) автор сказал, что движений вообще, поэтому truncate и ТИИ
5 Aleksey
 
23.06.18
22:40
(4) автор также сказал что неизвестно в каких еще таблицах итогов есть такие записи. как искать?

Автор так же сказал что скорее всего в рабочей базе такие же записи, а там есть движение, как фильтровать?

Автор сказал что хотелось бы рабочее решение которое можно включить в регламент и периодически чистить в рабочей записи такие записи, в случае их появления

Исходя из всего этого автор категорически против delet from, транкейт
6 runoff_runoff
 
23.06.18
22:42
(5) глобальный метод ПолучитьСтруктуруХраненияБазыДанных()
7 Aleksey
 
23.06.18
22:43
(6) и? я им воспользовался чтобы найти имя проблемного регистра
8 Aleksey
 
23.06.18
22:48
Вопрос в том что Tool_1CD пишет "длина таблица не кратна длине записи"
И при этом ни средствами скуля, ни средствами 1С я не знаю как диагностировать, чтобы исправить эту проблему. Т.е. в таблице 4,5 гига левых записей, при этом рабочую базу я не могу выгрузить в файловую базу, чтобы натравить на ней Tool_1CD, а значит ищется инструмент которые сможет продиагностировать запись на левость, а таблицу на кривость
9 Dmitry77
 
23.06.18
22:52
Если в базе 10 документов - удалить все регистры в конфигураторе, потом ТИИ, загрузить регистры из сохраненной конфигурации.
10 Aleksey
 
23.06.18
22:58
(9) Это на базе где 10 документов это всплыло, а неизвестно сколько таких записей в оригинале, т.е. в рабочей.

Понятно что можно транс и забыть, но нужен инструмент для контроля целостности рабочей базы
11 Aleksey
 
25.06.18
07:01
вообщем так и не нашел как это сделать пришлось скулем грохать. Как результат база сдулась с 11 гигов до 1,1 гига.
Почистил сохраненые настройки (тоже прикол пользователь удален, а настройки остаются) это еще - 100 метров. Итого теперь самая большая таблица - блобы конфига (408 метров), за ним идут блоб справочника (23 метра), блоб РС (20 метров). Ну т.е. вполне адекватные данные
12 Aleksey
 
25.06.18
07:03
кому интересно скрипт для скуля по формированию таблиц для очистки


--очистка итогов http://its.1c.eu/db/metod8dev#content:1591:hdoc

--регистры накопления итоги
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '_AccumRgT%'
--регистры бухгалтерия итоги по счету
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '_AccRgAT%'
--регистры бухгалтерия обороты между счетами
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '_AccRgCT%'
--таблица регистрации изменений
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%ChngR%'
--_UsersWorkHistory - История работы пользователей
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%UsersWorkHistory%'
--_SystemSettings - История работы пользователей
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%SystemSettings%'
--_RepVarSettings - Хранилище настроек вариантов отчетов
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%RepVarSettings%'
--_CommonSettings - Хранилище общих настроек
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%CommonSettings%'
--_FrmDtSettings - Хранилище настроек данных форм
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%FrmDtSettings%'
--_DynListSettings - Xранилищe динамических списков
union
SELECT 'TRUNCATE TABLE ' + name+';' FROM sys.tables WHERE name like '%DynListSettings%'
13 Bober
 
25.06.18
10:43
(0)
- в конфигураторе выполнить пересчет итогов.
Либо
- в режиме предприятие отключить текущие итоги, а итоги перевести на дату 01.01.0001. После этого  снова включить текущие итоги и выставить новую дату рассчитанный итогов.
14 Aleksey
 
25.06.18
11:03
(13) и чем этот совет кардинально отличается от описанных в (0) действий?
У меня такое ощущение что 1С не пересчитывает итого если нет движения, либо как то выборочно пересчитывает
15 Bober
 
25.06.18
14:06
(14) плохо прочитал (0) пост, ничего.
2 + 2 = 3.9999999999999999999999999999999...