Имя: Пароль:
1C
1C 7.7
v7: Обрезка базы бухучёта.
0 brenli
 
16.01.12
09:28
Доброго времени.
Нужно обрезать базу.
Стандартная свёртка не работает так как конфа немного не типовая.
Да и работать она будет долго, а времени нет.

Придумал сделать обрезку таким способом.

1) Получаю остатки по счетам с аналитикой и создаю операции.
2) Сдвигаю бухгалтерские итоги до момента 1 записи в базе чтобы ускорить процесс пометки на удаление документов.
3) Помечаю на удаление все доки кроме созданных операций в пункте 1.
4) Штатной обработкой через контроль удаляю всё что можно удалить.
5) Возвращаю актуальную дату бух итогов.
6) Упаковываю базу.

Прошу ваших советов по эффективности этого метода.
Во вторых.
У некоторых счетов нет итогов по субконто, но есть итоги в целом по счёту. Как с ними быть? Вводить с пустым субконто?
Заранее благодарен.
1 Азат
 
16.01.12
09:33
пометку удаления выполняй в транзакции по 300-400 документов и будет тебе счастье...

вто-вторых, да
2 vladko
 
16.01.12
09:33
wrap.ert, вообще говоря, универсальная обработка, независимо от того, типовая конфа по бухучёту или самописка
3 brenli
 
16.01.12
09:36
vladko
Она долго работать будет, на что времени нет.
4 ПиН
 
16.01.12
09:36
нет итогов по субконто, но есть итоги в целом по счёту. Как с ними быть? Вводить с пустым субконто?

этот вопрос целесообразно задать бухам, возможно они захотят аналитику видеть...
5 ПиН
 
16.01.12
09:37
(3) из опыта - если нет времени на обрезание и свертку - лучше их вообще не начинать...
6 Somebody
 
16.01.12
09:40
( 5) присоединяюсь. свертка, сделанная наспех , может обернуться нехилым гемором.
7 Сияющий Асинхраль
 
16.01.12
09:40
Быстро можно создать бух справки с остатками счетов и перенести их в пустую конфу, например, импорт77-экспорт77
8 brenli
 
16.01.12
09:41
ПиН
А надо, очень надо.
(7)
1) Получаю остатки по счетам с аналитикой и создаю операции.
2) Сдвигаю бухгалтерские итоги до момента 1 записи в базе чтобы ускорить процесс пометки на удаление документов.
3) Помечаю на удаление все доки кроме созданных операций в пункте 1.
4) Штатной обработкой через контроль удаляю всё что можно удалить.
5) Возвращаю актуальную дату бух итогов.
6) Упаковываю базу.

Так не канает? С участием 00 сч?
9 brenli
 
16.01.12
09:48
Пока БИ.ПолучитьСчет()=1 Цикл

       
       БИ.ВыбратьСубконто(1);
       Опер.Новая();
       Опер.ДатаОперации = КонДата;
       
       Если (БИ.Счет = СчетПоКоду("84.1"))  Тогда
           Опер.НоваяПроводка();
                     Если БИ.СКД(1)<>0 Тогда
                   Опер.Дебет.Счет    = БИ.Счет;  
                   Опер.Дебет.Субконто(1,БИ.Субконто(1));
                   Опер.Дебет.Субконто(2,БИ.Субконто(2));
                   Опер.Дебет.Субконто(3,БИ.Субконто(3));
                   Опер.Кредит.Счет = СчетПоКоду("00");              
                   Опер.Количество = БИ.СКД(3);
                   Опер.Сумма = БИ.СКД(1);
               Иначе  
                   Опер.Дебет.Счет    = СчетПоКоду("00");
                   Опер.Кредит.Счет = БИ.Счет;
                   Опер.Кредит.Субконто(1,БИ.Субконто(1));
                   Опер.Кредит.Субконто(2,БИ.Субконто(2));
                   Опер.Кредит.Субконто(3,БИ.Субконто(3));
                   Опер.Количество = БИ.СКК(3);
                   Опер.Сумма = БИ.СКК(1);
               КонецЕсли;    
               Опер.Записать();
       Сообщить("   "+БИ.Счет+" "+БИ.Субконто(1)+"   "+БИ.Субконто(2)+"  "+БИ.Субконто(3)+" СНД  "+БИ.СНД(1)+" СКД "+БИ.СКД(1)+"  "+БИ.СКД(3)+"  "+БИ.СНК(1)+"  "+БИ.СКК(1)+"  "+БИ.СКК(3)+"  "+БИ.ДО(1)+"  "+БИ.КО(1));    
       КонецЕсли;        
           
       Пока БИ.ПолучитьСубконто(1)=1 Цикл
           Опер.НоваяПроводка();
           Если БИ.Счет.Забалансовый = 0 Тогда
               Если БИ.СКД(1)<>0 Тогда
                   Опер.Дебет.Счет    = БИ.Счет;  
                   Опер.Дебет.Субконто(1,БИ.Субконто(1));
                   Опер.Дебет.Субконто(2,БИ.Субконто(2));
                   Опер.Дебет.Субконто(3,БИ.Субконто(3));
                   Опер.Кредит.Счет = СчетПоКоду("00");              
                   Опер.Количество = БИ.СКД(3);
                   Опер.Сумма = БИ.СКД(1);
               Иначе  
                   Опер.Дебет.Счет    = СчетПоКоду("00");
                   Опер.Кредит.Счет = БИ.Счет;
                   Опер.Кредит.Субконто(1,БИ.Субконто(1));
                   Опер.Кредит.Субконто(2,БИ.Субконто(2));
                   Опер.Кредит.Субконто(3,БИ.Субконто(3));
                   Опер.Количество = БИ.СКК(3);
                   Опер.Сумма = БИ.СКК(1);
               КонецЕсли;    
               Опер.Записать();            
             //        Сообщить("   "+БИ.Счет+" "+БИ.Субконто(1)+"   "+БИ.Субконто(2)+"  "+БИ.Субконто(3)+" СНД  "+БИ.СНД(1)+" СКД "+БИ.СКД(1)+"  "+БИ.СКД(3)+"  "+БИ.СНК(1)+"  "+БИ.СКК(1)+"  "+БИ.СКК(3)+"  "+БИ.ДО(1)+"  "+БИ.КО(1));    
           Иначе              
               Прервать;
           
           КонецЕсли;

