Имя: Пароль:
1C
1C 7.7
v7: Свертка базы варварскими методами
0 Прохожий1С
 
28.07.23
14:53
Здравствуйте! Пожалуйста, помогите кто может добрым советом!

Итак, суть: есть старая, кривая и раздувшаяся самописная база. Разрослась до предела дбфка оборотов. При попытке свернуть тестовую базу стандартной обработкой вылетает ошибка, т.к. записать операции с остатками на период просто некуда.
Что в итоге сделали: разделили обработку на два этапа - вначале создали операции с остатками, потом физически удалили обороты и начали удалять проводки (именно этот метод, т.к. удалять или распроводить доки плохой вариант, они нужны проведенными). В процессе раз или два обороты переполнялись и выдавали ошибку. Опять их удаляли и продолжали чистить проводки. Когда удаление закончилось - в последний раз удалили обороты, пересчитали итоги и свернули таблицу. Обороты стали вменяемых размеров. Тестовая база на первый взгляд выглядит правдоподобно, бухгалтеров проверять пока не дергали.

И вот собственно вопрос: а так вообще можно? В смысле, полный пересчет оборотов несколько раз подряд. Или база теперь однозначно побитая-нерабочая, и нет смысла проверять?
(Если что, рабочую базу не трогали, бэкапов гора, но что-то - кроме перехода на 8-ку :( - делать в ближайшем времени все-таки придется)
1 Aleksey
 
28.07.23
15:08
ну могу просто физически грохнуть табличку с движениями и итогами, потом тупо провел бы "операции с остатками". Хотя если у тебя операция это бух операция, то может не взлететь
2 Djelf
 
28.07.23
15:48
(0) Вариант нормальный, если у вас остатки по проводкам не нужны, а они могут быть нужны!
Нам остюда сверху, не видно что у вас там слева...

Вот еще варианты для 1C 7.7:
Для увеличения памяти 1С больше 2Gb: 4Gb Patch NTCore https://ntcore.com/?page_id=371
Для загрузки и выгрузки dt больше 2Gb: ConfigSpy от АЛьФ http://www.dorex.pro/?projects&configspy&download
Для работы 1C с файлами dbf больше 2Gb: dbeng32 от Wirth https://cloud.mail.ru/public/3mVX/4trK45on8

З.Ы. Если таблица проводок переполнилась по количеству записей, это не поможет.
3 Прохожий1С
 
28.07.23
15:57
(2) Огромное спасибо за материалы, ознакомлюсь!

У нас проблема вылезла именно в оборотах, поскольку огромное количество счетов и субконто, некоторые из которых даже не используются. Когда в первый раз вылезла ошибка, то удалили неиспользуемый счет (который сами же недавно и ввели не подумав :) ) - и сразу дбфка похудела. Оставить лопнувшую базу архивной на посмотреть, а у рабочей удалить лет восемь - было бы идеально.
4 Харлампий Дымба
 
28.07.23
18:53
Ну во-первых это не варварский метод, а самый что ни на есть традиционный. Просто много народу резалл торговые базы, да в SQL, там подход может быть совсем иным.
Вот прям щас буду резать бухбазу за 13 лет, так как 1SENTRY стремится к 2 гигам (kernel37.dll)
Во-вторых, не очень понятно что такое "обороты переполнялись". С каким файлов проблема: 1SACCSEL, 1SENTRY, 1SBKTTL?
А в-третьих порядок такой - если мало опыта, то всё в копии, если много - то само собой тоже в копии:
1) Формируешь остатки на нужную дату.
2) "Операции - Управление бухгалтерскими итогоми - Установить расчет по" и ставишь квартал, предшествующий дате начала учета - то есть лохматый-лохматый год.
3) В конфигураторе "Администрирование - Выгрузить данные", "Администрирование - Загрузить данные". Любуешься на практически нулевые 1SBKTTL и 1SBKTTLC. Теперь удаление операций будет происходить на порядок быстрее, так как для древних периодов не надо будет нарастающим итогом пересчитывать все остатки в 1SBKTTL при удалении проводки
4) Удаляешь документы / или в твоём случае проводки в операциях в транзакции порциями по 100-1000 штук, сам посмотри оптимум для своей базы. До позиции первого твоего документа со сформированными остатками.
5) В конфигураторе "Администрирование - Выгрузить данные", "Администрирование - Загрузить данные". Любуешься на изрядно похудевшие 1SENTRY и 1SACCSEL
6) "Операции - Управление бухгалтерскими итогоми - Установить расчет по" возвращаешь период на текущий и делаешь полный пересчет итогов. А лучше опять через Выгрузить-Загрузить.
Вроде всё.
5 Креатив
 
30.07.23
21:49
(0)Если оставшихся документов не сильно много, то можно поступить следующим образом.
1. Сформировать остатки по всем регистрам и бухгалтерские.
2. Грохнуть файлы регистров.
3. Провести остатки.
4. Провести текущие документы.
5. Сделать ТИИ.
6 idw
 
31.07.23
21:39
(0) 1. правим обработку свертки, чтобы она только создавала документы ввода остатков.
2. Копируем эту базу.
3. Удаляем в этой базе все документы и регистры. Будет база только со справочниками. ТИИ.
4. Из базы полученной в пункте 1. Переносим документы ввода остаток в базу в 3.
7 idw
 
31.07.23
21:40
П.С. В пункте 1 запускаем эту обработку.
8 Mihenius
 
31.07.23
23:09
(3)
"огромное количество счетов и субконто, некоторые из которых даже не используются."

в первую очередь убрать левые субконто

во вторую очередь проанализировать, если часть субконто нужна, но не нужны остатки - поставить "только обороты"

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

По итогу можно еще пожить, проверено много раз.

Ну и последний вариант режем/сворачиваем по живому, тут искать старинные обработки на "1с проклабе"/инфостарте - там были обрезки баз на 1с++
Вроде 1 моя даже была, могу поискать )
9 Mihenius
 
31.07.23
23:12
нашел
https://infostart.ru/1c/tools/15114/

когда-то давным-давно работала )
10 Mihenius
 
31.07.23
23:13
(9) и аналогичных было штук 10 точно, возможно на форуме https://www.1cpp.ru/forum/YaBB.pl кто подскажет
11 Mihenius
 
31.07.23
23:18
(10) https://infostart.ru/public/all/administrirovanie_bd/svertka_bazy/?class_platforms=1966

или ищи образ диска 1Спроклаба и там тоже какие-то варианты были
12 Смотрящий
 
31.07.23
23:41
(5) Самый внятный и рабочий вариант
13 1Снег
 
01.08.23
09:00
Пользовался в свое время для свертки базы обработкой Rocket Launcher 7.7  https://infostart.ru/1c/tools/13846/
14 АгентБезопасной Нацио
 
01.08.23
10:28
в сиквельной базе почти аналогично (5) работала автообрезка базы (по ночам, в часы наименьшей нагрузки на базу)- делался пустой документ ввода остатков, выбранные остатки из RG записывались как обороты, привязывались к документу ввода остатков. Регистры чистились до момента обрезки исключая обороты дока ввода. Естественно, "до того" контролировались остатки по всем регистрам. (документ удалялись - единственное, что тогда, емнип, 1scrdoc не осилил, он пухлый болтался.)
15 andrewalexk
 
02.08.23
11:34
(2) :)
и как успехи у Пистелли с Patch NTCore?
есть проблемы с 1с77 релиз 27?
16 Arbuz
 
04.08.23
17:55
(15) Проблем нет. Работает годами.
17 Djelf
 
05.08.23
05:54
(15) Некоторая проблема есть. Пользователи иногда выкручивают отчеты за весь период, со всеми возможными группировками и вместо вылета на таких дурных отчетах радуются бесконечным и бессмысленным объемом информации.
Если таких будет много, никакой памяти у сервера не хватит ;)
18 Arbuz
 