(Часть кода) Алгоритм работает как надо заморочка только со счетами с оборотным субконто
10 ПиН
 
16.01.12
09:49
(8) как вариант - сделай свертку и пометку на удаление, а саму процедуру обрезания перенеси на выходные... (про бэкапы не забываем)
11 Сияющий Асинхраль
 
16.01.12
09:50
Вариант (7) частенько быстрее - всего два шага и девственно чистая база. (4) для материалов и номры удобно суммовые остатки распределять пропорционально колву
12 brenli
 
16.01.12
09:53
Сияющий Асинхраль
(11) это штатная обработка экспорт77-импорт77?
13 ПиН
 
16.01.12
09:54
(11) а как быть с справочниками, по которым нет остатков, как быть с периодическими реквизитами?
14 Сияющий Асинхраль
 
16.01.12
09:59
(12) да, с итс. (13) Теми же обработками перенести
15 ПиН
 
16.01.12
10:01
(14) ты сразу это пиши, а то получается совет в (7) не полный
16 ПиН
 
16.01.12
10:05
штатные обработки все-таки хороши для типовых, понятно, что их можно достаточно быстро придолжным умении допилить, но не всегда это получается быстро ))) кстати (0) советую найти сайт небузызвестного фиксина, у него для 77 замечательныя подборка для обрезания баз
17 Сияющий Асинхраль
 
16.01.12
10:16
(15) я с мобилы пишу, поэтому коротко, но эти обработки к типовым не привязаны, работают везде.
18 ПиН
 
16.01.12
10:18
(17) есть еще один нюанс при таком пути - к концу отчетного периода бухи вспомнят, что им нужна первичка за прошлый год и тогда прога ждет увлекательный процесс еще одного переноса из старой в новую базу
19 Джордж1
 
16.01.12
10:18
Это wrap.ert долго работает? Не верю.
И режет она замечательно полностью нетиповые базы.
20 ПиН
 
16.01.12
10:24
(19) наверно он пытается резать, когда в базе пользователи сидят как вариант, либо на слабенькой машине...
21 Сияющий Асинхраль
 
16.01.12
10:34
(18) первичка за прошлый год спокойно лежит в базе за прошлый год, но вообще (19) прав, эта штука режет все, максимум пару строк придется очень редко поправить
22 brenli
 
16.01.12
11:23
(20,21) база SQL весит 4 Gb. Уж очень не быстро работает даже на 4 ядерной машинке. Если учесть сколько она не резалась представте сколько в ней доков.
23 Эльниньо
 
16.01.12
11:26
(22) Базёнка.
24 ПиН
 
16.01.12
16:02
(22) напиши мне на мыло, поможем чем можем, 4 гига  - база средних размеров, я на 77 видел и по 20 гигов базы и ничего, живой...