07.08.23
15:38
(17) Гы! Однажды, в стародавние времена, хозяева одного небольшого, но гордого бизнеса твёрдо решили видеть "всю картину сразу", в одном отчёте, во всех деталях и разрезах. Нет проблем: постановка тз - аванс - проработка - оплата - готово! Это была чудовищная таблица склеенная из 16 листов формата А3. Считалась и формировалась она частями, причём гораздо быстрее чем печаталась и клеилась. Солидно висела на стене и занимала пару квадратных метров её поверхности. Назвали это угробище гордо - Планово-Производственная Технологическая Калькуляция, с языка главтехнолога - пипитэка. Проходящие мимо сотрудники с ужасом в глазах спрашивали шёпотом: рога-бога-носорога, что это?! Пипитэка жишь, еть твою ёшь! - отвечали просвещённые. Заказчики весь следующий день увлечённо елозили по таблице, водили метровыми линейками, красили разноцветными маркерами, восхищённо цокали языками. И более никогда к этой теме не возвращались.
19 АгентБезопасной Нацио
 
07.08.23
15:59
(18) а можно ведь было бы и печатать сразу в цвете!
зы. ежели не секрет, что за бузинесс был такой?
20 Arbuz
 
08.08.23
17:03
(19) Пищевое производство замороженных полуфабрикатов и некоторая рефрижераторная логистика
21 Прохожий1С
 
16.08.23
14:14
Итак, огромнейшее спасибо всем советовавшим и воодушевлявшим! Базу удачно покромсали по максимуму, проверили и поставили юзерам. Злосчастная дбфка похудела больше чем в два раза, живем!
22 Valdis2007
 
16.08.23
14:19
(21) теперь настаивай о преходе на 8.3
23 zenon46
 
16.08.23
16:31
(22) если их функционал устраивает, для чего ? переход ради перехода ?
24 Valdis2007
 
17.08.23
10:26
(23) нет хотябы , что-бы через пол года снова к тебе за сверткой не обращаться
25 MWWRuza
 
17.08.23
10:40
(24) За сверткой то они через пол года может и не обратятся, но это:
(0)самописная база
говорит о том, что обратятся сразу... Там переход будет совсем не простой, и может растянуться более чем на пол года, и вылиться в очень не малую сумму... В зависимости от "экзотичности" самописки... Вплоть до того, что опять самописку писать, на новой платформе. Готовы ли клиенты к этому?
Проще уйти от дбф на SQL, если там действительно такие объемы данных.
26 Прохожий1С
 
18.08.23
16:35
(25) >вылиться в очень не малую сумму...
Хех, не будет немалой суммы - будет покупка самой простенькой стандартной конфы и переписывание её в поте лица фиксом на умеренной зп (т.е. мной) :\
Да, не особо в теме 8ки - буду осваивать на ходу, куда ж денусь.
27 Valdis2007
 
19.08.23
08:11
(26) получается, что 7ка такой задел дала, что спустя 20 лет после выхода 8, можно спокойно зарабатывать на хлебушек с маслом, только на 7?
28 Garykom
 
19.08.23
08:36
(27) До сих пор есть потребность в аналоге ремейка 1С 77
Т.е. чтобы код старых конф исполнялся но на новом движке, с поддержкой последних Windows, Linux и даже мобильных ОС
29 andrewalexk
 
19.08.23
09:45
(28) :) ну ты еще намекни нуралиеву на открытие кода 1с
30 DimVad
 
21.08.23
07:51
(27) // получается, что 7ка такой задел дала, что спустя 20 лет после выхода 8, можно спокойно зарабатывать на хлебушек с маслом, только на 7?

Ну вот я сейчас специально посмотрел вакансии на 7.7 по своему городу - их нет.
Т.е. человек не может сказать "поднимите мне ЗП а то через дорогу вдвое больше предлагают" т.к. через дорогу ничего не предлагают.
И рабочее место - это просто легаси, которое есть пока оно есть. Если что-то изменится (например бизнес кто-нибудь купит и скажет что будем ставить своё) - так и не будет рабочего места на 7.7 ...

p.s. Я как УПП-шник в похожем положении. Вакансии на УПП реально "тают" год от года. Вот и думаю о запасных аэродромах...
31 АгентБезопасной Нацио
 
21.08.23
13:36
(29) ну ему "намекали" прямым текстом. На что но ответил в духе "я не враг самому себе".
32 АгентБезопасной Нацио
 
21.08.23
13:38
(26) "осваивать на ходу" плохо тем, что будешь изобретать свои велосипеды... Я вот когда начинал осваивать, перенос делать - даже написал свою ЗаполнитьЗначенияСвойств() :-)
33 Обработка
 
21.08.23
14:55
Есть инструмент прям в скуле порезать базу, я им не однократно пользовался. Но уже и позабыл. Было очень быстро и удобно...
34 tesei
 
21.08.23
15:01
(0) пересчет итогов быстрее делать так:
1. удаляем файлы rg*
2. Открываем базу монопольно.
3. Устанавливаем ТА на начало времён.
4. Устанавливаем ТА на сегодня, документы не перепроводим!
5. ...
6. Profit!
35 Злопчинский
 
21.08.23
15:22
(34) 5. ...ждем.... если база кривая - ждем очень долго...
36 victuan1
 
22.08.23
06:36
(32) Я такую функцию тоже написал, но для 1С 7.7 ;)

Процедура ЗаполнитьЗначенияСвойств(Конт, ТекОбъект, СписокРеквизитов="", ИсключаяРеквизиты="", ТЧДокПриемник=1, ТЧДокИсточник=1) Экспорт

    стр1 = ","+нрег(стрЗаменить(СписокРеквизитов," ",""))+",";
    стр2 = ","+нрег(стрЗаменить(ИсключаяРеквизиты," ",""))+",";
    
    Если ТипЗначения(ТекОбъект) = 11 Тогда  //Справочник
        Для й = 1 По Метаданные.Справочник(ТекОбъект.Вид()).Реквизит() Цикл
            ИД = Метаданные.Справочник(ТекОбъект.Вид()).Реквизит(й).Идентификатор;
            
            Если ПустоеЗначение(СписокРеквизитов)=1 Тогда
            ИначеЕсли Найти(стр1, ","+нрег(ИД)+",") = 0 Тогда
                продолжить
            КонецЕсли;
    
            Если ПустоеЗначение(ИсключаяРеквизиты)=1 Тогда
            ИначеЕсли Найти(стр2, ","+нрег(ИД)+",") > 0 Тогда
                продолжить
            КонецЕсли;
            
            Если ТипЗначения(Конт) = 11 Тогда  //Справочник
                Если Метаданные.Справочник(Конт.Вид()).Реквизит(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            ИначеЕсли (ТипЗначенияСтр(Конт) = "ТаблицаЗначений") или (ТипЗначенияСтр(Конт) = "ИндексированнаяТаблица") Тогда
                Если ВернутьНомерКолонкиТЗ(Конт,ИД) = 0 Тогда
                Иначе
                    Конт.УстановитьЗначение(Конт.НомерСтроки, ИД, ТекОбъект.ПолучитьАтрибут(ИД));
                КонецЕсли;
            ИначеЕсли ТЧДокПриемник = 0 Тогда
                Если Метаданные.Документ(Конт.Вид()).РеквизитШапки(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            Иначе
                Если Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            КонецЕсли;
        КонецЦикла
    
    ИначеЕсли ТипЗначения(ТекОбъект) = 12 Тогда  //Документ
        Если ТЧДокИсточник=0 Тогда
            КолРекв = Метаданные.Документ(ТекОбъект.Вид()).РеквизитШапки()
        Иначе
            КолРекв = Метаданные.Документ(ТекОбъект.Вид()).РеквизитТабличнойЧасти()
        КонецЕсли;
        Для й = 1 По КолРекв Цикл
            Если ТЧДокИсточник=0 Тогда
                ИД = Метаданные.Документ(ТекОбъект.Вид()).РеквизитШапки(й).Идентификатор;
            Иначе
                ИД = Метаданные.Документ(ТекОбъект.Вид()).РеквизитТабличнойЧасти(й).Идентификатор;
            КонецЕсли;
            
            Если ПустоеЗначение(СписокРеквизитов)=1 Тогда
            ИначеЕсли Найти(стр1, ","+нрег(ИД)+",") = 0 Тогда
                продолжить
            КонецЕсли;
    
            Если ПустоеЗначение(ИсключаяРеквизиты)=1 Тогда
            ИначеЕсли Найти(стр2, ","+нрег(ИД)+",") > 0 Тогда
                продолжить
            КонецЕсли;
            
            Если ТипЗначения(Конт) = 11 Тогда  //Справочник
                Если Метаданные.Справочник(Конт.Вид()).Реквизит(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            ИначеЕсли ТЧДокПриемник = 0 Тогда
                Если Метаданные.Документ(Конт.Вид()).РеквизитШапки(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            Иначе
                Если Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти(ИД).Выбран()=1 Тогда
                    Конт.УстановитьАтрибут(ИД, ТекОбъект.ПолучитьАтрибут(ИД))
                КонецЕсли;
            КонецЕсли;
        КонецЦикла
    
    ИначеЕсли (ТипЗначенияСтр(ТекОбъект) = "ТаблицаЗначений") или (ТипЗначенияСтр(ТекОбъект) = "ИндексированнаяТаблица") Тогда //текущую строку таблицы ТекОбъект копируем в текущую строку др. таблицы Конт
        
        Для й = 1 По ТекОбъект.КоличествоКолонок() Цикл
            Если ТипЗначенияСтр(ТекОбъект) = "ИндексированнаяТаблица" Тогда
                ИД = ТекОбъект.ИмяКолонки(й);
            Иначе
                ИД = ТекОбъект.ПолучитьПараметрыКолонки(й);
            КонецЕсли;
            
            Если ПустоеЗначение(СписокРеквизитов)=1 Тогда
            ИначеЕсли Найти(стр1, ","+нрег(ИД)+",") = 0 Тогда
                продолжить
            КонецЕсли;
            
            Если ПустоеЗначение(ИсключаяРеквизиты)=1 Тогда
            ИначеЕсли Найти(стр2, ","+нрег(ИД)+",") > 0 Тогда
                продолжить
            КонецЕсли;
                Конт.УстановитьЗначение(Конт.НомерСтроки, ИД, ТекОбъект.ПолучитьЗначение(ТекОбъект.НомерСтроки, й))
        КонецЦикла
        
    КонецЕсли;

КонецПроцедуры
37 АгентБезопасной Нацио
 
22.08.23
08:31
(36) Для клюшек я тоже делал. Но там это был удобный инструмент, а в снеговике - уже велосипед с квадратными колесами.
38 АгентБезопасной Нацио
 
22.08.23
08:33
(34) есть обработки, позволяющие выборочно пересчитывать итоги - с выбором периода, набора регистров и даже конкретных значений измерений.
а за предложение сноса регистров (или 1ссистемс при "деУРБДизации") обычно бьют канделябром по сусалам...
39 Aleksey
 
23.08.23
11:03
(38) что не так? Тем более пересчет не позволяет "упаковывать регистры", т.е. удалять "нулевые" записи.
А так грохнул файлики и после пересчета, в качестве бонуса, "худые" файлики с регистрами
40 Злопчинский
 
23.08.23
12:38
пусть будет здесь
удаление нулевых итогов
https://infostart.ru/1c/tools/180018/
41 АгентБезопасной Нацио
 
24.08.23
08:28
(39) Как страдивари делал для лохов скрипки, а для нормальных пацанов барабаны, так  и тут - у нормальных пацанов есть средства для удаления нулевых итогов, в т.ч. без монопольного режима, и т.д.
Если база более-менее приличных размеров, и работает 24/7 - то такие инструменты просто обязаны быть в наличии...
42 andrewalexk
 
24.08.23
10:01
(41) :) ну про продвинутоеудаление.ert речи нет - там трудно накосячить но удаление нулевых итогов ... в чем цимес?
43 MWWRuza
 
24.08.23
12:33
(42) в чем цимес?

В размерах файлов ДБФ регистров. Больше ни в чем, как я это понимаю. Но, когда база огромная, это может быть немаловажно.
44 andrewalexk
 
24.08.23
12:56
(43) :) sql не, не предлагать?
45 MWWRuza
 
24.08.23
15:48
Почему? Нормальный вариант, у кого есть такая возможность. Но тема изначально, с сообщения (0) про дбф, поэтому...
Основная теорема систематики: Новые системы плодят новые проблемы.